From e6ea200b19db68a12a0ec539af452ce3dcc88289 Mon Sep 17 00:00:00 2001 From: Scott Comer Date: Tue, 6 May 2014 19:48:31 -0500 Subject: [PATCH 001/114] useful command to drop all jam db and recreate jam db. --- resetdb.sh | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100755 resetdb.sh diff --git a/resetdb.sh b/resetdb.sh new file mode 100755 index 000000000..5a06c1ff0 --- /dev/null +++ b/resetdb.sh @@ -0,0 +1,7 @@ +#!/bin/sh -x +dropdb jam +dropdb jam_db_build +dropdb jam_ruby_test +dropdb jam_web_test +dropdb jam_websocket_test +createdb -Upostgres jam From 8f06168f1cb19e286401780842acf748a69661e2 Mon Sep 17 00:00:00 2001 From: developer Date: Thu, 8 May 2014 23:18:57 +0800 Subject: [PATCH 002/114] VRFS-1654 - configure feed layout --- admin/Gemfile | 2 +- admin/app/admin/feeds.rb | 61 +++++++++++++++++++ admin/app/admin/mix.rb | 4 +- .../assets/stylesheets/active_admin.css.scss | 1 + admin/app/assets/stylesheets/custom.css.scss | 15 +++++ admin/app/views/admin/feed/_form.html.erb | 6 ++ admin/app/views/admin/feed/_index.html.erb | 23 +++++++ atlassian-ide-plugin.xml | 5 ++ 8 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 admin/app/admin/feeds.rb create mode 100644 admin/app/views/admin/feed/_form.html.erb create mode 100644 admin/app/views/admin/feed/_index.html.erb create mode 100644 atlassian-ide-plugin.xml diff --git a/admin/Gemfile b/admin/Gemfile index 8a47660de..a53c17f5e 100644 --- a/admin/Gemfile +++ b/admin/Gemfile @@ -102,7 +102,7 @@ group :development, :test do gem 'rspec-rails' gem 'guard-rspec', '0.5.5' gem 'jasmine', '1.3.1' - gem 'pry' + # gem 'pry' gem 'execjs', '1.4.0' gem 'therubyracer' #, '0.11.0beta8' gem 'factory_girl_rails', '4.1.0' diff --git a/admin/app/admin/feeds.rb b/admin/app/admin/feeds.rb new file mode 100644 index 000000000..e1f5c2913 --- /dev/null +++ b/admin/app/admin/feeds.rb @@ -0,0 +1,61 @@ +ActiveAdmin.register_page 'Feed' do + content do + + # get user information via params + user_id = nil + user_id = params[:feed][:user_id] if params[:feed] + user_name = User.find(user_id).name if user_id + user_name = "All" unless user_id + + render :partial => 'form', :locals => {param: params} + + offset = 0 + limit = 10 + + # get feed ids + where_sql = '' + where_sql = "where user_id = '#{user_id}'" if user_id + sql_feed_ids = "SELECT id, 'music_session_histories' as type, created_at FROM music_sessions_history #{where_sql} + UNION ALL + SELECT DISTINCT recording_id as id, 'recordings' as type, created_at FROM recorded_tracks #{where_sql} + UNION ALL + SELECT id, 'diagnostics' as type, created_at FROM diagnostics #{where_sql} + ORDER BY created_at DESC + OFFSET #{offset} + LIMIT #{limit};" + + models = [] + id_types = ActiveRecord::Base.connection.execute(sql_feed_ids).values + id_types.each do |id_and_type| + if id_and_type[1] == "music_session_histories" + models << JamRuby::MusicSessionHistory.find(id_and_type[0]) + # elsif id_and_type[1] == "recordings" + # models << JamRuby::Recording.find(id_and_type[0]) + elsif id_and_type[1] == "recordings" + models << JamRuby::Diagnostics.find(id_and_type[0]) + else + raise "Unknown type returned from feed ids" + end + end + + columns do + column do + panel "Activity - #{user_name}" do + para id_types.inspect + ul do + models.each do |model| + li do + text_node model.inspect + end + end + end + end + end + end + end + + controller do + def index + end + end +end \ No newline at end of file diff --git a/admin/app/admin/mix.rb b/admin/app/admin/mix.rb index f2c86e7ec..16c623ca1 100644 --- a/admin/app/admin/mix.rb +++ b/admin/app/admin/mix.rb @@ -24,8 +24,8 @@ ActiveAdmin.register JamRuby::Mix, :as => 'Mixes' do attributes_table_for(mix) do row :recording do |mix| auto_link(mix.recording, mix.recording.id) end row :created_at do |mix| mix.created_at.strftime('%b %d %Y, %H:%M') end - row :s3_url do |mix| mix.url end - row :manifest do |mix| mix.manifest end + # row :s3_url do |mix| mix.url end + # row :manifest do |mix| mix.manifest end row :completed do |mix| "#{mix.completed ? "finished" : "not finished"}" end if mix.completed row :completed_at do |mix| mix.completed_at.strftime('%b %d %Y, %H:%M') end diff --git a/admin/app/assets/stylesheets/active_admin.css.scss b/admin/app/assets/stylesheets/active_admin.css.scss index 4798f7467..48aa7bb98 100644 --- a/admin/app/assets/stylesheets/active_admin.css.scss +++ b/admin/app/assets/stylesheets/active_admin.css.scss @@ -9,6 +9,7 @@ /* *= require jquery.ui.all +*= require custom */ // Active Admin's got SASS! @import "active_admin/mixins"; diff --git a/admin/app/assets/stylesheets/custom.css.scss b/admin/app/assets/stylesheets/custom.css.scss index 97651a7af..d3dabb8d0 100644 --- a/admin/app/assets/stylesheets/custom.css.scss +++ b/admin/app/assets/stylesheets/custom.css.scss @@ -2,4 +2,19 @@ .version-info { font-size:small; color:lightgray; +} + +.feed-pagination { + height: 20px; + .pagination { + float: left !important; + + ul { + list-style-type: none; + + li { + float: left; + } + } + } } \ No newline at end of file diff --git a/admin/app/views/admin/feed/_form.html.erb b/admin/app/views/admin/feed/_form.html.erb new file mode 100644 index 000000000..b72d211e3 --- /dev/null +++ b/admin/app/views/admin/feed/_form.html.erb @@ -0,0 +1,6 @@ +<%= semantic_form_for :feed, url: admin_feed_path, method: :get do |f| %> + <%= f.inputs do %> + <%= f.input :user, :as => :autocomplete, :url => autocomplete_user_email_admin_users_path, :input_html => { :id_element => "#feed_user_id" }%> + <%= f.input :user_id, :as => :hidden %> + <% end %> +<% end %> \ No newline at end of file diff --git a/admin/app/views/admin/feed/_index.html.erb b/admin/app/views/admin/feed/_index.html.erb new file mode 100644 index 000000000..7ad3e71d2 --- /dev/null +++ b/admin/app/views/admin/feed/_index.html.erb @@ -0,0 +1,23 @@ + + + + + + + + <% @users.each do |user| %> + + + + <% end %> + +
User Name - <%= @user_id %>
+

+ <%= link_to admin_feed_path(feed: {user_id: user.id}) do %> + <%= user.name %> + <% end %>

