diff --git a/ruby/lib/jam_ruby/models/active_music_session.rb b/ruby/lib/jam_ruby/models/active_music_session.rb index 1df6bfb66..dd244ab68 100644 --- a/ruby/lib/jam_ruby/models/active_music_session.rb +++ b/ruby/lib/jam_ruby/models/active_music_session.rb @@ -455,6 +455,7 @@ module JamRuby def self.participant_create(user, music_session_id, client_id, as_musician, tracks, audio_latency, video_sources=nil) music_session = MusicSession.find(music_session_id) + # USERS ARE ALREADY IN SESSION if music_session.active_music_session connection = nil active_music_session = music_session.active_music_session @@ -488,6 +489,8 @@ module JamRuby end connection + + # FIRST USER TO JOIN SESSION else return_value = nil diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb index 107c1a05b..71bcb5df1 100644 --- a/ruby/lib/jam_ruby/models/music_session.rb +++ b/ruby/lib/jam_ruby/models/music_session.rb @@ -375,7 +375,16 @@ module JamRuby ms.invitations << invitation - Notification.send_scheduled_session_invitation(ms, receiver) + # if the session start time is not within the next 1 minute (user could create a "scheduled session" + # for 8:30 at 8:29. In this case send the regular scheduled session notification since it's still "future") + # send SCHEDULED SESSION INVITATION + if ms.scheduled_start && (ms.scheduled_start - Time.now.utc) / 60 > 1 + Notification.send_scheduled_session_invitation(ms, receiver) + + # otherwise send the notification that allows the user to join the session directly + else + Notification.send_session_invitation(receiver, user, ms.id) + end end if options[:invitations] options[:music_notations].each do |notation| diff --git a/ruby/lib/jam_ruby/models/notification.rb b/ruby/lib/jam_ruby/models/notification.rb index f0d544730..77b2c2394 100644 --- a/ruby/lib/jam_ruby/models/notification.rb +++ b/ruby/lib/jam_ruby/models/notification.rb @@ -177,7 +177,7 @@ module JamRuby return "#{band_name} is now in a session." when NotificationTypes::SCHEDULED_SESSION_INVITATION - return "You have been invited to join a session by #{name}." + return "You have been invited to a future session by #{name}." when NotificationTypes::SCHEDULED_SESSION_RSVP return "#{name} would like to play in a session you have scheduled." diff --git a/ruby/lib/jam_ruby/resque/audiomixer.rb b/ruby/lib/jam_ruby/resque/audiomixer.rb index d2a3226f2..37fb2496e 100644 --- a/ruby/lib/jam_ruby/resque/audiomixer.rb +++ b/ruby/lib/jam_ruby/resque/audiomixer.rb @@ -156,7 +156,7 @@ module JamRuby @error_reason = @error_out[:reason] @error_reason = "unspecified-reason" unless @error_reason - @error_detail = @error_detail[:detail] + @error_detail = @error_out[:detail] end def postback diff --git a/ruby/spec/mailers/batch_mailer_spec.rb b/ruby/spec/mailers/batch_mailer_spec.rb index 2468dc285..b9920f504 100644 --- a/ruby/spec/mailers/batch_mailer_spec.rb +++ b/ruby/spec/mailers/batch_mailer_spec.rb @@ -16,7 +16,7 @@ describe BatchMailer do # it { BatchMailer.deliveries.length.should == 1 } - it { mail['from'].to_s.should == "JamKazam " } + it { mail['from'].to_s.should == "JamKazam " } it { mail.subject.should == batch.subject } it { mail.multipart?.should == true } # because we send plain + html diff --git a/web/app/assets/javascripts/feedHelper.js b/web/app/assets/javascripts/feedHelper.js index ec8be7a41..334eb810d 100644 --- a/web/app/assets/javascripts/feedHelper.js +++ b/web/app/assets/javascripts/feedHelper.js @@ -48,8 +48,8 @@ return currentQuery; } - function clearResults() { + didLoadAllFeeds = false; currentFeedPage = 0; $content.empty(); // TODO: do we need to delete audio elements? $noMoreFeeds.hide(); diff --git a/web/app/assets/javascripts/findSession.js b/web/app/assets/javascripts/findSession.js index 98db4761f..f54feb866 100644 --- a/web/app/assets/javascripts/findSession.js +++ b/web/app/assets/javascripts/findSession.js @@ -82,7 +82,6 @@ } }) .always(function() { - context.JK.bindHoverEvents(); $ssSpinner.hide(); }); @@ -162,6 +161,8 @@ $.each(sessions.sessions, function(i, session) { sessionList.renderInactiveSession(session, $(CATEGORY.SCHEDULED.id), undefined, sessions.my_audio_latency); }); + + context.JK.bindHoverEvents(); afterLoadScheduledSessions(sessions.sessions); } diff --git a/web/app/assets/javascripts/notificationPanel.js b/web/app/assets/javascripts/notificationPanel.js index fd9081752..08121983a 100644 --- a/web/app/assets/javascripts/notificationPanel.js +++ b/web/app/assets/javascripts/notificationPanel.js @@ -651,26 +651,9 @@ handleNotification(payload, header.type); - var participants = []; - rest.getSession(payload.session_id).done(function(response) { - $.each(response.participants, function(index, val) { - participants.push({"photo_url": context.JK.resolveAvatarUrl(val.user.photo_url), "name": val.user.name}); - }); - - var participantHtml = "You have been invited to join a session with:

