VRFS-1020 share dialog work

This commit is contained in:
Brian Smith 2014-01-31 01:39:09 -05:00
parent 42930fe95e
commit edebf42e73
15 changed files with 98 additions and 29 deletions

View File

@ -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
first_recording_at.sql
share_token.sql

2
db/up/share_token.sql Normal file
View File

@ -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);

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -3,6 +3,15 @@ body.widgets {
padding:20px;
}
h3 {
font-size:20px;
font-weight:normal;
}
.share-overlay {
}
.widget {
width:430px;
height:180px;

View File

@ -9,6 +9,7 @@
#profile {
float: right;
height: 54px;
margin-top: 30px;
text-align: right;
ul {

View File

@ -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]))

View File

@ -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
}
}

View File

@ -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) }
}
}

View File

@ -137,7 +137,7 @@
<%= render "addNewGear" %>
<%= render "error" %>
<%= render "sessionSettings" %>
<%= render :partial => "shareDialog", :locals => {} %>
<%= render :partial => "shareDialog" %>
<!-- Track Template -->
<script type="text/template" id="template-session-track">

View File

@ -1,5 +1,5 @@
<!-- Share dialog -->
<div class="dialog" layout="dialog" layout-id="share-dialog" style="width:800px; height:auto;">
<div class="dialog share-overlay" layout="dialog" layout-id="share-dialog" style="width:800px; height:auto;">
<div class="content-head"><h1>share this session</h1></div>
<div class="dialog-inner">
<div class="right"> <a class="button-orange" layout-action="close">X CLOSE</a></div>
@ -19,7 +19,8 @@
</td>
<td valign="top" width="48%">
<div class="ml10">
<h3>Share a Link:</h3><br />http://jamkazam.com/TD48JKZ1<br /><br />
<h3>Share a Link:</h3><br />
<%= "#{root_url}#{share_token}" %>
<div class="right"><a class="button-orange">COPY LINK</a></div>
</div>
</td>
@ -94,7 +95,7 @@
<a href="javascript:void(0)" class="widget-playbutton" title="play"></a>
<!-- song title -->
<div class="widget-title">You Hurt Me Bad</div>
<!-- band member avatars -->
<!-- avatars -->
<div class="widget-members">
<div class="widget-avatar-small"><%= image_tag "shared/avatar_david.jpg", :alt => "" %></div>
<div class="widget-avatar-small"><%= image_tag "shared/avatar_silverfox.jpg", :alt => "" %></div>

View File

@ -78,7 +78,7 @@
<%= javascript_include_tag "web/sessions" %>
<%= render :partial => "clients/shareDialog", :locals => {:session => @music_session} %>
<%= render :partial => "clients/shareDialog", :locals => {:session => @music_session, :share_token => @music_session.share_token} %>
<script type="text/javascript">
$(function () {

View File

@ -77,7 +77,7 @@
<%= javascript_include_tag "web/recordings" %>
<%= render :partial => "clients/shareDialog", :locals => {:recording => @claimed_recording} %>
<%= render :partial => "clients/shareDialog", :locals => {:recording => @claimed_recording, :share_token => @claimed_recording.share_token} %>
<script type="text/javascript">
$(function () {

View File

@ -103,6 +103,7 @@ SampleApp::Application.routes.draw do
match '/sessions/:id/perf' => 'api_music_sessions#perf_upload', :via => :put
match '/sessions/:id/comments' => 'api_music_sessions#add_comment', :via => :post
match '/sessions/:id/likes' => 'api_music_sessions#add_like', :via => :post
match '/sessions/:id/history' => 'api_music_sessions#history_show', :via => :get
# music session tracks
match '/sessions/:id/tracks' => 'api_music_sessions#track_create', :via => :post