149 lines
4.3 KiB
JavaScript
149 lines
4.3 KiB
JavaScript
/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
|
|
(function() {
|
|
'use strict';
|
|
|
|
/**
|
|
* @name Alarm
|
|
* @constructor
|
|
*/
|
|
function Alarm() {
|
|
this.currentAlarm = null;
|
|
}
|
|
|
|
/**
|
|
* @name getAlarms
|
|
* @desc Fetch the list of alarms from the server and use the last one
|
|
*/
|
|
Alarm.getAlarms = function() {
|
|
var _this = this;
|
|
var now = new Date();
|
|
var browserTime = Math.floor(now.getTime()/1000);
|
|
|
|
this.$$resource.fetch('', 'alarmslist?browserTime=' + browserTime).then(function(data) {
|
|
|
|
var alarms = data.alarms.sort(function reverseSortByAlarmTime(a, b) {
|
|
var x = parseInt(a[2]);
|
|
var y = parseInt(b[2]);
|
|
return (y - x);
|
|
});
|
|
|
|
if (alarms.length > 0) {
|
|
var next = alarms.pop();
|
|
var now = new Date();
|
|
var utc = Math.floor(now.getTime()/1000);
|
|
var url = next[0] + '/' + next[1];
|
|
var alarmTime = parseInt(next[2]);
|
|
var delay = alarmTime;
|
|
if (alarmTime > 0) delay -= utc;
|
|
var d = new Date(alarmTime*1000);
|
|
//console.log ("now = " + now.toUTCString());
|
|
//console.log ("next event " + url + " in " + delay + " seconds (on " + d.toUTCString() + ")");
|
|
|
|
var f = angular.bind(_this, Alarm.showAlarm, url);
|
|
|
|
if (_this.currentAlarm)
|
|
_this.$timeout.cancel(_this.currentAlarm);
|
|
|
|
_this.currentAlarm = _this.$timeout(f, delay*1000);
|
|
}
|
|
});
|
|
};
|
|
|
|
/**
|
|
* @name showAlarm
|
|
* @desc Show the latest alarm using a toast
|
|
* @param url The URL of the calendar component for snoozing
|
|
*/
|
|
Alarm.showAlarm = function(url) {
|
|
var _this = this;
|
|
|
|
this.$$resource.fetch(url, '?resetAlarm=yes').then(function(data) {
|
|
_this.$toast.show({
|
|
position: 'top right',
|
|
hideDelay: 0,
|
|
template: [
|
|
'<md-toast>',
|
|
' <div class="md-toast-content">',
|
|
' <md-input-container>',
|
|
' <label style="color: white;">{{ summary }}</label>',
|
|
' <md-select ng-model="reminder">',
|
|
' <md-option value=5>',
|
|
l('5 minutes'),
|
|
' </md-option>',
|
|
' <md-option value=10>',
|
|
l('10 minutes'),
|
|
' </md-option>',
|
|
' <md-option value=15>',
|
|
l('15 minutes'),
|
|
' </md-option>',
|
|
' <md-option value=30>',
|
|
l('30 minutes'),
|
|
' </md-option>',
|
|
' <md-option value=45>',
|
|
l('45 minutes'),
|
|
' </md-option>',
|
|
' <md-option value=60>',
|
|
l('1 hour'),
|
|
' </md-option>',
|
|
' <md-option value=1440>',
|
|
l('1 day'),
|
|
' </md-option>',
|
|
' </md-select>',
|
|
' </md-input-container>',
|
|
' <md-button ng-click="cancel()">',
|
|
l('Cancel'),
|
|
' </md-button>',
|
|
' <md-button ng-click="ok()">',
|
|
l('Ok'),
|
|
' </md-button>',
|
|
' </div>',
|
|
'</md-toast>'
|
|
].join(''),
|
|
locals: {
|
|
url: url
|
|
},
|
|
controller: AlarmController
|
|
});
|
|
|
|
/**
|
|
* @ngInject
|
|
*/
|
|
AlarmController.$inject = ['scope', '$sanitize', '$mdToast', 'url'];
|
|
function AlarmController(scope, $sanitize, $mdToast, url) {
|
|
scope.summary = $sanitize(data.summary);
|
|
scope.reminder = '10';
|
|
scope.cancel = function() {
|
|
$mdToast.hide();
|
|
};
|
|
scope.ok = function() {
|
|
_this.$$resource.fetch(url, 'view?snoozeAlarm=' + scope.reminder);
|
|
$mdToast.hide();
|
|
};
|
|
}
|
|
});
|
|
};
|
|
|
|
/**
|
|
* @memberof Alarm
|
|
* @desc The factory we'll register as Alarm in the Angular module SOGo.Common
|
|
* @ngInject
|
|
*/
|
|
AlarmService.$inject = ['$timeout', 'sgSettings', 'Resource', '$mdToast'];
|
|
function AlarmService($timeout, Settings, Resource, $mdToast) {
|
|
angular.extend(Alarm, {
|
|
$timeout: $timeout,
|
|
$$resource: new Resource(Settings.activeUser('folderURL') + 'Calendar', Settings.activeUser()),
|
|
$toast: $mdToast
|
|
});
|
|
|
|
return Alarm; // return constructor
|
|
}
|
|
|
|
/* Factory registration in Angular module */
|
|
angular
|
|
.module('SOGo.Common')
|
|
.factory('Alarm', AlarmService);
|
|
|
|
})();
|