From a8987efaa1ab4b5ef4d8245d3f2cde92c9075e11 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Sun, 19 Oct 2014 21:18:05 -0400 Subject: [PATCH] VRFS-2337 added latency badge to musician hover bubble --- ruby/lib/jam_ruby/models/user.rb | 10 +++- web/app/assets/javascripts/hoverMusician.js | 24 ++++++++++ web/app/assets/javascripts/session_utils.js | 20 ++++---- .../stylesheets/client/hoverBubble.css.scss | 46 +++++++++++++++++++ web/app/views/api_users/show.rabl | 6 +++ web/app/views/clients/_hoverMusician.html.erb | 5 ++ web/app/views/clients/_musicians.html.erb | 8 ++-- 7 files changed, 103 insertions(+), 16 deletions(-) diff --git a/ruby/lib/jam_ruby/models/user.rb b/ruby/lib/jam_ruby/models/user.rb index b33a1d2c0..de0592801 100644 --- a/ruby/lib/jam_ruby/models/user.rb +++ b/ruby/lib/jam_ruby/models/user.rb @@ -324,7 +324,7 @@ module JamRuby read_attribute(:music_session_id) end - # ===== ARTIFICIAL ATTRIBUTES CREATED BY ActiveMusicSession.ams_users, MusicSession.sms_uses + # ===== ARTIFICIAL ATTRIBUTES CREATED BY ActiveMusicSession.ams_users, MusicSession.sms_users def full_score return nil unless has_attribute?(:full_score) a = read_attribute(:full_score) @@ -344,6 +344,14 @@ module JamRuby end # ====== END ARTIFICAL ATTRIBUTES + def score_info(destination_user) + if self.last_jam_locidispid && destination_user.last_jam_locidispid + self.connection.execute("select score from current_network_scores where alocidispid = #{self.last_jam_locidispid} and blocidispid = #{destination_user.last_jam_locidispid}").check + else + nil + end + end + # mods comes back as text; so give ourselves a parsed version def mods_json @mods_json ||= mods ? JSON.parse(mods, symbolize_names: true) : {} diff --git a/web/app/assets/javascripts/hoverMusician.js b/web/app/assets/javascripts/hoverMusician.js index 70f688d35..95548d3f4 100644 --- a/web/app/assets/javascripts/hoverMusician.js +++ b/web/app/assets/javascripts/hoverMusician.js @@ -7,8 +7,12 @@ var logger = context.JK.logger; var rest = context.JK.Rest(); var hoverSelector = "#musician-hover"; + var helpBubble = context.JK.HelpBubbleHelper; + var $templateLatency = null; + var sessionUtils = context.JK.SessionUtils; this.showBubble = function() { + $templateLatency = $("#template-account-session-latency"); var mouseLeft = x < (document.body.clientWidth / 2); var mouseTop = y < (document.body.clientHeight / 2); var css = {}; @@ -82,10 +86,29 @@ } } + var fullScore = null; + + if (response.last_jam_audio_latency && response.my_audio_latency && response.internet_score) { + response.last_jam_audio_latency + response.my_audio_latency + response.internet_score; + } + + // latency badge template needs these 2 properties + $.extend(response, { + audio_latency: response.last_jam_audio_latency, + full_score: fullScore + }); + + var latencyBadge = context._.template( + $templateLatency.html(), + $.extend(sessionUtils.createLatency(response), response), + {variable: 'data'} + ); + var musicianHtml = context.JK.fillTemplate(template, { userId: response.id, avatar_url: context.JK.resolveAvatarUrl(response.photo_url), name: response.name, + first_name: response.first_name, location: response.location, instruments: instrumentHtml, friend_count: response.friend_count, @@ -95,6 +118,7 @@ session_display: sessionDisplayStyle, join_display: joinDisplayStyle, sessionId: sessionId, + latency_badge: latencyBadge, //friendAction: response.is_friend ? "removeMusicianFriend" : (response.pending_friend_request ? "" : "sendMusicianFriendRequest"), friendAction: response.is_friend ? "" : (response.pending_friend_request ? "" : "sendMusicianFriendRequest"), followAction: response.is_following ? "removeMusicianFollowing" : "addMusicianFollowing", diff --git a/web/app/assets/javascripts/session_utils.js b/web/app/assets/javascripts/session_utils.js index 725da855d..482aaeab1 100644 --- a/web/app/assets/javascripts/session_utils.js +++ b/web/app/assets/javascripts/session_utils.js @@ -77,34 +77,34 @@ description = 'me'; } else if (!full_score) { - latencyDescription = LATENCY.UNKNOWN.description; + latencyDescription = LATENCY.UNKNOWN.description; latencyStyle = LATENCY.UNKNOWN.style; - iconName = 'purple' - description = 'missing' + iconName = 'purple'; + description = 'missing'; } else if (full_score <= LATENCY.GOOD.max) { latencyDescription = LATENCY.GOOD.description; latencyStyle = LATENCY.GOOD.style; - iconName = 'green' - description = 'good' + iconName = 'green'; + description = 'good'; } else if (full_score <= LATENCY.MEDIUM.max) { latencyDescription = LATENCY.MEDIUM.description; latencyStyle = LATENCY.MEDIUM.style; iconName = 'yellow'; - description = 'fair' + description = 'fair'; } else if (full_score <= LATENCY.POOR.max) { latencyDescription = LATENCY.POOR.description; latencyStyle = LATENCY.POOR.style; - iconName = 'red' - description = 'poor' + iconName = 'red'; + description = 'poor'; } else { latencyStyle = LATENCY.UNACCEPTABLE.style; latencyDescription = LATENCY.UNACCEPTABLE.description; - iconName = 'blue' - description = 'unacceptable' + iconName = 'blue'; + description = 'unacceptable'; } return { diff --git a/web/app/assets/stylesheets/client/hoverBubble.css.scss b/web/app/assets/stylesheets/client/hoverBubble.css.scss index a53fff3b8..b8d6ec315 100644 --- a/web/app/assets/stylesheets/client/hoverBubble.css.scss +++ b/web/app/assets/stylesheets/client/hoverBubble.css.scss @@ -1,3 +1,5 @@ +@import 'common'; + .bubble { width:350px; min-height:200px; @@ -74,4 +76,48 @@ -moz-border-radius:12px; border-radius:12px; } + + .musician-latency { + margin-right:35px; + position:relative; + width:350px; + } + + .latency-holder { + position:absolute; + width:100%; + text-align:center; + } + + .latency { + min-width: 50px; + display:inline-block; + padding:4px; + font-family:Arial, Helvetica, sans-serif; + font-weight:200; + font-size:11px; + text-align:center; + @include border-radius(2px); + color:white; + } + + .latency-unknown { + background-color:$latencyBadgeUnknown; + } + + .latency-unacceptable { + background-color:$latencyBadgeUnacceptable; + } + + .latency-good { + background-color:$latencyBadgeGood; + } + + .latency-fair{ + background-color:$latencyBadgeFair; + } + + .latency-poor { + background-color:$latencyBadgePoor; + } } \ No newline at end of file diff --git a/web/app/views/api_users/show.rabl b/web/app/views/api_users/show.rabl index b2827fdba..fd8b9b87e 100644 --- a/web/app/views/api_users/show.rabl +++ b/web/app/views/api_users/show.rabl @@ -30,6 +30,12 @@ elsif current_user node :pending_friend_request do |uu| current_user.pending_friend_request?(@user) end + node :my_audio_latency do |user| + current_user.last_jam_audio_latency.round if current_user.last_jam_audio_latency + end + node :internet_score do |user| + current_user.score_info(user) + end end child :friends => :friends do diff --git a/web/app/views/clients/_hoverMusician.html.erb b/web/app/views/clients/_hoverMusician.html.erb index 0a185a3ed..dd1994d6d 100644 --- a/web/app/views/clients/_hoverMusician.html.erb +++ b/web/app/views/clients/_hoverMusician.html.erb @@ -115,6 +115,11 @@
{biography}

+
+ Your latency to {first_name} is:  {latency_badge} +
+
+
FOLLOWING:

{followings} diff --git a/web/app/views/clients/_musicians.html.erb b/web/app/views/clients/_musicians.html.erb index 60279346f..1bc7256d8 100644 --- a/web/app/views/clients/_musicians.html.erb +++ b/web/app/views/clients/_musicians.html.erb @@ -50,11 +50,9 @@
-
-
Your latency
to {musician_first_name} is:
-
- {latency_badge} -
+
+
Your latency
to {musician_first_name} is: {latency_badge}
+