diff --git a/admin/app/admin/icecast_bootstrap.rb b/admin/app/admin/icecast_bootstrap.rb index 3693f4e74..e07af5f20 100644 --- a/admin/app/admin/icecast_bootstrap.rb +++ b/admin/app/admin/icecast_bootstrap.rb @@ -191,12 +191,12 @@ ActiveAdmin.register_page "Bootstrap" do mount_template.mp3_metadata_interval = nil mount_template.mime_type ='audio/ogg' mount_template.subtype = 'vorbis' - mount_template.fallback_mount = "/fallback-#{mount_template.bitrate}.ogg" + #mount_template.fallback_mount = "/fallback-#{mount_template.bitrate}.ogg" else mount_template.mp3_metadata_interval = 4096 mount_template.mime_type ='audio/mpeg' mount_template.subtype = nil - mount_template.fallback_mount = "/fallback-#{mount_template.bitrate}.mp3" + #mount_template.fallback_mount = "/fallback-#{mount_template.bitrate}.mp3" end mount_template.save! end diff --git a/web/app/assets/javascripts/jquery.listenRecording.js b/web/app/assets/javascripts/jquery.listenRecording.js index fc1e1f22a..1ce3717a4 100644 --- a/web/app/assets/javascripts/jquery.listenRecording.js +++ b/web/app/assets/javascripts/jquery.listenRecording.js @@ -46,6 +46,7 @@ return loaded; } + function play(e) { if(e) { e.preventDefault(); diff --git a/web/app/assets/javascripts/jquery.listenbroadcast.js b/web/app/assets/javascripts/jquery.listenbroadcast.js index 125e7ea5c..23e0656ff 100644 --- a/web/app/assets/javascripts/jquery.listenbroadcast.js +++ b/web/app/assets/javascripts/jquery.listenbroadcast.js @@ -132,6 +132,7 @@ $audio.append(originalSource); audioDomElement = $audio.get(0); audioBind(); + logger.debug("recreated audio element ") } function clearBufferTimeout() { @@ -243,6 +244,10 @@ if(isNoisyEvent('stalled')) return; logger.debug("stalled", arguments); + if(arguments[0].target !== audioDomElement) { + logger.debug("ignoring stalled msg for non-active audio element") + return; + } // fires in Chrome on page load if(playState == PlayStateBuffering || playState == PlayStatePlaying) { diff --git a/web/app/assets/stylesheets/web/audioWidgets.css.scss b/web/app/assets/stylesheets/web/audioWidgets.css.scss index 70ca73f4a..e72005acb 100644 --- a/web/app/assets/stylesheets/web/audioWidgets.css.scss +++ b/web/app/assets/stylesheets/web/audioWidgets.css.scss @@ -37,13 +37,7 @@ outline: 0; } - &.no-mount[fan-access="true"]{ - .play-button { - display:none; - } - } - - &[fan-access="false"]{ + &.no-mount{ .play-button { display:none; } diff --git a/web/app/controllers/api_music_sessions_controller.rb b/web/app/controllers/api_music_sessions_controller.rb index b907776c5..d5d973415 100644 --- a/web/app/controllers/api_music_sessions_controller.rb +++ b/web/app/controllers/api_music_sessions_controller.rb @@ -3,7 +3,7 @@ require 'aws-sdk' class ApiMusicSessionsController < ApiController # have to be signed in currently to see this screen - before_filter :api_signed_in_user, :except => [ :add_like ] + before_filter :api_signed_in_user, :except => [ :add_like, :show ] before_filter :lookup_session, only: [:show, :update, :delete, :claimed_recording_start, :claimed_recording_stop, :track_sync] skip_before_filter :api_signed_in_user, only: [:perf_upload] diff --git a/web/app/views/api_music_sessions/show.rabl b/web/app/views/api_music_sessions/show.rabl index 977e90c25..f205a5e5b 100644 --- a/web/app/views/api_music_sessions/show.rabl +++ b/web/app/views/api_music_sessions/show.rabl @@ -1,94 +1,100 @@ object @music_session -attributes :id, :description, :musician_access, :approval_required, :fan_access, :fan_chat, :band_id, :user_id, :claimed_recording_initiator_id, :track_changes_counter +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 +else -node :genres do |item| - item.genres.map(&:description) -end + attributes :id, :description, :musician_access, :approval_required, :fan_access, :fan_chat, :band_id, :user_id, :claimed_recording_initiator_id, :track_changes_counter -if :is_recording? - node do |music_session| - { :recording => partial("api_recordings/show", :object => music_session.recording) } + node :genres do |item| + item.genres.map(&:description) + 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_history.share_token.nil? + share_token_url(music_session.music_session_history.share_token.token) end -end - -node :share_url do |music_session| - unless music_session.music_session_history.share_token.nil? - share_token_url(music_session.music_session_history.share_token.token) - end -end - -child(:connections => :participants) { - collection @music_sessions, :object_root => false - attributes :ip_address, :client_id, :joined_session_at - - 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, :updated_at - } -} + child(:connections => :participants) { + collection @music_sessions, :object_root => false + attributes :ip_address, :client_id, :joined_session_at + 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({:invitations => :invitations}) { - attributes :id, :sender_id, :receiver_id -} - -# only show join_requests if the current_user is in the session -node(:join_requests, :if => lambda { |music_session| music_session.users.exists?(current_user) } ) do |music_session| - child(:join_requests => :join_requests) { - attributes :id, :text - child(:user => :user) { - attributes :id, :name + child(:tracks => :tracks) { + attributes :id, :connection_id, :instrument_id, :sound, :client_track_id, :updated_at } } -end -# only show currently playing recording data if the current_user is in the session -node(:claimed_recording, :if => lambda { |music_session| music_session.users.exists?(current_user) } ) do |music_session| - child(:claimed_recording => :claimed_recording) { - attributes :id, :name, :description, :is_public + child({:invitations => :invitations}) { + attributes :id, :sender_id, :receiver_id + } - child(:recording => :recording) { - attributes :id, :created_at, :duration - child(:band => :band) { - attributes :id, :name - } + # only show join_requests if the current_user is in the session + node(:join_requests, :if => lambda { |music_session| music_session.users.exists?(current_user) } ) do |music_session| + child(:join_requests => :join_requests) { + attributes :id, :text + child(:user => :user) { + attributes :id, :name + } + } + end - child(:mixes => :mixes) { - attributes :id, :is_completed + # only show currently playing recording data if the current_user is in the session + node(:claimed_recording, :if => lambda { |music_session| music_session.users.exists?(current_user) } ) do |music_session| - node :mp3_url do |mix| - mix[:mp3_url] - end + child(:claimed_recording => :claimed_recording) { + attributes :id, :name, :description, :is_public - node :ogg_url do |mix| - mix[:ogg_url] - end - } + child(:recording => :recording) { + attributes :id, :created_at, :duration + child(:band => :band) { + attributes :id, :name + } - child(:recorded_tracks => :recorded_tracks) { - attributes :id, :fully_uploaded, :client_track_id, :client_id, :instrument_id + child(:mixes => :mixes) { + attributes :id, :is_completed - node :url do |recorded_track| - recorded_track[:url] + node :mp3_url do |mix| + mix[:mp3_url] end - child(:user => :user) { - attributes :id, :first_name, :last_name, :city, :state, :country, :photo_url - } - } - } - } -end + node :ogg_url do |mix| + mix[:ogg_url] + end + } -# 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) } -} \ No newline at end of file + 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 + } + } + } + } + end + + # 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 \ No newline at end of file