diff --git a/ruby/db/migrate/20210824071348_use_video_server_on_sessions.rb b/ruby/db/migrate/20210824071348_use_video_server_on_sessions.rb new file mode 100644 index 000000000..9c11e348b --- /dev/null +++ b/ruby/db/migrate/20210824071348_use_video_server_on_sessions.rb @@ -0,0 +1,9 @@ + class UseVideoServerOnSessions < ActiveRecord::Migration + def self.up + execute("ALTER TABLE music_sessions ADD COLUMN use_video_conferencing_server BOOLEAN DEFAULT FALSE;") + end + + def self.down + execute("ALTER TABLE music_sessions DROP COLUMN use_video_conferencing_server;") + end + end diff --git a/ruby/lib/jam_ruby/models/active_music_session.rb b/ruby/lib/jam_ruby/models/active_music_session.rb index 5deffe6d1..c909156fe 100644 --- a/ruby/lib/jam_ruby/models/active_music_session.rb +++ b/ruby/lib/jam_ruby/models/active_music_session.rb @@ -854,6 +854,10 @@ module JamRuby music_session.can_see? user end + def use_video_conferencing_server + music_session.use_video_conferencing_server + end + def tick_track_changes self.track_changes_counter += 1 self.save!(:validate => false) @@ -979,4 +983,4 @@ module JamRuby music_session.lesson_session end end -end \ No newline at end of file +end diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb index d3bcab484..fa4ce06fa 100644 --- a/ruby/lib/jam_ruby/models/music_session.rb +++ b/ruby/lib/jam_ruby/models/music_session.rb @@ -348,6 +348,7 @@ module JamRuby new_session.session_controller = self.session_controller new_session.school_id = self.school_id new_session.is_platform_instructor = self.is_platform_instructor + new_session.use_video_conferencing_server = self.use_video_conferencing_server # copy rsvp_slots, rsvp_requests, and rsvp_requests_rsvp_slots RsvpSlot.where("music_session_id = '#{self.id}'").find_each do |slot| @@ -666,6 +667,7 @@ module JamRuby if options[:lesson_session] ms.lesson_session = options[:lesson_session] end + ms.use_video_conferencing_server = user.use_video_conferencing_server ms.save diff --git a/web/app/assets/javascripts/react-components/SessionVideoBtn.js.jsx.coffee b/web/app/assets/javascripts/react-components/SessionVideoBtn.js.jsx.coffee index f030ce4e5..1a6a735ef 100644 --- a/web/app/assets/javascripts/react-components/SessionVideoBtn.js.jsx.coffee +++ b/web/app/assets/javascripts/react-components/SessionVideoBtn.js.jsx.coffee @@ -9,8 +9,7 @@ rest = context.JK.Rest() ] useVideoConferencingServer: () -> - gon.global.use_video_conferencing_server || @state.user?.use_video_conferencing_server - + gon.global.use_video_conferencing_server || context.SessionStore.currentSession.use_video_conferencing_server onUserChanged: (userState) -> @setState({user: userState?.user}) @@ -23,8 +22,24 @@ rest = context.JK.Rest() return 'noclose' openBrowserToNewVideoServer: () -> - rest.getVideoConferencingRoomUrl(context.SessionStore.id()).done((response) => context.JK.popExternalLink(response.url)) - + canVideo = window.SessionStore.canVideo() + if canVideo + rest.getVideoConferencingRoomUrl(context.SessionStore.id()).done((response) => context.JK.popExternalLink(response.url)) + else + buttons = [] + buttons.push({name: 'CLOSE', buttonStyle: 'button-grey'}) + buttons.push({name: 'COMPARE PLANS', buttonStyle: 'button-grey', click: (() => (@openBrowserToPlanComparison()))}) + buttons.push({ + name: 'UPGRADE PLAN', + buttonStyle: 'button-orange', + click: (() => (@openBrowserToPayment())) + }) + context.JK.Banner.show({ + title: "Your Current Plan Does Not Allow Video", + html: context._.template($('#template-plan-no-video').html(), {}, { variable: 'data' }), + buttons: buttons}) + + sessionWebCam: (e) -> e.preventDefault(); @@ -58,4 +73,4 @@ rest = context.JK.Rest() VIDEO ` -}) \ No newline at end of file +}) diff --git a/web/app/assets/javascripts/scheduled_session.js.erb b/web/app/assets/javascripts/scheduled_session.js.erb index 0d4bc9093..c4cf4deeb 100644 --- a/web/app/assets/javascripts/scheduled_session.js.erb +++ b/web/app/assets/javascripts/scheduled_session.js.erb @@ -55,6 +55,8 @@ var $quickStartOpenBtn = null; var $startOrScheduledBtn = null; var $featureSessions = null; + var $useNewVideo = null; + var $useNewVideoSelect = null; // Step1 layout var $screenStep1 = null; @@ -1157,6 +1159,33 @@ function reset() { $selectedFilenames.empty(); // we need to be sure and clear out old uploaded notations on every start of create session flow + if(gon.global.use_video_conferencing_server) { + // show $useNewVideo. + $useNewVideo.css("display", "inline") + } + app.user() + .done(function(userMe) { + if(userMe.admin) { + $useNewVideo.css("display", "inline") + } + if(userMe.use_video_conferencing_server) { + console.log("select new") + $useNewVideoSelect.val("new") + } + else { + console.log("select old") + $useNewVideoSelect.val("old") + } + }) + $useNewVideoSelect.unbind('change').change(function () { + app.updateUserModel({use_video_conferencing_server: $useNewVideoSelect.val() == "new"}) + .done(function () { + console.log("updated user successfully") + }) + .fail(function () { + app.layout.notify("Unable to update your video preference. Please try again later.") + }) + }); } function beforeShow(args) { @@ -1532,6 +1561,8 @@ $quickStartOpenBtn = $screen.find('.quick-start-open') $startOrScheduledBtn = $screen.find('.start-or-schedule') $featureSessions = $screen.find('.featured-sessions tbody') + $useNewVideo = $screen.find('#video-beta') + $useNewVideoSelect = $screen.find('#video-beta-options') initializeControls(); events(); @@ -1542,4 +1573,4 @@ return this; } -})(window, jQuery); \ No newline at end of file +})(window, jQuery); diff --git a/web/app/assets/stylesheets/client/createSession.scss b/web/app/assets/stylesheets/client/createSession.scss index 4a0fbed0d..25be21077 100644 --- a/web/app/assets/stylesheets/client/createSession.scss +++ b/web/app/assets/stylesheets/client/createSession.scss @@ -96,6 +96,16 @@ margin-bottom:20px !important; } } + #video-beta { + position:relative; + //top:3px; + left:40px; + display:none; + font-size:20px; + .easydropdown-wrapper { + top:4px; + } + } table.featured-sessions { .actions { text-align:center; diff --git a/web/app/controllers/api_users_controller.rb b/web/app/controllers/api_users_controller.rb index 4ef7eb258..522c1d529 100644 --- a/web/app/controllers/api_users_controller.rb +++ b/web/app/controllers/api_users_controller.rb @@ -162,7 +162,7 @@ class ApiUsersController < ApiController @user.country = params[:country] if params.has_key?(:country) @user.musician = params[:musician] if params.has_key?(:musician) @user.update_instruments(params[:instruments].nil? ? [] : params[:instruments]) if params.has_key?(:instruments) - + @user.use_video_conferencing_server = params[:use_video_conferencing_server] if params.has_key?(:use_video_conferencing_server) # genres @user.update_genres(params[:genres].nil? ? [] : params[:genres], GenrePlayer::PROFILE) if params.has_key?(:genres) @user.update_genres(params[:virtual_band_genres].nil? ? [] : params[:virtual_band_genres], GenrePlayer::VIRTUAL_BAND) if params.has_key?(:virtual_band_genres) diff --git a/web/app/views/api_music_sessions/show.rabl b/web/app/views/api_music_sessions/show.rabl index 1dc965c2e..dd59dc95a 100644 --- a/web/app/views/api_music_sessions/show.rabl +++ b/web/app/views/api_music_sessions/show.rabl @@ -13,7 +13,7 @@ if !current_user } else - attributes :id, :name, :description, :musician_access, :approval_required, :friends_can_join, :fan_access, :fan_chat, :band_id, :user_id, :claimed_recording_initiator_id, :track_changes_counter, :max_score, :backing_track_path, :metronome_active, :jam_track_initiator_id, :jam_track_id, :music_session_id_int + attributes :id, :name, :description, :musician_access, :approval_required, :friends_can_join, :fan_access, :fan_chat, :band_id, :user_id, :claimed_recording_initiator_id, :track_changes_counter, :max_score, :backing_track_path, :metronome_active, :jam_track_initiator_id, :jam_track_id, :music_session_id_int, :use_video_conferencing_server if @on_join node :subscription do |session| @@ -179,4 +179,4 @@ else node(:bitrate) { |mount| mount.resolve_string(:bitrate) } node(:subtype) { |mount| mount.resolve_string(:subtype) } } -end \ No newline at end of file +end diff --git a/web/app/views/api_music_sessions/show_history.rabl b/web/app/views/api_music_sessions/show_history.rabl index 2b5ce02cb..7bd81e3f8 100644 --- a/web/app/views/api_music_sessions/show_history.rabl +++ b/web/app/views/api_music_sessions/show_history.rabl @@ -19,7 +19,7 @@ else attributes :id, :music_session_id, :name, :description, :musician_access, :approval_required, :fan_access, :fan_chat, :create_type, :band_id, :user_id, :genre_id, :created_at, :like_count, :comment_count, :play_count, :scheduled_duration, :language, :recurring_mode, :language_description, :scheduled_start_date, :access_description, :timezone, :timezone_id, :timezone_description, - :musician_access_description, :fan_access_description, :session_removed_at, :legal_policy, :open_rsvps, :is_unstructured_rsvp?, :friends_can_join + :musician_access_description, :fan_access_description, :session_removed_at, :legal_policy, :open_rsvps, :is_unstructured_rsvp?, :friends_can_join, :use_video_conferencing_server node :can_join do |session| session.can_join?(current_user, true) @@ -239,4 +239,4 @@ else node(:subtype) { |mount| mount.resolve_string(:subtype) } } } -end \ No newline at end of file +end diff --git a/web/app/views/clients/_scheduledSession.html.erb b/web/app/views/clients/_scheduledSession.html.erb index 4cf0b4928..fc8693900 100644 --- a/web/app/views/clients/_scheduledSession.html.erb +++ b/web/app/views/clients/_scheduledSession.html.erb @@ -22,7 +22,7 @@
-

start a session

+

start a session
BETA:

QUICK START PRIVATE

Quick start a private session now. Good for solo practice. Or invite specific friends to join you.

QUICK START PUBLIC

Quick start an open session that anyone can join. Good for meeting others, spontaneous jams.