+
+ +
+ <%= will_paginate @users %> +
\ No newline at end of file diff --git a/atlassian-ide-plugin.xml b/atlassian-ide-plugin.xml new file mode 100644 index 000000000..858eed55c --- /dev/null +++ b/atlassian-ide-plugin.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file From ac8a9a5af6ea9d6312d30930843a7b16d9b3b74e Mon Sep 17 00:00:00 2001 From: Anthony Davis Date: Thu, 8 May 2014 18:00:49 -0500 Subject: [PATCH 003/114] VRFS-1705 - fix test-www by a slight decouple --- web/spec/spec_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/spec/spec_helper.rb b/web/spec/spec_helper.rb index 3ff0f6e46..5af0fbc83 100644 --- a/web/spec/spec_helper.rb +++ b/web/spec/spec_helper.rb @@ -30,7 +30,7 @@ db_config = YAML::load(File.open('config/database.yml'))["test"] bputs "before recreate db" -SpecDb::recreate_database(db_config) +SpecDb::recreate_database(db_config) unless ENV["TEST_WWW"] == "1" bputs "before connect db" ActiveRecord::Base.establish_connection(YAML::load(File.open('config/database.yml'))["test"]) From 3f688a8392e74b3a0b14d571f6b5b8cc337afce8 Mon Sep 17 00:00:00 2001 From: Scott Comer Date: Thu, 8 May 2014 19:44:52 -0500 Subject: [PATCH 004/114] update user home base (last_jam_blah) fields upon registation and joining a music session as a musician --- db/manifest | 1 + db/up/add_last_jam_user_fields.sql | 8 +++++ ruby/lib/jam_ruby/connection_manager.rb | 2 +- ruby/lib/jam_ruby/models/connection.rb | 7 ++++- ruby/lib/jam_ruby/models/user.rb | 17 +++++++++- .../jam_ruby/models/claimed_recording_spec.rb | 2 +- ruby/spec/jam_ruby/models/mix_spec.rb | 2 +- .../jam_ruby/models/music_session_spec.rb | 2 +- .../jam_ruby/models/musician_search_spec.rb | 4 +-- ruby/spec/jam_ruby/models/recording_spec.rb | 4 +-- web/lib/max_mind_manager.rb | 31 +++++++++++++------ web/lib/user_manager.rb | 14 ++++++--- .../api_claimed_recordings_spec.rb | 2 +- web/spec/features/social_meta_spec.rb | 4 +-- web/spec/helpers/recording_helper_spec.rb | 2 +- web/spec/requests/music_sessions_api_spec.rb | 2 +- web/spec/requests/users_api_spec.rb | 7 +++-- 17 files changed, 80 insertions(+), 31 deletions(-) create mode 100644 db/up/add_last_jam_user_fields.sql diff --git a/db/manifest b/db/manifest index 637e56cc4..55c694c7d 100755 --- a/db/manifest +++ b/db/manifest @@ -151,3 +151,4 @@ user_mods.sql connection_stale_expire.sql rename_chat_messages.sql fix_connection_fields.sql +add_last_jam_user_fields.sql diff --git a/db/up/add_last_jam_user_fields.sql b/db/up/add_last_jam_user_fields.sql new file mode 100644 index 000000000..5542ec4c7 --- /dev/null +++ b/db/up/add_last_jam_user_fields.sql @@ -0,0 +1,8 @@ +ALTER TABLE users ADD COLUMN last_jam_addr BIGINT; + +ALTER TABLE users ADD COLUMN last_jam_locidispid BIGINT; + +-- (j)oin session as musician, (r)egister, (f)tue, (n)etwork test +ALTER TABLE users ADD COLUMN last_jam_updated_reason CHAR(1); + +ALTER TABLE users ADD COLUMN last_jam_updated_at TIMESTAMP; diff --git a/ruby/lib/jam_ruby/connection_manager.rb b/ruby/lib/jam_ruby/connection_manager.rb index 59e7b8735..74aadc59c 100644 --- a/ruby/lib/jam_ruby/connection_manager.rb +++ b/ruby/lib/jam_ruby/connection_manager.rb @@ -352,7 +352,7 @@ SQL connection = Connection.find_by_client_id_and_user_id!(client_id, user.id) - connection.join_the_session(music_session, as_musician, tracks) + connection.join_the_session(music_session, as_musician, tracks, user) # connection.music_session_id = music_session.id # connection.as_musician = as_musician # connection.joining_session = true diff --git a/ruby/lib/jam_ruby/models/connection.rb b/ruby/lib/jam_ruby/models/connection.rb index 8e9836c30..6bc4a2530 100644 --- a/ruby/lib/jam_ruby/models/connection.rb +++ b/ruby/lib/jam_ruby/models/connection.rb @@ -146,13 +146,18 @@ module JamRuby true end - def join_the_session(music_session, as_musician, tracks) + def join_the_session(music_session, as_musician, tracks, user) self.music_session_id = music_session.id self.as_musician = as_musician self.joining_session = true self.joined_session_at = Time.now associate_tracks(tracks) unless tracks.nil? self.save + + # if user joins the session as a musician, update their addr and location + if as_musician + user.update_addr_loc(self, 'j') + end end def associate_tracks(tracks) diff --git a/ruby/lib/jam_ruby/models/user.rb b/ruby/lib/jam_ruby/models/user.rb index 22a4a426e..eb4b9876b 100644 --- a/ruby/lib/jam_ruby/models/user.rb +++ b/ruby/lib/jam_ruby/models/user.rb @@ -773,7 +773,14 @@ module JamRuby user.country = location[:country] user.birth_date = birth_date - if user.musician # only update instruments if the user is a musician + if musician + user.last_jam_addr = location[:addr] + user.last_jam_locidispid = location[:locidispid] + user.last_jam_updated_reason = 'r' + user.last_jam_updated_at = Time.now + end + + if musician # only update instruments if the user is a musician unless instruments.nil? instruments.each do |musician_instrument_param| instrument = Instrument.find(musician_instrument_param[:instrument_id]) @@ -1138,6 +1145,14 @@ module JamRuby end end + def update_addr_loc(connection, reason) + self.last_jam_addr = connection.addr + self.last_jam_locidispid = connection.locidispid + self.last_jam_updated_reason = reason + self.last_jam_updated_at = Time.now + self.save + end + def top_followings @topf ||= User.joins("INNER JOIN follows ON follows.followable_id = users.id AND follows.followable_type = '#{self.class.to_s}'") .where(['follows.user_id = ?', self.id]) diff --git a/ruby/spec/jam_ruby/models/claimed_recording_spec.rb b/ruby/spec/jam_ruby/models/claimed_recording_spec.rb index fae09a6ab..e6be9e50b 100644 --- a/ruby/spec/jam_ruby/models/claimed_recording_spec.rb +++ b/ruby/spec/jam_ruby/models/claimed_recording_spec.rb @@ -21,7 +21,7 @@ describe ClaimedRecording do @music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true) # @music_session.connections << @connection @music_session.save - @connection.join_the_session(@music_session, true, nil) + @connection.join_the_session(@music_session, true, nil, @user) @recording = Recording.start(@music_session, @user) @recording.stop @recording.reload diff --git a/ruby/spec/jam_ruby/models/mix_spec.rb b/ruby/spec/jam_ruby/models/mix_spec.rb index 7acb05f81..c04cfada3 100755 --- a/ruby/spec/jam_ruby/models/mix_spec.rb +++ b/ruby/spec/jam_ruby/models/mix_spec.rb @@ -10,7 +10,7 @@ describe Mix do @music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true) # @music_session.connections << @connection @music_session.save - @connection.join_the_session(@music_session, true, nil) + @connection.join_the_session(@music_session, true, nil, @user) @recording = Recording.start(@music_session, @user) @recording.stop @recording.claim(@user, "name", "description", Genre.first, true) diff --git a/ruby/spec/jam_ruby/models/music_session_spec.rb b/ruby/spec/jam_ruby/models/music_session_spec.rb index f76e264a8..8d48b5f57 100644 --- a/ruby/spec/jam_ruby/models/music_session_spec.rb +++ b/ruby/spec/jam_ruby/models/music_session_spec.rb @@ -398,7 +398,7 @@ describe MusicSession do @music_session = FactoryGirl.create(:music_session, :creator => @user1, :musician_access => true) # @music_session.connections << @connection @music_session.save! - @connection.join_the_session(@music_session, true, nil) + @connection.join_the_session(@music_session, true, nil, @user1) end describe "not recording" do diff --git a/ruby/spec/jam_ruby/models/musician_search_spec.rb b/ruby/spec/jam_ruby/models/musician_search_spec.rb index a3c1bdf07..70f220adb 100644 --- a/ruby/spec/jam_ruby/models/musician_search_spec.rb +++ b/ruby/spec/jam_ruby/models/musician_search_spec.rb @@ -115,7 +115,7 @@ describe 'Musician search' do music_session = FactoryGirl.create(:music_session, :creator => usr, :musician_access => true) # music_session.connections << connection music_session.save - connection.join_the_session(music_session, true, nil) + connection.join_the_session(music_session, true, nil, usr) recording = Recording.start(music_session, usr) recording.stop recording.reload @@ -130,7 +130,7 @@ describe 'Musician search' do music_session = FactoryGirl.create(:music_session, :creator => usr, :musician_access => true) # music_session.connections << connection music_session.save - connection.join_the_session(music_session, true, nil) + connection.join_the_session(music_session, true, nil, usr) end context 'musician stat counters' do diff --git a/ruby/spec/jam_ruby/models/recording_spec.rb b/ruby/spec/jam_ruby/models/recording_spec.rb index 56ccf176a..e66d8be6f 100644 --- a/ruby/spec/jam_ruby/models/recording_spec.rb +++ b/ruby/spec/jam_ruby/models/recording_spec.rb @@ -80,7 +80,7 @@ describe Recording do @track2 = FactoryGirl.create(:track, :connection => @connection2, :instrument => @instrument2) # @music_session.connections << @connection2 - @connection2.join_the_session(@music_session, true, nil) + @connection2.join_the_session(@music_session, true, nil, @user2) @recording = Recording.start(@music_session, @user) @user.recordings.length.should == 0 @@ -179,7 +179,7 @@ describe Recording do @track = FactoryGirl.create(:track, :connection => @connection2, :instrument => @instrument) # @music_session.connections << @connection2 @music_session.save - @connection2.join_the_session(@music_session, true, nil) + @connection2.join_the_session(@music_session, true, nil, @user2) @recording = Recording.start(@music_session, @user) @recording.stop @recording.reload diff --git a/web/lib/max_mind_manager.rb b/web/lib/max_mind_manager.rb index e3a2a54f0..49353761a 100644 --- a/web/lib/max_mind_manager.rb +++ b/web/lib/max_mind_manager.rb @@ -10,7 +10,8 @@ class MaxMindManager < BaseManager def self.lookup(ip_address) city = state = country = nil - + locid = ispid = 0 + unless ip_address.nil? || ip_address !~ /^\d+\.\d+\.\d+\.\d+$/ #ActiveRecord::Base.connection_pool.with_connection do |connection| # pg_conn = connection.instance_variable_get("@connection") @@ -23,17 +24,29 @@ class MaxMindManager < BaseManager # end # end #end - ip_as_int = ip_address_to_int(ip_address) - block = GeoIpBlocks.lookup(ip_as_int) - location = block ? GeoIpLocations.lookup(block.locid) : nil - if location - country = location.countrycode - state = location.region - city = location.city + + addr = ip_address_to_int(ip_address) + + block = GeoIpBlocks.lookup(addr) + if block + locid = block.locid + + location = GeoIpLocations.lookup(locid) + if location + # todo translate countrycode to country, region(code) to region + country = location.countrycode + state = location.region + city = location.city + end + end + + isp = JamIsp.lookup(addr) + if isp + ispid = isp.coid end end - a = {:city => city, :state => state, :country => country} + {city: city, state: state, country: country, addr: addr, locidispid: locid*1000000+ispid} end def self.lookup_isp(ip_address) diff --git a/web/lib/user_manager.rb b/web/lib/user_manager.rb index 34be86248..d6765ad42 100644 --- a/web/lib/user_manager.rb +++ b/web/lib/user_manager.rb @@ -35,9 +35,15 @@ class UserManager < BaseManager raise PermissionError, "Signups are currently disabled" end - # a user should be able to specify their location, but if they don't, we'll best effort it - if location.nil? - location = MaxMindManager.lookup(remote_ip) + loc = MaxMindManager.lookup(remote_ip) + # there are three cases here: if location is missing, we'll auto set the city, etc. from + # the ip address; if location is present, empty or not empty, we'll set the city, etc. from + # what is present in location. we should NOT normally default city, etc. for the user, they + # own it, they may want it to be unspecified, that is their right. + if location + loc[:city] = location[:city] + loc[:state] = location[:state] + loc[:country] = location[:country] end # TODO: figure out why can't user verify_recaptcha here @@ -54,7 +60,7 @@ class UserManager < BaseManager password: password, password_confirmation: password_confirmation, terms_of_service: terms_of_service, - location: location, + location: loc, instruments: instruments, birth_date: birth_date, musician: musician, diff --git a/web/spec/controllers/api_claimed_recordings_spec.rb b/web/spec/controllers/api_claimed_recordings_spec.rb index 7c4b39560..77182b32c 100644 --- a/web/spec/controllers/api_claimed_recordings_spec.rb +++ b/web/spec/controllers/api_claimed_recordings_spec.rb @@ -11,7 +11,7 @@ describe ApiClaimedRecordingsController do @music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true) # @music_session.connections << @connection @music_session.save - @connection.join_the_session(@music_session, true, nil) + @connection.join_the_session(@music_session, true, nil, @user) @recording = Recording.start(@music_session, @user) @recording.stop @recording.reload diff --git a/web/spec/features/social_meta_spec.rb b/web/spec/features/social_meta_spec.rb index db5dc403f..19b638aa0 100644 --- a/web/spec/features/social_meta_spec.rb +++ b/web/spec/features/social_meta_spec.rb @@ -65,7 +65,7 @@ describe "social metadata" do ms = FactoryGirl.create(:music_session, :creator => user, :musician_access => true) # ms.connections << connection ms.save! - connection.join_the_session(ms, true, nil) + connection.join_the_session(ms, true, nil, user) ms } @@ -93,7 +93,7 @@ describe "social metadata" do @music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true) # @music_session.connections << @connection @music_session.save - @connection.join_the_session(@music_session, true, nil) + @connection.join_the_session(@music_session, true, nil, @user) @recording = Recording.start(@music_session, @user) @recording.stop @recording.reload diff --git a/web/spec/helpers/recording_helper_spec.rb b/web/spec/helpers/recording_helper_spec.rb index 30ef78ff2..536fa4496 100644 --- a/web/spec/helpers/recording_helper_spec.rb +++ b/web/spec/helpers/recording_helper_spec.rb @@ -10,7 +10,7 @@ describe MusicSessionHelper do @music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true) # @music_session.connections << @connection @music_session.save - @connection.join_the_session(@music_session, true, nil) + @connection.join_the_session(@music_session, true, nil, @user) @recording = Recording.start(@music_session, @user) @recording.stop @recording.reload diff --git a/web/spec/requests/music_sessions_api_spec.rb b/web/spec/requests/music_sessions_api_spec.rb index 592a375c9..6a5c35947 100755 --- a/web/spec/requests/music_sessions_api_spec.rb +++ b/web/spec/requests/music_sessions_api_spec.rb @@ -700,7 +700,7 @@ describe "Music Session API ", :type => :api do music_session = FactoryGirl.create(:music_session, :creator => user, :musician_access => true) # music_session.connections << connection music_session.save - connection.join_the_session(music_session, true, nil) + connection.join_the_session(music_session, true, nil, user) recording = Recording.start(music_session, user) recording.stop recording.reload diff --git a/web/spec/requests/users_api_spec.rb b/web/spec/requests/users_api_spec.rb index 07dd6eae4..fd46ed5bc 100644 --- a/web/spec/requests/users_api_spec.rb +++ b/web/spec/requests/users_api_spec.rb @@ -985,8 +985,9 @@ describe "User API", :type => :api do ms = FactoryGirl.create(:music_session, :creator => user, :musician_access => true) # ms.connections << connection ms.save! - connection.join_the_session(ms, true, nil) - ms } + connection.join_the_session(ms, true, nil, user) + ms + } it "fetches facebook successfully" do login(user.email, user.password, 200, true) @@ -1122,7 +1123,7 @@ describe "User API", :type => :api do @music_session = FactoryGirl.create(:music_session, :creator => user, :musician_access => true) # @music_session.connections << @connection @music_session.save - @connection.join_the_session(@music_session, true, nil) + @connection.join_the_session(@music_session, true, nil, user) @recording = Recording.start(@music_session, user) @recording.stop @recording.reload From 2c58ded35f6857e762f22c39230b854a4ea6d6e1 Mon Sep 17 00:00:00 2001 From: Bert Owen Date: Sat, 10 May 2014 00:37:51 +0800 Subject: [PATCH 005/114] VRFS-1700 fixed --- ruby/lib/jam_ruby/models/chat_message.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby/lib/jam_ruby/models/chat_message.rb b/ruby/lib/jam_ruby/models/chat_message.rb index c02ed1d7b..028e2d411 100644 --- a/ruby/lib/jam_ruby/models/chat_message.rb +++ b/ruby/lib/jam_ruby/models/chat_message.rb @@ -27,7 +27,10 @@ module JamRuby start = params[:start].presence start = start.to_i || 0 - query = ChatMessage.offset(start).limit(limit) + music_session_id = params[:music_session] + + query = ChatMessage.where('music_session_id = ?', music_session_id) + .offset(start).limit(limit) if query.length == 0 [query, nil] From dc6dec76cfdd498aa78973fd478c9dc66861cb15 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Fri, 9 May 2014 14:27:18 -0500 Subject: [PATCH 006/114] * move registerChatMessage so that it always gets a chance to fire --- web/app/assets/javascripts/chatPanel.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/app/assets/javascripts/chatPanel.js b/web/app/assets/javascripts/chatPanel.js index fef16ab0b..7b7496a53 100644 --- a/web/app/assets/javascripts/chatPanel.js +++ b/web/app/assets/javascripts/chatPanel.js @@ -139,14 +139,14 @@ $form.submit(sendMessage); $textBox.keydown(handleEnter); $sendChatMessageBtn.click(sendMessage); - - registerChatMessage(bind); } else { $form.submit(null); $textBox.keydown(null); $sendChatMessageBtn.click(null); } + + registerChatMessage(bind); } // called from sidebar when messages come in From e3b17fb439841b6c71e586992f4c81facec42d20 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Fri, 9 May 2014 14:36:03 -0500 Subject: [PATCH 007/114] * .touch on the history entries --- admin/spec/features/feeds_spec.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/admin/spec/features/feeds_spec.rb b/admin/spec/features/feeds_spec.rb index 7c468c2f1..81f28e97e 100644 --- a/admin/spec/features/feeds_spec.rb +++ b/admin/spec/features/feeds_spec.rb @@ -49,6 +49,9 @@ describe 'Feeds' do describe 'activities' do before do + music_session.touch + recording.touch + diagnostic.touch visit admin_feed_path end From 589b0dad343a1da2d81e180cceb691407dec6fe9 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Sat, 10 May 2014 05:59:19 +0000 Subject: [PATCH 008/114] VRFS-1706 fixed sporadic display of session rating --- web/app/views/clients/_rateSession.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/app/views/clients/_rateSession.html.erb b/web/app/views/clients/_rateSession.html.erb index fa87832f5..abc9d2bb5 100644 --- a/web/app/views/clients/_rateSession.html.erb +++ b/web/app/views/clients/_rateSession.html.erb @@ -1,4 +1,4 @@ -
+
<%= image_tag "shared/icon_session.png", {:height => 19, :width => 19, :class => "content-icon"} %> From 5d5dc51434da495bab19979ffcc619decf785655 Mon Sep 17 00:00:00 2001 From: Anthony Davis Date: Sat, 10 May 2014 14:08:39 -0500 Subject: [PATCH 009/114] Slight fix to chat text in sidebar --- web/app/views/clients/_sidebar.html.erb | 2 +- web/spec/features/chat_message_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web/app/views/clients/_sidebar.html.erb b/web/app/views/clients/_sidebar.html.erb index 8836beb67..8c79172f6 100644 --- a/web/app/views/clients/_sidebar.html.erb +++ b/web/app/views/clients/_sidebar.html.erb @@ -102,7 +102,7 @@
- Chat is available during session is connected. + Chat is available when session is connected.
diff --git a/web/spec/features/chat_message_spec.rb b/web/spec/features/chat_message_spec.rb index 159f032d8..baaaf18ad 100644 --- a/web/spec/features/chat_message_spec.rb +++ b/web/spec/features/chat_message_spec.rb @@ -25,7 +25,7 @@ describe "Chat Message", :js => true, :type => :feature, :capybara_feature => tr sign_in_poltergeist(user1) find("[layout-id=\"panelChat\"] .panel-header").trigger(:click) - find(".chat-status", text: 'Chat is available during session is connected.') + find(".chat-status", text: 'Chat is available when session is connected.') end end From bf18a936c81ac611b09a869627d4e189ddcb3147 Mon Sep 17 00:00:00 2001 From: Anthony Davis Date: Sat, 10 May 2014 14:16:17 -0500 Subject: [PATCH 010/114] VRFS-1708 - fix failing feed tests, remove interdependency --- web/spec/features/feed_spec.rb | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/web/spec/features/feed_spec.rb b/web/spec/features/feed_spec.rb index 9fb9ec5a0..a177c63b5 100644 --- a/web/spec/features/feed_spec.rb +++ b/web/spec/features/feed_spec.rb @@ -4,7 +4,7 @@ describe "Feed", :js => true, :type => :feature, :capybara_feature => true do let (:user) { FactoryGirl.create(:user) } - before(:all) do + before(:each) do MusicSession.delete_all Recording.delete_all end @@ -13,7 +13,6 @@ describe "Feed", :js => true, :type => :feature, :capybara_feature => true do describe "sessions" do before(:each) do - MusicSession.delete_all create_session(creator: user) formal_leave_by(user) end @@ -94,11 +93,11 @@ describe "Feed", :js => true, :type => :feature, :capybara_feature => true do describe "recordings" do before(:each) do - MusicSession.delete_all - Recording.delete_all start_recording_with(user) stop_recording + claim_recording("my recording", "my recording description") formal_leave_by(user) + MusicSession.delete_all end # it "should render avatar" do @@ -127,13 +126,6 @@ describe "Feed", :js => true, :type => :feature, :capybara_feature => true do it "should render stats" do visit "/client#/feed" - # close recording finished dialog - claim_recording("my recording", "my recording description") - - MusicSession.delete_all - - find('#btn-refresh-feed').trigger(:click) - # initial stats find('span.plays').should have_content('0') find('span.comments').should have_content('0') @@ -161,13 +153,6 @@ describe "Feed", :js => true, :type => :feature, :capybara_feature => true do it "should render details" do visit "/client#/feed" - # close recording finished dialog - claim_recording("my recording", "my recording description") - - MusicSession.delete_all - - find('#btn-refresh-feed').trigger(:click) - find('.feed-details a.details').trigger(:click) # confirm user avatar exists From f83f333dd144eb57c1ef244f1778408beaac837e Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Sun, 11 May 2014 00:17:44 +0000 Subject: [PATCH 011/114] VRFS-736 like us features --- web/app/controllers/users_controller.rb | 15 +++++++++------ web/app/views/clients/_footer.html.erb | 7 +++++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/web/app/controllers/users_controller.rb b/web/app/controllers/users_controller.rb index d380c6b34..3a52f9e3b 100644 --- a/web/app/controllers/users_controller.rb +++ b/web/app/controllers/users_controller.rb @@ -370,18 +370,21 @@ class UsersController < ApplicationController end def endorse - if uu = User.where(['id = ? AND first_liked_us IS NULL',params[:id]]).limit(1).first + if uu = current_user || + uu = User.where(['id = ? AND first_liked_us IS NULL',params[:id]]).limit(1).first uu.first_liked_us = Time.now uu.save! - end if params[:id].present? + end if params[:id].present? && (service=params[:service]).present? - url, service = 'http://www.jamkazam.com', params[:service] + service ||= 'facebook' + url = CGI::escape('http://www.jamkazam.com') + txt = CGI::escape('Check out JamKazam -- Play music together over the Internet as if in the same room') if 'twitter'==service - url = 'https://twitter.com/jamkazam' + url = "https://twitter.com/intent/tweet?text=#{txt}&url=#{url}" elsif 'facebook'==service - url = 'https://www.facebook.com/JamKazam' + url = "http://www.facebook.com/sharer/sharer.php?u=#{url}&t=#{txt}" elsif 'google'==service - url = 'https://plus.google.com/u/0/106619885929396862606/about' + url = "https://plus.google.com/share?url=#{url}" end redirect_to url end diff --git a/web/app/views/clients/_footer.html.erb b/web/app/views/clients/_footer.html.erb index 5c4fee259..fdbcf9b0a 100644 --- a/web/app/views/clients/_footer.html.erb +++ b/web/app/views/clients/_footer.html.erb @@ -1,3 +1,10 @@ +
+
+ <% [:twitter, :facebook, :google].each do |src| %> + <%= link_to(image_tag("http://www.jamkazam.com/assets/content/icon_#{src}.png", :style => "vertical-align:top"), "/endorse/0/#{src}") %>  + <% end %> +
+
diff --git a/web/app/views/clients/_account_audio_profile.html.erb b/web/app/views/clients/_account_audio_profile.html.erb index 57588f1d7..72570a67f 100644 --- a/web/app/views/clients/_account_audio_profile.html.erb +++ b/web/app/views/clients/_account_audio_profile.html.erb @@ -27,7 +27,7 @@ NAME - DELETE + ACTIONS @@ -44,11 +44,13 @@ + + + + + + \ No newline at end of file diff --git a/web/app/views/clients/_sidebar.html.erb b/web/app/views/clients/_sidebar.html.erb index 8c79172f6..5a48671e6 100644 --- a/web/app/views/clients/_sidebar.html.erb +++ b/web/app/views/clients/_sidebar.html.erb @@ -102,7 +102,7 @@
- Chat is available when session is connected. + Chat is available when in session.
diff --git a/web/app/views/clients/gear/_gear_wizard.html.haml b/web/app/views/clients/gear/_gear_wizard.html.haml index 81274aabd..56fd3cd0a 100644 --- a/web/app/views/clients/gear/_gear_wizard.html.haml +++ b/web/app/views/clients/gear/_gear_wizard.html.haml @@ -34,11 +34,11 @@ %a.button-orange.watch-video.audio-input{href:'#', rel:'external'} WATCH VIDEO %br - %span.video-type (for input device) + %span.video-type (FOR INPUT DEVICE) %a.button-orange.watch-video.audio-output{href:'#', rel:'external'} WATCH VIDEO %br - %span.video-type (for output device) + %span.video-type (FOR OUTPUT DEVICE) .wizard-step-column %h2 Audio Input Device %select.w100.select-audio-input-device @@ -62,7 +62,7 @@ %option{val:'5'} 5 %option{val:'10'} 10 .buffers - %h2 Buffers In/Out + %h2 Buffer In/Out %select.select-buffer-in %option{val:'0'} 0 %option{val:'1'} 1 @@ -124,7 +124,7 @@ .unknown-text %div We cannot accurately predict the latency of your audio gear. To proceed, you must run an audio loopback test. Click button below to do this. %div.loopback-button-holder - %a.button-orange.loopback-test{href:'#'} Run Loopback Test + %a.button-orange.loopback-test{href:'#'} RUN LOOPBACK TEST .clearall .wizard-step{ 'layout-wizard-step' => "2", 'dialog-title' => "Configure Tracks", 'dialog-purpose' => "ConfigureTracks" } @@ -318,6 +318,6 @@ %script{type: 'text/template', id: 'template-chat-input'} .chat-input - %input{type:"radio", name: "chat-device", 'data-channel-id' => '{{data.id}}'} + %input{type:"radio", name: "chat-device", 'data-channel-id' => '{{data.id}}', 'data-channel-name' => '{{data.name}}'} %p = '{{data.name}}' diff --git a/web/config/application.rb b/web/config/application.rb index 1654b9fb0..ebc2bb375 100644 --- a/web/config/application.rb +++ b/web/config/application.rb @@ -241,5 +241,7 @@ if defined?(Bundler) config.ftue_network_test_duration = 10 # max number of people to test config.ftue_network_test_max_clients = 8 + # the maximum amount of allowable latency + config.ftue_maximum_gear_latency = 20 end end diff --git a/web/spec/features/chat_message_spec.rb b/web/spec/features/chat_message_spec.rb index baaaf18ad..248860d41 100644 --- a/web/spec/features/chat_message_spec.rb +++ b/web/spec/features/chat_message_spec.rb @@ -25,7 +25,7 @@ describe "Chat Message", :js => true, :type => :feature, :capybara_feature => tr sign_in_poltergeist(user1) find("[layout-id=\"panelChat\"] .panel-header").trigger(:click) - find(".chat-status", text: 'Chat is available when session is connected.') + find(".chat-status", text: 'Chat is available when in session.') end end diff --git a/web/spec/features/in_session_spec.rb b/web/spec/features/in_session_spec.rb index 8398837df..2e57bacb5 100644 --- a/web/spec/features/in_session_spec.rb +++ b/web/spec/features/in_session_spec.rb @@ -55,7 +55,7 @@ describe "In a Session", :js => true, :type => :feature, :capybara_feature => tr find('#btn-leave-session-test').trigger(:click) wait_for_ajax - expect(page).to have_selector('h1', text: 'audio gear settings') + expect(page).to have_selector('h1', text: 'audio gear setup') end leave_music_session_sleep_delay diff --git a/web/spec/features/user_progression_spec.rb b/web/spec/features/user_progression_spec.rb index 68c1ee5bf..f4ff4393e 100644 --- a/web/spec/features/user_progression_spec.rb +++ b/web/spec/features/user_progression_spec.rb @@ -75,8 +75,10 @@ describe "User Progression", :js => true, :type => :feature, :capybara_feature sign_in_poltergeist user visit '/client#/account/audio' find("div.account-audio a[data-purpose='add-profile']").trigger(:click) - jk_select('ASIO4ALL v2 - ASIO', 'div[layout-wizard-step="0"] select.select-audio-device') - find('#btn-ftue-2-save').trigger(:click) + find('.btn-next').trigger(:click) + jk_select('Built-in', 'div[layout-wizard-step="1"] select.select-audio-input-device') + + find('.btn-next.button-orange').trigger(:click) sleep 1 end From 5752f2d7dd6a47894e11f4e5dffb12b988cebc6a Mon Sep 17 00:00:00 2001 From: Seth Call Date: Thu, 29 May 2014 15:34:19 -0500 Subject: [PATCH 087/114] * fixing tests --- web/app/controllers/clients_controller.rb | 30 ------------------- web/app/helpers/client_helper.rb | 4 +++ .../spec/jam_websockets/router_spec.rb | 5 ++-- 3 files changed, 7 insertions(+), 32 deletions(-) diff --git a/web/app/controllers/clients_controller.rb b/web/app/controllers/clients_controller.rb index 65accb87c..928715adf 100644 --- a/web/app/controllers/clients_controller.rb +++ b/web/app/controllers/clients_controller.rb @@ -20,7 +20,6 @@ class ClientsController < ApplicationController end def latency_tester - gon_properties render :layout => 'client' end @@ -38,33 +37,4 @@ class ClientsController < ApplicationController redirect_to client_url end end -<<<<<<< HEAD -======= - - private - - def gon_properties - # use gon to pass variables into javascript - gon.websocket_gateway_uri = Rails.application.config.websocket_gateway_uri - gon.websocket_gateway_trusted_uri = Rails.application.config.websocket_gateway_trusted_uri - gon.check_for_client_updates = Rails.application.config.check_for_client_updates - gon.fp_apikey = Rails.application.config.filepicker_rails.api_key - gon.fp_upload_dir = Rails.application.config.filepicker_upload_dir - gon.allow_force_native_client = Rails.application.config.allow_force_native_client - gon.ftue_io_wait_time = Rails.application.config.ftue_io_wait_time - gon.ftue_packet_rate_treshold = Rails.application.config.ftue_packet_rate_treshold - gon.ftue_network_test_duration = Rails.application.config.ftue_network_test_duration - gon.ftue_network_test_max_clients = Rails.application.config.ftue_network_test_max_clients - gon.ftue_maximum_gear_latency = Rails.application.config.ftue_maximum_gear_latency - - # is this the native client or browser? - @nativeClient = is_native_client? - - # let javascript have access to the server's opinion if this is a native client - gon.isNativeClient = @nativeClient - - gon.use_cached_session_scores = Rails.application.config.use_cached_session_scores - gon.allow_both_find_algos = Rails.application.config.allow_both_find_algos - end ->>>>>>> * wip end diff --git a/web/app/helpers/client_helper.rb b/web/app/helpers/client_helper.rb index f70eddec9..f8f52caf6 100644 --- a/web/app/helpers/client_helper.rb +++ b/web/app/helpers/client_helper.rb @@ -43,6 +43,10 @@ module ClientHelper gon.fp_upload_dir = Rails.application.config.filepicker_upload_dir gon.allow_force_native_client = Rails.application.config.allow_force_native_client gon.ftue_io_wait_time = Rails.application.config.ftue_io_wait_time + gon.ftue_packet_rate_treshold = Rails.application.config.ftue_packet_rate_treshold + gon.ftue_network_test_duration = Rails.application.config.ftue_network_test_duration + gon.ftue_network_test_max_clients = Rails.application.config.ftue_network_test_max_clients + gon.ftue_maximum_gear_latency = Rails.application.config.ftue_maximum_gear_latency # is this the native client or browser? @nativeClient = is_native_client? diff --git a/websocket-gateway/spec/jam_websockets/router_spec.rb b/websocket-gateway/spec/jam_websockets/router_spec.rb index 092cd9dbe..6d1743265 100644 --- a/websocket-gateway/spec/jam_websockets/router_spec.rb +++ b/websocket-gateway/spec/jam_websockets/router_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' require 'thread' LoginClient = Class.new do - attr_accessor :onmsgblock, :onopenblock, :encode_json, :channel_id, :client_id, :user_id, :context + attr_accessor :onmsgblock, :onopenblock, :encode_json, :channel_id, :client_id, :user_id, :context, :trusted def initialize() @@ -149,8 +149,9 @@ describe Router do client.should_receive(:onerror) client.should_receive(:onmessage) client.should_receive(:encode_json=) + client.should_receive(:trusted=) - @router.new_client(client) + @router.new_client(client, false) done #end end From 6ad607cd245d6cc43b1cfa50eeb0d957f73a3818 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Thu, 29 May 2014 16:52:50 -0500 Subject: [PATCH 088/114] * fixing latency tester's page --- web/app/assets/javascripts/fakeJamClient.js | 4 +-- .../javascripts/gear/step_network_test.js | 18 +++++----- web/app/assets/javascripts/utils.js | 1 - web/app/views/clients/index.html.erb | 2 +- .../views/clients/latency_tester.html.haml | 2 +- web/config/environments/test.rb | 3 ++ web/spec/features/gear_wizard_spec.rb | 35 ++++++++++++++++++- 7 files changed, 50 insertions(+), 15 deletions(-) diff --git a/web/app/assets/javascripts/fakeJamClient.js b/web/app/assets/javascripts/fakeJamClient.js index 368808ab5..0f580bca0 100644 --- a/web/app/assets/javascripts/fakeJamClient.js +++ b/web/app/assets/javascripts/fakeJamClient.js @@ -203,8 +203,8 @@ } function FTUESetInputMusicDevice() { } function FTUESetOutputMusicDevice() { } - function FTUEGetInputMusicDevice() { return null; } - function FTUEGetOutputMusicDevice() { return null; } + function FTUEGetInputMusicDevice() { return 'Built-in'; } + function FTUEGetOutputMusicDevice() { return 'Built-in'; } function FTUESetMusicInput() { dbg('FTUESetMusicInput'); } function FTUESetChatInput() { dbg('FTUESetChatInput'); } diff --git a/web/app/assets/javascripts/gear/step_network_test.js b/web/app/assets/javascripts/gear/step_network_test.js index 40e7c3361..7cbc6fea1 100644 --- a/web/app/assets/javascripts/gear/step_network_test.js +++ b/web/app/assets/javascripts/gear/step_network_test.js @@ -78,21 +78,21 @@ function testFinished() { var attempt = getCurrentAttempt(); - if(!attempt.final) { - attempt.final = {reason : attempt.reason}; + if(!testSummary.final) { + testSummary.final = {reason : attempt.reason}; } - var reason = attempt.final.reason; + var reason = testSummary.final.reason; if(reason == "success") { renderStopTest(attempt.num_clients, "Your router and Internet service will support sessions of up to " + attempt.num_clients + " JamKazam musicians.") testedSuccessfully = true; - if(!attempt.final.num_clients) { - attempt.final.num_clients = attempt.num_clients; + if(!testSummary.final.num_clients) { + testSummary.final.num_clients = attempt.num_clients; } - context.JK.GA.trackNetworkTest(context.JK.detectOS(), attempt.final.num_clients); + context.JK.GA.trackNetworkTest(context.JK.detectOS(), testSummary.final.num_clients); context.jamClient.SetNetworkTestScore(attempt.num_clients); - if(attempt.final.num_clients == 2) { + if(testSummary.final.num_clients == 2) { $testResults.addClass('acceptable'); } else { @@ -162,6 +162,7 @@ attempt.server_client_id = serverClientId; attempt.received_progress = false; testSummary.attempts.push(attempt); + console.log("pushing attempt: " + testSummary.attempts.length) //context.jamClient.StopNetworkTest(''); @@ -169,7 +170,6 @@ updateProgress(0, false); - $currentScore.css context.jamClient.TestNetworkPktBwRate(serverClientId, TEST_SUCCESS_CALLBACK, TEST_TIMEOUT_CALLBACK, NETWORK_TEST_TYPES.PktTest400LowLatency, gon.ftue_network_test_duration, @@ -281,7 +281,7 @@ else if(numClientsToTest > STARTING_NUM_CLIENTS) { // this means we've gone up before... so don't go back down (i.e., creating a loop) attempt.reason = "success"; - attempt.final = { reason:'success', num_clients: numClientsToTest - 1 } + testSummary.final = { reason:'success', num_clients: numClientsToTest - 1 } testFinished(); } else { diff --git a/web/app/assets/javascripts/utils.js b/web/app/assets/javascripts/utils.js index f8c23c374..470f60e5e 100644 --- a/web/app/assets/javascripts/utils.js +++ b/web/app/assets/javascripts/utils.js @@ -666,7 +666,6 @@ deviceInfo.outputCount = device.output_count; loadedDevices[device.guid] = deviceInfo; - logger.debug("loaded device: ", deviceInfo); }) logger.debug(context.JK.dlen(loadedDevices) + " devices loaded.", loadedDevices); diff --git a/web/app/views/clients/index.html.erb b/web/app/views/clients/index.html.erb index 513d49d75..74ca23a43 100644 --- a/web/app/views/clients/index.html.erb +++ b/web/app/views/clients/index.html.erb @@ -253,7 +253,7 @@ } JK.app = JK.JamKazam(); - var jamServer = new JK.JamServer(JK.app, function(event_type) {JK.app.activeElementEvent(event_type)}); + var jamServer = new JK.JamServer(JK.app, function(event_type) {}); jamServer.initialize(); JK.initJamClient(); diff --git a/web/app/views/clients/latency_tester.html.haml b/web/app/views/clients/latency_tester.html.haml index fd8d61bbb..27e632c41 100644 --- a/web/app/views/clients/latency_tester.html.haml +++ b/web/app/views/clients/latency_tester.html.haml @@ -49,7 +49,7 @@ } JK.app = JK.JamKazam(); - var jamServer = new JK.JamServer(JK.app); + var jamServer = new JK.JamServer(JK.app, function(event_type) {}); jamServer.initialize(); // If no jamClient (when not running in native client) diff --git a/web/config/environments/test.rb b/web/config/environments/test.rb index 40eeee247..cbaab4cb2 100644 --- a/web/config/environments/test.rb +++ b/web/config/environments/test.rb @@ -82,6 +82,9 @@ SampleApp::Application.configure do config.vanilla_url = '/forums' config.vanilla_login_url = '/forums/entry/jsconnect' + # very low waits to speed up automated tests config.ftue_io_wait_time = 1 + config.ftue_network_test_duration = 1 + config.ftue_network_test_max_clients = 5 end diff --git a/web/spec/features/gear_wizard_spec.rb b/web/spec/features/gear_wizard_spec.rb index 8f40dce6a..c94f7891e 100644 --- a/web/spec/features/gear_wizard_spec.rb +++ b/web/spec/features/gear_wizard_spec.rb @@ -11,7 +11,40 @@ describe "Gear Wizard", :js => true, :type => :feature, :capybara_feature => tru end it "success path" do - visit "/client#/home/gear-wizard" + visit '/client#/account/audio' + # step 1 - intro + find("div.account-audio a[data-purpose='add-profile']").trigger(:click) + find('.btn-next').trigger(:click) + + # step 2 - select gear + find('.ftue-step-title', text: 'Select & Test Audio Gear') + jk_select('Built-in', 'div[layout-wizard-step="1"] select.select-audio-input-device') + find('.btn-next.button-orange').trigger(:click) + + # step 3 - configure tracks + find('.ftue-step-title', text: 'Configure Tracks') + find('.btn-next.button-orange').trigger(:click) + + # step 4 - configure voice chat + find('.ftue-step-title', text: 'Configure Voice Chat') + find('.btn-next.button-orange').trigger(:click) + + # step 5 - configure direct monitoring + find('.ftue-step-title', text: 'Turn Off Direct Monitoring') + find('.btn-next.button-orange').trigger(:click) + + # step 6 - Test Router & Network + find('.ftue-step-title', text: 'Test Router & Network') + find('.button-orange.start-network-test').trigger(:click) + find('.user-btn', text: 'RUN NETWORK TEST ANYWAY').trigger(:click) + find('.button-grey.start-network-test').trigger(:click) + find('.button-orange.start-network-test') + find('.btn-next.button-orange').trigger(:click) + + # step 7 - Success + find('.ftue-step-title', text: 'Success!') + find('.btn-close.button-orange').trigger(:click) + end end From 00de83fc5c1cda037fff91db5c49ba68c3a54b04 Mon Sep 17 00:00:00 2001 From: Anthony Davis Date: Thu, 29 May 2014 20:01:02 -0500 Subject: [PATCH 089/114] Fixing VRFS-1701 - API requires countrycode in the value attrib --- web/app/views/users/new.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/app/views/users/new.html.erb b/web/app/views/users/new.html.erb index 13d101d5f..18218f7ee 100644 --- a/web/app/views/users/new.html.erb +++ b/web/app/views/users/new.html.erb @@ -40,7 +40,7 @@ <% @countriesx.each do |country| %> <% unless country[:countrycode].blank? %> - + <% end %> <% end %> From 7d246ef81784869bfc56cfcce9cc2f346cce26a4 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Thu, 29 May 2014 20:58:40 -0500 Subject: [PATCH 090/114] * fix reconnect and limit bands 3 test --- .../javascripts/gear/step_network_test.js | 17 +++++++++++++++++ .../assets/javascripts/gear/step_select_gear.js | 5 +++-- web/app/assets/javascripts/textMessageDialog.js | 2 ++ web/app/views/clients/index.html.erb | 2 +- web/spec/features/bands_spec.rb | 6 +++--- 5 files changed, 26 insertions(+), 6 deletions(-) diff --git a/web/app/assets/javascripts/gear/step_network_test.js b/web/app/assets/javascripts/gear/step_network_test.js index 7cbc6fea1..220ccf068 100644 --- a/web/app/assets/javascripts/gear/step_network_test.js +++ b/web/app/assets/javascripts/gear/step_network_test.js @@ -34,6 +34,7 @@ var $currentScore = null; var $scoredClients = null; var $subscore = null; + var backendGuardTimeout = null; var serverClientId = ''; var isScoring = false; @@ -113,6 +114,10 @@ context.JK.alertSupportedNeeded("JamKazam is experiencing technical difficulties."); renderStopTest('', ''); } + else if(reason == 'backend_gone') { + context.JK.alertSupportedNeeded("The JamKazam client is experiencing technical difficulties."); + renderStopTest('', ''); + } else if(reason == "invalid_response") { context.JK.alertSupportedNeeded("The JamKazam client software had an unexpected problem while scoring your Internet connection. Reason=" + attempt.backend_data.reason + '.'); renderStopTest('', ''); @@ -151,6 +156,11 @@ return testSummary.attempts[testSummary.attempts.length - 1]; } + function backendTimedOut() { + testSummary.final = {reason: 'backend_gone'} + testFinished(); + } + function attemptTestPass() { @@ -170,6 +180,8 @@ updateProgress(0, false); + backendGuardTimeout = setTimeout(function(){backendTimedOut()}, 10000); + context.jamClient.TestNetworkPktBwRate(serverClientId, TEST_SUCCESS_CALLBACK, TEST_TIMEOUT_CALLBACK, NETWORK_TEST_TYPES.PktTest400LowLatency, gon.ftue_network_test_duration, @@ -410,6 +422,10 @@ reset(); } + function afterHide() { + + } + function initialize(_$step) { $step = _$step; @@ -427,6 +443,7 @@ } this.newSession = newSession; + this.afterHide = afterHide; this.beforeShow = beforeShow; this.initialize = initialize; diff --git a/web/app/assets/javascripts/gear/step_select_gear.js b/web/app/assets/javascripts/gear/step_select_gear.js index ba8260460..9f1afd38c 100644 --- a/web/app/assets/javascripts/gear/step_select_gear.js +++ b/web/app/assets/javascripts/gear/step_select_gear.js @@ -1056,7 +1056,8 @@ clearOutputPorts(); resetFrameBuffers(); } - function beforeHide() { + function afterHide() { + logger.debug("unregistering focus watch") $(window).off('focus', onFocus); } @@ -1098,7 +1099,7 @@ this.handleNext = handleNext; this.beforeShow = beforeShow; - this.beforeHide = beforeHide; + this.afterHide = afterHide; this.initialize = initialize; self = this; diff --git a/web/app/assets/javascripts/textMessageDialog.js b/web/app/assets/javascripts/textMessageDialog.js index 8099da112..a00a65671 100644 --- a/web/app/assets/javascripts/textMessageDialog.js +++ b/web/app/assets/javascripts/textMessageDialog.js @@ -201,11 +201,13 @@ } function renderNotConnected() { + console.log("RENDER NOT CONNECTED!!!!!!!!!") $interactionBlocker.addClass('active'); $disconnectedMsg.addClass('active'); } function renderConnected() { + console.log("RENDER CONNECTED!!!!!!!!!") $interactionBlocker.removeClass('active'); $disconnectedMsg.removeClass('active'); } diff --git a/web/app/views/clients/index.html.erb b/web/app/views/clients/index.html.erb index 74ca23a43..513d49d75 100644 --- a/web/app/views/clients/index.html.erb +++ b/web/app/views/clients/index.html.erb @@ -253,7 +253,7 @@ } JK.app = JK.JamKazam(); - var jamServer = new JK.JamServer(JK.app, function(event_type) {}); + var jamServer = new JK.JamServer(JK.app, function(event_type) {JK.app.activeElementEvent(event_type)}); jamServer.initialize(); JK.initJamClient(); diff --git a/web/spec/features/bands_spec.rb b/web/spec/features/bands_spec.rb index 43183d082..e2e65b1b8 100644 --- a/web/spec/features/bands_spec.rb +++ b/web/spec/features/bands_spec.rb @@ -88,15 +88,15 @@ describe "Bands", :js => true, :type => :feature, :capybara_feature => true do end it "limits genres to 3" do + genres = Genre.limit(4) navigate_band_setup within('#band-setup-form') do fill_in 'band-name', with: "whatever" fill_in 'band-biography', with: "a good story" - all('#band-genres input[type="checkbox"]').each_with_index do |cb, i| - cb.trigger(:click) unless i > 3 + genres.each do |genre| + find("#band-genres input[value='#{genre.id}']").trigger(:click) end end - sleep 1 find('#btn-band-setup-next').trigger(:click) expect(page).to have_selector('#tdBandGenres .error-text li', text: "No more than 3 genres are allowed.") end From d4a21e62f3cf3656d2c93be52dc8162952245350 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Thu, 29 May 2014 22:02:29 -0400 Subject: [PATCH 091/114] VRFS-1746 RSVP cancel dialog complete --- .../assets/javascripts/rsvpCancelDialog.js | 20 ++++++++++++------- .../assets/javascripts/rsvpSubmitDialog.js | 16 +++++++++------ web/app/assets/javascripts/ui_helper.js | 2 -- .../javascripts/web/scheduled_session.js | 11 ++++++---- .../views/clients/_rsvpCancelDialog.html.haml | 2 +- 5 files changed, 31 insertions(+), 20 deletions(-) diff --git a/web/app/assets/javascripts/rsvpCancelDialog.js b/web/app/assets/javascripts/rsvpCancelDialog.js index 828af34b7..4f60e0608 100644 --- a/web/app/assets/javascripts/rsvpCancelDialog.js +++ b/web/app/assets/javascripts/rsvpCancelDialog.js @@ -43,13 +43,18 @@ e.preventDefault(); var error = false; - rest.cancelRsvpRequest(sessionId, rsvpRequestId) + var cancelOption = $('input[name="cancel"]:checked', $screen).val(); + rest.cancelRsvpRequest(sessionId, rsvpRequestId, cancelOption) .done(function(response) { + console.log("add session comment"); var comment = $.trim($('#txtComment', $screen).val()); if (comment.length > 0) { rest.addSessionInfoComment(sessionId, comment) .done(function(response) { - + if (!error) { + app.layout.closeDialog(dialogId); + $btnCancel.trigger("rsvpCancelEvent"); + } }) .fail(function(xhr) { error = true; @@ -57,17 +62,18 @@ $('.error', $screen).show(); }); } + else { + if (!error) { + app.layout.closeDialog(dialogId); + $btnCancel.trigger("rsvpCancelEvent"); + } + } }) .fail(function(xhr) { error = true; $('.error', $screen).html("Unexpected error occurred while cancelling RSVP request (" + xhr.status + ")"); $('.error', $screen).show(); }); - - if (!error) { - app.layout.closeDialog(dialogId); - $btnCancel.trigger("rsvpCancelEvent"); - } }); } diff --git a/web/app/assets/javascripts/rsvpSubmitDialog.js b/web/app/assets/javascripts/rsvpSubmitDialog.js index 8360d5bf8..9f0c92e90 100644 --- a/web/app/assets/javascripts/rsvpSubmitDialog.js +++ b/web/app/assets/javascripts/rsvpSubmitDialog.js @@ -78,7 +78,10 @@ if (comment.length > 0) { rest.addSessionInfoComment(sessionId, comment) .done(function(response) { - + if (!error) { + app.layout.closeDialog(dialogId); + $btnSubmit.trigger("rsvpSubmitEvent"); + } }) .fail(function(xhr) { error = true; @@ -86,17 +89,18 @@ $('.error', $screen).show(); }); } + else { + if (!error) { + app.layout.closeDialog(dialogId); + $btnSubmit.trigger("rsvpSubmitEvent"); + } + } }) .fail(function(xhr) { error = true; $('.error', $screen).html("Unexpected error occurred while saving RSVP request (" + xhr.status + ")"); $('.error', $screen).show(); }); - - if (!error) { - app.layout.closeDialog(dialogId); - $btnSubmit.trigger("rsvpSubmitEvent"); - } }); } diff --git a/web/app/assets/javascripts/ui_helper.js b/web/app/assets/javascripts/ui_helper.js index b9e4f64f5..9bff51a7d 100644 --- a/web/app/assets/javascripts/ui_helper.js +++ b/web/app/assets/javascripts/ui_helper.js @@ -36,14 +36,12 @@ } function launchRsvpSubmitDialog(sessionId) { - console.log("launching submit"); var rsvpDialog = new JK.RsvpSubmitDialog(JK.app, sessionId); rsvpDialog.initialize(); rsvpDialog.showDialog(); } function launchRsvpCancelDialog(sessionId, rsvpRequestId) { - console.log("launching cancel"); var rsvpDialog = new JK.RsvpCancelDialog(JK.app, sessionId, rsvpRequestId); rsvpDialog.initialize(); rsvpDialog.showDialog(); diff --git a/web/app/assets/javascripts/web/scheduled_session.js b/web/app/assets/javascripts/web/scheduled_session.js index 30398fa88..ec86025cc 100644 --- a/web/app/assets/javascripts/web/scheduled_session.js +++ b/web/app/assets/javascripts/web/scheduled_session.js @@ -79,15 +79,18 @@ }); + // retrieve RSVP requests for this user rest.getRsvpRequests(musicSessionId) - .done(function(rsvp) { - if (rsvp && rsvp.length > 0) { + .done(function(rsvps) { + if (rsvps && rsvps.length > 0) { + // should only be 1 RSVP for this session + var rsvp = rsvps[0]; if (rsvp.canceled) { $('.call-to-action').html('Your RSVP request to this session has been cancelled.'); $btnAction.hide(); } else { - $('.call-to-action').html('Tell session organizer if you can no longer join this session'); + $('.call-to-action').html('Tell the session organizer if you can no longer join this session'); $btnAction.html('CANCEL RSVP'); $btnAction.click(function(e) { ui.launchRsvpCancelDialog(musicSessionId, rsvp.id); @@ -96,7 +99,7 @@ } // no RSVP else { - $('.call-to-action').html("Tell the session creator you'd like to play in this session"); + $('.call-to-action').html("Tell the session organizer you'd like to play in this session"); $btnAction.html('RSVP NOW!'); $btnAction.click(function(e) { ui.launchRsvpSubmitDialog(musicSessionId); diff --git a/web/app/views/clients/_rsvpCancelDialog.html.haml b/web/app/views/clients/_rsvpCancelDialog.html.haml index 218126cca..dbe7127c4 100644 --- a/web/app/views/clients/_rsvpCancelDialog.html.haml +++ b/web/app/views/clients/_rsvpCancelDialog.html.haml @@ -12,7 +12,7 @@ %br/ %br/ .error{:style => 'display:none'} - %input{:type => 'radio', :name => 'cancel', :value => 'single', :checked => true} Cancel RSVP just for this one session + %input{:type => 'radio', :name => 'cancel', :value => 'yes', :checked => true} Cancel RSVP just for this one session %br/ %input{:type => 'radio', :name => 'cancel', :value => 'all'} Cancel RSVP for all future sessions %br/ From 4919b9277127b5c7477ee77a43adfcd944cb1084 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Thu, 29 May 2014 21:13:50 -0500 Subject: [PATCH 092/114] * adding backend guard to network test step --- web/app/assets/javascripts/gear/step_network_test.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/web/app/assets/javascripts/gear/step_network_test.js b/web/app/assets/javascripts/gear/step_network_test.js index 220ccf068..784d3809d 100644 --- a/web/app/assets/javascripts/gear/step_network_test.js +++ b/web/app/assets/javascripts/gear/step_network_test.js @@ -161,6 +161,12 @@ testFinished(); } + function clearBackendGuard() { + if(backendGuardTimeout) { + clearTimeout(backendGuardTimeout); + backendGuardTimeout = null; + } + } function attemptTestPass() { @@ -180,7 +186,7 @@ updateProgress(0, false); - backendGuardTimeout = setTimeout(function(){backendTimedOut()}, 10000); + backendGuardTimeout = setTimeout(function(){backendTimedOut()}, gon.ftue_network_test_duration + 1000); context.jamClient.TestNetworkPktBwRate(serverClientId, TEST_SUCCESS_CALLBACK, TEST_TIMEOUT_CALLBACK, NETWORK_TEST_TYPES.PktTest400LowLatency, @@ -269,6 +275,8 @@ } function networkTestSuccess(data) { + clearBackendGuard(); + var attempt = getCurrentAttempt(); function refineTest(up) { @@ -378,6 +386,8 @@ } function networkTestTimeout(data) { + clearBackendGuard(); + logger.warn("network timeout when testing latency test: " + data); var attempt = getCurrentAttempt(); From a607124e63f9877957387cbe7e8fd43e3a1a5558 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Thu, 29 May 2014 22:19:30 -0400 Subject: [PATCH 093/114] VRFS-1746 RSVP cancel dialog bug fixes --- ruby/lib/jam_ruby/models/notification.rb | 2 +- web/app/assets/javascripts/rsvpCancelDialog.js | 16 +++++----------- web/app/assets/javascripts/rsvpSubmitDialog.js | 15 +++++---------- 3 files changed, 11 insertions(+), 22 deletions(-) diff --git a/ruby/lib/jam_ruby/models/notification.rb b/ruby/lib/jam_ruby/models/notification.rb index 620d66887..0d3266d40 100644 --- a/ruby/lib/jam_ruby/models/notification.rb +++ b/ruby/lib/jam_ruby/models/notification.rb @@ -712,7 +712,7 @@ module JamRuby @@mq_router.publish_to_user(target_user.id, msg) begin - UserMailer.send_scheduled_session_rsvp_cancelled(target_user.email, notification_msg, music_session).deliver + UserMailer.scheduled_session_rsvp_cancelled(target_user.email, notification_msg, music_session).deliver rescue => e @@log.error("Unable to send send_scheduled_session_rsvp_cancelled email to offline user #{target_user.email} #{e}") end diff --git a/web/app/assets/javascripts/rsvpCancelDialog.js b/web/app/assets/javascripts/rsvpCancelDialog.js index 4f60e0608..a0a610cb5 100644 --- a/web/app/assets/javascripts/rsvpCancelDialog.js +++ b/web/app/assets/javascripts/rsvpCancelDialog.js @@ -46,15 +46,11 @@ var cancelOption = $('input[name="cancel"]:checked', $screen).val(); rest.cancelRsvpRequest(sessionId, rsvpRequestId, cancelOption) .done(function(response) { - console.log("add session comment"); var comment = $.trim($('#txtComment', $screen).val()); if (comment.length > 0) { rest.addSessionInfoComment(sessionId, comment) .done(function(response) { - if (!error) { - app.layout.closeDialog(dialogId); - $btnCancel.trigger("rsvpCancelEvent"); - } + }) .fail(function(xhr) { error = true; @@ -62,15 +58,13 @@ $('.error', $screen).show(); }); } - else { - if (!error) { - app.layout.closeDialog(dialogId); - $btnCancel.trigger("rsvpCancelEvent"); - } + + if (!error) { + app.layout.closeDialog(dialogId); + $btnCancel.trigger("rsvpCancelEvent"); } }) .fail(function(xhr) { - error = true; $('.error', $screen).html("Unexpected error occurred while cancelling RSVP request (" + xhr.status + ")"); $('.error', $screen).show(); }); diff --git a/web/app/assets/javascripts/rsvpSubmitDialog.js b/web/app/assets/javascripts/rsvpSubmitDialog.js index 9f0c92e90..3138c8864 100644 --- a/web/app/assets/javascripts/rsvpSubmitDialog.js +++ b/web/app/assets/javascripts/rsvpSubmitDialog.js @@ -78,10 +78,7 @@ if (comment.length > 0) { rest.addSessionInfoComment(sessionId, comment) .done(function(response) { - if (!error) { - app.layout.closeDialog(dialogId); - $btnSubmit.trigger("rsvpSubmitEvent"); - } + }) .fail(function(xhr) { error = true; @@ -89,15 +86,13 @@ $('.error', $screen).show(); }); } - else { - if (!error) { - app.layout.closeDialog(dialogId); - $btnSubmit.trigger("rsvpSubmitEvent"); - } + + if (!error) { + app.layout.closeDialog(dialogId); + $btnSubmit.trigger("rsvpSubmitEvent"); } }) .fail(function(xhr) { - error = true; $('.error', $screen).html("Unexpected error occurred while saving RSVP request (" + xhr.status + ")"); $('.error', $screen).show(); }); From 5cd947729cc20e8f303f7ffbe80b104cf500fa17 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Thu, 29 May 2014 21:51:02 -0500 Subject: [PATCH 094/114] * don't track user-agent of 'monitor' --- web/app/assets/javascripts/gear/step_network_test.js | 1 - web/app/views/shared/_ga.html.erb | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/web/app/assets/javascripts/gear/step_network_test.js b/web/app/assets/javascripts/gear/step_network_test.js index 784d3809d..34f6710ee 100644 --- a/web/app/assets/javascripts/gear/step_network_test.js +++ b/web/app/assets/javascripts/gear/step_network_test.js @@ -178,7 +178,6 @@ attempt.server_client_id = serverClientId; attempt.received_progress = false; testSummary.attempts.push(attempt); - console.log("pushing attempt: " + testSummary.attempts.length) //context.jamClient.StopNetworkTest(''); diff --git a/web/app/views/shared/_ga.html.erb b/web/app/views/shared/_ga.html.erb index e3957a4d5..f22ac3a63 100644 --- a/web/app/views/shared/_ga.html.erb +++ b/web/app/views/shared/_ga.html.erb @@ -1,4 +1,4 @@ -<% if current_user.nil? || !Rails.application.config.ga_suppress_admin || !current_user.admin? # remove admin users from GA %> +<% if request.user_agent != "monitor" && (current_user.nil? || !Rails.application.config.ga_suppress_admin || !current_user.admin?) # remove admin users from GA %>