diff options
| author | Pliable Pixels <pliablepixels@gmail.com> | 2016-10-18 13:43:24 -0700 |
|---|---|---|
| committer | Pliable Pixels <pliablepixels@gmail.com> | 2016-10-18 13:43:24 -0700 |
| commit | d4b661cd78db1b7cdc2b7174f8f254b4f5605a9c (patch) | |
| tree | bb9ecff8994681f3bd17e497c47f25e2206b573f /www/js | |
| parent | 6c3c2a2d3396b5ba85efcc47bb44ac59ff5cd325 (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.js | 57 | ||||
| -rw-r--r-- | www/js/EventCtrl.js | 29 | ||||
| -rw-r--r-- | www/js/MontageCtrl.js | 19 | ||||
| -rw-r--r-- | www/js/MontageHistoryCtrl.js | 34 | ||||
| -rw-r--r-- | www/js/PortalLoginCtrl.js | 2 | ||||
| -rw-r--r-- | www/js/TimelineCtrl.js | 14 |
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>", |
