diff --git a/.gitignore b/.gitignore
index 8927de757..9a18ea4cb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
.idea
*~
*.swp
-HTML
\ No newline at end of file
+HTML
+.DS_Store
diff --git a/db/manifest b/db/manifest
index 496079ce6..7825af66d 100755
--- a/db/manifest
+++ b/db/manifest
@@ -91,4 +91,6 @@ music_session_constraints.sql
mixes_drop_manifest_add_retry.sql
music_sessions_unlogged.sql
integrate_icecast_into_sessions.sql
+ms_recording_anonymous_likes.sql
+ms_user_history_add_instruments.sql
icecast_config_changed.sql
\ No newline at end of file
diff --git a/db/up/ms_recording_anonymous_likes.sql b/db/up/ms_recording_anonymous_likes.sql
new file mode 100644
index 000000000..ad9e765b6
--- /dev/null
+++ b/db/up/ms_recording_anonymous_likes.sql
@@ -0,0 +1,23 @@
+alter table music_sessions_comments
+add column ip_address inet;
+
+alter table music_sessions_likers
+add column ip_address inet;
+
+alter table music_sessions_likers
+alter column liker_id drop not null;
+
+alter table recordings_comments
+add column ip_address inet;
+
+alter table recordings_likers
+add column ip_address inet;
+
+alter table recordings_likers
+alter column liker_id drop not null;
+
+alter table recordings_plays
+add column ip_address inet;
+
+alter table recordings_plays
+alter column player_id drop not null;
diff --git a/db/up/ms_user_history_add_instruments.sql b/db/up/ms_user_history_add_instruments.sql
new file mode 100644
index 000000000..67737b75a
--- /dev/null
+++ b/db/up/ms_user_history_add_instruments.sql
@@ -0,0 +1 @@
+alter table music_sessions_user_history add column instruments varchar(255);
\ No newline at end of file
diff --git a/db/up/music_session_constraints.sql b/db/up/music_session_constraints.sql
index 72f2bccd4..f070bc571 100644
--- a/db/up/music_session_constraints.sql
+++ b/db/up/music_session_constraints.sql
@@ -6,4 +6,4 @@ ON UPDATE NO ACTION ON DELETE CASCADE;
alter table music_sessions_likers drop constraint music_sessions_likers_music_session_id_fkey;
alter table music_sessions_likers add constraint ms_likers_ms_history_fkey foreign key (music_session_id)
references music_sessions_history(music_session_id) match simple
-ON UPDATE NO ACTION ON DELETE CASCADE;
+ON UPDATE NO ACTION ON DELETE CASCADE;
\ No newline at end of file
diff --git a/pb/src/client_container.proto b/pb/src/client_container.proto
index c6669a824..ee046738a 100644
--- a/pb/src/client_container.proto
+++ b/pb/src/client_container.proto
@@ -109,7 +109,6 @@ message ClientMessage {
optional SessionJoin session_join = 190;
optional SessionDepart session_depart = 195;
optional MusicianSessionJoin musician_session_join = 196;
- optional BandSessionJoin band_session_join = 197;
// recording notifications
optional MusicianRecordingSaved musician_recording_saved = 200;
diff --git a/ruby/lib/jam_ruby/connection_manager.rb b/ruby/lib/jam_ruby/connection_manager.rb
index 5a13351c5..d747d7d9e 100644
--- a/ruby/lib/jam_ruby/connection_manager.rb
+++ b/ruby/lib/jam_ruby/connection_manager.rb
@@ -311,7 +311,7 @@ SQL
else
blk.call(db_conn, connection) unless blk.nil?
user.update_progression_field(:first_music_session_at)
- MusicSessionUserHistory.save(music_session_id, user_id, client_id)
+ MusicSessionUserHistory.save(music_session_id, user_id, client_id, tracks)
end
end
diff --git a/ruby/lib/jam_ruby/models/band.rb b/ruby/lib/jam_ruby/models/band.rb
index a0a2b4b35..1ae5b26a0 100644
--- a/ruby/lib/jam_ruby/models/band.rb
+++ b/ruby/lib/jam_ruby/models/band.rb
@@ -62,6 +62,13 @@ module JamRuby
return self.music_sessions.size
end
+ def recent_history
+ recordings = ClaimedRecording.joins(:recordings).where(:recordings => {:band_id => "#{self.id}"}).limit(10)
+ msh = MusicSessionHistory.where(:band_id => self.id).limit(10)
+ recordings.concat(msh)
+ recordings.sort! {|a,b| b.created_at <=> a.created_at}.first(5)
+ end
+
def location
loc = self.city.blank? ? '' : self.city
loc = loc.blank? ? self.state : "#{loc}, #{self.state}" unless self.state.blank?
diff --git a/ruby/lib/jam_ruby/models/music_session_comment.rb b/ruby/lib/jam_ruby/models/music_session_comment.rb
index cda5589bd..71fa8ae9a 100644
--- a/ruby/lib/jam_ruby/models/music_session_comment.rb
+++ b/ruby/lib/jam_ruby/models/music_session_comment.rb
@@ -5,6 +5,8 @@ module JamRuby
self.primary_key = 'id'
+ default_scope order('created_at DESC')
+
belongs_to :music_session, :class_name => "JamRuby::MusicSessionHistory", :foreign_key => "music_session_id"
belongs_to :user, :class_name => "JamRuby::User", :foreign_key => "creator_id"
diff --git a/ruby/lib/jam_ruby/models/music_session_history.rb b/ruby/lib/jam_ruby/models/music_session_history.rb
index 1a6fd8418..7b552c08b 100644
--- a/ruby/lib/jam_ruby/models/music_session_history.rb
+++ b/ruby/lib/jam_ruby/models/music_session_history.rb
@@ -15,10 +15,11 @@ module JamRuby
:foreign_key => :band_id,
:inverse_of => :music_session_history)
+ has_many :music_session_user_history, :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"
- GENRE_SEPARATOR = '|'
+ SEPARATOR = '|'
def comment_count
self.comments.size
@@ -28,6 +29,21 @@ module JamRuby
self.likes.size
end
+ def tracks
+ tracks = []
+ self.music_session_user_history.each do |msuh|
+ user = User.find(msuh.user_id)
+ instruments = msuh.instruments.split(SEPARATOR)
+ instruments.each do |instrument|
+ t = Track.new
+ t.user = user
+ t.instrument_id = instrument
+ tracks << t
+ end
+ end
+ tracks
+ end
+
def self.index(current_user, user_id, band_id = nil, genre = nil)
hide_private = false
if current_user.id != user_id
@@ -74,7 +90,7 @@ module JamRuby
session_history.description = music_session.description unless music_session.description.nil?
session_history.user_id = music_session.creator.id
session_history.band_id = music_session.band.id unless music_session.band.nil?
- session_history.genres = music_session.genres.map { |g| g.id }.join GENRE_SEPARATOR
+ session_history.genres = music_session.genres.map { |g| g.id }.join SEPARATOR
session_history.save!
end
diff --git a/ruby/lib/jam_ruby/models/music_session_user_history.rb b/ruby/lib/jam_ruby/models/music_session_user_history.rb
index 4e7a294b9..5939f8bff 100644
--- a/ruby/lib/jam_ruby/models/music_session_user_history.rb
+++ b/ruby/lib/jam_ruby/models/music_session_user_history.rb
@@ -12,6 +12,10 @@ module JamRuby
:foreign_key => "user_id",
:inverse_of => :music_session_user_histories)
+ belongs_to(:music_session_history,
+ :class_name => "MusicSessionHistory",
+ :foreign_key => "music_session_id")
+
validates_inclusion_of :rating, :in => 0..2, :allow_nil => true
after_save :track_user_progression
@@ -23,7 +27,7 @@ module JamRuby
@perfdata ||= JamRuby::MusicSessionPerfData.find_by_client_id(self.client_id)
end
- def self.save(music_session_id, user_id, client_id)
+ def self.save(music_session_id, user_id, client_id, tracks)
return true if 0 < self.where(:music_session_id => music_session_id,
:user_id => user_id,
:client_id => client_id).count
@@ -31,6 +35,7 @@ module JamRuby
session_user_history.music_session_id = music_session_id
session_user_history.user_id = user_id
session_user_history.client_id = client_id
+ session_user_history.instruments = tracks.map {|t| t[:instrument_id]}.join("|")
session_user_history.save
end
diff --git a/ruby/lib/jam_ruby/models/recording_comment.rb b/ruby/lib/jam_ruby/models/recording_comment.rb
index 8b7e5ae62..5747da52f 100644
--- a/ruby/lib/jam_ruby/models/recording_comment.rb
+++ b/ruby/lib/jam_ruby/models/recording_comment.rb
@@ -5,6 +5,8 @@ module JamRuby
self.primary_key = 'id'
+ default_scope order('created_at DESC')
+
belongs_to :recording, :class_name => "JamRuby::Recording", :foreign_key => "recording_id"
belongs_to :user, :class_name => "JamRuby::User", :foreign_key => "creator_id"
diff --git a/ruby/lib/jam_ruby/models/track.rb b/ruby/lib/jam_ruby/models/track.rb
index 76b428b09..21f45c40f 100644
--- a/ruby/lib/jam_ruby/models/track.rb
+++ b/ruby/lib/jam_ruby/models/track.rb
@@ -14,6 +14,10 @@ module JamRuby
validates :sound, :inclusion => {:in => SOUND}
+ def user
+ self.connection.user
+ end
+
def self.index(current_user, music_session_id)
query = Track
.joins(
@@ -47,6 +51,10 @@ module JamRuby
Track.transaction do
connection = Connection.find_by_client_id!(clientId)
+ # each time tracks are synced we have to update the entry in music_sessions_user_history
+ msh = MusicSessionUserHistory.find_by_client_id!(clientId)
+ instruments = []
+
if tracks.length == 0
connection.tracks.delete_all
else
@@ -62,9 +70,11 @@ module JamRuby
to_delete.delete(connection_track)
to_add.delete(track)
# don't update connection_id or client_id; it's unknown what would happen if these changed mid-session
- connection_track.instrument = Instrument.find(track[:instrument_id])
+ connection_track.instrument_id = track[:instrument_id]
connection_track.sound = track[:sound]
connection_track.client_track_id = track[:client_track_id]
+
+ instruments << track[:instrument_id]
if connection_track.save
result.push(connection_track)
next
@@ -76,10 +86,15 @@ module JamRuby
end
end
+ msh.instruments = instruments.join("|")
+ if !msh.save
+ raise ActiveRecord::Rollback
+ end
+
to_add.each do |track|
connection_track = Track.new
connection_track.connection = connection
- connection_track.instrument = Instrument.find(track[:instrument_id])
+ connection_track.instrument_id = track[:instrument_id]
connection_track.sound = track[:sound]
connection_track.client_track_id = track[:client_track_id]
if connection_track.save
@@ -90,7 +105,7 @@ module JamRuby
end
end
- to_delete.each do| delete_me |
+ to_delete.each do |delete_me|
delete_me.delete
end
end
@@ -101,7 +116,7 @@ module JamRuby
def self.save(id, connection_id, instrument_id, sound, client_track_id)
if id.nil?
- track = Track.new()
+ track = Track.new
track.connection_id = connection_id
else
track = Track.find(id)
diff --git a/ruby/lib/jam_ruby/models/user.rb b/ruby/lib/jam_ruby/models/user.rb
index f1b703f10..17c5cfc47 100644
--- a/ruby/lib/jam_ruby/models/user.rb
+++ b/ruby/lib/jam_ruby/models/user.rb
@@ -288,6 +288,13 @@ module JamRuby
def session_count
return self.music_sessions.size
end
+
+ def recent_history
+ recordings = ClaimedRecording.joins(:recording).where(:recordings => {:owner_id => "#{self.id}"}).limit(10)
+ msh = MusicSessionHistory.where(:user_id => self.id).limit(10)
+ recordings.concat(msh)
+ recordings.sort! {|a,b| b.created_at <=> a.created_at}.first(5)
+ end
def confirm_email!
self.email_confirmed = true
diff --git a/ruby/lib/jam_ruby/resque/icecast_config_writer.rb b/ruby/lib/jam_ruby/resque/icecast_config_writer.rb
index 12868ac17..bbecffa29 100644
--- a/ruby/lib/jam_ruby/resque/icecast_config_writer.rb
+++ b/ruby/lib/jam_ruby/resque/icecast_config_writer.rb
@@ -53,7 +53,7 @@ module JamRuby
def validate
raise "icecast_server_id not spceified" unless icecast_server_id
- raise "queue routing mismatch error. requested icecast_server_id: #{icecast_server_id}, configured icceast_server_id: #{APP_CONFIG.icecast_server_id}" unless icecast_server_id == APP_CONFIG.icecast_server_id
+ raise "queue routing mismatch error. requested icecast_server_id: #{icecast_server_id}, configured icecast_server_id: #{APP_CONFIG.icecast_server_id}" unless icecast_server_id == APP_CONFIG.icecast_server_id
end
def execute(cmd)
diff --git a/ruby/spec/jam_ruby/resque/icecast_config_worker_spec.rb b/ruby/spec/jam_ruby/resque/icecast_config_worker_spec.rb
index 3c5de1e7d..8fc5ffcec 100644
--- a/ruby/spec/jam_ruby/resque/icecast_config_worker_spec.rb
+++ b/ruby/spec/jam_ruby/resque/icecast_config_worker_spec.rb
@@ -14,7 +14,7 @@ describe IcecastConfigWriter do
it "no files specified" do
worker.icecast_server_id = 'something'
- expect { worker.validate }.to raise_error("queue routing mismatch error")
+ expect { worker.validate }.to raise_error("queue routing mismatch error. requested icecast_server_id: #{worker.icecast_server_id}, configured icecast_server_id: #{APP_CONFIG.icecast_server_id}")
end
it "succeeds" do
diff --git a/web/app/assets/images/content/avatar_band1.jpg b/web/app/assets/images/content/avatar_band1.jpg
new file mode 100644
index 000000000..340ae0955
Binary files /dev/null and b/web/app/assets/images/content/avatar_band1.jpg differ
diff --git a/web/app/assets/images/content/avatar_band2.jpg b/web/app/assets/images/content/avatar_band2.jpg
new file mode 100644
index 000000000..a3f1e82b2
Binary files /dev/null and b/web/app/assets/images/content/avatar_band2.jpg differ
diff --git a/web/app/assets/images/content/avatar_band3.jpg b/web/app/assets/images/content/avatar_band3.jpg
new file mode 100644
index 000000000..5b950bd8c
Binary files /dev/null and b/web/app/assets/images/content/avatar_band3.jpg differ
diff --git a/web/app/assets/images/content/avatar_band4.jpg b/web/app/assets/images/content/avatar_band4.jpg
new file mode 100644
index 000000000..125009752
Binary files /dev/null and b/web/app/assets/images/content/avatar_band4.jpg differ
diff --git a/web/app/assets/images/content/avatar_band5.jpg b/web/app/assets/images/content/avatar_band5.jpg
new file mode 100644
index 000000000..dc22689bb
Binary files /dev/null and b/web/app/assets/images/content/avatar_band5.jpg differ
diff --git a/web/app/assets/images/content/icon_arrow.png b/web/app/assets/images/content/icon_arrow.png
new file mode 100644
index 000000000..e8685069d
Binary files /dev/null and b/web/app/assets/images/content/icon_arrow.png differ
diff --git a/web/app/assets/images/content/icon_comment.png b/web/app/assets/images/content/icon_comment.png
new file mode 100644
index 000000000..57ceb1035
Binary files /dev/null and b/web/app/assets/images/content/icon_comment.png differ
diff --git a/web/app/assets/images/content/icon_instrument_acoustic24.png b/web/app/assets/images/content/icon_instrument_acoustic_guitar24.png
similarity index 100%
rename from web/app/assets/images/content/icon_instrument_acoustic24.png
rename to web/app/assets/images/content/icon_instrument_acoustic_guitar24.png
diff --git a/web/app/assets/images/content/icon_instrument_acoustic45.png b/web/app/assets/images/content/icon_instrument_acoustic_guitar45.png
similarity index 100%
rename from web/app/assets/images/content/icon_instrument_acoustic45.png
rename to web/app/assets/images/content/icon_instrument_acoustic_guitar45.png
diff --git a/web/app/assets/images/content/icon_instrument_bass24.png b/web/app/assets/images/content/icon_instrument_bass_guitar24.png
similarity index 100%
rename from web/app/assets/images/content/icon_instrument_bass24.png
rename to web/app/assets/images/content/icon_instrument_bass_guitar24.png
diff --git a/web/app/assets/images/content/icon_instrument_bass45.png b/web/app/assets/images/content/icon_instrument_bass_guitar45.png
similarity index 100%
rename from web/app/assets/images/content/icon_instrument_bass45.png
rename to web/app/assets/images/content/icon_instrument_bass_guitar45.png
diff --git a/web/app/assets/images/content/icon_instrument_guitar24.png b/web/app/assets/images/content/icon_instrument_electric_guitar24.png
similarity index 100%
rename from web/app/assets/images/content/icon_instrument_guitar24.png
rename to web/app/assets/images/content/icon_instrument_electric_guitar24.png
diff --git a/web/app/assets/images/content/icon_instrument_guitar45.png b/web/app/assets/images/content/icon_instrument_electric_guitar45.png
similarity index 100%
rename from web/app/assets/images/content/icon_instrument_guitar45.png
rename to web/app/assets/images/content/icon_instrument_electric_guitar45.png
diff --git a/web/app/assets/images/content/icon_instrument_frenchhorn24.png b/web/app/assets/images/content/icon_instrument_french_horn24.png
similarity index 100%
rename from web/app/assets/images/content/icon_instrument_frenchhorn24.png
rename to web/app/assets/images/content/icon_instrument_french_horn24.png
diff --git a/web/app/assets/images/content/icon_instrument_frenchhorn45.png b/web/app/assets/images/content/icon_instrument_french_horn45.png
similarity index 100%
rename from web/app/assets/images/content/icon_instrument_frenchhorn45.png
rename to web/app/assets/images/content/icon_instrument_french_horn45.png
diff --git a/web/app/assets/images/content/icon_like.png b/web/app/assets/images/content/icon_like.png
new file mode 100644
index 000000000..9ec7ebb66
Binary files /dev/null and b/web/app/assets/images/content/icon_like.png differ
diff --git a/web/app/assets/images/shared/icon_accordion_256.png b/web/app/assets/images/shared/icon_accordion_256.png
new file mode 100644
index 000000000..8b3748449
Binary files /dev/null and b/web/app/assets/images/shared/icon_accordion_256.png differ
diff --git a/web/app/assets/images/shared/icon_acoustic_256.png b/web/app/assets/images/shared/icon_acoustic_256.png
new file mode 100644
index 000000000..661ce97ef
Binary files /dev/null and b/web/app/assets/images/shared/icon_acoustic_256.png differ
diff --git a/web/app/assets/images/shared/icon_banjo_256.png b/web/app/assets/images/shared/icon_banjo_256.png
new file mode 100644
index 000000000..e04fc8e38
Binary files /dev/null and b/web/app/assets/images/shared/icon_banjo_256.png differ
diff --git a/web/app/assets/images/shared/icon_bass_256.png b/web/app/assets/images/shared/icon_bass_256.png
new file mode 100644
index 000000000..756018463
Binary files /dev/null and b/web/app/assets/images/shared/icon_bass_256.png differ
diff --git a/web/app/assets/images/shared/icon_cello_256.png b/web/app/assets/images/shared/icon_cello_256.png
new file mode 100644
index 000000000..c5373a215
Binary files /dev/null and b/web/app/assets/images/shared/icon_cello_256.png differ
diff --git a/web/app/assets/images/shared/icon_clarinet_256.png b/web/app/assets/images/shared/icon_clarinet_256.png
new file mode 100644
index 000000000..195ae5654
Binary files /dev/null and b/web/app/assets/images/shared/icon_clarinet_256.png differ
diff --git a/web/app/assets/images/shared/icon_computer_256.png b/web/app/assets/images/shared/icon_computer_256.png
new file mode 100644
index 000000000..874f12d3f
Binary files /dev/null and b/web/app/assets/images/shared/icon_computer_256.png differ
diff --git a/web/app/assets/images/shared/icon_drums_256.png b/web/app/assets/images/shared/icon_drums_256.png
new file mode 100644
index 000000000..4bd3e1c8e
Binary files /dev/null and b/web/app/assets/images/shared/icon_drums_256.png differ
diff --git a/web/app/assets/images/shared/icon_euphonium_256.png b/web/app/assets/images/shared/icon_euphonium_256.png
new file mode 100644
index 000000000..59f790c05
Binary files /dev/null and b/web/app/assets/images/shared/icon_euphonium_256.png differ
diff --git a/web/app/assets/images/shared/icon_flute_256.png b/web/app/assets/images/shared/icon_flute_256.png
new file mode 100644
index 000000000..5da05ed9b
Binary files /dev/null and b/web/app/assets/images/shared/icon_flute_256.png differ
diff --git a/web/app/assets/images/shared/icon_frenchhorn_256.png b/web/app/assets/images/shared/icon_frenchhorn_256.png
new file mode 100644
index 000000000..e0b077e75
Binary files /dev/null and b/web/app/assets/images/shared/icon_frenchhorn_256.png differ
diff --git a/web/app/assets/images/shared/icon_guitar_256.png b/web/app/assets/images/shared/icon_guitar_256.png
new file mode 100644
index 000000000..3ea207b74
Binary files /dev/null and b/web/app/assets/images/shared/icon_guitar_256.png differ
diff --git a/web/app/assets/images/shared/icon_harmonica_256.png b/web/app/assets/images/shared/icon_harmonica_256.png
new file mode 100644
index 000000000..abd48fa42
Binary files /dev/null and b/web/app/assets/images/shared/icon_harmonica_256.png differ
diff --git a/web/app/assets/images/shared/icon_keyboard_256.png b/web/app/assets/images/shared/icon_keyboard_256.png
new file mode 100644
index 000000000..b2f63670f
Binary files /dev/null and b/web/app/assets/images/shared/icon_keyboard_256.png differ
diff --git a/web/app/assets/images/shared/icon_mandolin_256.png b/web/app/assets/images/shared/icon_mandolin_256.png
new file mode 100644
index 000000000..e2fac153d
Binary files /dev/null and b/web/app/assets/images/shared/icon_mandolin_256.png differ
diff --git a/web/app/assets/images/shared/icon_oboe_256.png b/web/app/assets/images/shared/icon_oboe_256.png
new file mode 100644
index 000000000..4b198febc
Binary files /dev/null and b/web/app/assets/images/shared/icon_oboe_256.png differ
diff --git a/web/app/assets/images/shared/icon_other_256.png b/web/app/assets/images/shared/icon_other_256.png
new file mode 100644
index 000000000..e5163cdc8
Binary files /dev/null and b/web/app/assets/images/shared/icon_other_256.png differ
diff --git a/web/app/assets/images/shared/icon_saxophone_256.png b/web/app/assets/images/shared/icon_saxophone_256.png
new file mode 100644
index 000000000..2503c212a
Binary files /dev/null and b/web/app/assets/images/shared/icon_saxophone_256.png differ
diff --git a/web/app/assets/images/shared/icon_trombone_256.png b/web/app/assets/images/shared/icon_trombone_256.png
new file mode 100644
index 000000000..b143f8d9d
Binary files /dev/null and b/web/app/assets/images/shared/icon_trombone_256.png differ
diff --git a/web/app/assets/images/shared/icon_trumpet_256.png b/web/app/assets/images/shared/icon_trumpet_256.png
new file mode 100644
index 000000000..5c90af5cc
Binary files /dev/null and b/web/app/assets/images/shared/icon_trumpet_256.png differ
diff --git a/web/app/assets/images/shared/icon_tuba_256.png b/web/app/assets/images/shared/icon_tuba_256.png
new file mode 100644
index 000000000..551ea8e60
Binary files /dev/null and b/web/app/assets/images/shared/icon_tuba_256.png differ
diff --git a/web/app/assets/images/shared/icon_ukelele_256.png b/web/app/assets/images/shared/icon_ukelele_256.png
new file mode 100644
index 000000000..3c084ebb0
Binary files /dev/null and b/web/app/assets/images/shared/icon_ukelele_256.png differ
diff --git a/web/app/assets/images/shared/icon_viola_256.png b/web/app/assets/images/shared/icon_viola_256.png
new file mode 100644
index 000000000..9f2f94969
Binary files /dev/null and b/web/app/assets/images/shared/icon_viola_256.png differ
diff --git a/web/app/assets/images/shared/icon_violin_256.png b/web/app/assets/images/shared/icon_violin_256.png
new file mode 100644
index 000000000..5c64554a8
Binary files /dev/null and b/web/app/assets/images/shared/icon_violin_256.png differ
diff --git a/web/app/assets/images/shared/icon_vocals_256.png b/web/app/assets/images/shared/icon_vocals_256.png
new file mode 100644
index 000000000..89cd3e558
Binary files /dev/null and b/web/app/assets/images/shared/icon_vocals_256.png differ
diff --git a/web/app/assets/images/shared/jk_logo_small.png b/web/app/assets/images/shared/jk_logo_small.png
new file mode 100644
index 000000000..5951793c8
Binary files /dev/null and b/web/app/assets/images/shared/jk_logo_small.png differ
diff --git a/web/app/assets/images/shared/jk_logo_small_fb.png b/web/app/assets/images/shared/jk_logo_small_fb.png
new file mode 100644
index 000000000..6049599fe
Binary files /dev/null and b/web/app/assets/images/shared/jk_logo_small_fb.png differ
diff --git a/web/app/assets/images/shared/pause_button.png b/web/app/assets/images/shared/pause_button.png
new file mode 100644
index 000000000..112881f0b
Binary files /dev/null and b/web/app/assets/images/shared/pause_button.png differ
diff --git a/web/app/assets/images/shared/play_button.png b/web/app/assets/images/shared/play_button.png
new file mode 100644
index 000000000..ea4b3d1d1
Binary files /dev/null and b/web/app/assets/images/shared/play_button.png differ
diff --git a/web/app/assets/javascripts/findMusician.js b/web/app/assets/javascripts/findMusician.js
index 52a44c077..3599826ed 100644
--- a/web/app/assets/javascripts/findMusician.js
+++ b/web/app/assets/javascripts/findMusician.js
@@ -98,7 +98,7 @@
if (mm['instruments'][jj].instrument_id in instrument_logo_map) {
instr = instrument_logo_map[mm['instruments'][jj].instrument_id];
}
- instr_logos += '
';
+ instr_logos += '
';
}
follows = '';
followVals = {};
diff --git a/web/app/assets/javascripts/session.js b/web/app/assets/javascripts/session.js
index e017d1de6..d85a15b30 100644
--- a/web/app/assets/javascripts/session.js
+++ b/web/app/assets/javascripts/session.js
@@ -1319,6 +1319,7 @@
configureTrackDialog.showVoiceChatPanel(true);
configureTrackDialog.showMusicAudioPanel(true);
});
+
$('#close-playback-recording').on('click', closeRecording);
$(playbackControls)
.on('pause', onPause)
diff --git a/web/app/assets/javascripts/shareDialog.js b/web/app/assets/javascripts/shareDialog.js
new file mode 100644
index 000000000..ddf0640ce
--- /dev/null
+++ b/web/app/assets/javascripts/shareDialog.js
@@ -0,0 +1,102 @@
+(function(context,$) {
+
+ "use strict";
+ context.JK = context.JK || {};
+ context.JK.ShareDialog = function(app) {
+ var logger = context.JK.logger;
+ var rest = context.JK.Rest();
+
+ function registerEvents(onOff) {
+
+ }
+
+ /*function showEmailDialog() {
+ $('#invitation-dialog').show();
+ $('#invitation-textarea-container').show();
+ $('#invitation-checkbox-container').hide();
+ $('#btn-send-invitation').show();
+ $('#btn-next-invitation').hide();
+ clearTextFields();
+ app.layout.showDialog('inviteUsers')
+ }
+
+ function showGoogleDialog() {
+ $('#invitation-dialog').show();
+ $('#invitation-textarea-container').hide();
+ $('#invitation-checkbox-container').show();
+ $('#btn-send-invitation').hide();
+ $('#btn-next-invitation').show();
+ clearTextFields();
+
+ app.layout.showDialog('inviteUsers')
+
+ $('#invitation-checkboxes').html('
Loading your contacts...
');
+ window._oauth_callback = function() {
+ window._oauth_win.close();
+ window._oauth_win = null;
+ window._oauth_callback = null;
+ $.ajax({
+ type: "GET",
+ url: "/gmail_contacts",
+ success: function(response) {
+ $('#invitation-checkboxes').html('');
+ for (var i in response) {
+ $('#invitation-checkboxes').append("");
+ }
+
+ $('.invitation-checkbox').change(function() {
+ var checkedBoxes = $('.invitation-checkbox:checkbox:checked');
+ var emails = '';
+ for (var i = 0; i < checkedBoxes.length; i++) {
+ emails += $(checkedBoxes[i]).data('email') + ', ';
+ }
+ emails = emails.replace(/, $/, '');
+ // track how many of these came from google
+ $('#txt-emails').val(emails).data('google_invite_count', checkedBoxes.length);
+ });
+ },
+ error: function() {
+ $('#invitation-checkboxes').html("Load failed!");
+ }
+ });
+
+ };
+ window._oauth_win = window.open("/auth/google_login", "_blank", "height=500,width=500,menubar=no,resizable=no,status=no");
+ }
+
+ function showFacebookDialog() {
+ window._oauth_callback = function() {
+ window._oauth_win.close();
+ window._oauth_win = null;
+ window._oauth_callback = null;
+ };
+ window._oauth_win = window.open("/auth/facebook_login", "_blank", "height=500,width=500,menubar=no,resizable=no,status=no");
+ }*/
+
+ function clearTextFields() {
+
+ }
+
+ function beforeShow() {
+ registerEvents(true);
+ }
+
+ function afterHide() {
+ registerEvents(false);
+ }
+
+ function initialize(){
+ var dialogBindings = {
+ 'beforeShow' : beforeShow,
+ 'afterHide': afterHide
+ };
+
+ app.bindDialog('shareSessionRecording', dialogBindings);
+ };
+
+
+ this.initialize = initialize;
+ }
+
+ return this;
+})(window,jQuery);
\ No newline at end of file
diff --git a/web/app/assets/javascripts/user_dropdown.js b/web/app/assets/javascripts/user_dropdown.js
index 71d700f94..b003f2d76 100644
--- a/web/app/assets/javascripts/user_dropdown.js
+++ b/web/app/assets/javascripts/user_dropdown.js
@@ -71,6 +71,7 @@
// initially show avatar
function showAvatar() {
var photoUrl = context.JK.resolveAvatarUrl(userMe.photo_url);
+ logger.debug("photoUrl=" + photoUrl);
$('#header-avatar').attr('src', photoUrl);
}
diff --git a/web/app/assets/javascripts/utils.js b/web/app/assets/javascripts/utils.js
index 030e94dfb..1fe7623c8 100644
--- a/web/app/assets/javascripts/utils.js
+++ b/web/app/assets/javascripts/utils.js
@@ -42,18 +42,18 @@
// available, and allowing the browser to resize offers better quality.
var icon_map_base = {
"accordion":"accordion",
- "acoustic guitar":"acoustic",
+ "acoustic guitar":"acoustic_guitar",
"banjo":"banjo",
- "bass guitar":"bass",
+ "bass guitar":"bass_guitar",
"cello":"cello",
"clarinet":"clarinet",
"computer":"computer",
"default":"default",
"drums":"drums",
- "electric guitar":"guitar",
+ "electric guitar":"electric_guitar",
"euphonium":"euphonium",
"flute":"flute",
- "french horn":"frenchhorn",
+ "french horn":"french_horn",
"harmonica":"harmonica",
"keyboard":"keyboard",
"mandolin":"mandolin",
diff --git a/web/app/assets/javascripts/web/recordings.js b/web/app/assets/javascripts/web/recordings.js
new file mode 100644
index 000000000..2ab8ba2bf
--- /dev/null
+++ b/web/app/assets/javascripts/web/recordings.js
@@ -0,0 +1,10 @@
+$(function() {
+
+ function like() {
+
+ }
+
+ // search click handler
+ $('#btnlike').click(like);
+
+});
\ No newline at end of file
diff --git a/web/app/assets/javascripts/web/sessions.js b/web/app/assets/javascripts/web/sessions.js
new file mode 100644
index 000000000..2ab8ba2bf
--- /dev/null
+++ b/web/app/assets/javascripts/web/sessions.js
@@ -0,0 +1,10 @@
+$(function() {
+
+ function like() {
+
+ }
+
+ // search click handler
+ $('#btnlike').click(like);
+
+});
\ No newline at end of file
diff --git a/web/app/assets/javascripts/web/web.js b/web/app/assets/javascripts/web/web.js
index d5407b2fe..0cde1c7d7 100644
--- a/web/app/assets/javascripts/web/web.js
+++ b/web/app/assets/javascripts/web/web.js
@@ -6,6 +6,7 @@
//= require AAC_underscore
//= require globals
//= require invitationDialog
+//= require shareDialog
//= require layout
//= require user_dropdown
//= require jamkazam
@@ -15,4 +16,6 @@
//= require landing/init
//= require landing/signup
//= require web/downloads
-//= require web/congratulations
\ No newline at end of file
+//= require web/congratulations
+//= require web/sessions
+//= require web/recordings
diff --git a/web/app/assets/stylesheets/client/client.css b/web/app/assets/stylesheets/client/client.css
index a852d46bf..57f1af430 100644
--- a/web/app/assets/stylesheets/client/client.css
+++ b/web/app/assets/stylesheets/client/client.css
@@ -32,6 +32,7 @@
*= require ./search
*= require ./ftue
*= require ./invitationDialog
+ *= require ./shareDialog
*= require ./recordingFinishedDialog
*= require ./localRecordingsDialog
*= require ./createSession
diff --git a/web/app/assets/stylesheets/client/musician.css.scss b/web/app/assets/stylesheets/client/musician.css.scss
index b9e47e290..821b354cc 100644
--- a/web/app/assets/stylesheets/client/musician.css.scss
+++ b/web/app/assets/stylesheets/client/musician.css.scss
@@ -34,8 +34,30 @@
padding-top: 5px;
padding-right: 5px;
padding-left: 5px;
-}
-
-.musician-following {
- overflow: auto;
+
+ #result_instruments {
+ font-weight: normal;
+ > img {
+ margin-right: 4px;
+ height:24px;
+ width:24px;
+ }
+ }
+ .result-name {
+ font-size: 12px;
+ font-weight: bold;
+ margin-bottom: 2px;
+ }
+ .stats {
+ margin-top: 4px;
+ img {
+ vertical-align: middle;
+ }
+ }
+ .lcol {
+ width: 148px;
+ }
+ table.musicians {
+ margin-top:12px;
+ }
}
diff --git a/web/app/assets/stylesheets/client/screen_common.css.scss b/web/app/assets/stylesheets/client/screen_common.css.scss
index 98fd15a4b..0a986912d 100644
--- a/web/app/assets/stylesheets/client/screen_common.css.scss
+++ b/web/app/assets/stylesheets/client/screen_common.css.scss
@@ -169,10 +169,13 @@ a {
display:inline-block;
}
-small {
- font-size:11px;
+small, .small {
+ font-size:11px;
}
+.bold {
+ font-weight:bold;
+}
.button-grey {
margin:0px 8px 0px 8px;
background-color:#666;
@@ -207,6 +210,11 @@ small {
text-decoration:none;
}
+.smallbutton {
+ font-size:10px;
+ padding:2px 8px;
+}
+
.button-orange:hover {
background-color:#f16750;
color:#FFF;
@@ -233,161 +241,99 @@ a img {
.clearall {
clear:both;
}
-
-.left {
- float:left;
+.clearleft {
+ clear:left;
}
-.right {
- float:right;
-}
+.f8 {font-size:8px !important}
+.f9 {font-size:9px !important}
+.f10 {font-size:10px !important}
+.f11 {font-size:11px !important}
+.f12 {font-size:12px !important}
+.f13 {font-size:13px !important}
+.f14 {font-size:14px !important}
+.f15 {font-size:15px !important}
+.f16 {font-size:16px !important}
+.f17 {font-size:17px !important}
+.f18 {font-size:18px !important}
+.f19 {font-size:19px !important}
+.f20 {font-size:20px !important}
-.f8 {
- font-size: 8px !important;
-}
+.m0 {margin: 0 !important;}
-.f9 {
- font-size: 9px !important;
-}
+.mr5 {margin-right:5px;}
+.mr10 {margin-right:10px;}
+.mr20 {margin-right:20px;}
+.mr30 {margin-right:30px;}
+.mr35 {margin-right:35px;}
+.mr40 {margin-right:40px;}
+.mr120 {margin-right:120px;}
-.f10 {
- font-size: 10px !important;
-}
+.ml5 {margin-left:5px;}
+.ml10 {margin-left:10px;}
+.ml20 {margin-left:20px;}
+.ml25 {margin-left:25px;}
+.ml30 {margin-left:30px;}
+.ml35 {margin-left:35px;}
+.ml45 {margin-left:45px;}
-.f11 {
- font-size: 11px !important;
-}
+.mt5 {margin-top:5px;}
+.mt10 {margin-top:10px;}
+.mt15 {margin-top:15px;}
+.mt20 {margin-top:20px;}
+.mt25 {margin-top:25px;}
+.mt30 {margin-top:30px;}
+.mt35 {margin-top:35px;}
+.mt40 {margin-top:40px;}
+.mt45 {margin-top:45px;}
+.mt50 {margin-top:50px;}
+.mt55 {margin-top:55px;}
+.mt65 {margin-top:65px;}
-.f12 {
- font-size: 12px !important;
-}
+.mb5 {margin-bottom:5px;}
+.mb15 {margin-bottom:15px;}
-.f13 {
- font-size: 13px !important;
-}
+.w0 {width:0% !important}
+.w5 {width:5% !important}
+.w10 {width:10% !important}
+.w15 {width:15% !important}
+.w20 {width:20% !important}
+.w25 {width:25% !important}
+.w30 {width:30% !important}
+.w35 {width:35% !important}
+.w40 {width:40% !important}
+.w45 {width:45% !important}
+.w50 {width:50% !important}
+.w55 {width:55% !important}
+.w60 {width:60% !important}
+.w65 {width:65% !important}
+.w70 {width:70% !important}
+.w75 {width:75% !important}
+.w80 {width:80% !important}
+.w85 {width:85% !important}
+.w90 {width:90% !important}
+.w95 {width:95% !important}
+.w100 {width:100% !important}
-.f14 {
- font-size: 14px !important;
-}
+.p5 {padding:5px !important}
+.p10 {padding:10px !important}
+.p15 {padding:15px !important}
+.p20 {padding:20px !important}
+.p25 {padding:25px !important}
+.p30 {padding:30px !important}
-.f15 {
- font-size: 15px !important;
-}
+.border-right {border-right:solid 1px #999;}
+.border-left {border-left:solid 1px #999;}
+.border-bottom {border-bottom:solid 1px #999;}
+.border-top {border-top:solid 1px #999;}
-.m0 {
- margin: 0 !important;
-}
+.whitespace {white-space:normal;}
+.clearall {clear:both;}
-.mr5 {
- margin-right:5px;
-}
-
-.mr10 {
- margin-right:10px;
-}
-
-.mr20 {
- margin-right:20px;
-}
-
-.mr30 {
- margin-right:30px;
-}
-
-.mr35 {
- margin-right:35px;
-}
-
-.mr40 {
- margin-right:40px;
-}
-
-.mr120 {
- margin-right:120px;
-}
-
-.ml5 {
- margin-left:5px;
-}
-
-.ml10 {
- margin-left:10px;
-}
-
-.ml20 {
- margin-left:20px;
-}
-
-.ml25 {
- margin-left:25px;
-}
-
-.ml30 {
- margin-left:30px;
-}
-
-.ml35 {
- margin-left:35px;
-}
-
-.ml45 {
- margin-left:45px;
-}
-
-.mt5 {
- margin-top:5px;
-}
-
-.mt10 {
- margin-top:10px;
-}
-
-.mt15 {
- margin-top:15px;
-}
-
-.mt20 {
- margin-top:20px;
-}
-
-.mt25 {
- margin-top:25px;
-}
-
-.mt30 {
- margin-top:30px;
-}
-
-.mt35 {
- margin-top:35px;
-}
-
-.mt40 {
- margin-top:40px;
-}
-
-.mt45 {
- margin-top:45px;
-}
-
-.mt50 {
- margin-top:50px;
-}
-
-.mt55 {
- margin-top:55px;
-}
-
-.mt65 {
- margin-top:65px;
-}
-
-.mb5 {
- margin-bottom:5px;
-}
-
-.mb15 {
- margin-bottom:15px;
+.error {
+ background-color:#300;
+ padding:5px;
+ border: solid 1px #900;
}
.op50 {
@@ -443,20 +389,16 @@ a img {
width:239px;
}
-.white {
- color:#fff;
-}
-
-.lightgrey {
- color:#ccc;
-}
-
-.grey {
- color:#999;
-}
-
-.darkgrey {
- color:#333;
-}
+.white {color:#fff;}
+.lightgrey {color:#ccc;}
+.grey {color:#999;}
+.darkgrey {color:#333;}
+.orange {color:#ED3618 !important;}
+.teal {color:#2b8897;}
+.green-fill {background-color:#72a43b;}
+.gold-fill {background-color:#cc9900;}
+.red-fill {background-color:#660000;}
+.orange-fill {background-color:#ed3618;}
+.teal-fill {background-color:#0b6672;}
/* End of Jeff's common.css file */
diff --git a/web/app/assets/stylesheets/client/shareDialog.css.scss b/web/app/assets/stylesheets/client/shareDialog.css.scss
new file mode 100644
index 000000000..39f012938
--- /dev/null
+++ b/web/app/assets/stylesheets/client/shareDialog.css.scss
@@ -0,0 +1,185 @@
+body.widgets {
+ background:#fff;
+ padding:20px;
+}
+
+.widget {
+ width:430px;
+ height:180px;
+ background:#353535;
+ border:solid 1px;
+ text-align:left;
+}
+
+.widget.session {
+ border-color:#0b6672;
+}
+
+.widget.recording {
+ border-color:#ed3618;
+}
+
+.widget-header {
+ color:#fff;
+ font-size:17px;
+ padding:8px;
+}
+
+.widget-content {
+ width:100%;
+ color:#ccc;
+ position:relative;
+}
+
+.widget-avatar {
+ top:15px;
+ left:15px;
+ position:absolute;
+ padding:2px;
+ width:110px;
+ height:110px;
+ background-color:#ed3618;
+ -webkit-border-radius:57px;
+ -moz-border-radius:57px;
+ border-radius:57px;
+ margin-bottom:10px;
+}
+
+.widget-avatar img {
+ width:110px;
+ height:110px;
+ -webkit-border-radius:55px;
+ -moz-border-radius:55px;
+ border-radius:55px;
+}
+
+.widget-playbutton {
+ position:absolute;
+ top:55px;
+ left:55px;
+ width:35px;
+ height:31px;
+ background-image:url(../shared/play_button.png);
+ background-repeat:no-repeat;
+}
+
+.widget-pausebutton {
+ position:absolute;
+ top:55px;
+ left:55px;
+ width:35px;
+ height:31px;
+ background-image:url(../shared/pause_button.png);
+ background-repeat:no-repeat;
+}
+
+.widget-title {
+ font-size:18px;
+ position:absolute;
+ top:20px;
+ left:153px;
+ width:260px;
+ height:22px;
+ overflow:hidden;
+ white-space:nowrap;
+ text-overflow:ellipsis;
+}
+
+.widget-description {
+ font-size:13px;
+ position:absolute;
+ top:15px;
+ left:153px;
+ width:260px;
+ height:32px;
+ overflow:hidden;
+ text-overflow:ellipsis;
+}
+
+.widget-controls {
+ position:absolute;
+ top:25px;
+ left:153px;
+ width:270px;
+ height:32px;
+}
+
+.widget-members {
+ position:absolute;
+ left:153px;
+ top:60px;
+ width:280px;
+ height:38px;
+ overflow:hidden;
+}
+
+.widget-social {
+ position:absolute;
+ top:75px;
+ left:153px;
+ width:270px;
+ height:20px;
+ font-size:13px;
+}
+
+.widget-branding {
+ position: absolute;
+ top: 110px;
+ right: 8px;
+ width: 270px;
+ height: 34px;
+ font-size: 13px;
+ text-align:right;
+}
+
+.widget .recording-controls {
+ margin-top:0px;
+ height:22px;
+ padding:8px 5px;
+}
+
+.widget .recording-playback {
+ width:65%;
+}
+
+.widget .recording-position {
+ margin-left:-30px;
+ width:95%;
+}
+
+.widget .recording-current {
+ top:8px;
+}
+
+.widget a {
+ color:#ccc;
+ text-decoration:none;
+}
+
+img.space {
+ margin-left:28px;
+}
+
+.widget a:hover {
+ color:#fff;
+}
+
+.widget-avatar-small {
+ float:left;
+ padding:1px;
+ width: 36px;
+ height:36px;
+ background-color:#ed3618;
+ -webkit-border-radius:18px;
+ -moz-border-radius:18px;
+ border-radius:18px;
+ margin-right:15px;
+}
+
+.widget-avatar-small img {
+ width: 36px;
+ height: 36px;
+ -webkit-border-radius:18px;
+ -moz-border-radius:18px;
+ border-radius:18px;
+}
diff --git a/web/app/assets/stylesheets/client/user_dropdown.css.scss b/web/app/assets/stylesheets/client/user_dropdown.css.scss
index 471883c4c..42e8081af 100644
--- a/web/app/assets/stylesheets/client/user_dropdown.css.scss
+++ b/web/app/assets/stylesheets/client/user_dropdown.css.scss
@@ -7,12 +7,18 @@
}
#profile {
- width:auto;
- float:right;
- height:64px;
+ float: right;
+ height: 54px;
+ margin-top: 30px;
+ text-align: right;
+
+ ul {
+ margin-bottom:0;
+ }
+
.signin {
- position:relative;
- margin-top:40px;
+ text-decoration: underline;
+ cursor: auto;
}
}
@@ -35,7 +41,7 @@
border-radius:26px;
}
-#user {
+.user {
margin:18px 0px 0px 10px;
font-size:20px;
font-weight:200;
diff --git a/web/app/assets/stylesheets/web/main.css.scss b/web/app/assets/stylesheets/web/main.css.scss
index fb3b8f142..49df23e0f 100644
--- a/web/app/assets/stylesheets/web/main.css.scss
+++ b/web/app/assets/stylesheets/web/main.css.scss
@@ -2,6 +2,10 @@ html {
height:100%;
}
+p, div {
+ white-space: normal;
+}
+
body.web {
background-repeat: repeat-x;
margin:0 !important;
@@ -10,165 +14,259 @@ body.web {
overflow: visible !important;
width:auto !important;
- #web-container {
- padding:3% 0;
+ .logo-home {
+ width: 298px;
+ margin-top: 30px;
+ display: inline-block;
+ }
+
+ .landing-tag {
+ display:inline-block;
+ margin-left:70px;
+ width:400px;
+ }
+
+ .landing-tag h1 {
+ color:#ed3718;
+ font-size:26px;
+ font-weight:300;
+ }
+
+ .landing-content {
+ background-color:black;
+ width:100%;
+ padding-bottom:15px;
+ min-height: 366px;
+ position:relative;
+ padding-bottom:30px;
}
div.wrapper {
- white-space: nowrap;
-
- p, ul {
- color:#999;
- line-height:160%;
- margin-bottom:20px;
- width:90%;
- white-space:normal;
- font-size:16px;
- }
-
- h2 {
- font-weight:300;
- }
-
- .content-wrapper {
- border-bottom: medium none;
- padding: 0;
- }
-
- .black-bar{
- position:relative;
- width:100%;
- min-height: 366px;
- background-color:black;
- padding-top:20px;
- }
-
- .black-bar-inner {
- width:1100px;
- margin: 0 auto;
-
- position:relative;
-
- // all custom CSS for the register page goes here
- .register-page {
-
- .register-container {
- padding:10px;
- }
-
- input.register-musician {
-
- }
-
- .actions {
- margin-top:20px;
-
- a.button-grey {
- line-height:15px; // WHY is this not universal
- }
- }
-
-
- .error {
- padding: 5px 12px 5px 5px;
- margin-left:-5px;
- margin-right:-12px;
- }
-
- input.register-fan {
- margin-left:20px;
- }
-
- input[type=text], input[type=password] {
- margin-top:1px;
- width:100%;
- }
-
- select {
- width:100%;
- }
-
-
- .right-side {
- margin-left:25px;
- }
-
-
- .register-left {
-
- select {
- width:104%;
- }
-
- div.field {
- margin-top:31px;
- width:43%;
- float:left;
- }
- }
-
- .register-right {
-
- margin-top:40px;
-
- table {
- border-collapse:separate;
- border-spacing:6px;
- }
-
- label.instruments {
- margin-bottom:2px;
- }
-
- div.field {
- margin-top:15px;
- }
-
- a.tos {
- text-decoration: underline;
- }
-
- .ftue-instrumentlist {
- width:100%;
- }
- }
- }
- }
-
- .after-black-bar {
- position:relative;
- background-color:#262626;
- width:1100px;
- margin:0 auto;
-
- .after-black-bar-inner {
- background-color:#262626;
- position:absolute;
- left:0;
- right:0;
- }
- }
- }
-
- .header {
width:1100px;
margin:0 auto;
-
- .logo-home {
- width: 298px;
- margin-top: 30px;
- display: inline-block;
- float:left;
- }
+ white-space:nowrap;
+ position:relative;
}
- #profile {
+ .landing-sidebar {
+ width:350px;
+ background:#353535;
+ border:solid 1px #ed3718;
position:absolute;
- top:-80px;
- right:0;
+ top:30px;
+ right:0px;
+ padding:25px;
+ padding-top:0px;
+ line-height:130%;
+ }
- ul {
- margin-bottom:0;
+ .landing-sidebar h2 {
+ font-size:18px !important;
+ line-height:normal;
+ color:#fff;
+ }
+
+ .landing-band {
+ float:left;
+ text-align:center;
+ width: 115px;
+ margin-right:25px;
+ font-size:17px;
+ color:#fff;
+ }
+
+ .landing-avatar {
+ padding:2px;
+ width:110px;
+ height:110px;
+ background-color:#ed3618;
+ -webkit-border-radius:57px;
+ -moz-border-radius:57px;
+ border-radius:57px;
+ margin-bottom:10px;
+ }
+
+ .landing-avatar img {
+ width:110px;
+ height:110px;
+ -webkit-border-radius:55px;
+ -moz-border-radius:55px;
+ border-radius:55px;
+ }
+
+ .landing-details {
+ float:left;
+ width:515px;
+ font-size:14px;
+ font-weight:400;
+ color:#666;
+ }
+
+ .landing-details a {
+ text-decoration:none;
+ color:#ccc;
+ }
+
+ .landing-details a:hover {
+ color:#fff;
+ }
+
+ .landing-content h2 {
+ font-size:24px;
+ color:#ccc;
+ font-weight:200;
+ }
+
+ .landing-comments {
+ margin-left:140px;
+ width:515px;
+ }
+
+ .landing-comments a {
+ text-decoration:none;
+ font-weight:bold;
+ color:#ED3618;
+ }
+
+ .landing-comment-scroller {
+ height:470px;
+ overflow:auto;
+ }
+
+ .landing .cta {
+ margin-top:25px;
+ }
+
+ .avatar-small {
+ float:left;
+ padding:1px;
+ width:36px;
+ height:36px;
+ background-color:#ed3618;
+ margin:10px;
+ -webkit-border-radius:18px;
+ -moz-border-radius:18px;
+ border-radius:18px;
+ }
+
+ .avatar-small img {
+ width: 36px;
+ height: 36px;
+ -webkit-border-radius:18px;
+ -moz-border-radius:18px;
+ border-radius:18px;
+ }
+
+ .cta {
+ margin-top:40px;
+ text-align:center;
+ width:345px;
+ font-size:12px;
+ }
+
+ white-space: nowrap;
+
+ p, ul {
+ color:#999;
+ line-height:160%;
+ margin-bottom:20px;
+ width:90%;
+ white-space:normal;
+ font-size:16px;
+ }
+
+ h2 {
+ font-size: 1.5em;
+ font-weight:300;
+ }
+
+ .content-wrapper {
+ border-bottom: medium none;
+ padding: 0;
+ }
+
+
+ // all custom CSS for the register page goes here
+ .register-page {
+
+ .register-container {
+ padding:10px;
+ }
+
+ input.register-musician {
+
+ }
+
+ .actions {
+ margin-top:20px;
+
+ a.button-grey {
+ line-height:15px; // WHY is this not universal
+ }
+ }
+
+ .error {
+ padding: 5px 12px 5px 5px;
+ margin-left:-5px;
+ margin-right:-12px;
+ }
+
+ input.register-fan {
+ margin-left:20px;
+ }
+
+ input[type=text], input[type=password] {
+ margin-top:1px;
+ width:100%;
+ }
+
+ select {
+ width:100%;
+ }
+
+
+ .right-side {
+ margin-left:25px;
+ }
+
+
+ .register-left {
+
+ select {
+ width:104%;
+ }
+
+ div.field {
+ margin-top:31px;
+ width:43%;
+ float:left;
+ }
+ }
+
+ .register-right {
+
+ margin-top:40px;
+
+ table {
+ border-collapse:separate;
+ border-spacing:6px;
+ }
+
+ label.instruments {
+ margin-bottom:2px;
+ }
+
+ div.field {
+ margin-top:15px;
+ }
+
+ a.tos {
+ text-decoration: underline;
+ }
+
+ .ftue-instrumentlist {
+ width:100%;
+ }
}
}
@@ -215,11 +313,6 @@ body.web {
}
}
-#landing-container {
- padding: 3% 0;
- position:relative;
- text-align: center;
-}
.signin-overlay {
position:relative;
diff --git a/web/app/assets/stylesheets/web/recordings.css.scss b/web/app/assets/stylesheets/web/recordings.css.scss
new file mode 100644
index 000000000..45e591aa1
--- /dev/null
+++ b/web/app/assets/stylesheets/web/recordings.css.scss
@@ -0,0 +1,59 @@
+.feed-entry .recording-controls, .feed-entry .session-controls, .landing-details .recording-controls {
+ margin-top:0px;
+ margin-bottom:5px;
+ padding:8px 5px 8px 10px;
+ width:98%;
+ position:relative;
+ text-align:center;
+ background-color:#242323;
+}
+
+.recording-position {
+ display:inline-block;
+ width:80%;
+ margin-left:-20px;
+ font-family:Arial, Helvetica, sans-serif;
+ font-size:11px;
+ height:18px;
+ vertical-align:top;
+}
+
+.landing-details .recording-position {
+ width:100%;
+}
+
+.recording-time {
+ display:inline-block;
+ height:16px;
+ vertical-align:top;
+ margin-top:4px;
+}
+
+.landing-details .recording-current {
+ top:8px;
+}
+
+.recording-playback {
+ display:inline-block;
+ background-image:url(../content/bkg_playcontrols.png);
+ background-repeat:repeat-x;
+ position:relative;
+ width:70%;
+ height:16px;
+ margin-top:2px;
+}
+
+.recording-slider {
+ position:absolute;
+ left:25%;
+ top:0px;
+}
+
+.recording-current {
+ font-family:Arial, Helvetica, sans-serif;
+ display:inline-block;
+ font-size:18px;
+ position:absolute;
+ top:3px;
+ right:4px;
+}
\ No newline at end of file
diff --git a/web/app/assets/stylesheets/web/sessions.css.scss b/web/app/assets/stylesheets/web/sessions.css.scss
new file mode 100644
index 000000000..139597f9c
--- /dev/null
+++ b/web/app/assets/stylesheets/web/sessions.css.scss
@@ -0,0 +1,2 @@
+
+
diff --git a/web/app/assets/stylesheets/web/web.css b/web/app/assets/stylesheets/web/web.css
index eee7082da..b8ae9ed79 100644
--- a/web/app/assets/stylesheets/web/web.css
+++ b/web/app/assets/stylesheets/web/web.css
@@ -7,6 +7,9 @@
*= require client/user_dropdown
*= require client/dialog
*= require client/invitationDialog
+*= require client/shareDialog
*= require web/main
*= require web/footer
+*= require web/recordings
+#= require web/sessions
*/
\ No newline at end of file
diff --git a/web/app/controllers/api_invitations_controller.rb b/web/app/controllers/api_invitations_controller.rb
index ac487c8a9..58a3965e6 100644
--- a/web/app/controllers/api_invitations_controller.rb
+++ b/web/app/controllers/api_invitations_controller.rb
@@ -37,34 +37,26 @@ class ApiInvitationsController < ApiController
sender = current_user
join_request = JoinRequest.find(params[:join_request]) unless params[:join_request].nil?
- @invitation = Invitation.limit(1)
- .where(:receiver_id => params[:receiver],
- :sender_id => current_user.id,
- :music_session_id => params[:music_session])
- .first
- if @invitation
+ @invitation = Invitation.new
+ @invitation.music_session = music_session
+ @invitation.sender = sender
+ @invitation.receiver = receiver
+ @invitation.join_request = join_request
+ @invitation.save
+
+ unless @invitation.errors.any?
+ User.save_session_settings(current_user, music_session)
+
+ # send notification
+ Notification.send_session_invitation(receiver, current_user, music_session.id)
respond_with @invitation, :responder => ApiResponder, :location => api_invitation_detail_url(@invitation)
+
else
- @invitation = Invitation.new
- @invitation.music_session = music_session
- @invitation.sender = sender
- @invitation.receiver = receiver
- @invitation.join_request = join_request
- @invitation.save
-
- unless @invitation.errors.any?
- User.save_session_settings(current_user, music_session)
-
- # send notification
- Notification.send_session_invitation(receiver, current_user, music_session.id)
- respond_with @invitation, :responder => ApiResponder, :location => api_invitation_detail_url(@invitation)
-
- else
- # we have to do this because api_invitation_detail_url will fail with a bad @invitation
- response.status = :unprocessable_entity
- respond_with @invitation
- end
+ # we have to do this because api_invitation_detail_url will fail with a bad @invitation
+ response.status = :unprocessable_entity
+ respond_with @invitation
end
+
end
def show
diff --git a/web/app/controllers/api_music_sessions_controller.rb b/web/app/controllers/api_music_sessions_controller.rb
index daf5f5fe9..ecfd62359 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
+ before_filter :api_signed_in_user, :except => [ :add_like ]
before_filter :lookup_session, only: [:show, :update, :delete, :claimed_recording_start, :claimed_recording_stop]
skip_before_filter :api_signed_in_user, only: [:perf_upload]
@@ -257,6 +257,7 @@ class ApiMusicSessionsController < ApiController
comment.music_session_id = params[:id]
comment.creator_id = params[:user_id]
comment.comment = params[:comment]
+ comment.ip_address = request.remote_ip
comment.save
if comment.errors.any?
@@ -278,6 +279,7 @@ class ApiMusicSessionsController < ApiController
liker = MusicSessionLiker.new
liker.music_session_id = params[:id]
liker.liker_id = params[:user_id]
+ liker.ip_address = request.remote_ip
liker.save
if liker.errors.any?
diff --git a/web/app/controllers/api_recordings_controller.rb b/web/app/controllers/api_recordings_controller.rb
index 3a8986fb2..ce06547c6 100644
--- a/web/app/controllers/api_recordings_controller.rb
+++ b/web/app/controllers/api_recordings_controller.rb
@@ -1,6 +1,6 @@
class ApiRecordingsController < ApiController
- before_filter :api_signed_in_user
+ before_filter :api_signed_in_user, :except => [ :add_like, :add_play ]
before_filter :look_up_recording, :only => [ :show, :stop, :claim, :discard, :keep ]
before_filter :parse_filename, :only => [ :download, :upload_next_part, :upload_sign, :upload_part_complete, :upload_complete ]
@@ -97,6 +97,7 @@ class ApiRecordingsController < ApiController
comment.recording_id = params[:id]
comment.creator_id = params[:user_id]
comment.comment = params[:comment]
+ comment.ip_address = request.remote_ip
comment.save
if comment.errors.any?
@@ -118,6 +119,7 @@ class ApiRecordingsController < ApiController
liker = RecordingLiker.new
liker.recording_id = params[:id]
liker.liker_id = params[:user_id]
+ liker.ip_address = request.remote_ip
liker.save
if liker.errors.any?
@@ -139,6 +141,7 @@ class ApiRecordingsController < ApiController
play = RecordingPlay.new
play.recording_id = params[:id]
play.player_id = params[:user_id]
+ play.ip_address = request.remote_ip
play.save
if play.errors.any?
@@ -209,10 +212,7 @@ class ApiRecordingsController < ApiController
end
end
-
-
private
-
def parse_filename
@recorded_track = RecordedTrack.find_by_recording_id_and_client_track_id!(params[:id], params[:track_id])
raise PermissionError, ValidationMessages::PERMISSION_VALIDATION_ERROR unless @recorded_track.recording.has_access?(current_user)
diff --git a/web/app/controllers/music_sessions_controller.rb b/web/app/controllers/music_sessions_controller.rb
index c72f6f22f..7087fdaad 100644
--- a/web/app/controllers/music_sessions_controller.rb
+++ b/web/app/controllers/music_sessions_controller.rb
@@ -1,50 +1,10 @@
class MusicSessionsController < ApplicationController
- # have to be signed in currently to see this screen
- before_filter :signed_in_user
-
respond_to :html
- def index
- @music_sessions = MusicSession.paginate(page: params[:page])
- end
-
def show
- @music_session = MusicSession.find(params[:id])
-
- # use gon to pass variables into javascript
- gon.websocket_gateway_uri = Rails.application.config.websocket_gateway_uri
- gon.music_session_id = @music_session.id
- end
-
- def new
- @music_session = MusicSession.new
- end
-
- def create
- @music_session = MusicSession.new()
- @music_session.creator = current_user
- @music_session.description = params[:jam_ruby_music_session][:description]
- if @music_session.save
- flash[:success] = "Music Session created"
- redirect_to @music_session
- else
- render 'new'
- end
- end
-
-
- def edit
- end
-
- def update
-
- end
-
- def destroy
- MusicSession.find(params[:id]).destroy
- flash[:success] = "Jam Session deleted."
- redirect_to music_sessions_url
+ @music_session = MusicSessionHistory.find_by_music_session_id(params[:id])
+ render :layout => "web"
end
end
diff --git a/web/app/controllers/recordings_controller.rb b/web/app/controllers/recordings_controller.rb
new file mode 100644
index 000000000..650c6971f
--- /dev/null
+++ b/web/app/controllers/recordings_controller.rb
@@ -0,0 +1,10 @@
+class RecordingsController < ApplicationController
+
+ respond_to :html
+
+ def show
+ @claimed_recording = ClaimedRecording.find(params[:id])
+ render :layout => "web"
+ end
+
+end
\ No newline at end of file
diff --git a/web/app/views/api_claimed_recordings/show.rabl b/web/app/views/api_claimed_recordings/show.rabl
index cb46530cd..36c020610 100644
--- a/web/app/views/api_claimed_recordings/show.rabl
+++ b/web/app/views/api_claimed_recordings/show.rabl
@@ -1,13 +1,13 @@
# I'm not sure this is right at all. The idea is to bring in all the stuff you would need to play the tracks.
-# I don't think I need to include URLs since that's handled by syncing. This is jsut to make the metadata
+# I don't think I need to include URLs since that's handled by syncing. This is just to make the metadata
# depictable.
object @claimed_recording
-attributes :id, :name, :description, :is_public, :is_downloadable
+attributes :id, :name, :description, :is_public, :is_downloadable, :genre_id
child(:recording => :recording) {
- attributes :id, :created_at, :duration
+ attributes :id, :created_at, :duration, :comment_count, :like_count, :play_count
child(:band => :band) {
attributes :id, :name
}
@@ -19,9 +19,20 @@ child(:recording => :recording) {
child(:recorded_tracks => :recorded_tracks) {
attributes :id, :fully_uploaded, :url, :client_track_id, :client_id, :instrument_id
- child(:user => :user) {
- attributes :id, :first_name, :last_name, :city, :state, :country, :photo_url
- }
+ child(:user => :user) {
+ attributes :id, :first_name, :last_name, :city, :state, :country, :photo_url
+ }
}
-}
+ child(:band => :band) {
+ attributes :id, :name, :photo_url
+ }
+
+ child(:comments => :comments) {
+ attributes :comment, :created_at
+
+ child(:user => :creator) {
+ attributes :id, :first_name, :last_name, :photo_url
+ }
+ }
+}
\ No newline at end of file
diff --git a/web/app/views/clients/_musicians.html.erb b/web/app/views/clients/_musicians.html.erb
index 2b4c565de..8e21bdf57 100644
--- a/web/app/views/clients/_musicians.html.erb
+++ b/web/app/views/clients/_musicians.html.erb
@@ -20,45 +20,44 @@
<% end -%>
-
@@ -74,7 +73,7 @@
- <% end %>
- <%= include_gon(:init => true) %>
- <%= csrf_meta_tags %>
-
-
-<%= javascript_include_tag "web/web" %>
-
+
+
+ <%= stylesheet_link_tag "web/web", media: "all" %>
+ <% if bugsnag? %>
+
+
+ <% end %>
+ <%= include_gon(:init => true) %>
+ <%= csrf_meta_tags %>
+
+
+ <%= javascript_include_tag "web/web" %>
+
-
+
-
-
-
-
-
-
-
- <%= render "users/user_dropdown" %>
+
-
+
<%= yield(:after_black_bar) %>
-
- <%= render "clients/invitationDialog" %>
+ <%= render "clients/invitationDialog" %>
-
+ var userDropdown = new JK.UserDropdown(JK.app);
+ userDropdown.initialize(invitationDialog);
+ }
+ })
+
-
-
-<%= render "shared/ga" %>
-
-
+ <%= render "shared/ga" %>
+
+