summaryrefslogtreecommitdiff
path: root/www/js
diff options
context:
space:
mode:
authorPliable Pixels <pliablepixels@gmail.com>2016-10-18 13:43:24 -0700
committerPliable Pixels <pliablepixels@gmail.com>2016-10-18 13:43:24 -0700
commitd4b661cd78db1b7cdc2b7174f8f254b4f5605a9c (patch)
treebb9ecff8994681f3bd17e497c47f25e2206b573f /www/js
parent6c3c2a2d3396b5ba85efcc47bb44ac59ff5cd325 (diff)
#353 - inital code (also requires ZM API patch) to support local and server timezones
Former-commit-id: bbee60cc64cb521c0f7d7fc75437a9f427c58b5a
Diffstat (limited to 'www/js')
-rw-r--r--www/js/DataModel.js57
-rw-r--r--www/js/EventCtrl.js29
-rw-r--r--www/js/MontageCtrl.js19
-rw-r--r--www/js/MontageHistoryCtrl.js34
-rw-r--r--www/js/PortalLoginCtrl.js2
-rw-r--r--www/js/TimelineCtrl.js14
6 files changed, 125 insertions, 30 deletions
diff --git a/www/js/DataModel.js b/www/js/DataModel.js
index 65c5835d..ae201667 100644
--- a/www/js/DataModel.js
+++ b/www/js/DataModel.js
@@ -25,6 +25,8 @@ angular.module('zmApp.controllers')
var multiservers = [];
var oldevents = [];
var migrationComplete = false;
+
+ var tz = "";
var languages = [
@@ -120,6 +122,7 @@ angular.module('zmApp.controllers')
'enableLowBandwidth':false,
'autoSwitchBandwidth':false,
'disableAlarmCheckMontage': false,
+ 'useLocalTimeZone': true,
@@ -779,6 +782,13 @@ angular.module('zmApp.controllers')
}
+ if (typeof loginData.useLocalTimeZone == 'undefined') {
+
+ loginData.useLocalTimeZone = true;
+
+ }
+
+
if (typeof loginData.monSingleImageQuality == 'undefined') {
@@ -791,6 +801,9 @@ angular.module('zmApp.controllers')
} else {
log("defaultServer configuration NOT found. Keeping login at defaults");
}
+
+
+
// FIXME: HACK: This is the latest entry point into dataModel init, so start portal login after this
// not the neatest way
$rootScope.$emit('init-complete');
@@ -1459,6 +1472,50 @@ angular.module('zmApp.controllers')
//console.log("ZMData setMonitors called with " + mon.length + " monitors");
monitors = mon;
},
+
+
+ //returns TZ value immediately (sync)
+
+ getTimeZoneNow: function()
+ {
+ // console.log ("getTimeZoneNow: " + tz ? tz : moment.tz.guess());
+ return tz ? tz : moment.tz.guess();
+ },
+
+ // returns server timezone, failing which local timezone
+ // always resolves true
+
+ getTimeZone: function ()
+ {
+ var d = $q.defer();
+ if (!tz)
+ {
+ log ("First invocation of TimeZone, asking server");
+ var apiurl = loginData.apiurl + '/host/getTimeZone.json';
+ $http.get(apiurl)
+ .then(function (success) {
+ tz = success.data.tz;
+ d.resolve(tz);
+ debug ("Timezone API response is:"+success.data.tz);
+ return (d.promise);
+
+ },
+ function (error) {
+ tz = moment.tz.guess();
+ debug("Timezone API error handler, guessing local:" + tz);
+ d.resolve(tz);
+ return (d.promise);
+ });
+
+ }
+ else
+ {
+ d.resolve(tz);
+ return d.promise;
+ }
+
+ return d.promise;
+ },
//-----------------------------------------------------------------------------
// When I display events in the event controller, this is the first function I call
diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js
index 59853c98..33e24f32 100644
--- a/www/js/EventCtrl.js
+++ b/www/js/EventCtrl.js
@@ -1773,29 +1773,44 @@ angular.module('zmApp.controllers')
function humanizeTime(str) {
- return moment(str).fromNow();
-
+ //console.log ("Time:"+str+" TO LOCAL " + moment(str).local().toString());
+ return moment.tz(str, NVRDataModel.getTimeZoneNow()).fromNow();
}
$scope.prettifyDate = function (str) {
- return moment(str).format('MMM Do');
+ if (NVRDataModel.getLogin().useLocalTimeZone)
+ return moment.tz(str, NVRDataModel.getTimeZoneNow()).tz(moment.tz.guess()).format('MMM Do');
+ else
+ return moment(str).format('MMM Do');
};
function prettifyDate(str) {
- return moment(str).format('MMM Do');
+ if (NVRDataModel.getLogin().useLocalTimeZone)
+ return moment.tz(str, NVRDataModel.getTimeZoneNow()).tz(moment.tz.guess()).format('MMM Do');
+ else
+ return moment(str).format('MMM Do');
}
$scope.prettifyTime = function (str) {
- return moment(str).format(NVRDataModel.getTimeFormat());
+ if (NVRDataModel.getLogin().useLocalTimeZone)
+ return moment.tz(str, NVRDataModel.getTimeZoneNow()).tz(moment.tz.guess()).format(NVRDataModel.getTimeFormat());
+ else
+ return moment(str).format(NVRDataModel.getTimeFormat());
};
$scope.prettifyTimeSec = function (str) {
- return moment(str).format(NVRDataModel.getTimeFormatSec());
+ if (NVRDataModel.getLogin().useLocalTimeZone)
+ return moment.tz(str, NVRDataModel.getTimeZoneNow()).tz(moment.tz.guess()).format(NVRDataModel.getTimeFormatSec());
+ else
+ return moment(str).format(NVRDataModel.getTimeFormatSec());
};
$scope.prettify = function (str) {
- return moment(str).format(NVRDataModel.getTimeFormat() + ', MMMM Do YYYY');
+ if (NVRDataModel.getLogin().useLocalTimeZone)
+ return moment.tz(str, NVRDataModel.getTimeZoneNow()).tz(moment.tz.guess()).format(NVRDataModel.getTimeFormat() + ', MMMM Do YYYY');
+ else
+ return moment(str).format(NVRDataModel.getTimeFormat() + ', MMMM Do YYYY');
};
//--------------------------------------------------------
// For consistency we are keeping the refresher list
diff --git a/www/js/MontageCtrl.js b/www/js/MontageCtrl.js
index 6b3eedb8..735631af 100644
--- a/www/js/MontageCtrl.js
+++ b/www/js/MontageCtrl.js
@@ -200,6 +200,7 @@ angular.module('zmApp.controllers')
pckry.getItemElements().forEach(function (itemElem) {
draggie = new Draggabilly(itemElem);
+ draggie = new Draggabilly(itemElem);
pckry.bindDraggabillyEvents(draggie);
draggies.push(draggie);
draggie.disable();
@@ -226,10 +227,8 @@ angular.module('zmApp.controllers')
NVRDataModel.debug("All images loaded, doing image layout");
- $timeout(function () {
- pckry.initShiftLayout(positions, 'data-item-id');
- //$scope.$digest();
- }, 0);
+
+
}
$timeout(function () {
NVRDataModel.log("Force calling resize");
@@ -386,7 +385,7 @@ angular.module('zmApp.controllers')
return;
}
- if (pckry && !$scope.isDragabillyOn) pckry.shiftLayout();
+ //if (pckry && !$scope.isDragabillyOn) pckry.shiftLayout();
$rootScope.rand = Math.floor((Math.random() * 100000) + 1);
// if you see the time move, montage should move
@@ -844,11 +843,17 @@ angular.module('zmApp.controllers')
function orientationChanged() {
- NVRDataModel.debug("Detected orientation change, redoing packery resize");
+ /* NVRDataModel.debug("Detected orientation change, redoing packery resize");
$timeout(function () {
if (pckry) pckry.onresize();
- }, zm.packeryTimer);
+ }, zm.packeryTimer);*/
$ionicScrollDelegate.$getByHandle("montage-delegate").scrollTop();
+ var positions = pckry.getShiftPositions('data-item-id');
+ //console.log ("POSITIONS MAP " + JSON.stringify(positions));
+ var ld = NVRDataModel.getLogin();
+ ld.packeryPositions = JSON.stringify(positions);
+ //console.log ("Saving " + ld.packeryPositions);
+ NVRDataModel.setLogin(ld);
}
$scope.toggleSizeButtons = function () {
diff --git a/www/js/MontageHistoryCtrl.js b/www/js/MontageHistoryCtrl.js
index 3ff57223..23f6bc4c 100644
--- a/www/js/MontageHistoryCtrl.js
+++ b/www/js/MontageHistoryCtrl.js
@@ -45,10 +45,10 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc
};
function orientationChanged() {
- NVRDataModel.debug("Detected orientation change, redoing packery resize");
- $timeout(function () {
+ // NVRDataModel.debug("Detected orientation change, redoing packery resize");
+ /* $timeout(function () {
pckry.onresize();
- });
+ });*/
}
//--------------------------------------
// pause/unpause nph-zms
@@ -335,7 +335,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc
function checkAllEvents() {
//console.log("Timer:Events are checked....");
- if (pckry && !$scope.isDragabillyOn) pckry.shiftLayout();
+ //if (pckry && !$scope.isDragabillyOn) pckry.shiftLayout();
for (var i = 0; i < $scope.MontageMonitors.length; i++) {
// don't check for monitors that are not shown
@@ -874,8 +874,19 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc
var ld = NVRDataModel.getLogin();
var elem = angular.element(document.getElementById("mygrid"));
+ pckry = new Packery('.grid', {
+ itemSelector: '.grid-item',
+ percentPosition: true,
+ columnWidth: '.grid-sizer',
+ gutter: 0,
+ initLayout: true
+
+ });
//console.log ("**** mygrid is " + JSON.stringify(elem));
imagesLoaded(elem).on('progress', function (instance, img) {
+ var result = img.isLoaded ? 'loaded' : 'broken';
+ NVRDataModel.debug( '~~loaded image is ' + result + ' for ' + img.img.src );
+ pckry.layout();
progressCalled = true;
// if (layouttype) $timeout (function(){layout(pckry);},100);
});
@@ -885,19 +896,12 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc
NVRDataModel.debug("All images loaded");
$ionicLoading.hide();
- layouttype = true;
- pckry = new Packery('.grid', {
- itemSelector: '.grid-item',
- percentPosition: true,
- columnWidth: '.grid-sizer',
- gutter: 0,
- initLayout: layouttype
-
- });
- pckry.reloadItems();
+ $scope.areImagesLoading = false;
+
+
if (!progressCalled) {
NVRDataModel.log("*** PROGRESS WAS NOT CALLED");
-
+ pckry.reloadItems();
}
diff --git a/www/js/PortalLoginCtrl.js b/www/js/PortalLoginCtrl.js
index 541af937..ac3847f3 100644
--- a/www/js/PortalLoginCtrl.js
+++ b/www/js/PortalLoginCtrl.js
@@ -198,6 +198,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
{
NVRDataModel.debug("PortalLogin: auth success");
NVRDataModel.getKeyConfigParams(1);
+ NVRDataModel.getTimeZone();
// $state.go("login" ,{"wizard": false});
//login was ok, so get API details
NVRDataModel.getAPIversion()
@@ -248,6 +249,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
tryLoggingSecondTimeHack()
.then(function success(s) {
NVRDataModel.log("2nd time login hack worked!, nothing to do");
+ NVRDataModel.getTimeZone();
},
function error(e) {
$state.go("login", {
diff --git a/www/js/TimelineCtrl.js b/www/js/TimelineCtrl.js
index 90ecf37e..4ea92815 100644
--- a/www/js/TimelineCtrl.js
+++ b/www/js/TimelineCtrl.js
@@ -50,7 +50,10 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
// Used to display date range for timeline
//-----------------------------------------------------------
$scope.prettify = function (str) {
- return moment(str).format('MMMM Do YYYY, ' + NVRDataModel.getTimeFormat());
+ if (NVRDataModel.getLogin().useLocalTimeZone)
+ return moment.tz(str, NVRDataModel.getTimeZoneNow()).tz(moment.tz.guess()).format('MMMM Do YYYY, ' + NVRDataModel.getTimeFormat());
+ else
+ return moment(str).format('MMMM Do YYYY, ' + NVRDataModel.getTimeFormat());
};
//-----------------------------------------------------------
@@ -684,6 +687,15 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
if (typeof myevents[i].Event.DefaultVideo === 'undefined')
// console.log (JSON.stringify(myevents[i]));
myevents[i].Event.DefaultVideo = "";
+
+ if (NVRDataModel.getLogin().useLocalTimeZone)
+ {
+ //console.log ("CHANGING TZ");
+ myevents[i].Event.StartTime = moment.tz(myevents[i].Event.StartTime,NVRDataModel.getTimeZoneNow()).tz(moment.tz.guess()).format('YYYY-MM-DD HH:mm:ss');
+ //2016-08-15 17:40:00
+ myevents[i].Event.EndTime = moment.tz(myevents[i].Event.EndTime,NVRDataModel.getTimeZoneNow()).tz(moment.tz.guess()).format('YYYY-MM-DD HH:mm:ss');
+ }
+
graphData.add({
id: graphIndex,
content: "<span class='my-vis-font'>" + "( <i class='ion-android-notifications'></i>" + myevents[i].Event.AlarmFrames + ") " + myevents[i].Event.Notes + "</span>",