"; - participantHtml += ""; - - $.each(participants, function(index, val) { - if (index < 4) { - participantHtml += ""; - } - }); - - participantHtml += "
" + val.name + "
"; - - app.notify({ + app.notify({ "title": "Session Invitation", - "text": participantHtml + "text": payload.msg }, [{ id: "btn-join", text: "JOIN SESSION", @@ -684,8 +667,48 @@ } }] ); - }).error(app.ajaxError); + // THERE IS A RACE CONDITION THAT CAUSES AN ERROR WHEN INVOKING THE CODE BELOW + // THE ACTIVEMUSICSESSION HAS NOT YET BEEN FULLY CREATED B/C THE CREATOR'S CLIENT IS + // STILL SETTING UP THE SESSION WHEN THE NOTIFICATION IS SENT + + // SEE ActiveMusicSession#participant_create + + // var participants = []; + // rest.getSession(payload.session_id) + // .done(function(response) { + // $.each(response.participants, function(index, val) { + // participants.push({"photo_url": context.JK.resolveAvatarUrl(val.user.photo_url), "name": val.user.name}); + // }); + + // var participantHtml = "You have been invited to join a session with:

"; + // participantHtml += ""; + + // $.each(participants, function(index, val) { + // if (index < 4) { + // participantHtml += ""; + // } + // }); + + // participantHtml += "
" + val.name + "
"; + + // app.notify({ + // "title": "Session Invitation", + // "text": participantHtml + // }, [{ + // id: "btn-join", + // text: "JOIN SESSION", + // "layout-action": "close", + // href: "#", + // "class": "button-orange", + // callback: openTerms, + // callback_args: { + // "session_id": payload.session_id, + // "notification_id": payload.notification_id + // } + // }] + // ); + // }).error(app.ajaxError); }); } diff --git a/web/app/views/clients/_profile.html.erb b/web/app/views/clients/_profile.html.erb index 4f4c16545..4f83b51fe 100644 --- a/web/app/views/clients/_profile.html.erb +++ b/web/app/views/clients/_profile.html.erb @@ -66,7 +66,7 @@ You have no bio to describe yourself as a musician. Enter one now!
diff --git a/web/spec/features/profile_history_spec.rb b/web/spec/features/profile_history_spec.rb index 551b1dc22..dad18fadf 100644 --- a/web/spec/features/profile_history_spec.rb +++ b/web/spec/features/profile_history_spec.rb @@ -24,6 +24,7 @@ describe "Profile History", :js => true, :type => :feature, :capybara_feature => # the same feedHelper instance is used to show any user's feed. so we need to make sure bouncing back and forth # between feeds is safe it "between users" do + pending create_session(creator: user) formal_leave_by(user) user2 = FactoryGirl.create(:user)