crunchbutton/www/assets/cockpit/js/service.heartbeat.js
2014-10-29 15:51:35 -07:00

73 lines
2.1 KiB
JavaScript

NGApp.factory('HeartbeatService', function($rootScope, $resource, $interval, LocationService, AccountService, PushService) {
var service = {
date: null,
repeat: null,
every: 20 * 1000
};
var heartbeat = $resource(App.service + 'heartbeat', {}, {
'load' : { 'method': 'GET', params : {} }
});
service.load = function(callback) {
if (LocationService.location && LocationService.location.latitude && LocationService.location.longitude) {
params = LocationService.location;
} else {
params = {};
}
heartbeat.load(params, function(data) {
callback(data);
});
}
service.check = function() {
// Just run if the user is loggedin
console.debug('Checking heartbeat...');
if (AccountService.isLoggedIn()) {
// reboot the interval
$interval.cancel(service.repeat);
service.repeat = $interval(service.check, service.every);
service.load(function(data) {
service.date = new Date;
if (App.isPhoneGap && parent.plugins && parent.plugins.pushNotification) {
var complete = function(){};
PushService.badges = parseInt(data.tickets) + parseInt(data.orders['new']);
parent.plugins.pushNotification.setApplicationIconBadgeNumber(complete, complete, PushService.badges);
}
$rootScope.$broadcast('tickets', data.tickets);
$rootScope.$broadcast('totalOrders', data.orders['total']);
$rootScope.$broadcast('newOrders', data.orders['new']);
$rootScope.$broadcast('acceptedOrders', data.orders['accepted']);
$rootScope.$broadcast('pickedupOrders', data.orders['pickedup']);
});
}
}
// wait for us to be logged in
$rootScope.$on('userAuth', service.check);
// check as soon as we come back
$rootScope.$on('appResume', service.check);
$rootScope.$on('appPause', function() {
if (App.isPhoneGap && parent.plugins && parent.plugins.pushNotification) {
var complete = function(){};
parent.plugins.pushNotification.setApplicationIconBadgeNumber(complete, complete, PushService.badges);
}
});
// check when told to
$rootScope.$on('updateHeartbeat', service.check);
// check every 30 seconds
service.repeat = $interval(service.check, service.every);
return service;
});