diff options
Diffstat (limited to 'alias-angular/app/js/controllers.js')
| -rw-r--r-- | alias-angular/app/js/controllers.js | 62 |
1 files changed, 39 insertions, 23 deletions
diff --git a/alias-angular/app/js/controllers.js b/alias-angular/app/js/controllers.js index 4288a10..144592a 100644 --- a/alias-angular/app/js/controllers.js +++ b/alias-angular/app/js/controllers.js @@ -2,23 +2,27 @@ /* App Controllers */ function ConnectCtl($scope, StropheSrv, $log, $rootScope) { - $scope.status = ""; + $rootScope.username = $scope.username; + $rootScope.is_connected = function () { + return $rootScope.status == Strophe.Status.CONNECTED; + }; function connect_callback(status){ - if ( status == Strophe.Status.CONNECTING ) { + $rootScope.status = status; + switch(status) { + case Strophe.Status.CONNECTING: $log.log('Strophe is connecting.'); - $scope.status = "Connecting"; - } else if ( status == Strophe.Status.CONNFAIL ) { + break; + case Strophe.Status.CONNFAIL: $log.log('Strophe failed to connect.'); - $scope.status = "Failed"; - } else if ( status == Strophe.Status.DISCONNECTING ) { + break; + case Strophe.Status.DISCONNECTING: $log.log('Strophe is disconnecting.'); - $scope.status = "Disconnecting"; - } else if ( status == Strophe.Status.DISCONNECTED ) { + break; + case Strophe.Status.DISCONNECTED: $log.log('Strophe is disconnected.'); - $scope.status = "Disconnected"; - } else if ( status == Strophe.Status.CONNECTED ) { + break; + case Strophe.Status.CONNECTED: $log.log('Strophe is connected.'); - $scope.status = "Connected"; $rootScope.$broadcast('connected', true); } }; @@ -34,43 +38,55 @@ ConnectCtl.$inject = ['$scope', 'StropheSrv', '$log', '$rootScope']; function RosterCtl($scope, StropheSrv, $log) { $scope.contacts = {}; + $scope.get_contacts = function() { + return _.toArray($scope.contacts); + }; function onRoster(iq) { var elems = iq.getElementsByTagName('query'); var query = elems[0]; Strophe.forEachChild(query, 'item', function(item){ var jid = item.getAttribute('jid'); var name = item.getAttribute('name'); - $scope.contacts[jid] = {name: name}; + //contacts are offline by default + $scope.contacts[jid] = {jid: jid, name: name, status: 'offline'}; }); + //make sure the roster is populated before sending presence request + StropheSrv.send($pres()); }; + function onPresence(presence) { var who = $(presence).attr('from'); var jid = Strophe.getBareJidFromJid(who); var type = $(presence).attr('type'); - if (type !== 'error') { - if (type === 'unavailable') { - $scope.contacts[jid]['status']='offline'; - } - else { - var show = $(presence).find('show').text(); - if (show === '') { - $scope.contacts[jid]['status'] = 'online'; + // if (jid in $scope.contacts) { + if(_.has($scope.contacts, jid)){ + if (type !== 'error') { + if (type === 'unavailable') { + $log.log(jid +' is offline'); + $scope.contacts[jid]['status'] = 'offline'; }else{ - $scope.contacts[jid]['status'] = 'away'; + var show = $(presence).find('show').text(); + if (show === '') { + $scope.contacts[jid]['status'] = 'online'; + }else{ + $log.log(jid +' is away'); + $scope.contacts[jid]['status'] = 'away'; + } } } } } + $scope.$on('connected', function() { StropheSrv.addHandler(onPresence, 'presence'); $scope.getRoster(); - StropheSrv.send($pres()); }); + $scope.getRoster = function () { var query = $iq({type : 'get'}).c('query', {xmlns : Strophe.NS.ROSTER}); StropheSrv.sendIQ(query, onRoster); }; -} + } RosterCtl.$inject = ['$scope','StropheSrv','$log']; |
