wait until after transaction for track changes
This commit is contained in:
parent
3b5b3608b1
commit
695d95ecac
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue