aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--alias-angular/app/index.html3
-rw-r--r--alias-angular/app/js/controllers.js36
-rw-r--r--alias-angular/app/js/services.js25
3 files changed, 52 insertions, 12 deletions
diff --git a/alias-angular/app/index.html b/alias-angular/app/index.html
index 528c754..305a456 100644
--- a/alias-angular/app/index.html
+++ b/alias-angular/app/index.html
@@ -14,10 +14,11 @@
<div id="roster" ng-controller="RosterCtl">
<ul>
- <li ng-repeat="contact in contacts">{{contact}}</li>
+ <li ng-repeat="(key,value) in contacts">{{key}}</li>
</ul>
</div>
<script src="lib/angular/angular.js"></script>
+ <script src="lib/jquery-1.7.2.min.js"></script>
<script src="lib/config.js"></script>
<script src="js/alias.js"></script>
<script src="lib/strophe.js"></script>
diff --git a/alias-angular/app/js/controllers.js b/alias-angular/app/js/controllers.js
index 97b44ee..2040e3a 100644
--- a/alias-angular/app/js/controllers.js
+++ b/alias-angular/app/js/controllers.js
@@ -24,17 +24,44 @@ function ConnectCtl($scope, StropheSrv, $log, $rootScope) {
ConnectCtl.$inject = ['$scope', 'StropheSrv', '$log', '$rootScope'];
function RosterCtl($scope, StropheSrv, $log) {
- $scope.contacts = [];
+ $scope.contacts = {};
function onRoster(iq) {
+ $log.log('im here');
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') || jid;
- $scope.contacts.push(name);
+ var name = item.getAttribute('name');
+ $scope.contacts[jid]={name: name};
});
};
- $scope.$on('connected', function() {$scope.getRoster();});
+ function onPresence(presence) {
+ var who = $(presence).attr('from');
+ var jid = Strophe.getBareJidFromJid(who);
+ $log.log(jid);
+ 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';
+ }else{
+ $scope.contacts[jid]['status'] = 'away';
+ }
+ }
+ delete $scope.contacts[jid];
+ }
+ return true;
+ }
+ $scope.$on('connected', function() {
+ StropheSrv.addHandler(onPresence, 'presence');
+ $log.log('test');
+ $scope.getRoster();
+ StropheSrv.send($pres());
+ });
$scope.getRoster = function () {
var query = $iq({type : 'get'}).c('query', {xmlns : Strophe.NS.ROSTER});
StropheSrv.sendIQ(query, onRoster);
@@ -42,3 +69,4 @@ function RosterCtl($scope, StropheSrv, $log) {
}
RosterCtl.$inject = ['$scope','StropheSrv','$log'];
+
diff --git a/alias-angular/app/js/services.js b/alias-angular/app/js/services.js
index 98bff5e..091a4fa 100644
--- a/alias-angular/app/js/services.js
+++ b/alias-angular/app/js/services.js
@@ -4,12 +4,23 @@ angular.module('Alias.services', [], function($provide) {
$provide.factory('StropheSrv', ['$log', '$rootScope',
function($log, $rootScope) {
var connection = new Strophe.Connection(BOSH_SERVICE);
- return {login: function(name, password, connect_callback) {
- connection.connect(name, password, connect_callback);
- },
- sendIQ: function(query, callback) {
- connection.sendIQ(query, function(data){
- $rootScope.$apply(callback(data));});
- }};
+ return {
+ login: function(name, password, connect_callback) {
+ connection.connect(name, password, connect_callback);
+ },
+ sendIQ: function(query, callback) {
+ connection.sendIQ(query, function (data) {
+ $rootScope.$apply(callback(data));
+ });
+ },
+ addHandler: function(callback, name) {
+ connection.addHandler(function(stanza){
+ $rootScope.$apply(callback(stanza));
+ }, null, name, null, null, null, null);
+ },
+ send: function(stanza) {
+ $rootScope.$apply(connection.send(stanza));
+ }
+ };
}]);
}); \ No newline at end of file