From c7ff47dabf692c5c197302c1c0f42704b3067377 Mon Sep 17 00:00:00 2001 From: Anthony Davis Date: Thu, 27 Mar 2014 22:23:39 -0500 Subject: [PATCH 1/7] Fixing failing test --- ruby/spec/jam_ruby/models/track_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruby/spec/jam_ruby/models/track_spec.rb b/ruby/spec/jam_ruby/models/track_spec.rb index 781456720..be63c781b 100644 --- a/ruby/spec/jam_ruby/models/track_spec.rb +++ b/ruby/spec/jam_ruby/models/track_spec.rb @@ -116,8 +116,8 @@ describe Track do tracks = Track.sync(connection.client_id, [{:id => track.id, :client_track_id => track.client_track_id, :sound => track.sound, :instrument_id => track.instrument_id}]) tracks.length.should == 1 found = tracks[0] - found.id.should == track.id - found.updated_at.should == track.updated_at + expect(found.id).to eq track.id + expect(found.updated_at.to_i).to eq track.updated_at.to_i end end end \ No newline at end of file From ef59756f11fe041c2f44ac607817fe10337cfeac Mon Sep 17 00:00:00 2001 From: Seth Call Date: Fri, 28 Mar 2014 04:03:44 +0000 Subject: [PATCH 2/7] * make the viluat jam fest link smaller text and scooted down --- web/app/views/users/welcome.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/app/views/users/welcome.html.haml b/web/app/views/users/welcome.html.haml index e29dbbd08..6624039b7 100644 --- a/web/app/views/users/welcome.html.haml +++ b/web/app/views/users/welcome.html.haml @@ -9,7 +9,7 @@ - content_for :after_black_bar do - if @jamfest_2014 .jamfest{style: 'top:-70px;position:relative'} - %a{ href: event_path(@jamfest_2014.slug), style: 'font-size:24px' } + %a{ href: event_path(@jamfest_2014.slug), style: 'font-size:20px;margin-top:11px' } Listen to the terrific band performances from Virtual Jam Fest 2014! %div{style: "padding-top:20px;"} .right From 979317db5fd090af2f2f82b0e6a2c06ac6496036 Mon Sep 17 00:00:00 2001 From: Anthony Davis Date: Sat, 29 Mar 2014 19:43:55 -0500 Subject: [PATCH 3/7] VRFS-1355 - trivial padding --- web/app/assets/stylesheets/client/shareDialog.css.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/app/assets/stylesheets/client/shareDialog.css.scss b/web/app/assets/stylesheets/client/shareDialog.css.scss index dee33c55e..74d095e53 100644 --- a/web/app/assets/stylesheets/client/shareDialog.css.scss +++ b/web/app/assets/stylesheets/client/shareDialog.css.scss @@ -219,7 +219,7 @@ .share-message { width: 100%; - padding:0; + padding:4px; } .error-msg { From 54ecf4ca97bd0f86862db8efbf61cc4ef0238dcd Mon Sep 17 00:00:00 2001 From: Anthony Davis Date: Sat, 29 Mar 2014 19:45:05 -0500 Subject: [PATCH 4/7] VRFS-1331 - capitalize K --- .../app/views/jam_ruby/user_mailer/password_changed.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/password_changed.html.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/password_changed.html.erb index a140d13fe..534066c5a 100644 --- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/password_changed.html.erb +++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/password_changed.html.erb @@ -1,3 +1,3 @@ <% provide(:title, 'Jamkazam Password Changed') %> -You just changed your password at Jamkazam. +You just changed your password at JamKazam. From bfd5712e3c8d617a9f1dc0c7cd539b6eda6bea32 Mon Sep 17 00:00:00 2001 From: Anthony Davis Date: Sat, 29 Mar 2014 19:49:36 -0500 Subject: [PATCH 5/7] VRFS-1251 - clean up asset reference --- web/app/assets/stylesheets/client/ftue.css.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/app/assets/stylesheets/client/ftue.css.scss b/web/app/assets/stylesheets/client/ftue.css.scss index fa37a754e..a5f6796de 100644 --- a/web/app/assets/stylesheets/client/ftue.css.scss +++ b/web/app/assets/stylesheets/client/ftue.css.scss @@ -604,7 +604,7 @@ table.audiogeartable { left:10px; width:150px; height:18px; - background-image:url(../images/content/bkg_slider_gain_horiz.png); + background-image:url(/assets/content/bkg_slider_gain_horiz.png); background-repeat:repeat-x; } From 39d4aa7b132753603d662bd813610c51c4195651 Mon Sep 17 00:00:00 2001 From: Anthony Davis Date: Sat, 29 Mar 2014 19:53:01 -0500 Subject: [PATCH 6/7] VRFS-1263 - remove missing asset reference --- web/app/assets/stylesheets/web/welcome.css.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/app/assets/stylesheets/web/welcome.css.scss b/web/app/assets/stylesheets/web/welcome.css.scss index d16cb7bab..e78d9df34 100644 --- a/web/app/assets/stylesheets/web/welcome.css.scss +++ b/web/app/assets/stylesheets/web/welcome.css.scss @@ -242,7 +242,7 @@ Version: 1.1 .carousel .slides .spinner { - background : #000 url(loading.gif) no-repeat center; /* video preloader */ + background : #000 /*url(loading.gif)*/ no-repeat center; /* video preloader */ } /* _____________________________ * From da7fc7d901bf949a5a925ac67711756affbb91ea Mon Sep 17 00:00:00 2001 From: Seth Call Date: Mon, 31 Mar 2014 03:28:04 +0100 Subject: [PATCH 7/7] * VRFS-1541 done from a code perspective... just need to do some admin work once posted --- db/manifest | 1 + db/up/order_event_session.sql | 1 + ruby/lib/jam_ruby/models/event_session.rb | 40 ++++++++++++- .../jam_ruby/models/music_session_history.rb | 4 ++ ruby/lib/jam_ruby/models/recording.rb | 5 +- .../assets/javascripts/feed_item_recording.js | 1 + web/app/assets/javascripts/web/welcome.js | 11 ---- .../stylesheets/web/audioWidgets.css.scss | 60 +++++++++++++------ web/app/views/events/_event_session.html.haml | 14 +++-- web/app/views/events/event.html.haml | 2 +- .../views/users/_feed_music_session.html.haml | 6 +- web/app/views/users/_feed_recording.html.haml | 15 +++-- web/spec/features/event_spec.rb | 16 ++++- 13 files changed, 131 insertions(+), 45 deletions(-) create mode 100644 db/up/order_event_session.sql diff --git a/db/manifest b/db/manifest index 3eeea65c4..baa454cbc 100755 --- a/db/manifest +++ b/db/manifest @@ -138,3 +138,4 @@ events_social_description.sql fix_broken_cities.sql notifications_with_text.sql notification_seen_at.sql +order_event_session.sql \ No newline at end of file diff --git a/db/up/order_event_session.sql b/db/up/order_event_session.sql new file mode 100644 index 000000000..ba36f8f94 --- /dev/null +++ b/db/up/order_event_session.sql @@ -0,0 +1 @@ +ALTER TABLE event_sessions ADD COLUMN ordinal INTEGER; \ No newline at end of file diff --git a/ruby/lib/jam_ruby/models/event_session.rb b/ruby/lib/jam_ruby/models/event_session.rb index 7385de68d..9d4fa8a9d 100644 --- a/ruby/lib/jam_ruby/models/event_session.rb +++ b/ruby/lib/jam_ruby/models/event_session.rb @@ -1,6 +1,6 @@ class JamRuby::EventSession < ActiveRecord::Base - attr_accessible :event_id, :user_id, :band_id, :starts_at, :ends_at, :pinned_state, :position, :img_url, :img_width, :img_height, as: :admin + attr_accessible :event_id, :user_id, :band_id, :starts_at, :ends_at, :pinned_state, :position, :img_url, :img_width, :img_height, :ordinal, as: :admin belongs_to :user, class_name: 'JamRuby::User' belongs_to :band, class_name: 'JamRuby::Band' @@ -13,6 +13,44 @@ class JamRuby::EventSession < ActiveRecord::Base before_validation :sanitize_active_admin + def has_public_mixed_recordings? + public_mixed_recordings.length > 0 + end + + def public_mixed_recordings + recordings.select { |recording| recording if recording.has_mix? && recording.is_public? } + end + + def recordings + recordings=[] + + sessions.each do |session_history| + recordings = recordings + session_history.recordings + end + + recordings + end + + # ideally this is based on some proper association with the event, not such a slushy time grab + def sessions + if ready_display + query = MusicSessionHistory.where(fan_access: true).where(created_at: (self.starts_at - 12.hours)..(self.ends_at + 12.hours)) + if self.user_id + query = query.where(user_id: self.user_id) + elsif self.band_id + query = query.where(band_id: self.band_id) + else + raise 'invalid state in event_session_button' + end + query + else + [] + end + end + + def ready_display + self.starts_at && self.ends_at && (self.user_id || self.band_id) + end def sanitize_active_admin self.img_url = nil if self.img_url == '' self.user_id = nil if self.user_id == '' diff --git a/ruby/lib/jam_ruby/models/music_session_history.rb b/ruby/lib/jam_ruby/models/music_session_history.rb index 089969434..5e3637284 100644 --- a/ruby/lib/jam_ruby/models/music_session_history.rb +++ b/ruby/lib/jam_ruby/models/music_session_history.rb @@ -157,6 +157,10 @@ module JamRuby music_session && music_session.mount end + def recordings + Recording.where(music_session_id: self.id) + end + def end_history self.update_attribute(:session_removed_at, Time.now) diff --git a/ruby/lib/jam_ruby/models/recording.rb b/ruby/lib/jam_ruby/models/recording.rb index 570734180..645ccf6b8 100644 --- a/ruby/lib/jam_ruby/models/recording.rb +++ b/ruby/lib/jam_ruby/models/recording.rb @@ -132,7 +132,7 @@ module JamRuby end def has_access?(user) - return users.exists?(user) + users.exists?(user) end # Start recording a session. @@ -342,6 +342,9 @@ module JamRuby save end + def is_public? + claimed_recordings.where(is_public: true).length > 0 + end # meant to be used as a way to 'pluck' a claimed_recording appropriate for user. def candidate_claimed_recording diff --git a/web/app/assets/javascripts/feed_item_recording.js b/web/app/assets/javascripts/feed_item_recording.js index 0d8793446..834aedae5 100644 --- a/web/app/assets/javascripts/feed_item_recording.js +++ b/web/app/assets/javascripts/feed_item_recording.js @@ -7,6 +7,7 @@ var claimedRecordingId = $parentElement.attr('data-claimed-recording-id'); var recordingId = $parentElement.attr('id'); + var mode = $parentElement.attr('data-mode'); var $feedItem = $parentElement; var $name = $('.name', $feedItem); diff --git a/web/app/assets/javascripts/web/welcome.js b/web/app/assets/javascripts/web/welcome.js index 0d72c6a76..2403fa2dc 100644 --- a/web/app/assets/javascripts/web/welcome.js +++ b/web/app/assets/javascripts/web/welcome.js @@ -61,17 +61,6 @@ }); $('.carousel').show() - - $.each($('.feed-entry'), function (index, feedEntry) { - var $feedEntry = $(this); - if ($feedEntry.is('.recording-entry')) { - new context.JK.FeedItemRecording($feedEntry); - } - else { - new context.JK.FeedItemSession($feedEntry); - } - }) - context.JK.TickDuration('.feed-entry.music-session-history-entry .inprogress .tick-duration'); if ($.QueryString['showVideo']) { diff --git a/web/app/assets/stylesheets/web/audioWidgets.css.scss b/web/app/assets/stylesheets/web/audioWidgets.css.scss index ce9b3c251..a21ce84e6 100644 --- a/web/app/assets/stylesheets/web/audioWidgets.css.scss +++ b/web/app/assets/stylesheets/web/audioWidgets.css.scss @@ -109,13 +109,43 @@ } } - .feed-entry { + position:relative; + display:block; + white-space:nowrap; + min-width:700px; + border-bottom:solid 1px #666; + max-height:74px; + overflow:hidden; + margin-top:20px; + + &:nth-child(1) { + margin-top:0; + } + + &[data-mode="minimal"] { + .avatar-small { + display:none; + } + .feed-type-title { + display:none; + } + .recording-controls-holder { + width: 65%; + float:left; + } + .name-and-description { + margin-left:0; + } + + min-width:300px; + border-bottom-width:0; + } + .session-controls, .recording-controls { display:inline-block; &.ended { background-color: #471f18; - } &.inprogress { @@ -129,6 +159,16 @@ } } + .recording-controls-holder { + float:right; + width:40%; + } + + .name-and-description { + float:left; + width:30%; + margin-left:20px; + } .recording-controls { .recording-position { width:70%; @@ -147,22 +187,6 @@ } } } -} - -.feed-entry { - position:relative; - display:block; - white-space:nowrap; - min-width:700px; - border-bottom:solid 1px #666; - max-height:74px; - overflow:hidden; - margin-top:20px; - - &:nth-child(1) { - margin-top:0; - } - /** &.animate-down { -webkit-transition: max-height height 2s; diff --git a/web/app/views/events/_event_session.html.haml b/web/app/views/events/_event_session.html.haml index 3bb2a449f..419dc9bb8 100644 --- a/web/app/views/events/_event_session.html.haml +++ b/web/app/views/events/_event_session.html.haml @@ -6,15 +6,19 @@ %span.event-title= event_session_title(event_session) .landing-details.event - .left.f20.teal.time - %strong - = event_session_start_hour(event_session) - .right.session-button - = event_session_button(event_session) + - unless event_session.has_public_mixed_recordings? + .left.f20.teal.time + %strong + = event_session_start_hour(event_session) + .right.session-button + = event_session_button(event_session) %br{ clear:'all' } .left.bio = event_session_description(event_session) + .left + - event_session.public_mixed_recordings.each do |recording| + = render :partial => "users/feed_recording", locals: { feed_item: recording, mode: 'minimal'} %br %br %br{ clear:'all' } \ No newline at end of file diff --git a/web/app/views/events/event.html.haml b/web/app/views/events/event.html.haml index 866dcbdc5..9a9248c6c 100644 --- a/web/app/views/events/event.html.haml +++ b/web/app/views/events/event.html.haml @@ -23,7 +23,7 @@ %h2 ARTIST LINEUP %br - = render :partial => "event_session", :collection => @event.event_sessions.order('starts_at') + = render :partial => "event_session", :collection => @event.event_sessions.order('ordinal, starts_at') %br{clear:'all'} diff --git a/web/app/views/users/_feed_music_session.html.haml b/web/app/views/users/_feed_music_session.html.haml index c64534191..ff40d20d6 100644 --- a/web/app/views/users/_feed_music_session.html.haml +++ b/web/app/views/users/_feed_music_session.html.haml @@ -68,4 +68,8 @@ %br{:clear => "all"}/ - %br/ \ No newline at end of file + %br/ +:javascript + $(function () { + new window.JK.FeedItemSession($('.feed-entry[data-music-session="#{feed_item.id}"]')); + }) \ No newline at end of file diff --git a/web/app/views/users/_feed_recording.html.haml b/web/app/views/users/_feed_recording.html.haml index 18f1b7b97..dc4051602 100644 --- a/web/app/views/users/_feed_recording.html.haml +++ b/web/app/views/users/_feed_recording.html.haml @@ -1,21 +1,24 @@ -.feed-entry.recording-entry{:id => feed_item.id, :'data-claimed-recording-id' => feed_item.candidate_claimed_recording.id} +/ default values for template +- mode ||= local_assigns[:mode] = local_assigns.fetch(:mode, 'full') + +.feed-entry.recording-entry{:id => feed_item.id, :'data-claimed-recording-id' => feed_item.candidate_claimed_recording.id, :'data-mode' => mode} / avatar .avatar-small.ib = recording_avatar(feed_item) / type and artist - .left.ml20.w15 + .left.ml20.w15.feed-type-title .title{hoveraction: 'recording', :'recording-id' => feed_item.candidate_claimed_recording.id } RECORDING .artist = recording_artist_name(feed_item) = timeago(feed_item.created_at, class: 'small created_at') / name and description - .left.ml20.w30 + .name-and-description .name.dotdotdot = recording_name(feed_item) .description.dotdotdot = recording_description(feed_item) / timeline and controls - .right.w40 + .recording-controls-holder / recording play controls .recording-controls{ class: feed_item.candidate_claimed_recording.has_mix? ? 'has-mix' : 'no-mix'} / play button @@ -83,3 +86,7 @@ %br{:clear => "all"}/ %br/ +:javascript + $(function () { + new window.JK.FeedItemRecording($('.feed-entry[data-claimed-recording-id="#{feed_item.candidate_claimed_recording.id}"]')); + }) diff --git a/web/spec/features/event_spec.rb b/web/spec/features/event_spec.rb index 4ea9dab33..7295f4416 100644 --- a/web/spec/features/event_spec.rb +++ b/web/spec/features/event_spec.rb @@ -115,15 +115,25 @@ describe "Events", :js => true, :type => :feature, :capybara_feature => true, :s @event_session2.starts_at = 4.hours.ago @event_session2.save! visit "/events/so_latency" - expect(page).to have_css(".landing-band.event[data-event-session=\"#{@event_session2.id}\"]") + first(".landing-band.event[data-event-session='#{@event_session2.id}']:nth-child(1)") # test that it sorts correctly by putting this later event second @event_session2.starts_at = 4.hours.from_now @event_session2.save! visit "/events/so_latency" - expect(page).to have_css(".landing-band.event[data-event-session=\"#{@event_session.id}\"]") - + first(".landing-band.event[data-event-session='#{@event_session.id}']:nth-child(1)") + # test that it sorts correctly by putting this later event first, because ordinal is specified + @event_session2.ordinal = 0 + @event_session2.save! + visit "/events/so_latency" + first(".landing-band.event[data-event-session='#{@event_session2.id}']:nth-child(1)") + # associate a recording, and verify that the display changes to have no description, but has a recording widget + mix = FactoryGirl.create(:mix) + mix.recording.music_session_id = music_session_history.id + mix.recording.save! + visit "/events/so_latency" + find(".feed-entry.recording-entry[data-claimed-recording-id='#{mix.recording.claimed_recordings[0].id}']") end end