diff --git a/ruby/lib/jam_ruby/connection_manager.rb b/ruby/lib/jam_ruby/connection_manager.rb index 02b1d0845..384110fa6 100644 --- a/ruby/lib/jam_ruby/connection_manager.rb +++ b/ruby/lib/jam_ruby/connection_manager.rb @@ -353,19 +353,22 @@ SQL end def update_session_controller(music_session_id) + tracks_changed = false active_music_session = ActiveMusicSession.find(music_session_id) if active_music_session music_session = active_music_session.music_session if music_session.session_controller_id && !active_music_session.users.exists?(music_session.session_controller.id) # find next in line, because the current 'session controller' is not part of the session - next_in_line(music_session, active_music_session) + tracks_changed = next_in_line(music_session, active_music_session) end end + tracks_changed end # determine who should be session controller after someone leaves def next_in_line(music_session, active_music_session) + tracks_changed = false session_users = active_music_session.users # check friends 1st @@ -374,7 +377,7 @@ SQL music_session.session_controller = session_friends[0] if music_session.save active_music_session.tick_track_changes - Notification.send_tracks_changed(active_music_session) + tracks_changed = true return end end @@ -385,7 +388,7 @@ SQL music_session.session_controller = invited[0] if music_session.save active_music_session.tick_track_changes - Notification.send_tracks_changed(active_music_session) + tracks_changed = true return end end @@ -397,16 +400,17 @@ SQL music_session.session_controller = earliest if music_session.save active_music_session.tick_track_changes - Notification.send_tracks_changed(active_music_session) + tracks_changed = true return end end - music_session.creator + tracks_changed end def join_music_session(user, client_id, music_session, as_musician, tracks, audio_latency, client_role = nil, parent_client_id = nil, video_sources=nil) connection = nil + tracks_changed = false ConnectionManager.active_record_transaction do |connection_manager| db_conn = connection_manager.pg_conn @@ -432,11 +436,15 @@ SQL if connection.errors.any? raise ActiveRecord::Rollback else - update_session_controller(music_session.id) + tracks_changed = update_session_controller(music_session.id) end end + if tracks_changed + Notification.send_tracks_changed(music_session.active_music_session) + end + connection end @@ -444,6 +452,7 @@ SQL # if a blk is passed in, upon success, it will be called and you can issue notifications # within the connection table lock def leave_music_session(user, connection, music_session, &blk) + send_tracks_changed = false ConnectionManager.active_record_transaction do |connection_manager| conn = connection_manager.pg_conn @@ -469,7 +478,7 @@ SQL if result.cmd_tuples == 1 @log.debug("disassociated music_session with connection for client_id=#{client_id}, user_id=#{user_id}") - update_session_controller(music_session.id) + send_tracks_changed = update_session_controller(music_session.id) JamRuby::MusicSessionUserHistory.removed_music_session(user_id, music_session_id) session_checks(conn, previous_music_session_id, user_id) @@ -484,6 +493,10 @@ SQL end end end + + if send_tracks_changed + Notification.send_tracks_changed(music_session.active_music_session) + end end def lock_connections(conn) diff --git a/web/lib/music_session_manager.rb b/web/lib/music_session_manager.rb index c3bd13a89..cc04f7a72 100644 --- a/web/lib/music_session_manager.rb +++ b/web/lib/music_session_manager.rb @@ -98,13 +98,15 @@ class MusicSessionManager < BaseManager def participant_create(user, music_session_id, client_id, as_musician, tracks, audio_latency) connection = nil music_session = nil + active_music_session = nil + send_track_changed = false ActiveRecord::Base.transaction do active_music_session = ActiveMusicSession.find(music_session_id) active_music_session.with_lock do # VRFS-1297 active_music_session.tick_track_changes - Notification.send_tracks_changed(active_music_session) + send_track_changed = true connection = ConnectionManager.new.join_music_session(user, client_id, active_music_session, as_musician, tracks, audio_latency) if connection.errors.any? @@ -114,6 +116,9 @@ class MusicSessionManager < BaseManager end end + if send_track_changed + Notification.send_tracks_changed(active_music_session) + end unless connection.errors.any? user.update_progression_field(:first_music_session_at) @@ -144,15 +149,20 @@ class MusicSessionManager < BaseManager recordingId = nil + tracks_changed = false active_music_session.with_lock do # VRFS-1297 ConnectionManager.new.leave_music_session(user, connection, active_music_session) do active_music_session.tick_track_changes - Notification.send_tracks_changed(active_music_session) + tracks_changed = true recording = active_music_session.stop_recording # stop any ongoing recording, if there is one recordingId = recording.id unless recording.nil? end end + if tracks_changed + Notification.send_tracks_changed(active_music_session) + end + Notification.send_session_depart(active_music_session, connection.client_id, user, recordingId) end