From 05748cd7dc129783867eaadb0bee7f2b2937a2fa Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 8 Jul 2013 15:01:19 -0700 Subject: [PATCH] Display repo and branch in buddy list --- .../collaboration/lib/buddy-list.coffee | 20 ++++++++++++++----- .../collaboration/lib/presence-utils.coffee | 20 +++++++++++++++---- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/packages/collaboration/lib/buddy-list.coffee b/src/packages/collaboration/lib/buddy-list.coffee index 6f5c8eee9..b14efa803 100644 --- a/src/packages/collaboration/lib/buddy-list.coffee +++ b/src/packages/collaboration/lib/buddy-list.coffee @@ -1,3 +1,4 @@ +url = require 'url' {$$} = require 'space-pen' SelectList = require 'select-list' {getAvailablePeople} = require './presence-utils' @@ -6,12 +7,18 @@ module.exports = class BuddyList extends SelectList @viewClass: -> "#{super} peoples-view overlay from-top" - filterKey: 'name' + filterKey: 'filterText' initialize: -> super - @setArray(getAvailablePeople()) + people = getAvailablePeople() + people.forEach (person) -> + segments = [] + segments.push(person.user.login) + segments.push(person.user.name) if person.user.name + person.filterText = segments.join(' ') + @setArray(people) @attach() attach: -> @@ -20,8 +27,11 @@ class BuddyList extends SelectList rootView.append(this) @miniEditor.focus() - itemForElement: ({info}) -> + itemForElement: ({user, state}) -> $$ -> @li class: 'two-lines', => - @div info.login, class: 'primary-line' - @div info.name, class: 'secondary-line' + @div "#{user.login} (#{user.name})", class: 'primary-line' + if state.repository + [owner, name] = url.parse(state.repository.url).path.split('/')[-2..] + name = name.replace(/\.git$/, '') + @div "#{owner}/#{name}@#{state.repository.branch}", class: 'secondary-line' diff --git a/src/packages/collaboration/lib/presence-utils.coffee b/src/packages/collaboration/lib/presence-utils.coffee index 1ac52df96..b04345dc8 100644 --- a/src/packages/collaboration/lib/presence-utils.coffee +++ b/src/packages/collaboration/lib/presence-utils.coffee @@ -19,19 +19,31 @@ module.exports = oauth_token: token channel = pusher.subscribe('presence-atom') channel.bind 'pusher:subscription_succeeded', (members) -> - availablePeople[members.me.id] = members.me console.log 'subscribed to presence channel' event = id: members.me.id + event.state = {} if git? - event.repository = + event.state.repository = branch: git.getShortHead() url: git.getConfigValue('remote.origin.url') - channel.trigger('client-details', event) + channel.trigger('client-state-changed', event) + + # List self as available for debugging UI when no one else is around + self = + id: members.me.id + user: members.me.info + state: event.state + availablePeople[self.id] = self channel.bind 'pusher:member_added', (member) -> console.log 'member added', member - availablePeople[member.id] = member + availablePeople[member.id] = {user: member.info} channel.bind 'pusher:member_removed', (member) -> console.log 'member removed', member availablePeople.delete(member.id) + + channel.bind 'client-state-changed', (event) -> + console.log 'client state changed', event + if person = availablePeople[event.id] + person.state = event.state