change join_the_session api to add tracks; move the impl to connection; a few bug fixes
This commit is contained in:
parent
c0834c92c7
commit
fe59865bd9
|
|
@ -369,23 +369,21 @@ SQL
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# if a blk is passed in, upon success, it will be called and you can issue notifications
|
def join_music_session(user, client_id, music_session, as_musician, tracks)
|
||||||
# within the connection table lock
|
|
||||||
def join_music_session(user, client_id, music_session, as_musician, tracks, &blk)
|
|
||||||
connection = nil
|
connection = nil
|
||||||
user_id = user.id
|
|
||||||
music_session_id = music_session.id
|
|
||||||
|
|
||||||
ConnectionManager.active_record_transaction do |connection_manager|
|
ConnectionManager.active_record_transaction do |connection_manager|
|
||||||
db_conn = connection_manager.pg_conn
|
db_conn = connection_manager.pg_conn
|
||||||
|
|
||||||
connection = Connection.find_by_client_id_and_user_id!(client_id, user_id)
|
connection = Connection.find_by_client_id_and_user_id!(client_id, user.id)
|
||||||
connection.music_session_id = music_session_id
|
|
||||||
connection.as_musician = as_musician
|
connection.join_the_session(music_session, as_musician, tracks)
|
||||||
connection.joining_session = true
|
# connection.music_session_id = music_session.id
|
||||||
connection.joined_session_at = Time.now
|
# connection.as_musician = as_musician
|
||||||
associate_tracks(connection, tracks)
|
# connection.joining_session = true
|
||||||
connection.save
|
# connection.joined_session_at = Time.now
|
||||||
|
# associate_tracks(connection, tracks)
|
||||||
|
# connection.save
|
||||||
|
|
||||||
if connection.errors.any?
|
if connection.errors.any?
|
||||||
raise ActiveRecord::Rollback
|
raise ActiveRecord::Rollback
|
||||||
|
|
@ -419,7 +417,7 @@ SQL
|
||||||
end
|
end
|
||||||
|
|
||||||
# can throw exception if the session is deleted just before this
|
# can throw exception if the session is deleted just before this
|
||||||
conn.exec("UPDATE connections SET music_session_id = NULL, joined_session_at = NULL, as_musician = NULL WHERE client_id = $1 AND user_id =$2", [client_id, user_id]) do |result|
|
conn.exec("UPDATE connections SET music_session_id = NULL, joined_session_at = NULL, as_musician = NULL WHERE client_id = $1 AND user_id = $2 AND music_session_id = $3", [client_id, user_id, music_session_id]) do |result|
|
||||||
if result.cmd_tuples == 1
|
if result.cmd_tuples == 1
|
||||||
@log.debug("disassociated music_session with connection for client_id=#{client_id}, user_id=#{user_id}")
|
@log.debug("disassociated music_session with connection for client_id=#{client_id}, user_id=#{user_id}")
|
||||||
|
|
||||||
|
|
@ -442,23 +440,23 @@ SQL
|
||||||
conn.exec("LOCK connections IN EXCLUSIVE MODE").clear
|
conn.exec("LOCK connections IN EXCLUSIVE MODE").clear
|
||||||
end
|
end
|
||||||
|
|
||||||
def associate_tracks(connection, tracks)
|
# def associate_tracks(connection, tracks)
|
||||||
@log.debug "Tracks:"
|
# @log.debug "Tracks:"
|
||||||
@log.debug tracks
|
# @log.debug tracks
|
||||||
connection.tracks.clear()
|
# connection.tracks.clear()
|
||||||
|
#
|
||||||
unless tracks.nil?
|
# unless tracks.nil?
|
||||||
tracks.each do |track|
|
# tracks.each do |track|
|
||||||
instrument = Instrument.find(track["instrument_id"])
|
# instrument = Instrument.find(track["instrument_id"])
|
||||||
t = Track.new
|
# t = Track.new
|
||||||
t.instrument = instrument
|
# t.instrument = instrument
|
||||||
t.connection = connection
|
# t.connection = connection
|
||||||
t.sound = track["sound"]
|
# t.sound = track["sound"]
|
||||||
t.client_track_id = track["client_track_id"]
|
# t.client_track_id = track["client_track_id"]
|
||||||
t.save
|
# t.save
|
||||||
connection.tracks << t
|
# connection.tracks << t
|
||||||
end
|
# end
|
||||||
end
|
# end
|
||||||
end
|
# end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,13 @@ module JamRuby
|
||||||
|
|
||||||
def can_join_music_session
|
def can_join_music_session
|
||||||
|
|
||||||
|
# puts "can_join_music_session: #{music_session_id} was #{music_session_id_was}" if music_session_id_changed?
|
||||||
|
|
||||||
|
if music_session_id_changed? and !(music_session_id_was.nil? or music_session_id_was.blank?)
|
||||||
|
errors.add(:music_session, ValidationMessages::CANT_JOIN_MULTIPLE_SESSIONS)
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
if music_session.nil?
|
if music_session.nil?
|
||||||
errors.add(:music_session, ValidationMessages::MUSIC_SESSION_MUST_BE_SPECIFIED)
|
errors.add(:music_session, ValidationMessages::MUSIC_SESSION_MUST_BE_SPECIFIED)
|
||||||
return false
|
return false
|
||||||
|
|
@ -139,14 +146,35 @@ module JamRuby
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def join_the_session(music_session, as_musician)
|
def join_the_session(music_session, as_musician, tracks)
|
||||||
self.music_session = music_session
|
self.music_session_id = music_session.id
|
||||||
self.as_musician = as_musician
|
self.as_musician = as_musician
|
||||||
self.joining_session = true
|
self.joining_session = true
|
||||||
self.joined_session_at = Time.now
|
self.joined_session_at = Time.now
|
||||||
self.save!
|
associate_tracks(tracks) unless tracks.nil?
|
||||||
|
self.save
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def associate_tracks(tracks)
|
||||||
|
# @log.debug "Tracks:"
|
||||||
|
# @log.debug tracks
|
||||||
|
|
||||||
|
|
||||||
|
unless tracks.nil?
|
||||||
|
self.tracks.clear()
|
||||||
|
tracks.each do |track|
|
||||||
|
t = Track.new
|
||||||
|
t.instrument = Instrument.find(track["instrument_id"])
|
||||||
|
t.connection = self
|
||||||
|
t.sound = track["sound"]
|
||||||
|
t.client_track_id = track["client_track_id"]
|
||||||
|
t.save # todo what if it fails?
|
||||||
|
self.tracks << t
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def require_at_least_one_track_when_in_session
|
def require_at_least_one_track_when_in_session
|
||||||
|
|
|
||||||
|
|
@ -490,34 +490,57 @@ describe ConnectionManager do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "join_music_session fails if user has music_session already active" do
|
it "join_music_session fails if user has music_session already active" do
|
||||||
|
|
||||||
|
# there are two different problems: user can only be in one active music_session at a time,
|
||||||
|
# and a connection can only point to one active music_session at a time. this is a test of
|
||||||
|
# the former but we need a test of the latter, too.
|
||||||
|
|
||||||
pending
|
pending
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
it "join_music_session fails if connection has music_session already active" do
|
||||||
|
|
||||||
|
# there are two different problems: user can only be in one active music_session at a time,
|
||||||
|
# and a connection can only point to one active music_session at a time. this is a test of
|
||||||
|
# the latter but we need a test of the former, too.
|
||||||
|
|
||||||
|
|
||||||
user_id = create_user("test", "user11", "user11@jamkazam.com")
|
user_id = create_user("test", "user11", "user11@jamkazam.com")
|
||||||
|
|
||||||
user = User.find(user_id)
|
user = User.find(user_id)
|
||||||
music_session = MusicSession.find(create_music_session(user_id))
|
|
||||||
|
|
||||||
client_id = Faker::Number.number(20)
|
client_id1 = Faker::Number.number(20)
|
||||||
@connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
|
@connman.create_connection(user_id, client_id1, "1.1.1.1", 'client')
|
||||||
connection = @connman.join_music_session(user, client_id, music_session, true, TRACKS)
|
music_session1 = MusicSession.find(create_music_session(user_id))
|
||||||
|
connection1 = @connman.join_music_session(user, client_id1, music_session1, true, TRACKS)
|
||||||
|
|
||||||
client_id = Faker::Number.number(20)
|
connection1.errors.size.should == 0
|
||||||
@connman.create_connection(user_id, client_id, Faker::Internet.ip_v4_address, 'client')
|
|
||||||
music_session = MusicSession.find(create_music_session(user_id))
|
|
||||||
connection = @connman.join_music_session(user, client_id, music_session, true, TRACKS)
|
|
||||||
|
|
||||||
connection.errors.size.should == 1
|
music_session2 = MusicSession.find(create_music_session(user_id))
|
||||||
connection.errors.get(:music_session).should == [ValidationMessages::CANT_JOIN_MULTIPLE_SESSIONS]
|
connection2 = @connman.join_music_session(user, client_id1, music_session2, true, TRACKS)
|
||||||
|
|
||||||
user.update_attribute(:admin, true)
|
connection2.errors.size.should == 1
|
||||||
client_id = Faker::Number.number(20)
|
connection2.errors.get(:music_session).should == [ValidationMessages::CANT_JOIN_MULTIPLE_SESSIONS]
|
||||||
@connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
|
|
||||||
music_session = MusicSession.find(create_music_session(user_id))
|
# client_id2 = Faker::Number.number(20)
|
||||||
connection = @connman.join_music_session(user, client_id, music_session, true, TRACKS)
|
# @connman.create_connection(user_id, client_id2, "2.2.2.2", 'client')
|
||||||
client_id = Faker::Number.number(20)
|
# music_session2 = MusicSession.find(create_music_session(user_id))
|
||||||
@connman.create_connection(user_id, client_id, Faker::Internet.ip_v4_address, 'client')
|
# connection2 = @connman.join_music_session(user, client_id2, music_session2, true, TRACKS)
|
||||||
music_session = MusicSession.find(create_music_session(user_id))
|
#
|
||||||
connection = @connman.join_music_session(user, client_id, music_session, true, TRACKS)
|
# connection2.errors.size.should == 1
|
||||||
connection.errors.size.should == 0
|
# connection2.errors.get(:music_session).should == [ValidationMessages::CANT_JOIN_MULTIPLE_SESSIONS]
|
||||||
|
#
|
||||||
|
# user.update_attribute(:admin, true)
|
||||||
|
# client_id = Faker::Number.number(20)
|
||||||
|
# @connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
|
||||||
|
# music_session = MusicSession.find(create_music_session(user_id))
|
||||||
|
# connection = @connman.join_music_session(user, client_id, music_session, true, TRACKS)
|
||||||
|
# client_id = Faker::Number.number(20)
|
||||||
|
# @connman.create_connection(user_id, client_id, Faker::Internet.ip_v4_address, 'client')
|
||||||
|
# music_session = MusicSession.find(create_music_session(user_id))
|
||||||
|
# connection = @connman.join_music_session(user, client_id, music_session, true, TRACKS)
|
||||||
|
# connection.errors.size.should == 0
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ describe ClaimedRecording do
|
||||||
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
|
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
|
||||||
# @music_session.connections << @connection
|
# @music_session.connections << @connection
|
||||||
@music_session.save
|
@music_session.save
|
||||||
@connection.join_the_session(@music_session, true)
|
@connection.join_the_session(@music_session, true, nil)
|
||||||
@recording = Recording.start(@music_session, @user)
|
@recording = Recording.start(@music_session, @user)
|
||||||
@recording.stop
|
@recording.stop
|
||||||
@recording.reload
|
@recording.reload
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ describe Mix do
|
||||||
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
|
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
|
||||||
# @music_session.connections << @connection
|
# @music_session.connections << @connection
|
||||||
@music_session.save
|
@music_session.save
|
||||||
@connection.join_the_session(@music_session, true)
|
@connection.join_the_session(@music_session, true, nil)
|
||||||
@recording = Recording.start(@music_session, @user)
|
@recording = Recording.start(@music_session, @user)
|
||||||
@recording.stop
|
@recording.stop
|
||||||
@recording.claim(@user, "name", "description", Genre.first, true)
|
@recording.claim(@user, "name", "description", Genre.first, true)
|
||||||
|
|
|
||||||
|
|
@ -398,7 +398,7 @@ describe MusicSession do
|
||||||
@music_session = FactoryGirl.create(:music_session, :creator => @user1, :musician_access => true)
|
@music_session = FactoryGirl.create(:music_session, :creator => @user1, :musician_access => true)
|
||||||
# @music_session.connections << @connection
|
# @music_session.connections << @connection
|
||||||
@music_session.save!
|
@music_session.save!
|
||||||
@connection.join_the_session(@music_session, true)
|
@connection.join_the_session(@music_session, true, nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "not recording" do
|
describe "not recording" do
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ describe 'Musician search' do
|
||||||
music_session = FactoryGirl.create(:music_session, :creator => usr, :musician_access => true)
|
music_session = FactoryGirl.create(:music_session, :creator => usr, :musician_access => true)
|
||||||
# music_session.connections << connection
|
# music_session.connections << connection
|
||||||
music_session.save
|
music_session.save
|
||||||
connection.join_the_session(music_session, true)
|
connection.join_the_session(music_session, true, nil)
|
||||||
recording = Recording.start(music_session, usr)
|
recording = Recording.start(music_session, usr)
|
||||||
recording.stop
|
recording.stop
|
||||||
recording.reload
|
recording.reload
|
||||||
|
|
@ -130,7 +130,7 @@ describe 'Musician search' do
|
||||||
music_session = FactoryGirl.create(:music_session, :creator => usr, :musician_access => true)
|
music_session = FactoryGirl.create(:music_session, :creator => usr, :musician_access => true)
|
||||||
# music_session.connections << connection
|
# music_session.connections << connection
|
||||||
music_session.save
|
music_session.save
|
||||||
connection.join_the_session(music_session, true)
|
connection.join_the_session(music_session, true, nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'musician stat counters' do
|
context 'musician stat counters' do
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,7 @@ describe Recording do
|
||||||
@track2 = FactoryGirl.create(:track, :connection => @connection2, :instrument => @instrument2)
|
@track2 = FactoryGirl.create(:track, :connection => @connection2, :instrument => @instrument2)
|
||||||
|
|
||||||
# @music_session.connections << @connection2
|
# @music_session.connections << @connection2
|
||||||
@connection2.join_the_session(@music_session, true)
|
@connection2.join_the_session(@music_session, true, nil)
|
||||||
|
|
||||||
@recording = Recording.start(@music_session, @user)
|
@recording = Recording.start(@music_session, @user)
|
||||||
@user.recordings.length.should == 0
|
@user.recordings.length.should == 0
|
||||||
|
|
@ -179,7 +179,7 @@ describe Recording do
|
||||||
@track = FactoryGirl.create(:track, :connection => @connection2, :instrument => @instrument)
|
@track = FactoryGirl.create(:track, :connection => @connection2, :instrument => @instrument)
|
||||||
# @music_session.connections << @connection2
|
# @music_session.connections << @connection2
|
||||||
@music_session.save
|
@music_session.save
|
||||||
@connection2.join_the_session(@music_session, true)
|
@connection2.join_the_session(@music_session, true, nil)
|
||||||
@recording = Recording.start(@music_session, @user)
|
@recording = Recording.start(@music_session, @user)
|
||||||
@recording.stop
|
@recording.stop
|
||||||
@recording.reload
|
@recording.reload
|
||||||
|
|
|
||||||
|
|
@ -157,7 +157,7 @@ describe AudioMixer do
|
||||||
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
|
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
|
||||||
# @music_session.connections << @connection
|
# @music_session.connections << @connection
|
||||||
@music_session.save
|
@music_session.save
|
||||||
@connection.join_the_session(@music_session, true)
|
@connection.join_the_session(@music_session, true, nil)
|
||||||
@recording = Recording.start(@music_session, @user)
|
@recording = Recording.start(@music_session, @user)
|
||||||
@recording.stop
|
@recording.stop
|
||||||
@recording.claim(@user, "name", "description", Genre.first, true)
|
@recording.claim(@user, "name", "description", Genre.first, true)
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ describe ApiClaimedRecordingsController do
|
||||||
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
|
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
|
||||||
# @music_session.connections << @connection
|
# @music_session.connections << @connection
|
||||||
@music_session.save
|
@music_session.save
|
||||||
@connection.join_the_session(@music_session, true)
|
@connection.join_the_session(@music_session, true, nil)
|
||||||
@recording = Recording.start(@music_session, @user)
|
@recording = Recording.start(@music_session, @user)
|
||||||
@recording.stop
|
@recording.stop
|
||||||
@recording.reload
|
@recording.reload
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ describe "social metadata" do
|
||||||
ms = FactoryGirl.create(:music_session, :creator => user, :musician_access => true)
|
ms = FactoryGirl.create(:music_session, :creator => user, :musician_access => true)
|
||||||
# ms.connections << connection
|
# ms.connections << connection
|
||||||
ms.save!
|
ms.save!
|
||||||
connection.join_the_session(ms, true)
|
connection.join_the_session(ms, true, nil)
|
||||||
ms
|
ms
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -93,7 +93,7 @@ describe "social metadata" do
|
||||||
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
|
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
|
||||||
# @music_session.connections << @connection
|
# @music_session.connections << @connection
|
||||||
@music_session.save
|
@music_session.save
|
||||||
@connection.join_the_session(@music_session, true)
|
@connection.join_the_session(@music_session, true, nil)
|
||||||
@recording = Recording.start(@music_session, @user)
|
@recording = Recording.start(@music_session, @user)
|
||||||
@recording.stop
|
@recording.stop
|
||||||
@recording.reload
|
@recording.reload
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ describe MusicSessionHelper do
|
||||||
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
|
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
|
||||||
# @music_session.connections << @connection
|
# @music_session.connections << @connection
|
||||||
@music_session.save
|
@music_session.save
|
||||||
@connection.join_the_session(@music_session, true)
|
@connection.join_the_session(@music_session, true, nil)
|
||||||
@recording = Recording.start(@music_session, @user)
|
@recording = Recording.start(@music_session, @user)
|
||||||
@recording.stop
|
@recording.stop
|
||||||
@recording.reload
|
@recording.reload
|
||||||
|
|
|
||||||
|
|
@ -700,7 +700,7 @@ describe "Music Session API ", :type => :api do
|
||||||
music_session = FactoryGirl.create(:music_session, :creator => user, :musician_access => true)
|
music_session = FactoryGirl.create(:music_session, :creator => user, :musician_access => true)
|
||||||
# music_session.connections << connection
|
# music_session.connections << connection
|
||||||
music_session.save
|
music_session.save
|
||||||
connection.join_the_session(music_session, true)
|
connection.join_the_session(music_session, true, nil)
|
||||||
recording = Recording.start(music_session, user)
|
recording = Recording.start(music_session, user)
|
||||||
recording.stop
|
recording.stop
|
||||||
recording.reload
|
recording.reload
|
||||||
|
|
|
||||||
|
|
@ -985,7 +985,7 @@ describe "User API", :type => :api do
|
||||||
ms = FactoryGirl.create(:music_session, :creator => user, :musician_access => true)
|
ms = FactoryGirl.create(:music_session, :creator => user, :musician_access => true)
|
||||||
# ms.connections << connection
|
# ms.connections << connection
|
||||||
ms.save!
|
ms.save!
|
||||||
connection.join_the_session(ms, true)
|
connection.join_the_session(ms, true, nil)
|
||||||
ms }
|
ms }
|
||||||
|
|
||||||
it "fetches facebook successfully" do
|
it "fetches facebook successfully" do
|
||||||
|
|
@ -1122,7 +1122,7 @@ describe "User API", :type => :api do
|
||||||
@music_session = FactoryGirl.create(:music_session, :creator => user, :musician_access => true)
|
@music_session = FactoryGirl.create(:music_session, :creator => user, :musician_access => true)
|
||||||
# @music_session.connections << @connection
|
# @music_session.connections << @connection
|
||||||
@music_session.save
|
@music_session.save
|
||||||
@connection.join_the_session(@music_session, true)
|
@connection.join_the_session(@music_session, true, nil)
|
||||||
@recording = Recording.start(@music_session, user)
|
@recording = Recording.start(@music_session, user)
|
||||||
@recording.stop
|
@recording.stop
|
||||||
@recording.reload
|
@recording.reload
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue