Merge branch 'develop' of bitbucket.org:jamkazam/jam-cloud into develop

This commit is contained in:
Seth Call 2013-12-30 18:34:26 +00:00
commit e4ed571dcb
13 changed files with 214 additions and 110 deletions

View File

@ -0,0 +1,86 @@
ActiveAdmin.register JamRuby::User, :as => 'User Progression' do
DATE_FORMAT = '%Y-%m-%d %H:%M'
menu :label => 'User Progression'
config.sort_order = 'updated_at DESC'
config.batch_actions = false
config.clear_action_items!
config.filters = false
index do
column :email do |user| link_to(truncate(user.email, {:length => 12}), resource_path(user), {:title => "#{user.first_name} #{user.last_name} (#{user.email})"}) end
column :updated_at do |uu| uu.updated_at.strftime(DATE_FORMAT) end
column :created_at do |uu| uu.created_at.strftime(DATE_FORMAT) end
column :city
column :musician
column 'Client DL' do |uu|
if dd = uu.first_downloaded_client_at
dd.strftime(DATE_FORMAT)
else
''
end
end
column 'Client Run' do |uu|
if dd = uu.first_ran_client_at
dd.strftime(DATE_FORMAT)
else
''
end
end
column 'Certified Gear' do |uu|
if dd = uu.first_certified_gear_at
dd.strftime(DATE_FORMAT)
else
''
end
end
column 'Any Session' do |uu|
if dd = uu.first_music_session_at
dd.strftime(DATE_FORMAT)
else
''
end
end
column 'Real Session' do |uu|
if dd = uu.first_real_music_session_at
dd.strftime(DATE_FORMAT)
else
''
end
end
column 'Good Session' do |uu|
if dd = uu.first_good_music_session_at
dd.strftime(DATE_FORMAT)
else
''
end
end
column 'Invited' do |uu|
if dd = uu.first_invited_at
dd.strftime(DATE_FORMAT)
else
''
end
end
column 'Friended' do |uu|
if dd = uu.first_friended_at
dd.strftime(DATE_FORMAT)
else
''
end
end
column 'Promoted' do |uu|
if dd = uu.first_social_promoted_at
dd.strftime(DATE_FORMAT)
else
''
end
end
column 'Recorded' do |uu|
uu.first_recording_at
end
end
end

View File

@ -1 +1 @@
ruby-2.0.0-p247 2.0.0-p247

View File

@ -1 +1 @@
ruby-2.0.0-p247 2.0.0-p247

View File

@ -1 +1 @@
ruby-2.0.0-p247 2.0.0-p247

View File

@ -1006,6 +1006,10 @@ module JamRuby
end end
end end
end end
def first_recording_at
Recording.where(:owner_id => self.id).order('created_at ASC').first.try(:created_at)
end
# devise compatibility # devise compatibility

View File

@ -1 +1 @@
ruby-2.0.0-p247 2.0.0-p247

View File

@ -32,7 +32,7 @@ gem 'ruby-protocol-buffers', '1.2.2'
gem 'pg', '0.15.1' gem 'pg', '0.15.1'
gem 'compass-rails' gem 'compass-rails'
gem 'rabl' # for JSON API development gem 'rabl' # for JSON API development
gem 'gon' # for passthrough of Ruby variables to Javascript variables gem 'gon', '~>4.1.0' # for passthrough of Ruby variables to Javascript variables
gem 'eventmachine', '1.0.3' gem 'eventmachine', '1.0.3'
gem 'amqp', '0.9.8' gem 'amqp', '0.9.8'
gem 'logging-rails', :require => 'logging/rails' gem 'logging-rails', :require => 'logging/rails'

View File

@ -1,9 +1,10 @@
@import 'common.css.scss'; @import 'common.css.scss';
.account-content-scroller { .account-content-scroller,
#account-identity-content-scroller {
.content-wrapper { .content-wrapper {
padding:10px 35px; padding:10px 30px;
} }
.content-wrapper.account { .content-wrapper.account {
@ -16,6 +17,7 @@
} }
h4 { h4 {
margin-top:8px;
margin-bottom: 10px; margin-bottom: 10px;
font-weight:bold; font-weight:bold;
} }
@ -114,6 +116,7 @@
.button-orange, .button-grey { .button-orange, .button-grey {
line-height:14px; line-height:14px;
margin-top:6px;
margin-right:0; margin-right:0;
} }
@ -122,7 +125,7 @@
} }
div.field { div.field {
margin-bottom:27px; margin-bottom:21px;
} }
div.profile-instrumentlist table { div.profile-instrumentlist table {

View File

@ -213,13 +213,15 @@ class ApiMusicSessionsController < ApiController
:secret_access_key => SampleApp::Application.config.aws_secret_access_key) :secret_access_key => SampleApp::Application.config.aws_secret_access_key)
bucket = s3.buckets[SampleApp::Application.config.aws_bucket] bucket = s3.buckets[SampleApp::Application.config.aws_bucket]
expire = Time.now + 20.years
read_url = bucket.objects[uri].url_for(:read, read_url = bucket.objects[uri].url_for(:read,
:expires => Time.now + 25.years, :expires => expire,
:'response_content_type' => 'text/csv').to_s :'response_content_type' => 'text/csv').to_s
@perfdata.update_attribute(:uri, read_url) @perfdata.update_attribute(:uri, read_url)
logger.debug("*** client can read url #{read_url}")
write_url = bucket.objects[uri].url_for(:write, write_url = bucket.objects[uri].url_for(:write,
:expires => SampleApp::Application.config.perf_data_signed_url_timeout, :expires => expire,
:'response_content_type' => 'text/csv').to_s :'response_content_type' => 'text/csv').to_s
logger.debug("*** client can upload to url #{write_url}") logger.debug("*** client can upload to url #{write_url}")
redirect_to write_url redirect_to write_url

