From edebf42e73edfd46cc64be14f5fa54e093f054b2 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Fri, 31 Jan 2014 01:39:09 -0500 Subject: [PATCH] VRFS-1020 share dialog work --- db/manifest | 3 +- db/up/share_token.sql | 2 + ruby/lib/jam_ruby/models/claimed_recording.rb | 13 ++++ ruby/lib/jam_ruby/models/music_session.rb | 1 + .../jam_ruby/models/music_session_history.rb | 59 ++++++++++++------- .../stylesheets/client/shareDialog.css.scss | 9 +++ .../stylesheets/client/user_dropdown.css.scss | 1 + .../api_music_sessions_controller.rb | 4 ++ .../api_music_sessions/history_show.rabl | 19 ++++++ web/app/views/api_music_sessions/show.rabl | 2 +- web/app/views/clients/_session.html.erb | 2 +- web/app/views/clients/_shareDialog.html.erb | 7 ++- web/app/views/music_sessions/show.html.erb | 2 +- web/app/views/recordings/show.html.erb | 2 +- web/config/routes.rb | 1 + 15 files changed, 98 insertions(+), 29 deletions(-) create mode 100644 db/up/share_token.sql create mode 100644 web/app/views/api_music_sessions/history_show.rabl diff --git a/db/manifest b/db/manifest index 24dbab76d..ec3b567a2 100755 --- a/db/manifest +++ b/db/manifest @@ -95,4 +95,5 @@ ms_recording_anonymous_likes.sql ms_user_history_add_instruments.sql icecast_config_changed.sql invited_users_facebook_support.sql -first_recording_at.sql \ No newline at end of file +first_recording_at.sql +share_token.sql \ No newline at end of file diff --git a/db/up/share_token.sql b/db/up/share_token.sql new file mode 100644 index 000000000..0eb2f643f --- /dev/null +++ b/db/up/share_token.sql @@ -0,0 +1,2 @@ +alter table music_sessions_history add column share_token varchar(15); +alter table claimed_recordings add column share_token varchar(15); \ No newline at end of file diff --git a/ruby/lib/jam_ruby/models/claimed_recording.rb b/ruby/lib/jam_ruby/models/claimed_recording.rb index 6764150b5..89fb5fa3f 100644 --- a/ruby/lib/jam_ruby/models/claimed_recording.rb +++ b/ruby/lib/jam_ruby/models/claimed_recording.rb @@ -15,6 +15,10 @@ module JamRuby has_many :recorded_tracks, :through => :recording, :class_name => "JamRuby::RecordedTrack" has_many :playing_sessions, :class_name => "JamRuby::MusicSession" + before_create :generate_share_token + + SHARE_TOKEN_LENGTH = 8 + # user must own this object # params is a hash, and everything is optional def update_fields(user, params) @@ -42,5 +46,14 @@ module JamRuby self.destroy end end + + private + def generate_share_token + self.share_token = loop do + token = SecureRandom.urlsafe_base64(SHARE_TOKEN_LENGTH, false) + token.gsub!(/[^0-9A-Za-z]/, '').upcase! + break token unless MusicSessionHistory.exists?(share_token: token) + end + end end end diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb index 929da08ba..d280e4f4e 100644 --- a/ruby/lib/jam_ruby/models/music_session.rb +++ b/ruby/lib/jam_ruby/models/music_session.rb @@ -9,6 +9,7 @@ module JamRuby belongs_to :claimed_recording, :class_name => "JamRuby::ClaimedRecording", :foreign_key => "claimed_recording_id", :inverse_of => :playing_sessions belongs_to :claimed_recording_initiator, :class_name => "JamRuby::User", :inverse_of => :playing_claimed_recordings, :foreign_key => "claimed_recording_initiator_id" + has_one :music_session_history, :class_name => "JamRuby::MusicSessionHistory" has_one :mount, :class_name => "JamRuby::IcecastMount", :inverse_of => :music_session, :foreign_key => 'music_session_id' has_many :connections, :class_name => "JamRuby::Connection" diff --git a/ruby/lib/jam_ruby/models/music_session_history.rb b/ruby/lib/jam_ruby/models/music_session_history.rb index d1b41016a..c72634c5a 100644 --- a/ruby/lib/jam_ruby/models/music_session_history.rb +++ b/ruby/lib/jam_ruby/models/music_session_history.rb @@ -15,10 +15,18 @@ module JamRuby :foreign_key => :band_id, :inverse_of => :music_session_history) + belongs_to(:music_session, + :class_name => 'JamRuby::MusicSession', + :foreign_key => 'music_session_id') + has_many :music_session_user_histories, :class_name => "JamRuby::MusicSessionUserHistory", :foreign_key => "music_session_id" has_many :comments, :class_name => "JamRuby::MusicSessionComment", :foreign_key => "music_session_id" has_many :likes, :class_name => "JamRuby::MusicSessionLiker", :foreign_key => "music_session_id" + before_create :generate_share_token + + SHARE_TOKEN_LENGTH = 8 + SEPARATOR = '|' def comment_count @@ -79,11 +87,33 @@ module JamRuby .where(%Q{ music_sessions_user_history.music_session_id = '#{music_session_id}'}) end + def duration_minutes + end_time = self.session_removed_at || Time.now + (end_time - self.created_at) / 60.0 + end + + def music_session_user_histories + @msuh ||= JamRuby::MusicSessionUserHistory + .where(:music_session_id => self.music_session_id) + .order('created_at DESC') + end + + def comments + @comments ||= JamRuby::MusicSessionComment + .where(:music_session_id => self.music_session_id) + .order('created_at DESC') + end + + def likes + @likes ||= JamRuby::MusicSessionLiker + .where(:music_session_id => self.music_session_id) + end + def self.save(music_session) session_history = MusicSessionHistory.find_by_music_session_id(music_session.id) if session_history.nil? - session_history = MusicSessionHistory.new() + session_history = MusicSessionHistory.new end session_history.music_session_id = music_session.id @@ -119,26 +149,13 @@ module JamRuby hist.end_history if hist end - def duration_minutes - end_time = self.session_removed_at || Time.now - (end_time - self.created_at) / 60.0 - end - - def music_session_user_histories - @msuh ||= JamRuby::MusicSessionUserHistory - .where(:music_session_id => self.music_session_id) - .order('created_at DESC') - end - - def comments - @comments ||= JamRuby::MusicSessionComment - .where(:music_session_id => self.music_session_id) - .order('created_at DESC') - end - - def likes - @likes ||= JamRuby::MusicSessionLiker - .where(:music_session_id => self.music_session_id) + private + def generate_share_token + self.share_token = loop do + token = SecureRandom.urlsafe_base64(SHARE_TOKEN_LENGTH, false) + token.gsub!(/[^0-9A-Za-z]/, '').upcase! + break token unless MusicSessionHistory.exists?(share_token: token) + end end end diff --git a/web/app/assets/stylesheets/client/shareDialog.css.scss b/web/app/assets/stylesheets/client/shareDialog.css.scss index 39f012938..119bcef32 100644 --- a/web/app/assets/stylesheets/client/shareDialog.css.scss +++ b/web/app/assets/stylesheets/client/shareDialog.css.scss @@ -3,6 +3,15 @@ body.widgets { padding:20px; } +h3 { + font-size:20px; + font-weight:normal; +} + +.share-overlay { + +} + .widget { width:430px; height:180px; diff --git a/web/app/assets/stylesheets/client/user_dropdown.css.scss b/web/app/assets/stylesheets/client/user_dropdown.css.scss index 79096c8b8..42e8081af 100644 --- a/web/app/assets/stylesheets/client/user_dropdown.css.scss +++ b/web/app/assets/stylesheets/client/user_dropdown.css.scss @@ -9,6 +9,7 @@ #profile { float: right; height: 54px; + margin-top: 30px; text-align: right; ul { diff --git a/web/app/controllers/api_music_sessions_controller.rb b/web/app/controllers/api_music_sessions_controller.rb index cf0aad771..984443712 100644 --- a/web/app/controllers/api_music_sessions_controller.rb +++ b/web/app/controllers/api_music_sessions_controller.rb @@ -292,6 +292,10 @@ class ApiMusicSessionsController < ApiController end end + def history_show + @history = MusicSessionHistory.find_by_music_session_id(params[:id]) + end + def claimed_recording_start @music_session.claimed_recording_start(current_user, ClaimedRecording.find(params[:claimed_recording_id])) diff --git a/web/app/views/api_music_sessions/history_show.rabl b/web/app/views/api_music_sessions/history_show.rabl new file mode 100644 index 000000000..1a5f8ece7 --- /dev/null +++ b/web/app/views/api_music_sessions/history_show.rabl @@ -0,0 +1,19 @@ +object @history + +attributes :music_session_id, :description, :genres + +child(:user => :creator) { + attributes :name, :photo_url +} + +child(:band => :band) { + attributes :name, :photo_url +} + +child(:music_session_user_histories => :users) { + attributes :instruments + + child(:user => :user) { + attributes :name, :photo_url + } +} \ No newline at end of file diff --git a/web/app/views/api_music_sessions/show.rabl b/web/app/views/api_music_sessions/show.rabl index 88cc43d46..54a4b5e83 100644 --- a/web/app/views/api_music_sessions/show.rabl +++ b/web/app/views/api_music_sessions/show.rabl @@ -73,4 +73,4 @@ child({:mount => :mount}, :if => lambda { |music_session| music_session.fan_acce 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 diff --git a/web/app/views/clients/_session.html.erb b/web/app/views/clients/_session.html.erb index 82a24976a..e12b7e121 100644 --- a/web/app/views/clients/_session.html.erb +++ b/web/app/views/clients/_session.html.erb @@ -137,7 +137,7 @@ <%= render "addNewGear" %> <%= render "error" %> <%= render "sessionSettings" %> -<%= render :partial => "shareDialog", :locals => {} %> +<%= render :partial => "shareDialog" %>