aboutsummaryrefslogtreecommitdiffstats
path: root/alias-angular/app/js/controllers.js
blob: 144592a7f0ad1c32f97fe5bb677a8b786236465e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
'use strict';
/* App Controllers */

function ConnectCtl($scope, StropheSrv, $log, $rootScope) {
    $rootScope.username = $scope.username;
    $rootScope.is_connected = function () {
        return $rootScope.status == Strophe.Status.CONNECTED;
    };
    function connect_callback(status){
        $rootScope.status = status;
        switch(status) {
        case Strophe.Status.CONNECTING:
            $log.log('Strophe is connecting.');
            break;
        case  Strophe.Status.CONNFAIL:
            $log.log('Strophe failed to connect.');
            break;
        case Strophe.Status.DISCONNECTING:
            $log.log('Strophe is disconnecting.');
            break;
        case Strophe.Status.DISCONNECTED:
            $log.log('Strophe is disconnected.');
            break;
        case Strophe.Status.CONNECTED:
            $log.log('Strophe is connected.');
            $rootScope.$broadcast('connected', true);
        }
    };
    $scope.login = function () {
        StropheSrv.login($scope.username, $scope.password, connect_callback);
    };
    $scope.disconnect = function() {
        StropheSrv.disconnect();
    };
}

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');
            //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 (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{
                    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();
    });

    $scope.getRoster = function () {
        var query = $iq({type : 'get'}).c('query', {xmlns : Strophe.NS.ROSTER});
        StropheSrv.sendIQ(query, onRoster);
    };
 }

RosterCtl.$inject = ['$scope','StropheSrv','$log'];