View File

@ -12,11 +12,13 @@
</div> </div>
<!-- end header --> <!-- end header -->
<!-- profile scrolling area --> <div class="content-body">
<div id="account-profile-avatar-content-scroller" class="content-scroller account-content-scroller"> <!-- profile scrolling area -->
<div id="account-profile-avatar-content-scroller" class="content-scroller account-content-scroller">
</div>
<!-- end content scrolling area -->
</div> </div>
<!-- end content scrolling area -->
</div> </div>
<script type="text/template" id="template-account-profile-avatar"> <script type="text/template" id="template-account-profile-avatar">
@ -31,7 +33,12 @@
</form> </form>
<br clear="all" /> <br clear="all" />
<div class="right"><a id="account-edit-avatar-cancel" href="#" class="button-grey">CANCEL</a>&nbsp;&nbsp;<a id="account-edit-avatar-delete" href="#" class="button-orange">DELETE AVATAR</a>&nbsp;&nbsp;<a id="account-edit-avatar-submit" href="#" class="button-orange">UPDATE AVATAR</a></div> <div class="right">
<a id="account-edit-avatar-cancel" href="#" class="button-grey">CANCEL</a>&nbsp;&nbsp;
<a id="account-edit-avatar-delete" href="#" class="button-orange">DELETE AVATAR</a>&nbsp;&nbsp;
<a id="account-edit-avatar-submit" href="#" class="button-orange">UPDATE AVATAR</a>
</div>
<div class="clearall"></div>
</div> </div>
<!-- end content wrapper --> <!-- end content wrapper -->

View File

@ -45,7 +45,7 @@
</div> </div>
<div class="clearall"></div> <div class="clearall"></div>
</div> </div>
<div class="content-scroller" style="height:350px;"> <div class="content-scroller">
<div id="profile-about" class="profile-wrapper"> <div id="profile-about" class="profile-wrapper">
<!-- stats & location --> <!-- stats & location -->
<div class="profile-about-left"> <div class="profile-about-left">

View File

