139 lines
5.0 KiB
Ruby
139 lines
5.0 KiB
Ruby
object @music_session
|
|
|
|
if !current_user
|
|
# there should be more data returned, but we need to think very carefully about what data is public for a music session
|
|
attributes :id
|
|
|
|
# only show mount info if fan_access is public. Eventually we'll also need to show this in other scenarios, like if invited
|
|
child({:mount => :mount}, :if => lambda { |music_session| music_session.fan_access}) {
|
|
attributes :id, :name, :sourced, :listeners, :bitrate, :subtype, :url
|
|
node(:mime_type) { |mount| mount.resolve_string(:mime_type) }
|
|
node(:bitrate) { |mount| mount.resolve_string(:bitrate) }
|
|
node(:subtype) { |mount| mount.resolve_string(:subtype) }
|
|
}
|
|
else
|
|
|
|
attributes :id, :name, :description, :musician_access, :approval_required, :fan_access, :fan_chat, :band_id, :user_id, :claimed_recording_initiator_id, :track_changes_counter, :max_score, :backing_track_path, :metronome_active
|
|
|
|
node :can_join do |session|
|
|
session.can_join?(current_user, true)
|
|
end
|
|
|
|
node :genres do |item|
|
|
[item.genre.description] # XXX: need to return single genre; not array
|
|
end
|
|
|
|
child(:music_notations => :music_notations) {
|
|
attributes :id, :file_name
|
|
|
|
node do |music_notation|
|
|
{ file_url: "/api/music_notations/#{music_notation.id}" }
|
|
end
|
|
}
|
|
|
|
if :is_recording?
|
|
node do |music_session|
|
|
{ :recording => partial("api_recordings/show", :object => music_session.recording) }
|
|
end
|
|
end
|
|
|
|
node :share_url do |music_session|
|
|
unless music_session.music_session.share_token.nil?
|
|
share_token_url(music_session.music_session.share_token.token)
|
|
end
|
|
end
|
|
|
|
child(:connections => :participants) {
|
|
collection @music_sessions, :object_root => false
|
|
attributes :ip_address, :client_id, :joined_session_at, :audio_latency, :id
|
|
|
|
node :user do |connection|
|
|
{ :id => connection.user.id, :photo_url => connection.user.photo_url, :name => connection.user.name, :is_friend => connection.user.friends?(current_user), :connection_state => connection.aasm_state }
|
|
end
|
|
|
|
child(:tracks => :tracks) {
|
|
attributes :id, :connection_id, :instrument_id, :sound, :client_track_id, :client_resource_id, :updated_at
|
|
}
|
|
|
|
child(:backing_tracks => :backing_tracks) {
|
|
attributes :id, :connection_id, :filename, :client_track_id, :client_resource_id, :updated_at
|
|
}
|
|
}
|
|
|
|
child({:invitations => :invitations}) {
|
|
attributes :id, :sender_id, :receiver_id
|
|
}
|
|
|
|
# only show join_requests if the current_user is in the session
|
|
child({:join_requests => :join_requests}, :if => lambda { |music_session| music_session.users.exists?(current_user) } ) {
|
|
attributes :id, :text
|
|
child(:user => :user) {
|
|
attributes :id, :name
|
|
}
|
|
}
|
|
|
|
# only show currently open jam track info if the current user is in the session
|
|
child({:jam_track => :jam_track}, :if => lambda { |music_session| music_session.users.exists?(current_user) }) {
|
|
attributes :id, :name, :description, :initial_play_silence
|
|
|
|
child(:jam_track_tracks => :tracks) {
|
|
attributes :id, :part, :instrument
|
|
}
|
|
|
|
child(:jam_track_tap_ins => :tap_ins) {
|
|
attributes :offset_time, :bpm, :tap_in_count
|
|
}
|
|
}
|
|
|
|
# only show currently playing recording data if the current_user is in the session
|
|
child({:claimed_recording => :claimed_recording}, :if => lambda { |music_session| music_session.users.exists?(current_user) }) {
|
|
attributes :id, :name, :description, :is_public
|
|
|
|
child(:recording => :recording) {
|
|
attributes :id, :created_at, :duration
|
|
child(:band => :band) {
|
|
attributes :id, :name
|
|
}
|
|
|
|
child(:mixes => :mixes) {
|
|
attributes :id, :is_completed
|
|
|
|
node :mp3_url do |mix|
|
|
mix[:mp3_url]
|
|
end
|
|
|
|
node :ogg_url do |mix|
|
|
mix[:ogg_url]
|
|
end
|
|
}
|
|
|
|
child(:recorded_tracks => :recorded_tracks) {
|
|
attributes :id, :fully_uploaded, :client_track_id, :client_id, :instrument_id
|
|
|
|
node :url do |recorded_track|
|
|
recorded_track[:url]
|
|
end
|
|
|
|
child(:user => :user) {
|
|
attributes :id, :first_name, :last_name, :city, :state, :country, :photo_url
|
|
}
|
|
}
|
|
|
|
child(:recorded_backing_tracks => :recorded_backing_tracks) {
|
|
attributes :id, :fully_uploaded, :client_track_id, :client_id, :filename
|
|
|
|
child(:user => :user) {
|
|
attributes :id, :first_name, :last_name, :city, :state, :country, :photo_url
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
# only show mount info if fan_access is public. Eventually we'll also need to show this in other scenarios, like if invited
|
|
child({:mount => :mount}, :if => lambda { |music_session| music_session.fan_access}) {
|
|
attributes :id, :name, :sourced, :listeners, :bitrate, :subtype, :url
|
|
node(:mime_type) { |mount| mount.resolve_string(:mime_type) }
|
|
node(:bitrate) { |mount| mount.resolve_string(:bitrate) }
|
|
node(:subtype) { |mount| mount.resolve_string(:subtype) }
|
|
}
|
|
end |