@ -7,116 +7,118 @@
<h1>session</h1> <h1>session</h1>
</div> </div>
<div class="content-body">
<!-- session controls --> <!-- session controls -->
<div id="session-controls"> <div id="session-controls">
<a class="button-grey resync left" id="session-resync"> <a class="button-grey resync left" id="session-resync">
<%= image_tag "content/icon_resync.png", {:align => "texttop", :height => 14, :width => 12} %> <%= image_tag "content/icon_resync.png", {:align => "texttop", :height => 14, :width => 12} %>
RESYNC RESYNC
</a> </a>
<a class="button-grey left" layout-link="session-settings" id="session-settings-button"> <a class="button-grey left" layout-link="session-settings" id="session-settings-button">
<%= image_tag "content/icon_settings_sm.png", {:align => "texttop", :height => 12, :width => 12} %> <%= image_tag "content/icon_settings_sm.png", {:align => "texttop", :height => 12, :width => 12} %>
SETTINGS SETTINGS
</a> </a>
<a class="button-grey left"> <a class="button-grey left">
<%= image_tag "content/icon_share.png", {:align => "texttop", :height => 12, :width => 12} %> <%= image_tag "content/icon_share.png", {:align => "texttop", :height => 12, :width => 12} %>
SHARE SHARE
</a> </a>
<!-- Volume Slider --> <!-- Volume Slider -->
<div class="block"> <div class="block">
<div class="label">VOLUME:</div> <div class="label">VOLUME:</div>
<div id="volume" class="fader lohi" mixer-id=""></div> <div id="volume" class="fader lohi" mixer-id=""></div>
</div>
<!-- Mix: Me versus Others -->
<div class="block">
<div class="label">MIX:</div>
<div class="label"><small>others</small></div>
<div id="l2m" class="fader flat" mixer-id="__L2M__"></div>
<div class="label"><small>me</small></div>
</div>
<!-- Leave Button -->
<a class="button-grey right leave" href="#/home" id="session-leave">X&nbsp;&nbsp;LEAVE</a>
</div> </div>
<!-- end session controls -->
<!-- Mix: Me versus Others --> <!-- content scrolling area -->
<div class="block"> <div id="tracks">
<div class="label">MIX:</div> <div class="content-scroller">
<div class="label"><small>others</small></div>
<div id="l2m" class="fader flat" mixer-id="__L2M__"></div>
<div class="label"><small>me</small></div>
</div>
<!-- Leave Button --> <!-- content wrapper -->
<a class="button-grey right leave" href="#/home" id="session-leave">X&nbsp;&nbsp;LEAVE</a> <div class="content-wrapper">
</div>
<!-- end session controls -->
<!-- content scrolling area --> <!-- my tracks -->
<div id="tracks"> <div class="session-mytracks">
<div class="content-scroller"> <h2>my tracks</h2>
<div id="track-settings" class="session-add" style="display:block;" layout-link="configure-audio">
<%= image_tag "content/icon_settings_lg.png", {:width => 18, :height => 18} %>&nbsp;&nbsp;Settings
</div>
<!-- content wrapper --> <div class="session-tracks-scroller">
<div class="content-wrapper"> <div id="session-mytracks-container"></div>
<div id="voice-chat" class="voicechat" style="display:none;" mixer-id="">
<!-- my tracks --> <div class="voicechat-label">CHAT</div>
<div class="session-mytracks"> <div class="voicechat-gain"></div>
<h2>my tracks</h2> <div class="voicechat-mute enabled" control="mute" mixer-id=""></div>
<div id="track-settings" class="session-add" style="display:block;" layout-link="configure-audio"> </div>
<%= image_tag "content/icon_settings_lg.png", {:width => 18, :height => 18} %>&nbsp;&nbsp;Settings
</div>
<div class="session-tracks-scroller">
<div id="session-mytracks-container"></div>
<div id="voice-chat" class="voicechat" style="display:none;" mixer-id="">
<div class="voicechat-label">CHAT</div>
<div class="voicechat-gain"></div>
<div class="voicechat-mute enabled" control="mute" mixer-id=""></div>
</div> </div>
</div> </div>
</div>
<!-- live tracks --> <!-- live tracks -->
<div class="session-livetracks"> <div class="session-livetracks">
<h2>live tracks</h2> <h2>live tracks</h2>
<div class="session-add"> <div class="session-add">
<a> <a>
<%= image_tag "content/icon_add.png", {:width => 19, :height => 19, :align => "texttop"} %>&nbsp;&nbsp;Invite Musicians <%= image_tag "content/icon_add.png", {:width => 19, :height => 19, :align => "texttop"} %>&nbsp;&nbsp;Invite Musicians
</a> </a>
</div>
<div class="session-tracks-scroller">
<div id="session-livetracks-container">
<p class="when-empty">
No Live Tracks:<br/>
<a>Invite Other Musicians</a> to<br/>
Add Live Tracks
</p>
</div>
<br clear="all" />
<div class="recording" id="recording-start-stop">
<a>
<%= image_tag "content/recordbutton-off.png", {:width => 20, :height => 20, :align => "absmiddle"} %>&nbsp;&nbsp;<span id="recording-status">Make a Recording</span>
</a>
</div>
</div>
</div> </div>
<div class="session-tracks-scroller">
<div id="session-livetracks-container"> <!-- recordings -->
<p class="when-empty"> <div class="session-recordings">
No Live Tracks:<br/> <h2>recordings</h2>
<a>Invite Other Musicians</a> to<br/> <div class="session-add">
Add Live Tracks &nbsp;
</div>
<div>
<p class="when-empty recordings">
No Recordings:<br/><a>Open a Recording</a>
</p> </p>
</div> </div>
<br clear="all" />
<div class="recording" id="recording-start-stop"> <!-- recording name and close button -->
<a> <!--
<%= image_tag "content/recordbutton-off.png", {:width => 20, :height => 20, :align => "absmiddle"} %>&nbsp;&nbsp;<span id="recording-status">Make a Recording</span> <div class="session-recording-name-wrapper">
</a> <div class="session-recording-name left">(No recording loaded)</div>
<div class="session-add right">
<a>
<%= image_tag "content/icon_close.png", {:width => 18, :height => 20, :align => "texttop"} %>&nbsp;&nbsp;Close
</a>
</div>
</div>
-->
<div class="session-tracks-scroller">
</div> </div>
</div> </div>
</div> </div>
<!-- recordings -->
<div class="session-recordings">
<h2>recordings</h2>
<div class="session-add">
&nbsp;
</div>
<div>
<p class="when-empty recordings">
No Recordings:<br/><a>Open a Recording</a>
</p>
</div>
<!-- recording name and close button -->
<!--
<div class="session-recording-name-wrapper">
<div class="session-recording-name left">(No recording loaded)</div>
<div class="session-add right">
<a>
<%= image_tag "content/icon_close.png", {:width => 18, :height => 20, :align => "texttop"} %>&nbsp;&nbsp;Close
</a>
</div>
</div>
-->
<div class="session-tracks-scroller">
</div>
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1 +1 @@
ruby-2.0.0-p247 2.0.0-p247