From 4f2562397da366f01ef8c654fdab3c664fd11d58 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Tue, 16 Oct 2018 08:48:00 -0400 Subject: fix for search lock with text in events --- www/js/EventCtrl.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'www/js') diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js index 90b615a2..e350f512 100644 --- a/www/js/EventCtrl.js +++ b/www/js/EventCtrl.js @@ -2745,11 +2745,13 @@ angular.module('zmApp.controllers') NVRDataModel.debug("No more - We have a total of " + maxEventsPage + " and are at page=" + currEventsPage); console.log("*** At Page " + currEventsPage + " of " + maxEventsPage + ", not proceeding"); + $ionicLoading.hide(); return; } currEventsPage++; if (!enableLoadMore) { + $ionicLoading.hide(); moreEvents = false; // Don't ion-scroll till enableLoadMore is true; $scope.$broadcast('scroll.infiniteScrollComplete'); @@ -2759,11 +2761,15 @@ angular.module('zmApp.controllers') var loadingStr = ""; if ($scope.search.text != "") { - var toastStr = $translate.instant('kToastSearchingPage') + currEventsPage; + + var toastStr = $translate.instant('kPleaseWait') +'...'+ currEventsPage; + console.log ("SHOW " + toastStr ); $ionicLoading.show({ maxwidth: 100, + noBackdrop:true, scope: $scope, - template: '' + template: toastStr, + // template: '' }); loadingStr = "none"; @@ -2854,6 +2860,7 @@ angular.module('zmApp.controllers') function (error) { // console.log("*** No More Events to Load, Stop Infinite Scroll ****"); moreEvents = false; + $ionicLoading.hide(); $scope.$broadcast('scroll.infiniteScrollComplete'); }); -- cgit v1.2.3 From a84ed1903f9ebd2d7e0c31543fe90e222126c668 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Tue, 16 Oct 2018 14:52:49 -0400 Subject: menu option to toggle event summary (iPhoneX ui interference) --- www/js/EventCtrl.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'www/js') diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js index e350f512..b2caf1d5 100644 --- a/www/js/EventCtrl.js +++ b/www/js/EventCtrl.js @@ -1814,11 +1814,25 @@ angular.module('zmApp.controllers') // data for events ranges summaries using the consolveEvents facility of ZM //-------------------------------------------------------------------------- + + $scope.footerToggle = function() { + + if ($scope.footerState == ionPullUpFooterState.EXPANDED) + $scope.footerCollapse(); + else + $scope.footerExpand(); + }; + $scope.footerExpand = function () { + $scope.footerState = ionPullUpFooterState.EXPANDED; footerExpand(); }; + $scope.footerCollapse = function() { + $scope.footerState = ionPullUpFooterState.MINIMIZED; + }; + function footerExpand() { //https://server/zm/api/events/consoleEvents/5%20minute.json var ld = NVRDataModel.getLogin(); -- cgit v1.2.3 From 3ce67b7a46785b15e31afb9c77af4524e3e576d4 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Wed, 17 Oct 2018 14:51:24 -0400 Subject: take out portal to screen animation --- www/js/PortalLoginCtrl.js | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'www/js') diff --git a/www/js/PortalLoginCtrl.js b/www/js/PortalLoginCtrl.js index 7fb4cc50..74ba806d 100644 --- a/www/js/PortalLoginCtrl.js +++ b/www/js/PortalLoginCtrl.js @@ -29,9 +29,12 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic loginData = NVRDataModel.getLogin(); $ionicHistory.nextViewOptions({ + disableAnimate:true, disableBack: true }); + + $scope.pindata = {}; if ($ionicSideMenuDelegate.isOpen()) { $ionicSideMenuDelegate.toggleLeft(); @@ -153,6 +156,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic disableAnimate: true, disableBack: true }); + $state.go("app.login", { "wizard": false }); -- cgit v1.2.3 From e7c927d71902e132b3f43bc0de9d3a723f1e7a0b Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Wed, 17 Oct 2018 16:44:29 -0400 Subject: don't call push notification handler till auth is done --- www/js/PortalLoginCtrl.js | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'www/js') diff --git a/www/js/PortalLoginCtrl.js b/www/js/PortalLoginCtrl.js index 74ba806d..36630a73 100644 --- a/www/js/PortalLoginCtrl.js +++ b/www/js/PortalLoginCtrl.js @@ -272,9 +272,10 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic //this needs to be rootScope so it lives even when we are out of view var pp = $rootScope.$on("process-push", function () { - NVRDataModel.debug("*** PROCESS PUSH HANDLER CALLED INSIDE PORTAL LOGIN, setting ProcessPush to true"); processPush = true; - evaluateTappedNotification(); + NVRDataModel.debug("processPush set to true, but will act after login is complete..."); + + }); @@ -283,13 +284,6 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic function evaluateTappedNotification() { var ld = NVRDataModel.getLogin(); - // give enough time for state conflicts to work out - // that way PortalLogin doesn't override this - // and I thought I was eliminating hacks.... - $timeout(function () { - processPush = false; - }, 1000); - if ($rootScope.tappedNotification == 2) { // url launch NVRDataModel.debug("Came via app url launch with mid=" + $rootScope.tappedMid); @@ -442,7 +436,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic NVRDataModel.zmPrivacyProcessed() .then(function (val) { - console.log(">>>>>>>>>>>>>>>>>>> PRIVACY PROCEESSED:" + val); + // console.log(">>>>>>>>>>>>>>>>>>> PRIVACY PROCESSED:" + val); if (!val) { var alertPopup = $ionicPopup.alert({ title: $translate.instant('kNote'), @@ -471,6 +465,11 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic return; } + else { + NVRDataModel.debug ("Authentication over, now processing push..."); + evaluateTappedNotification(); + processPush = false; + } // else // evaluateTappedNotification(); -- cgit v1.2.3 From 2155c28de874794415a4d9775989fb96aaf3fa7f Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Thu, 18 Oct 2018 12:50:11 -0400 Subject: clear cookies to reset auth --- www/js/app.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'www/js') diff --git a/www/js/app.js b/www/js/app.js index fef31358..a6023fa8 100755 --- a/www/js/app.js +++ b/www/js/app.js @@ -958,6 +958,12 @@ angular.module('zmApp', [ function doLogoutAndLogin(str) { + if (window.cordova) { + // we need to do this or ZM will send same auth hash + // this was fixed in a PR dated Oct 18 + NVRDataModel.debug ("Clearing cookies"); + cordova.plugin.http.clearCookies(); + } return NVRDataModel.logout() .then(function (ans) { return doLogin(str); @@ -1132,6 +1138,7 @@ angular.module('zmApp', [ return d.promise; } NVRDataModel.debug("API based login returned... "); + console.log (JSON.stringify(succ)); NVRDataModel.setCurrentServerVersion(succ.version); $ionicLoading.hide(); //$rootScope.loggedIntoZm = 1; @@ -1656,6 +1663,7 @@ angular.module('zmApp', [ // lets see if it really works $rootScope.online = navigator.onLine; + NVRDataModel.log ("--------->Setting up network state handlers...."); document.addEventListener("offline", function () { //console.log ("OFFLINE------------------------------------"); $timeout(function () { @@ -1998,7 +2006,7 @@ angular.module('zmApp', [ $rootScope.$stateParams = $stateParams; if (window.cordova) { - console.log("------------->Keyboard foonone"); + //window.cordova.plugins.Keyboard.disableScroll(true); } if (window.StatusBar) { @@ -2082,7 +2090,7 @@ angular.module('zmApp', [ localforage.getItem('last-desktop-state') .then(function (succ) { - console.log("FOUND STATE" + JSON.stringify(succ) + ":" + succ); +// console.log("FOUND STATE" + JSON.stringify(succ) + ":" + succ); // sanitize this if (!succ.name || typeof succ.name !== 'string') { @@ -2300,12 +2308,13 @@ angular.module('zmApp', [ if (window.cordova && isOutgoingRequest) { + var d = $q.defer(); var options = { method: method, data: arguments[0].data, headers: arguments[0].headers, - timeout: arguments[0].timeout, + timeout: arguments[0].timeout || 10, responseType: arguments[0].responseType }; // console.log ("**** -->"+method+"<-- using native HTTP with:"+encodeURI(url)+" payload:"+JSON.stringify(options)); -- cgit v1.2.3 From e783c4dbad748f6597d8f15e93a22ad8fa1b5082 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Thu, 18 Oct 2018 12:50:20 -0400 Subject: other cleanup --- www/js/DataModel.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'www/js') diff --git a/www/js/DataModel.js b/www/js/DataModel.js index 6dbd5958..96f90a48 100644 --- a/www/js/DataModel.js +++ b/www/js/DataModel.js @@ -1364,7 +1364,7 @@ angular.module('zmApp.controllers') loginData.enableSlowLoading = false; } - log("SlowDelay is: " + loginData.enableSlowLoading); + if (typeof loginData.enableStrictSSL == 'undefined') { @@ -2347,7 +2347,7 @@ angular.module('zmApp.controllers') var succ; try { - console.log(textsucc); + //console.log(textsucc); succ = JSON.parse(textsucc.data); if (succ.data) succ = succ.data; if (succ.config) { -- cgit v1.2.3 From 8f566c002d205c2f47b9e6a9e56ec1ff8b54e98d Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Thu, 18 Oct 2018 16:39:24 -0400 Subject: a few tweaks to do foo.... --- www/js/app.js | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) (limited to 'www/js') diff --git a/www/js/app.js b/www/js/app.js index a6023fa8..8a8cfd55 100755 --- a/www/js/app.js +++ b/www/js/app.js @@ -1515,12 +1515,16 @@ angular.module('zmApp', [ //navigator.app.exitApp(); }; - + // This is a global exception interceptor $rootScope.exceptionMessage = function (error) { NVRDataModel.debug("**EXCEPTION**" + error.reason + " caused by " + error.cause); }; + // for .config block + $rootScope.debug = function (msg) { + NVRDataModel.debug(msg); + }; if ($rootScope.platformOS == 'desktop' && 0) { @@ -1663,12 +1667,16 @@ angular.module('zmApp', [ // lets see if it really works $rootScope.online = navigator.onLine; - NVRDataModel.log ("--------->Setting up network state handlers...."); + // set up network state handlers after 3secs + // android seems to howl about this at app start? + $timeout (function() { + + NVRDataModel.log ("--------->Setting up network state handlers...."); document.addEventListener("offline", function () { //console.log ("OFFLINE------------------------------------"); $timeout(function () { $rootScope.online = false; - NVRDataModel.log("Your network went offline"); + NVRDataModel.log("************** Your network went offline"); //$rootScope.$emit('network-change', "offline"); @@ -1679,14 +1687,13 @@ angular.module('zmApp', [ //console.log ("ONLINE------------------------------------"); $timeout(function () { - - NVRDataModel.log("Your network came back online"); + NVRDataModel.log("************ Your network came back online"); $rootScope.online = true; $timeout(function () { // NVRDataModel.debug ("Ignoring - Alex R. Hack"); - if (0) { + if (1) { var networkState = "browser not supported"; if (navigator.connection) networkState = navigator.connection.type; NVRDataModel.debug("Detected network type as: " + networkState); @@ -1711,6 +1718,9 @@ angular.module('zmApp', [ }); }, false); + },3000); + + // This code takes care of trapping the Android back button // and takes it to the menu. //console.log (">>>>>>>>>>>>>>>>>>BACK BUTTON REGISTERED"); @@ -2263,7 +2273,7 @@ angular.module('zmApp', [ //------------------------------------------------------------------ // My route map connecting menu options to their respective templates and controllers - .config(function ($stateProvider, $urlRouterProvider, $httpProvider, $ionicConfigProvider, $provide, $compileProvider, /*$ionicNativeTransitionsProvider,*/ $logProvider, $translateProvider) { + .config(function ($stateProvider, $urlRouterProvider, $httpProvider, $ionicConfigProvider, $provide, $compileProvider, /*$ionicNativeTransitionsProvider,*/ $logProvider, $translateProvider, $injector) { //$logProvider.debugEnabled(false); //$compileProvider.debugInfoEnabled(false); @@ -2294,9 +2304,10 @@ angular.module('zmApp', [ // a) https://www.exratione.com/2013/08/angularjs-wrapping-http-for-fun-and-profit/ // b) https://gist.github.com/adamreisnz/354364e2a58786e2be71 - $provide.decorator('$http', ['$delegate', '$q', function ($delegate, $q) { + $provide.decorator('$http', ['$delegate', '$q', '$injector', function ($delegate, $q, $injector) { // create function which overrides $http function var $http = $delegate; + var logger = $injector.get("$rootScope"); var wrapper = function () { var url; @@ -2346,7 +2357,7 @@ angular.module('zmApp', [ } }, function (err) { - console.log("*** Inside native HTTP error: " + JSON.stringify(err)); + logger.debug("*** Inside native HTTP error: " + JSON.stringify(err)); d.reject(err); return d.promise; -- cgit v1.2.3 From b243bd03d3a8508d718227e6f0d9dee2d145d8f9 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Fri, 19 Oct 2018 11:21:58 -0400 Subject: take out disabling simul by force for iOS --- www/js/DataModel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'www/js') diff --git a/www/js/DataModel.js b/www/js/DataModel.js index 96f90a48..2322fbdf 100644 --- a/www/js/DataModel.js +++ b/www/js/DataModel.js @@ -1148,7 +1148,7 @@ angular.module('zmApp.controllers') if (typeof loginData.disableSimulStreaming == 'undefined') { - loginData.disableSimulStreaming = ($rootScope.platformOS == 'ios') ? true : false; + loginData.disableSimulStreaming = false; //console.log("INIT DISABLING SIMUL:" + loginData.disableSimulStreaming); } -- cgit v1.2.3 From 8d42918b774175be477e949c4739a1ae40238359 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Fri, 19 Oct 2018 12:07:34 -0400 Subject: remove disableSimul force from wizard --- www/js/LoginCtrl.js | 5 ----- 1 file changed, 5 deletions(-) (limited to 'www/js') diff --git a/www/js/LoginCtrl.js b/www/js/LoginCtrl.js index ca6b9df9..a9a09433 100644 --- a/www/js/LoginCtrl.js +++ b/www/js/LoginCtrl.js @@ -262,11 +262,6 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r NVRDataModel.log("Creating new login entry for wizard"); $scope.loginData = angular.copy(NVRDataModel.getDefaultLoginObject()); - // default object has this as false - if ($rootScope.platformOS == 'ios') { - $scope.loginData.disableSimulStreaming = true; - } - $scope.loginData.serverName = $rootScope.wizard.serverName; $scope.loginData.url = $rootScope.wizard.loginURL; $scope.loginData.apiurl = $rootScope.wizard.apiURL; -- cgit v1.2.3 From 89211bbbd526bbc587361085b119a19d296f6a7f Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Sat, 20 Oct 2018 19:17:21 -0400 Subject: #724 cleanup and making sure we take recordingURL for playback --- www/js/DataModel.js | 24 ++++-- www/js/EventCtrl.js | 200 +++++++++++--------------------------------- www/js/EventModalCtrl.js | 59 +++++-------- www/js/LogCtrl.js | 3 +- www/js/MomentCtrl.js | 7 +- www/js/MonitorCtrl.js | 5 +- www/js/TimelineCtrl.js | 16 ++-- www/js/TimelineModalCtrl.js | 76 +++-------------- 8 files changed, 108 insertions(+), 282 deletions(-) (limited to 'www/js') diff --git a/www/js/DataModel.js b/www/js/DataModel.js index 2322fbdf..f1ea3689 100644 --- a/www/js/DataModel.js +++ b/www/js/DataModel.js @@ -2156,7 +2156,7 @@ angular.module('zmApp.controllers') var streamingurl = ""; - st += (s.scheme ? s.scheme : p.scheme) + "://"; // server scheme overrides + st += (s.scheme ? s.scheme : p.scheme) + "://"; // server scheme overrides @@ -2246,13 +2246,7 @@ angular.module('zmApp.controllers') monitors[i].Monitor.baseURL = loginData.url; monitors[i].Monitor.imageMode = (versionCompare($rootScope.apiVersion, "1.30") == -1) ? "path" : "fid"; - // but now check if forced path - if (loginData.forceImageModePath) { - debug("Overriding, setting image mode to true as you have requested force enable"); - monitors[i].Monitor.imageMode = 'path'; - } - - // debug("API " + $rootScope.apiVersion + ": Monitor " + monitors[i].Monitor.Id + " will use " + monitors[i].Monitor.imageMode + " for direct image access"); + } } // now get packery hide if applicable @@ -2849,6 +2843,20 @@ angular.module('zmApp.controllers') }, + + getRecordingURL: function (id) { + var idnum = parseInt(id); + for (var i = 0; i < monitors.length; i++) { + if (parseInt(monitors[i].Monitor.Id) == idnum) { + // console.log ("Matched, exiting getMonitorname"); + //console.log ("!!!"+monitors[i].Monitor.controlURL); + return monitors[i].Monitor.controlURL; + } + + } + return "(Unknown)"; + }, + getBaseURL: function (id) { var idnum = parseInt(id); for (var i = 0; i < monitors.length; i++) { diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js index b2caf1d5..b2bbca87 100644 --- a/www/js/EventCtrl.js +++ b/www/js/EventCtrl.js @@ -32,7 +32,7 @@ angular.module('zmApp.controllers') }) - .controller('zmApp.EventCtrl', ['$scope', '$rootScope', 'zm', 'NVRDataModel', 'message', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$ionicPlatform', '$ionicSlideBoxDelegate', '$ionicPosition', '$ionicPopover', '$ionicPopup', 'EventServer', '$sce', '$cordovaBadge', '$cordovaLocalNotification', '$q', 'carouselUtils', '$translate', '$cordovaFileTransfer', '$cordovaFile', '$ionicListDelegate', 'ionPullUpFooterState', function ($scope, $rootScope, zm, NVRDataModel, message, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $ionicPlatform, $ionicSlideBoxDelegate, $ionicPosition, $ionicPopover, $ionicPopup, EventServer, $sce, $cordovaBadge, $cordovaLocalNotification, $q, carouselUtils, $translate, $cordovaFileTransfer, $cordovaFile, $ionicListDelegate, ionPullUpFooterState) { + .controller('zmApp.EventCtrl', ['$scope', '$rootScope', 'zm', 'NVRDataModel', 'message', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$ionicPlatform', '$ionicSlideBoxDelegate', '$ionicPosition', '$ionicPopover', '$ionicPopup', 'EventServer', '$sce', '$cordovaBadge', '$cordovaLocalNotification', '$q', 'carouselUtils', '$translate', '$cordovaFileTransfer', '$cordovaFile', '$ionicListDelegate', 'ionPullUpFooterState', 'SecuredPopups', function ($scope, $rootScope, zm, NVRDataModel, message, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $ionicPlatform, $ionicSlideBoxDelegate, $ionicPosition, $ionicPopover, $ionicPopup, EventServer, $sce, $cordovaBadge, $cordovaLocalNotification, $q, carouselUtils, $translate, $cordovaFileTransfer, $cordovaFile, $ionicListDelegate, ionPullUpFooterState,SecuredPopups) { // events in last 5 minutes // TODO https://server/zm/api/events/consoleEvents/5%20minute.json @@ -427,19 +427,18 @@ angular.module('zmApp.controllers') myevents[i].Event.humanizeTime = humanizeTime(myevents[i].Event.StartTime); myevents[i].Event.streamingURL = NVRDataModel.getStreamingURL(myevents[i].Event.MonitorId); - myevents[i].Event.baseURL = NVRDataModel.getBaseURL(myevents[i].Event.MonitorId); + myevents[i].Event.recordingURL = NVRDataModel.getRecordingURL(myevents[i].Event.MonitorId); myevents[i].Event.imageMode = NVRDataModel.getImageMode(myevents[i].Event.MonitorId); //console.log ("***** MULTISERVER STREAMING URL FOR EVENTS " + myevents[i].Event.streamingURL); - // console.log ("***** MULTISERVER BASE URL FOR EVENTS " + myevents[i].Event.baseURL); + // console.log ("***** MULTISERVER BASE URL FOR EVENTS " + myevents[i].Event.recordingURL); myevents[i].Event.MonitorName = NVRDataModel.getMonitorName(myevents[i].Event.MonitorId); myevents[i].Event.ShowScrub = false; myevents[i].Event.height = eventsListDetailsHeight; // now construct base path - myevents[i].Event.BasePath = computeBasePath(myevents[i]); - myevents[i].Event.relativePath = computeRelativePath(myevents[i]); + // get thumbW/H @@ -459,18 +458,11 @@ angular.module('zmApp.controllers') // in multiserver BasePath is login url for frames // http://login.url/index.php?view=frame&eid=19696772&fid=21 - // console.log ("COMPARING "+NVRDataModel.getLogin().url+ " TO " +myevents[i].Event.baseURL); - if (NVRDataModel.getLogin().url != myevents[i].Event.baseURL) { - //NVRDataModel.debug ("Multi server, changing base"); - myevents[i].Event.baseURL = NVRDataModel.getLogin().url; + // console.log ("COMPARING "+NVRDataModel.getLogin().url+ " TO " +myevents[i].Event.recordingURL); + - } - - if (myevents[i].Event.imageMode == 'path') - //if (1) - myevents[i].Event.videoPath = myevents[i].Event.baseURL + "/events/" + myevents[i].Event.relativePath + myevents[i].Event.DefaultVideo; - else - myevents[i].Event.videoPath = myevents[i].Event.baseURL + "/index.php?view=view_video&eid=" + myevents[i].Event.Id; + + myevents[i].Event.videoPath = myevents[i].Event.recordingURL + "/index.php?view=view_video&eid=" + myevents[i].Event.Id; // if (idfound) if (idfound) { @@ -525,7 +517,7 @@ angular.module('zmApp.controllers') } - function saveNow(imgsrc, r, f) { + function saveNow(imgsrc) { var fname = "zmninja.jpg"; var fn = "cordova.plugins.photoLibrary.saveImage"; @@ -874,9 +866,11 @@ angular.module('zmApp.controllers') }); }; - $scope.showImage = function (p, r, f, fid, e, imode, id, parray, ndx) { + $scope.showImage = function (p, f, fid, e, imode, id, parray, ndx) { var img; + console.log ("P="+p+" F="+f+" E="+e+" imode="+imode+" id="+id+" parray="+JSON.stringify(parray)+" ndx="+ndx); + //console.log ("HERE"); $scope.kFrame = $translate.instant('kFrame'); $scope.kEvent = $translate.instant('kEvent'); @@ -903,20 +897,11 @@ angular.module('zmApp.controllers') NVRDataModel.debug("No index adjustment necessary as we are using all frames"); } - // console.log ("Image Mode " + imode); - // console.log ("parray : " + JSON.stringify(parray)); - // console.log ("index: " + ndx); - if ($scope.imode == 'path') { - if ($scope.outlineMotion) - $scope.imgsrc = p + "/index.php?view=image&path=" + r + $scope.parray[$scope.ndx].aname; - else - $scope.imgsrc = p + "/index.php?view=image&path=" + r + $scope.parray[$scope.ndx].fname; - $scope.fallbackImgSrc = p + "/index.php?view=image&path=" + r + $scope.parray[$scope.ndx].fname; - } else { + $scope.imgsrc = p + "/index.php?view=image&fid=" + $scope.parray[$scope.ndx].id + $scope.outlineMotionParam; $scope.fallbackImgSrc = p + "/index.php?view=image&fid=" + $scope.parray[$scope.ndx].id; - } + //$rootScope.zmPopup = $ionicPopup.alert({title: kFrame+':'+fid+'/'+kEvent+':'+e,template:img, cssClass:'popup80'}); @@ -944,7 +929,7 @@ angular.module('zmApp.controllers') type: 'button-assertive button-small ion-camera', onTap: function (e) { e.preventDefault(); - saveNow($scope.imgsrc, r, parray[$scope.ndx].fname); + saveNow($scope.imgsrc); } }, @@ -969,17 +954,11 @@ angular.module('zmApp.controllers') if (nndx == null) nndx = $scope.ndx; $scope.ndx = nndx; - if ($scope.imode == 'path') { - if ($scope.outlineMotion) - $scope.imgsrc = p + "/index.php?view=image&path=" + r + $scope.parray[$scope.ndx].aname; - else - $scope.imgsrc = p + "/index.php?view=image&path=" + r + $scope.parray[$scope.ndx].fname; - $scope.fallbackImgSrc = p + "/index.php?view=image&path=" + r + $scope.parray[$scope.ndx].fname; - } else { + $scope.imgsrc = p + "/index.php?view=image&fid=" + $scope.parray[$scope.ndx].id + $scope.outlineMotionParam; $scope.fallbackImgSrc = p + "/index.php?view=image&fid=" + $scope.parray[$scope.ndx].id; - } + e.preventDefault(); @@ -1008,17 +987,11 @@ angular.module('zmApp.controllers') if (nndx == null) nndx = $scope.ndx; $scope.ndx = nndx; - if ($scope.imode == 'path') { - if ($scope.outlineMotion) - $scope.imgsrc = p + "/index.php?view=image&path=" + r + $scope.parray[$scope.ndx].aname; - else - $scope.imgsrc = p + "/index.php?view=image&path=" + r + $scope.parray[$scope.ndx].fname; - $scope.fallbackImgSrc = p + "/index.php?view=image&path=" + r + $scope.parray[$scope.ndx].fname; - } else { + $scope.imgsrc = p + "/index.php?view=image&fid=" + $scope.parray[$scope.ndx].id + $scope.outlineMotionParam; $scope.fallbackImgSrc = p + "/index.php?view=image&fid=" + $scope.parray[$scope.ndx].id; - } + e.preventDefault(); @@ -1193,14 +1166,9 @@ angular.module('zmApp.controllers') { var fname; //console.log ("PATH="+e.Event.imageMode); - if (e.Event.imageMode == 'path') - //if (1) - { - var rfp = padToN(data.event.Frame[i].FrameId, eventImageDigits) + "-capture.jpg"; - fname = e.Event.baseURL + "/index.php?view=image&width=" + zm.maxGifWidth + "&path=" + e.Event.relativePath + rfp; - } else { - fname = e.Event.baseURL + "/index.php?view=image&width=" + zm.maxGifWidth + "&fid=" + data.event.Frame[i].Id; - } + + fname = e.Event.recordingURL + "/index.php?view=image&width=" + zm.maxGifWidth + "&fid=" + data.event.Frame[i].Id; + if (data.event.Frame[i].TimeStamp != lastTime /*|| fps < 2*/ ) @@ -2119,7 +2087,17 @@ angular.module('zmApp.controllers') NVRDataModel.log("API for event details" + myurl); $http.get(myurl) .then(function (data) { + + data = data.data; + + + // var ndata = data.replace(/
/,'');
+
+           //    console.log ("NDATA:"+ndata);
+                //
+
+
                 $scope.FrameArray = data.event.Frame;
                 //  $scope.slider_options.scale=[];
 
@@ -2214,20 +2192,7 @@ angular.module('zmApp.controllers')
           $scope.slides = [];
           var i;
 
-          if (event.Event.imageMode == 'path') {
-            NVRDataModel.debug("EventCtrl: found " + frames + " frames to scrub");
-
-            for (i = 1; i <= frames; i++) {
-              var fname = padToN(i, eventImageDigits) + "-capture.jpg";
-
-              $scope.slides.push({
-                id: i,
-                img: fname
-              });
-
-            }
-          } else // we need fids
-          {
+          
             var myurl_frames = loginData.apiurl + '/events/' + event.Event.Id + ".json";
             NVRDataModel.log("API for event details" + myurl_frames);
             $http.get(myurl_frames)
@@ -2257,7 +2222,7 @@ angular.module('zmApp.controllers')
                   NVRDataModel.displayBanner('error', [$translate.instant('kErrorFrameBanner'), $translate.instant('kErrorPleaseTryAgain')]);
                 });
 
-          }
+          
 
           // now get event details to show alarm frames
           loginData = NVRDataModel.getLogin();
@@ -2268,10 +2233,8 @@ angular.module('zmApp.controllers')
           event.Event.video = {};
           var videoURL;
 
-          //if (event.Event.imageMode == 'path')
-
-          /* videoURL = event.Event.baseURL + "/events/" + event.Event.relativePath + event.Event.DefaultVideo;*/
-          videoURL = event.Event.baseURL + "/index.php?view=view_video&eid=" + event.Event.Id;
+        
+          videoURL = event.Event.recordingURL + "/index.php?view=view_video&eid=" + event.Event.Id;
           if ($rootScope.authSession != 'undefined') videoURL += $rootScope.authSession;
           videoURL += NVRDataModel.insertBasicAuthToken();
 
@@ -2494,56 +2457,8 @@ angular.module('zmApp.controllers')
       }
     };
 
-    //--------------------------------------------------------
-    // utility function
-    //--------------------------------------------------------
-
-    function computeRelativePath(event) {
-      var relativePath = "";
-      var loginData = NVRDataModel.getLogin();
-      var str = event.Event.StartTime;
-      var yy = moment(str).locale('en').format('YY');
-      var mm = moment(str).locale('en').format('MM');
-      var dd = moment(str).locale('en').format('DD');
-      var hh = moment(str).locale('en').format('HH');
-      var min = moment(str).locale('en').format('mm');
-      var sec = moment(str).locale('en').format('ss');
-      relativePath = event.Event.MonitorId + "/" +
-        yy + "/" +
-        mm + "/" +
-        dd + "/" +
-        hh + "/" +
-        min + "/" +
-        sec + "/";
-      return relativePath;
-
-    }
-
-    //--------------------------------------------------------
-    // utility function
-    //--------------------------------------------------------
-
-    function computeBasePath(event) {
-      var basePath = "";
-      var loginData = NVRDataModel.getLogin();
-      var str = event.Event.StartTime;
-      var yy = moment(str).locale('en').format('YY');
-      var mm = moment(str).locale('en').format('MM');
-      var dd = moment(str).locale('en').format('DD');
-      var hh = moment(str).locale('en').format('HH');
-      var min = moment(str).locale('en').format('mm');
-      var sec = moment(str).locale('en').format('ss');
-
-      basePath = event.Event.baseURL + "/events/" +
-        event.Event.MonitorId + "/" +
-        yy + "/" +
-        mm + "/" +
-        dd + "/" +
-        hh + "/" +
-        min + "/" +
-        sec + "/";
-      return basePath;
-    }
+    
+   
 
     $scope.modalGraph = function () {
       $ionicModal.fromTemplateUrl('templates/events-modalgraph.html', {
@@ -2826,15 +2741,13 @@ angular.module('zmApp.controllers')
               // now construct base path
 
               myevents[i].Event.streamingURL = NVRDataModel.getStreamingURL(myevents[i].Event.MonitorId);
-              myevents[i].Event.baseURL = NVRDataModel.getBaseURL(myevents[i].Event.MonitorId);
+              myevents[i].Event.recordingURL = NVRDataModel.getRecordingURL(myevents[i].Event.MonitorId);
               myevents[i].Event.imageMode = NVRDataModel.getImageMode(myevents[i].Event.MonitorId);
               // console.log ("***** MULTISERVER STREAMING URL FOR EVENTS " + myevents[i].Event.streamingURL);
 
-              //  console.log ("***** MULTISERVER BASE URL FOR EVENTS " + myevents[i].Event.baseURL);
+              //  console.log ("***** MULTISERVER BASE URL FOR EVENTS " + myevents[i].Event.recordingURL);
 
               myevents[i].Event.ShowScrub = false;
-              myevents[i].Event.BasePath = computeBasePath(myevents[i]);
-              myevents[i].Event.relativePath = computeRelativePath(myevents[i]);
               myevents[i].Event.height = eventsListDetailsHeight;
 
               // get thumbW/H
@@ -2857,11 +2770,8 @@ angular.module('zmApp.controllers')
               }
 
 
-              if (myevents[i].Event.imageMode == 'path')
-                //if (1)
-                myevents[i].Event.videoPath = myevents[i].Event.baseURL + "/events/" + myevents[i].Event.relativePath + myevents[i].Event.DefaultVideo;
-              else
-                myevents[i].Event.videoPath = myevents[i].Event.baseURL + "/index.php?view=view_video&eid=" + myevents[i].Event.Id;
+            
+                myevents[i].Event.videoPath = myevents[i].Event.recordingURL + "/index.php?view=view_video&eid=" + myevents[i].Event.Id;
 
               if (idfound) $scope.events.push(myevents[i]);
             }
@@ -2951,7 +2861,7 @@ angular.module('zmApp.controllers')
 
     $scope.constructThumbnail = function (event) {
       var stream = "";
-      stream = event.Event.baseURL +
+      stream = event.Event.recordingURL +
         "/index.php?view=image&show=capture&fid=" +
         (event.Event.MaxScoreFrameId ? event.Event.MaxScoreFrameId : "1&eid=" + event.Event.Id) +
         "&width=" + event.Event.thumbWidth * 2 +
@@ -2966,14 +2876,10 @@ angular.module('zmApp.controllers')
     $scope.constructScrubFrame = function (event, slide) {
 
       var stream = "";
-      if (event.Event.imageMode == 'path') {
-        stream = event.Event.baseURL + "/index.php?view=image" +
-          "&path=" + event.Event.relativePath + slide.img + "&height=380";
-
-      } else if (event.Event.imageMode == 'fid') {
-        stream = event.Event.baseURL + "/index.php?view=image" +
+     
+        stream = event.Event.recordingURL + "/index.php?view=image" +
           "&fid=" + slide.id + $scope.outlineMotionParam;
-      }
+      
       if ($rootScope.authSession != 'undefined') stream += $rootScope.authSession;
 
       stream += NVRDataModel.insertBasicAuthToken();
@@ -2985,22 +2891,14 @@ angular.module('zmApp.controllers')
     $scope.constructAlarmFrame = function (event, alarm, motion) {
       var stream = "";
 
-      if (event.Event.imageMode == 'fid') {
-        stream = event.Event.baseURL +
+     
+        stream = event.Event.recordingURL +
           "/index.php?view=image&fid=" + alarm.id;
         if (motion) stream += $scope.outlineMotionParam;
-
-      } else if (event.Event.imageMode == 'path') {
-        stream = event.Event.baseURL +
-          "/index.php?view=image&path=" + event.Event.relativePath +
-          motion ? alarm.aname : alarm.fname +
-          "&height=380";
-
-
-      }
       if ($rootScope.authSession != 'undefined') stream += $rootScope.authSession;
       stream += NVRDataModel.insertBasicAuthToken();
 
+//      console.log ("alarm:"+stream);
       return stream;
 
     };
diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js
index b992017c..6c98c167 100644
--- a/www/js/EventModalCtrl.js
+++ b/www/js/EventModalCtrl.js
@@ -762,9 +762,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
       $scope.mycarousel.index = 1;
 
 
-    if ($scope.event.Event.imageMode == 'path') {
-      url = $scope.playbackURL + '/index.php?view=image&rand=' + $rootScope.rand + "&path=" + $scope.relativePath + $scope.slides[$scope.mycarousel.index].img;
-    } else {
+    
 
       console.log("SLIDES " + JSON.stringify($scope.slides));
       console.log("CAROUSEL " + JSON.stringify($scope.mycarousel));
@@ -772,7 +770,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
       url = $scope.playbackURL + '/index.php?view=image&rand=' + $rootScope.rand +
         "&eid=" + $scope.eventId +
         "&fid=" + $scope.slides[$scope.mycarousel.index - 1].id;
-    }
+    
 
     if ($rootScope.authSession != 'undefined') {
       url += $rootScope.authSession;
@@ -803,11 +801,9 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
           onTap: function (e) {
             if ($scope.slideIndex > 0) $scope.slideIndex--;
 
-            if ($scope.event.Event.imageMode == 'path') {
-              $scope.selectEventUrl = $scope.playbackURL + '/index.php?view=image&rand=' + $rootScope.rand + "&path=" + $scope.relativePath + $scope.slides[$scope.slideIndex].img;
-            } else {
+       
               $scope.selectEventUrl = $scope.playbackURL + '/index.php?view=image&rand=' + $rootScope.rand + "&eid=" + $scope.eventId + "&fid=" + $scope.slides[$scope.slideIndex].id;
-            }
+            
             if ($rootScope.authSession != 'undefined') {
               $scope.selectEventUrl += $rootScope.authSession;
 
@@ -831,11 +827,9 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
           onTap: function (e) {
             if ($scope.slideIndex < $scope.slideLastIndex) $scope.slideIndex++;
 
-            if ($scope.event.Event.imageMode == 'path') {
-              $scope.selectEventUrl = $scope.playbackURL + '/index.php?view=image&rand=' + $rootScope.rand + "&path=" + $scope.relativePath + $scope.slides[$scope.slideIndex].img;
-            } else {
+       
               $scope.selectEventUrl = $scope.playbackURL + '/index.php?view=image&rand=' + $rootScope.rand + "&eid=" + $scope.eventId + "&fid=" + $scope.slides[$scope.slideIndex].id;
-            }
+            
             if ($rootScope.authSession != 'undefined') {
               $scope.selectEventUrl += $rootScope.authSession;
 
@@ -860,11 +854,9 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
             if (tempVar < 0) tempVar = 0;
             $scope.slideIndex = tempVar;
 
-            if ($scope.event.Event.imageMode == 'path') {
-              $scope.selectEventUrl = $scope.playbackURL + '/index.php?view=image&rand=' + $rootScope.rand + "&path=" + $scope.relativePath + $scope.slides[$scope.slideIndex].img;
-            } else {
+       
               $scope.selectEventUrl = $scope.playbackURL + '/index.php?view=image&rand=' + $rootScope.rand + "&eid=" + $scope.eventId + "&fid=" + $scope.slides[$scope.slideIndex].id;
-            }
+            
             if ($rootScope.authSession != 'undefined') {
               $scope.selectEventUrl += $rootScope.authSession;
 
@@ -889,11 +881,9 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
             $scope.slideIndex = tempVar;
             if ($scope.slideIndex < $scope.slideLastIndex) $scope.slideIndex++;
 
-            if ($scope.event.Event.imageMode == 'path') {
-              $scope.selectEventUrl = $scope.playbackURL + '/index.php?view=image&rand=' + $rootScope.rand + "&path=" + $scope.relativePath + $scope.slides[$scope.slideIndex].img;
-            } else {
+          
               $scope.selectEventUrl = $scope.playbackURL + '/index.php?view=image&rand=' + $rootScope.rand + "&eid=" + $scope.eventId + "&fid=" + $scope.slides[$scope.slideIndex].id;
-            }
+            
             if ($rootScope.authSession != 'undefined') {
               $scope.selectEventUrl += $rootScope.authSession;
 
@@ -1170,10 +1160,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
     $scope.singleImageQuality = (NVRDataModel.getBandwidth() == "lowbw") ? zm.eventSingleImageQualityLowBW : ld.singleImageQuality;
     $scope.blockSlider = false;
     $scope.checkEventOn = false;
-    //$scope.singleImageQuality = 100;
-
-    //$scope.commandURL = $scope.currentEvent.Event.baseURL+"/index.php";
-    // NVRDataModel.log (">>>>>>>>>>>>>>>>>>ZMS url command is " + $scope.commandURL);
+    
 
     currentEvent = $scope.currentEvent;
 
@@ -1924,7 +1911,10 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
   function computeAlarmFrames(data) {
     $scope.alarm_images = [];
     tempAlarms = [];
-    $scope.FrameArray = data.event.Frame;
+    $scope.FrameArray = [];
+
+    console.log ("FRAME ARRAY: "+JSON.stringify(data));
+    if (data.event && data.event.Frame) $scope.FrameArray = data.event.Frame;
     var ts = 0;
 
     for (i = 0; i < data.event.Frame.length; i++) {
@@ -1953,7 +1943,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
   $scope.constructFrame = function (fid) {
 
     var frame = "";
-    frame = currentEvent.Event.baseURL + "/index.php?view=image" +
+    frame = currentEvent.Event.recordingURL + "/index.php?view=image" +
       "&eid=" + currentEvent.Event.Id +
       "&fid=" + fid +
       "&height=" + 200;
@@ -1985,7 +1975,6 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
     $scope.mName = "...";
     $scope.liveFeedMid = '';
 
-
     $http.get(myurl)
       .then(function (success) {
 
@@ -1993,7 +1982,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
           currentEvent = event;
           $scope.event = event;
 
-
+          console.log ("prepareModal DATA:"+JSON.stringify(success.data));
           computeAlarmFrames(success.data);
           $scope.eventWarning = '';
 
@@ -2008,8 +1997,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
           event.Event.relativePath = computeRelativePath(event);
 
           event.Event.streamingURL = NVRDataModel.getStreamingURL(event.Event.MonitorId);
-          //  event.Event.baseURL = NVRDataModel.getBaseURL (event.Event.MonitorId);
-          event.Event.baseURL = loginData.url;
+          
+          event.Event.recordingURL = loginData.url;
           event.Event.imageMode = NVRDataModel.getImageMode(event.Event.MonitorId);
 
           //console.log (JSON.stringify( success));
@@ -2056,10 +2045,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
           event.Event.video = {};
           var videoURL;
 
-          if ((event.Event.imageMode == 'path') || NVRDataModel.getLogin().forceImageModePath)
-            videoURL = event.Event.baseURL + "/events/" + event.Event.relativePath + event.Event.DefaultVideo;
-          else
-            videoURL = event.Event.baseURL + "/index.php?view=view_video&eid=" + event.Event.Id;
+            videoURL = event.Event.recordingURL + "/index.php?view=view_video&eid=" + event.Event.Id;
 
           if ($rootScope.authSession != 'undefined') videoURL += $rootScope.authSession;
           if ($rootScope.basicAuthToken) videoURL = videoURL + "&basicauth=" + $rootScope.basicAuthToken;
@@ -2073,10 +2059,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
 
           NVRDataModel.debug("Video url passed to player is: " + videoURL);
 
-          // console.log (">>>>>>>>>>>>>"+loginData.url+"-VS-"+event.Event.baseURL);
-
-          //console.log("************** VIDEO IS " + videoURL);
-
+         
           $scope.videoObject = {
             config: {
               autoPlay: true,
diff --git a/www/js/LogCtrl.js b/www/js/LogCtrl.js
index 78a02992..46db4304 100644
--- a/www/js/LogCtrl.js
+++ b/www/js/LogCtrl.js
@@ -122,8 +122,7 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo
       var urlNoProtocol = loginData.url.replace(/.*?:\/\//, "");
       if (urlNoProtocol != "") {
         var re2 = new RegExp(urlNoProtocol, "g");
-        // just replacing baseurl - that will take care of
-        // masking api but may not be cgi
+       
         logstring = logstring.replace(re2, "");
       }
       urlNoProtocol = loginData.streamingurl.replace(/.*?:\/\//, "");
diff --git a/www/js/MomentCtrl.js b/www/js/MomentCtrl.js
index 6a56158e..ace5d218 100644
--- a/www/js/MomentCtrl.js
+++ b/www/js/MomentCtrl.js
@@ -134,9 +134,8 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
 
       data.events[i].Event.hide = false;
       data.events[i].Event.icon = "ion-code-working";
-      //data.events[i].Event.baseURL = NVRDataModel.getBaseURL(data.events[i].Event.MonitorId);
-      // huh? why did I need the above? eventCtrl reverses it with below...
-      data.events[i].Event.baseURL = NVRDataModel.getLogin().url;
+    
+      data.events[i].Event.recordingURL = NVRDataModel.getLogin().url;
 
       data.events[i].Event.monitorName = NVRDataModel.getMonitorName(data.events[i].Event.MonitorId);
       data.events[i].Event.dateObject = new Date(data.events[i].Event.StartTime);
@@ -267,7 +266,7 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
   $scope.constructFrame = function (moment) {
     var stream = "";
     // console.log ($scope.isMaxScoreFramePresent);
-    stream = moment.Event.baseURL + "/index.php?view=image" +
+    stream = moment.Event.recordingURL + "/index.php?view=image" +
       ($scope.isMaxScoreFramePresent ? "&fid=" + moment.Event.MaxScoreFrameId : "&eid=" + moment.Event.Id + "&fid=1") +
       "&width=" + moment.Event.thumbWidth * 2 +
       "&height=" + moment.Event.thumbHeight * 2;
diff --git a/www/js/MonitorCtrl.js b/www/js/MonitorCtrl.js
index 9edb1e36..dbc4a7f3 100644
--- a/www/js/MonitorCtrl.js
+++ b/www/js/MonitorCtrl.js
@@ -412,10 +412,7 @@ angular.module('zmApp.controllers')
             $scope.monitors[j].Monitor.char = "ion-checkmark-circled";
             apiMonCheck = loginData.apiurl + "/monitors/daemonStatus/id:" + $scope.monitors[j].Monitor.Id + "/daemon:zmc.json";
 
-            //apiMonCheck = apiMonCheck.replace(loginData.url, $scope.monitors[j].Monitor.baseURL);
-
-            // in multiserver replace apiurl with baseurl
-
+           
             NVRDataModel.debug("MonitorCtrl:monitorStateCheck: " + apiMonCheck);
             //console.log("**** ZMC CHECK " + apiMonCheck);
             $http.get(apiMonCheck)
diff --git a/www/js/TimelineCtrl.js b/www/js/TimelineCtrl.js
index e1fbc4ef..4a144092 100644
--- a/www/js/TimelineCtrl.js
+++ b/www/js/TimelineCtrl.js
@@ -864,11 +864,11 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
                 myevents[j].Event.MonitorName = NVRDataModel.getMonitorName(myevents[j].Event.MonitorId);
 
                 myevents[j].Event.streamingURL = NVRDataModel.getStreamingURL(myevents[j].Event.MonitorId);
-                myevents[j].Event.baseURL = NVRDataModel.getBaseURL(myevents[j].Event.MonitorId);
+                myevents[j].Event.recordingURL = NVRDataModel.getRecordingURL(myevents[j].Event.MonitorId);
                 myevents[j].Event.imageMode = NVRDataModel.getImageMode(myevents[j].Event.MonitorId);
-                if (NVRDataModel.getLogin().url != myevents[j].Event.baseURL) {
+                if (NVRDataModel.getLogin().url != myevents[j].Event.recordingURL) {
 
-                  myevents[j].Event.baseURL = NVRDataModel.getLogin().url;
+                  myevents[j].Event.recordingURL = NVRDataModel.getLogin().url;
                 }
 
                 if (typeof myevents[j].Event.DefaultVideo === 'undefined')
@@ -1168,16 +1168,14 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
                   // now construct base path
 
                   myevents[i].Event.streamingURL = NVRDataModel.getStreamingURL(myevents[i].Event.MonitorId);
-                  myevents[i].Event.baseURL = NVRDataModel.getBaseURL(myevents[i].Event.MonitorId);
+                  myevents[i].Event.recordingURL = NVRDataModel.getRecordingURL(myevents[i].Event.MonitorId);
                   myevents[i].Event.imageMode = NVRDataModel.getImageMode(myevents[i].Event.MonitorId);
-                  if (NVRDataModel.getLogin().url != myevents[i].Event.baseURL) {
+                  if (NVRDataModel.getLogin().url != myevents[i].Event.recordingURL) {
                     //NVRDataModel.debug ("Multi server, changing base");
-                    myevents[i].Event.baseURL = NVRDataModel.getLogin().url;
+                    myevents[i].Event.recordingURL = NVRDataModel.getLogin().url;
 
                   }
-                  // console.log ("***** MULTISERVER STREAMING URL FOR EVENTS " + myevents[i].Event.streamingURL);
-
-                  //  console.log ("***** MULTISERVER BASE URL FOR EVENTS " + myevents[i].Event.baseURL);
+               
 
                   if (idfound) {
 
diff --git a/www/js/TimelineModalCtrl.js b/www/js/TimelineModalCtrl.js
index 238d271a..11c604f1 100644
--- a/www/js/TimelineModalCtrl.js
+++ b/www/js/TimelineModalCtrl.js
@@ -47,15 +47,11 @@ angular.module('zmApp.controllers').controller('TimelineModalCtrl', ['$scope', '
   $scope.constructFrames = function (event, alarm) {
 
     var stream = "";
-    if (event.Event.imageMode == 'path') {
-      stream = event.Event.baseURL + "/index.php?view=image" +
-        "&path=" + event.Event.relativePath + alarm.fname +
-        "&height=380";
-    } else if (event.Event.imageMode == 'fid') {
-      stream = event.Event.baseURL + "/index.php?view=image" +
+  
+      stream = event.Event.recordingURL + "/index.php?view=image" +
         "&fid=" + alarm.id;
 
-    }
+    
     if ($rootScope.authSession != 'undefined') stream += $rootScope.authSession;
 
     stream += NVRDataModel.insertBasicAuthToken();
@@ -125,13 +121,10 @@ angular.module('zmApp.controllers').controller('TimelineModalCtrl', ['$scope', '
   $scope.showImage = function (p, r, f, fid, e, imode, id) {
     var img;
     //console.log("Image Mode " + imode);
-    if (imode == 'path')
-
-      img = "";
-    else {
+ 
       img = "";
       // console.log ("IS MULTISERVER SO IMAGE IS " + img);
-    }
+    
     $rootScope.zmPopup = $ionicPopup.alert({
       title: 'frame:' + fid + '/Event:' + e,
       template: img,
@@ -300,7 +293,7 @@ angular.module('zmApp.controllers').controller('TimelineModalCtrl', ['$scope', '
         fid: event.event.Frame[i].FrameId,
         id: event.event.Frame[i].Id,
         //group:i,
-        relativePath: computeRelativePath(event.event),
+        
         score: event.event.Frame[i].Score,
         fname: padToN(event.event.Frame[i].FrameId, eventImageDigits) + "-capture.jpg",
 
@@ -317,7 +310,7 @@ angular.module('zmApp.controllers').controller('TimelineModalCtrl', ['$scope', '
           eid: event.event.Event.Id,
           fid: event.event.Frame[i].FrameId,
           //group:i,
-          relativePath: computeRelativePath(event.event),
+         
           score: event.event.Frame[i].Score,
           fname: padToN(event.event.Frame[i].FrameId, eventImageDigits) + "-capture.jpg",
           id: event.event.Frame[i].Id,
@@ -361,10 +354,10 @@ angular.module('zmApp.controllers').controller('TimelineModalCtrl', ['$scope', '
 
       //console.log ("You tapped " + ndx);
       $scope.alarm_images = [];
-      $scope.playbackURL = $scope.event.Event.baseURL;
+      $scope.playbackURL = $scope.event.Event.recordingURL;
       var items = current_data.datasets[0].frames[ndx];
       $scope.alarm_images.push({
-        relativePath: items.relativePath,
+  
         fid: items.fid,
         id: items.id,
         fname: items.fname,
@@ -376,56 +369,7 @@ angular.module('zmApp.controllers').controller('TimelineModalCtrl', ['$scope', '
 
   }
 
-  //--------------------------------------------------------
-  // utility function
-  //--------------------------------------------------------
-
-  function computeRelativePath(event) {
-    var relativePath = "";
-    var loginData = NVRDataModel.getLogin();
-    var str = event.Event.StartTime;
-    var yy = moment(str).locale('en').format('YY');
-    var mm = moment(str).locale('en').format('MM');
-    var dd = moment(str).locale('en').format('DD');
-    var hh = moment(str).locale('en').format('HH');
-    var min = moment(str).locale('en').format('mm');
-    var sec = moment(str).locale('en').format('ss');
-    relativePath = event.Event.MonitorId + "/" +
-      yy + "/" +
-      mm + "/" +
-      dd + "/" +
-      hh + "/" +
-      min + "/" +
-      sec + "/";
-    return relativePath;
-
-  }
-
-  //--------------------------------------------------------
-  // utility function
-  //--------------------------------------------------------
-
-  function computeBasePath(event) {
-    var basePath = "";
-    var loginData = NVRDataModel.getLogin();
-    var str = event.Event.StartTime;
-    var yy = moment(str).locale('en').format('YY');
-    var mm = moment(str).locale('en').format('MM');
-    var dd = moment(str).locale('en').format('DD');
-    var hh = moment(str).locale('en').format('HH');
-    var min = moment(str).locale('en').format('mm');
-    var sec = moment(str).locale('en').format('ss');
-
-    basePath = loginData.url + "/events/" +
-      event.Event.MonitorId + "/" +
-      yy + "/" +
-      mm + "/" +
-      dd + "/" +
-      hh + "/" +
-      min + "/" +
-      sec + "/";
-    return basePath;
-  }
+  
 
   function humanizeTime(str) {
     return moment.tz(str, NVRDataModel.getTimeZoneNow()).fromNow();
-- 
cgit v1.2.3


From 8e34a5c7d2e5969d72a2a469e8c97ad7fc7de712 Mon Sep 17 00:00:00 2001
From: Pliable Pixels 
Date: Sat, 20 Oct 2018 20:20:03 -0400
Subject: #724 and general, filter out cake error leaks

---
 www/js/app.js | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

(limited to 'www/js')

diff --git a/www/js/app.js b/www/js/app.js
index 8a8cfd55..4e146384 100755
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -714,6 +714,14 @@ angular.module('zmApp', [
         }
 
         //console.log ("HTTP response");
+
+      
+        if (response.data && typeof(response.data) == 'string' && response.data.indexOf("
") != -1) {
+            console.log ("cake error detected, attempting fix...");
+            response.data = JSON.parse(response.data.replace(/
[\s\S]*<\/pre>/,''));
+            //console.log ("FIXED="+response.data);
+        }
+        //"data":"
         return response;
       }
 
@@ -2340,6 +2348,13 @@ angular.module('zmApp', [
                 });
                 return d.promise;
               } else {
+
+                // work around for cake-error leak
+                if (succ.data.indexOf("
") != -1) {
+                  logger.debug ("**** Native: cake-error in message, trying fix...");
+                  succ.data = JSON.parse(succ.data.replace(/
[\s\S]*<\/pre>/,''));
+                }
+
                 try {
                   d.resolve({
                     "data": JSON.parse(succ.data)
-- 
cgit v1.2.3


From 3f549f3d6ea3dac1fbf862e236549ce0dd7fd570 Mon Sep 17 00:00:00 2001
From: Pliable Pixels 
Date: Sun, 21 Oct 2018 10:33:47 -0400
Subject: #724 more cleanup

---
 www/js/DataModel.js       |  8 +-------
 www/js/EventCtrl.js       |  8 ++++----
 www/js/EventModalCtrl.js  | 19 ++++++++++++-------
 www/js/MontageCtrl.js     |  7 -------
 www/js/PortalLoginCtrl.js |  1 +
 www/js/app.js             |  4 ++--
 6 files changed, 20 insertions(+), 27 deletions(-)

(limited to 'www/js')

diff --git a/www/js/DataModel.js b/www/js/DataModel.js
index f1ea3689..71062b57 100644
--- a/www/js/DataModel.js
+++ b/www/js/DataModel.js
@@ -703,13 +703,7 @@ angular.module('zmApp.controllers')
         // the ZM authors fix this and streamline the access of images
         // from APIs, I don't have an option
 
-        zmStateGo: function (state, p1, p2) {
-          if ($rootScope.platformOS == 'desktop')
-            $state.go(state, p1, p2);
-          else
-            $state.go(state, p1, p2);
-          //    $ionicNativeTransitions.stateGo(state, p1, p2);
-        },
+      
 
         // used when an empty server profile is created
         getDefaultLoginObject: function () {
diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js
index b2bbca87..2c64ce70 100644
--- a/www/js/EventCtrl.js
+++ b/www/js/EventCtrl.js
@@ -1813,7 +1813,7 @@ angular.module('zmApp.controllers')
       $http.get(apiurl)
         .then(function (data) {
           data = data.data;
-          NVRDataModel.debug(JSON.stringify(data));
+         // NVRDataModel.debug(JSON.stringify(data));
           $scope.hours = [];
           var p = data.results;
           for (var key in data.results) {
@@ -1849,7 +1849,7 @@ angular.module('zmApp.controllers')
       $http.get(apiurl)
         .then(function (data) {
           data = data.data;
-          NVRDataModel.debug(JSON.stringify(data));
+          //NVRDataModel.debug(JSON.stringify(data));
           $scope.days = [];
           var p = data.results;
           for (var key in data.results) {
@@ -1882,7 +1882,7 @@ angular.module('zmApp.controllers')
       $http.get(apiurl)
         .then(function (data) {
           data = data.data;
-          NVRDataModel.debug(JSON.stringify(data));
+         // NVRDataModel.debug(JSON.stringify(data));
           $scope.weeks = [];
           var p = data.results;
           for (var key in data.results) {
@@ -1916,7 +1916,7 @@ angular.module('zmApp.controllers')
       $http.get(apiurl)
         .then(function (data) {
           data = data.data;
-          NVRDataModel.debug(JSON.stringify(data));
+          //NVRDataModel.debug(JSON.stringify(data));
           $scope.months = [];
           var p = data.results;
           for (var key in data.results) {
diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js
index 6c98c167..7bd049a5 100644
--- a/www/js/EventModalCtrl.js
+++ b/www/js/EventModalCtrl.js
@@ -1064,14 +1064,14 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
     if (currentStreamState == streamState.STOPPED || !$scope.eventId) {
       stream = "";
     } else if (currentStreamState == streamState.SNAPSHOT) {
-      stream = $scope.loginData.url +
+      stream = currentEvent.Event.recordingURL +
         "/index.php?view=image" +
         "&fid=" + $scope.snapshotFrameId +
         (!isGlobalFid ? "&eid=" + $scope.eventId : "") +
         "&scale=" + $scope.singleImageQuality +
         $rootScope.authSession;
     } else if (currentStreamState == streamState.ACTIVE) {
-      stream = $scope.loginData.streamingurl +
+      stream = currentEvent.Event.streamingURL +
         "/nph-zms?source=event&mode=jpeg" +
         "&event=" + $scope.eventId + "&frame=1" +
         "&replay=" + $scope.currentStreamMode +
@@ -1082,9 +1082,11 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
     }
 
     //console.log ($scope.connKey );
-    //console.log ("STREAM="+stream);
+    
     //console.log ("EID="+$scope.eventId);
     if ($rootScope.basicAuthToken && stream) stream += "&basicauth=" + $rootScope.basicAuthToken;
+
+    //console.log ("STREAM="+stream);
     return stream;
 
   };
@@ -1131,6 +1133,9 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
       isSnapShotEnabled = true;
       currentStreamState = streamState.SNAPSHOT;
       if (m.snapshotId) {
+       
+        $scope.snapshotFrameId = m.snapshotId;
+        
         $scope.snapshotFrameId = m.snapshotId;
         isGlobalFid = true;
       } else {
@@ -1913,7 +1918,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
     tempAlarms = [];
     $scope.FrameArray = [];
 
-    console.log ("FRAME ARRAY: "+JSON.stringify(data));
+    //console.log ("FRAME ARRAY: "+JSON.stringify(data));
     if (data.event && data.event.Frame) $scope.FrameArray = data.event.Frame;
     var ts = 0;
 
@@ -1950,7 +1955,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
 
     if ($rootScope.authSession != 'undefined') frame += $rootScope.authSession;
     frame += NVRDataModel.insertBasicAuthToken();
-    // console.log (frame);
+    //console.log ("alarm:"+frame);
     return frame;
   };
 
@@ -1982,7 +1987,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
           currentEvent = event;
           $scope.event = event;
 
-          console.log ("prepareModal DATA:"+JSON.stringify(success.data));
+         // console.log ("prepareModal DATA:"+JSON.stringify(success.data));
           computeAlarmFrames(success.data);
           $scope.eventWarning = '';
 
@@ -1998,7 +2003,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
 
           event.Event.streamingURL = NVRDataModel.getStreamingURL(event.Event.MonitorId);
           
-          event.Event.recordingURL = loginData.url;
+          event.Event.recordingURL = NVRDataModel.getRecordingURL(event.Event.MonitorId);
           event.Event.imageMode = NVRDataModel.getImageMode(event.Event.MonitorId);
 
           //console.log (JSON.stringify( success));
diff --git a/www/js/MontageCtrl.js b/www/js/MontageCtrl.js
index 161a1025..003e1168 100644
--- a/www/js/MontageCtrl.js
+++ b/www/js/MontageCtrl.js
@@ -218,13 +218,6 @@ angular.module('zmApp.controllers')
             "view": 'app.montage'
           });
 
-
-          /* $state.transitionTo($state.current, $stateParams, {
-               reload: true,
-               inherit: false,
-               notify: true
-           });*/
-
         });
 
 
diff --git a/www/js/PortalLoginCtrl.js b/www/js/PortalLoginCtrl.js
index 36630a73..592e2c43 100644
--- a/www/js/PortalLoginCtrl.js
+++ b/www/js/PortalLoginCtrl.js
@@ -282,6 +282,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
   broadcastHandles.push(pp);
 
   function evaluateTappedNotification() {
+    NVRDataModel.debug (">>>Inside evaluateNotifications");
     var ld = NVRDataModel.getLogin();
 
 
diff --git a/www/js/app.js b/www/js/app.js
index 4e146384..8bbe4d1b 100755
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -716,7 +716,7 @@ angular.module('zmApp', [
         //console.log ("HTTP response");
 
       
-        if (response.data && typeof(response.data) == 'string' && response.data.indexOf("
") != -1) {
+        if (response.data && typeof(response.data) == 'string' && response.data.startsWith("
")) {
             console.log ("cake error detected, attempting fix...");
             response.data = JSON.parse(response.data.replace(/
[\s\S]*<\/pre>/,''));
             //console.log ("FIXED="+response.data);
@@ -2350,7 +2350,7 @@ angular.module('zmApp', [
               } else {
 
                 // work around for cake-error leak
-                if (succ.data.indexOf("
") != -1) {
+                if (succ.data.startsWith("
") ) {
                   logger.debug ("**** Native: cake-error in message, trying fix...");
                   succ.data = JSON.parse(succ.data.replace(/
[\s\S]*<\/pre>/,''));
                 }
-- 
cgit v1.2.3


From e3076881b748fff53690373f02211706b60fab79 Mon Sep 17 00:00:00 2001
From: Pliable Pixels 
Date: Sun, 21 Oct 2018 18:49:32 -0400
Subject: #725 moved evaluate tapped notification to service,trapped handler in
 all controllers

---
 www/js/DataModel.js          |  61 +++++++++++++++++++++++++
 www/js/DevOptionsCtrl.js     |  11 +++++
 www/js/EventCtrl.js          |  19 ++++++--
 www/js/EventServer.js        |  10 +++--
 www/js/LogCtrl.js            |  11 +++++
 www/js/LoginCtrl.js          |  11 +++++
 www/js/MomentCtrl.js         |  11 +++++
 www/js/MonitorCtrl.js        |  11 +++++
 www/js/MontageCtrl.js        |  19 ++++++++
 www/js/MontageHistoryCtrl.js |  12 +++++
 www/js/NewsCtrl.js           |  11 +++++
 www/js/PortalLoginCtrl.js    | 104 ++-----------------------------------------
 www/js/StateCtrl.js          |  12 +++++
 www/js/TimelineCtrl.js       |  14 +++++-
 14 files changed, 209 insertions(+), 108 deletions(-)

(limited to 'www/js')

diff --git a/www/js/DataModel.js b/www/js/DataModel.js
index 71062b57..168c29f1 100644
--- a/www/js/DataModel.js
+++ b/www/js/DataModel.js
@@ -675,6 +675,67 @@ angular.module('zmApp.controllers')
           debug(val);
         },
 
+        evaluateTappedNotification: function() {
+
+          var state = "";
+          var stateParams1 = {};
+          var stateParams2 = {};
+          
+          debug ("Inside evaluateNotifications");
+          
+          if ($rootScope.tappedNotification == 2) { // url launch
+            debug("Came via app url launch with mid=" + $rootScope.tappedMid);
+            debug("Came via app url launch with eid=" + $rootScope.tappedEid);
+         
+          
+            if (parseInt($rootScope.tappedMid) > 0) {
+              debug("Going to live view ");
+              state = "app.monitors";
+
+            } else if (parseInt($rootScope.tappedEid) > 0) {
+              debug("Going to events with EID=" + $rootScope.tappedEid);
+              state = "app.events";
+              stateParams1 = {
+                "id": 0,
+                "playEvent": true
+              };
+              stateParams2 = {
+                reload: true
+              };
+
+            }
+         
+      
+          } // 2
+          else if ($rootScope.tappedNotification == 1) // push
+          {
+      
+      
+            debug("Came via push tap. onTapScreen=" + loginData.onTapScreen);
+            if (loginData.onTapScreen == $translate.instant('kTapMontage')) {
+              debug("Going to montage");
+              state = "app.montage";
+      
+         
+            } else if (loginData.onTapScreen == $translate.instant('kTapEvents')) {
+              debug("Going to events");
+              state = "app.events";
+              stateParams1 = {
+                "id": 0,
+                "playEvent": true
+              };
+           
+            } else // we go to live
+            {
+              debug("Going to live view ");
+              state = "app.monitors";
+            
+            }
+          } 
+          $rootScope.tappedNotification = 0;
+          return [state, stateParams1, stateParams2];
+        },
+
         setLastUpdateCheck: function (val) {
           lastUpdateCheck = val;
           localforage.setItem("lastUpdateCheck", lastUpdateCheck);
diff --git a/www/js/DevOptionsCtrl.js b/www/js/DevOptionsCtrl.js
index dab4570b..5592baa3 100644
--- a/www/js/DevOptionsCtrl.js
+++ b/www/js/DevOptionsCtrl.js
@@ -10,6 +10,17 @@ angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope'
 
   };
 
+  $scope.$on ( "process-push", function () {
+    NVRDataModel.debug (">> DevOptionsCtrl: push handler");
+    var s = NVRDataModel.evaluateTappedNotification();
+    NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+    $ionicHistory.nextViewOptions({
+      disableAnimate:true,
+      disableBack: true
+    });
+    $state.go(s[0],s[1],s[2]);
+  });
+
   //----------------------------------------------------------------
   // Alarm notification handling
   //----------------------------------------------------------------
diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js
index 2c64ce70..cce81b3a 100644
--- a/www/js/EventCtrl.js
+++ b/www/js/EventCtrl.js
@@ -71,6 +71,19 @@ angular.module('zmApp.controllers')
     // initial code
     //---------------------------------------------------
 
+
+    $scope.$on ( "process-push", function () {
+      NVRDataModel.debug (">> EventCtrl: push handler");
+      var s = NVRDataModel.evaluateTappedNotification();
+      NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+      $ionicHistory.nextViewOptions({
+        disableAnimate:true,
+        disableBack: true
+      });
+      $state.go(s[0],s[1],s[2]);
+    });
+ 
+
     //we come here is TZ is updated after the view loads
     var tzu = $scope.$on('tz-updated', function () {
       $scope.tzAbbr = NVRDataModel.getTimeZoneNow();
@@ -115,8 +128,8 @@ angular.module('zmApp.controllers')
         footerExpand();
         // now do event playback if asked
 
-        if (parseInt($rootScope.tappedEid) > 0) {
-          NVRDataModel.debug(" Trying ot live play " + $rootScope.tappedEid);
+        if (parseInt($rootScope.tappedEid) > 0 && $stateParams.playEvent == 'true') {
+          NVRDataModel.debug(" Trying to  play event due to push:" + $rootScope.tappedEid);
           playSpecificEvent($rootScope.tappedEid);
 
         }
@@ -148,7 +161,7 @@ angular.module('zmApp.controllers')
       window.removeEventListener("resize", recomputeThumbSize, false);
       NVRDataModel.debug("EventCtrl: Deregistering broadcast handles");
       for (var i = 0; i < broadcastHandles.length; i++) {
-        // broadcastHandles[i]();
+      //  broadcastHandles[i]();
       }
       broadcastHandles = [];
     });
diff --git a/www/js/EventServer.js b/www/js/EventServer.js
index 1340b88d..da1e07a3 100644
--- a/www/js/EventServer.js
+++ b/www/js/EventServer.js
@@ -598,13 +598,13 @@ angular.module('zmApp.controllers')
 
               $rootScope.tappedMid = mid;
               $rootScope.tappedEid = eid;
-              NVRDataModel.log("Push notification: Tapped Monitor taken as:" + $rootScope.tappedMid);
+              NVRDataModel.log("ES:Push notification: Tapped Monitor taken as:" + $rootScope.tappedMid);
 
               if ($rootScope.platformOS == 'ios') {
 
-                NVRDataModel.debug("iOS only: clearing background push");
+                NVRDataModel.debug("ES:iOS only: clearing background push");
                 push.finish(function () {
-                  NVRDataModel.debug("processing of push data is finished");
+                  NVRDataModel.debug("ES:processing of push data is finished");
                 });
               }
 
@@ -616,7 +616,9 @@ angular.module('zmApp.controllers')
             }
             // keep this emit not broadcast
             // see Portal latch for reason
-            $rootScope.$emit('process-push');
+
+            NVRDataModel.debug ("EventServer: broadvasting process-push");
+            $rootScope.$broadcast('process-push');
 
           } else // app is foreground
           {
diff --git a/www/js/LogCtrl.js b/www/js/LogCtrl.js
index 46db4304..9a84661a 100644
--- a/www/js/LogCtrl.js
+++ b/www/js/LogCtrl.js
@@ -26,6 +26,17 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo
     loadLogs();
   }
 
+  $scope.$on ( "process-push", function () {
+    NVRDataModel.debug (">> LogCtrl: push handler");
+    var s = NVRDataModel.evaluateTappedNotification();
+    NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+    $ionicHistory.nextViewOptions({
+      disableAnimate:true,
+      disableBack: true
+    });
+    $state.go(s[0],s[1],s[2]);
+  });
+
   $scope.flipLogs = function () {
     if ($scope.logEntity == 'ZoneMinder')
       $scope.logEntity = $rootScope.appName;
diff --git a/www/js/LoginCtrl.js b/www/js/LoginCtrl.js
index a9a09433..568b67ed 100644
--- a/www/js/LoginCtrl.js
+++ b/www/js/LoginCtrl.js
@@ -33,6 +33,17 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r
 
   }
 
+  $scope.$on ( "process-push", function () {
+    NVRDataModel.debug (">> LoginCtrl: push handler");
+    var s = NVRDataModel.evaluateTappedNotification();
+    NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+    $ionicHistory.nextViewOptions({
+      disableAnimate:true,
+      disableBack: true
+    });
+    $state.go(s[0],s[1],s[2]);
+  });
+
   //----------------------------------------------------------------
   // Alarm notification handling
   //----------------------------------------------------------------
diff --git a/www/js/MomentCtrl.js b/www/js/MomentCtrl.js
index ace5d218..d108010d 100644
--- a/www/js/MomentCtrl.js
+++ b/www/js/MomentCtrl.js
@@ -23,6 +23,17 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
     $ionicSideMenuDelegate.toggleLeft();
   };
 
+  $scope.$on ( "process-push", function () {
+    NVRDataModel.debug (">> MomentCtrl: push handler");
+    var s = NVRDataModel.evaluateTappedNotification();
+    NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+    $ionicHistory.nextViewOptions({
+      disableAnimate:true,
+      disableBack: true
+    });
+    $state.go(s[0],s[1],s[2]);
+  });
+
   //----------------------------------------------------------------
   // Alarm notification handling
   //----------------------------------------------------------------
diff --git a/www/js/MonitorCtrl.js b/www/js/MonitorCtrl.js
index dbc4a7f3..6e2ce019 100644
--- a/www/js/MonitorCtrl.js
+++ b/www/js/MonitorCtrl.js
@@ -48,6 +48,17 @@ angular.module('zmApp.controllers')
         $ionicSideMenuDelegate.toggleLeft();
       };
 
+      $scope.$on ( "process-push", function () {
+        NVRDataModel.debug (">> MonitorCtrl: push handler");
+        var s = NVRDataModel.evaluateTappedNotification();
+        NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+        $ionicHistory.nextViewOptions({
+          disableAnimate:true,
+          disableBack: true
+        });
+        $state.go(s[0],s[1],s[2]);
+      });
+
       //----------------------------------------------------------------
       // Alarm notification handling
       //----------------------------------------------------------------
diff --git a/www/js/MontageCtrl.js b/www/js/MontageCtrl.js
index 003e1168..dd574704 100644
--- a/www/js/MontageCtrl.js
+++ b/www/js/MontageCtrl.js
@@ -47,6 +47,20 @@ angular.module('zmApp.controllers')
 
     var broadcastHandles = [];
 
+    $scope.$on ( "process-push", function () {
+      NVRDataModel.debug (">> MontageCtrl: push handler");
+      var s = NVRDataModel.evaluateTappedNotification();
+      NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+      $ionicHistory.nextViewOptions({
+        disableAnimate:true,
+        disableBack: true
+      });
+      $state.go(s[0],s[1],s[2]);
+    });
+   
+  
+ 
+
     var as = $scope.$on("auth-success", function () {
 
       /* var tnow = new Date();
@@ -2012,6 +2026,11 @@ angular.module('zmApp.controllers')
       currentStreamState = streamState.STOPPED;
       viewCleanup();
       viewCleaned = true;
+      NVRDataModel.debug("Deregistering broadcast handles");
+    for (var i = 0; i < broadcastHandles.length; i++) {
+      broadcastHandles[i]();
+    }
+    broadcastHandles = [];
 
     });
 
diff --git a/www/js/MontageHistoryCtrl.js b/www/js/MontageHistoryCtrl.js
index e2782387..ea9f7f2f 100644
--- a/www/js/MontageHistoryCtrl.js
+++ b/www/js/MontageHistoryCtrl.js
@@ -11,6 +11,18 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc
   var viewCleaned = false;
   $scope.isScreenReady = false;
 
+
+  $scope.$on ( "process-push", function () {
+    NVRDataModel.debug (">> MontageHistoryCtrl: push handler");
+    var s = NVRDataModel.evaluateTappedNotification();
+    NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+    $ionicHistory.nextViewOptions({
+      disableAnimate:true,
+      disableBack: true
+    });
+    $state.go(s[0],s[1],s[2]);
+  });
+
   //--------------------------------------------------------------------------------------
   // Handles bandwidth change, if required
   //
diff --git a/www/js/NewsCtrl.js b/www/js/NewsCtrl.js
index ba45fb0e..d9850080 100644
--- a/www/js/NewsCtrl.js
+++ b/www/js/NewsCtrl.js
@@ -27,6 +27,17 @@ angular.module('zmApp.controllers').controller('zmApp.NewsCtrl', ['$scope', '$ro
     }
   };
 
+  $scope.$on ( "process-push", function () {
+    NVRDataModel.debug (">> NewsCtrl: push handler");
+    var s = NVRDataModel.evaluateTappedNotification();
+    NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+    $ionicHistory.nextViewOptions({
+      disableAnimate:true,
+      disableBack: true
+    });
+    $state.go(s[0],s[1],s[2]);
+  });
+
   //-------------------------------------------------------------------------
   // Lets make sure we set screen dim properly as we enter
   // The problem is we enter other states before we leave previous states
diff --git a/www/js/PortalLoginCtrl.js b/www/js/PortalLoginCtrl.js
index 592e2c43..9789ed56 100644
--- a/www/js/PortalLoginCtrl.js
+++ b/www/js/PortalLoginCtrl.js
@@ -5,7 +5,7 @@
 /* global vis,cordova,StatusBar,angular,console,moment */
 angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionicPlatform', '$scope', 'zm', 'NVRDataModel', '$ionicSideMenuDelegate', '$rootScope', '$http', '$q', '$state', '$ionicLoading', '$ionicPopover', '$ionicScrollDelegate', '$ionicModal', '$timeout', 'zmAutoLogin', '$ionicHistory', 'EventServer', '$translate', '$ionicPopup', function ($ionicPlatform, $scope, zm, NVRDataModel, $ionicSideMenuDelegate, $rootScope, $http, $q, $state, $ionicLoading, $ionicPopover, $ionicScrollDelegate, $ionicModal, $timeout, zmAutoLogin, $ionicHistory, EventServer, $translate, $ionicPopup) {
 
-  var processPush = false;
+ 
   var broadcastHandles = [];
 
   $scope.$on('$ionicView.beforeLeave', function () {
@@ -270,95 +270,8 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
   }
 
 
-  //this needs to be rootScope so it lives even when we are out of view
-  var pp = $rootScope.$on("process-push", function () {
-    processPush = true;
-    NVRDataModel.debug("processPush set to true, but will act after login is complete...");
-   
-    
-
-
-  });
-  broadcastHandles.push(pp);
-
-  function evaluateTappedNotification() {
-    NVRDataModel.debug (">>>Inside evaluateNotifications");
-    var ld = NVRDataModel.getLogin();
-
-
-    if ($rootScope.tappedNotification == 2) { // url launch
-      NVRDataModel.debug("Came via app url launch with mid=" + $rootScope.tappedMid);
-      NVRDataModel.debug("Came via app url launch with eid=" + $rootScope.tappedEid);
-      $rootScope.tappedNotification = 0;
-      $ionicHistory.nextViewOptions({
-        disableBack: true
-      });
-
-      if (parseInt($rootScope.tappedMid) > 0) {
-        NVRDataModel.debug("Going to live view ");
-        $state.go("app.monitors");
-        return;
-
-      } else if (parseInt($rootScope.tappedEid) > 0) {
-        NVRDataModel.debug("Going to events with EID=" + $rootScope.tappedEid);
-        $state.go("app.events", {
-          //"id": $rootScope.tappedEid,
-          "id": 0,
-          "playEvent": true
-        }, {
-          reload: true
-        });
-        return;
-      }
-      // go with monitor first, then event - just because I feel like ;)
-
-
-    } else if ($rootScope.tappedNotification == 1) // push
-    {
-
-
-      NVRDataModel.log("Came via push tap. onTapScreen=" + ld.onTapScreen);
-      $rootScope.pushOverride = true;
-      //console.log ("***** NOTIFICATION TAPPED  ");
-      $rootScope.tappedNotification = 0;
-      $ionicHistory.nextViewOptions({
-        disableBack: true
-      });
-
-      if (ld.onTapScreen == $translate.instant('kTapMontage')) {
-        NVRDataModel.debug("Going to montage");
-        $state.go("app.montage");
-
-        return;
-      } else if (ld.onTapScreen == $translate.instant('kTapEvents')) {
-        NVRDataModel.debug("Going to events");
-        $state.go("app.events", {
-          "id": 0,
-          "playEvent": false
-        });
-        return;
-      } else // we go to live
-      {
-        NVRDataModel.debug("Going to live view ");
-        $state.go("app.monitors");
-        return;
-      }
-    } else {
-      /* NVRDataModel.debug ("Inside evaluateTapped, but no tap occured.");
-              NVRDataModel.debug ("This can happen if timing mismatch and holy foo happens");
-              $state.go("app.montage",
-                  {},
-                  {
-                      reload: true
-                  });
   
-                  return;*/
-
-    }
-
-  }
-
-
+  //broadcastHandles.push(pp);
 
   function unlock(idVerified) {
     /*
@@ -455,7 +368,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
                   // if push happens AFTER this, then while going to
                   // lastState, it will interrupt and go to onTap
                   // (I HOPE...)
-                  if (!processPush) {
+                
                     //console.log ("NOTIFICATION TAPPED INSIDE CHECK IS "+$rootScope.tappedNotification);
                     var statetoGo = $rootScope.lastState ? $rootScope.lastState : 'app.montage';
                     //  NVRDataModel.debug("logging state transition");
@@ -465,16 +378,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
                     $state.go(statetoGo, $rootScope.lastStateParam);
                     return;
 
-                  }
-                  else {
-                    NVRDataModel.debug ("Authentication over, now processing push...");
-                    evaluateTappedNotification();
-                    processPush = false;
-                  }
-                  //  else
-                  //    evaluateTappedNotification();
-
-
+               
                 },
                 function (error) { // API Error
                   NVRDataModel.log("API Error handler: going to login getAPI returned error: " + JSON.stringify(error));
diff --git a/www/js/StateCtrl.js b/www/js/StateCtrl.js
index 62bffb81..096df1e0 100644
--- a/www/js/StateCtrl.js
+++ b/www/js/StateCtrl.js
@@ -34,6 +34,18 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup'
   var inProgress = 0; // prevents user from another op if one is in progress
   getRunStatus();
 
+
+  $scope.$on ( "process-push", function () {
+    NVRDataModel.debug (">> StateCtrl: push handler");
+    var s = NVRDataModel.evaluateTappedNotification();
+    NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+    $ionicHistory.nextViewOptions({
+      disableAnimate:true,
+      disableBack: true
+    });
+    $state.go(s[0],s[1],s[2]);
+  });
+
   // Let's stagger this by 500ms each to see if Chrome lets these through
   // This may also help if your Apache is not configured to let multiple connections through
 
diff --git a/www/js/TimelineCtrl.js b/www/js/TimelineCtrl.js
index 4a144092..a75199f4 100644
--- a/www/js/TimelineCtrl.js
+++ b/www/js/TimelineCtrl.js
@@ -20,6 +20,18 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
     $ionicSideMenuDelegate.toggleLeft();
   };
 
+
+  $scope.$on ( "process-push", function () {
+    NVRDataModel.debug (">> TimelineCtrl: push handler");
+    var s = NVRDataModel.evaluateTappedNotification();
+    NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+    $ionicHistory.nextViewOptions({
+      disableAnimate:true,
+      disableBack: true
+    });
+    $state.go(s[0],s[1],s[2]);
+  });
+
   //---------------------------------------f-------------------------
   // Alarm notification handling
   //----------------------------------------------------------------
@@ -285,7 +297,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
 
     NVRDataModel.debug("Timeline: Deregistering broadcast handles");
     for (var i = 0; i < broadcastHandles.length; i++) {
-      // broadcastHandles[i]();
+      broadcastHandles[i]();
     }
     broadcastHandles = [];
 
-- 
cgit v1.2.3


From 304ec3a2ed6ec5de921894aa1bc853548b0fcfb3 Mon Sep 17 00:00:00 2001
From: Pliable Pixels 
Date: Mon, 22 Oct 2018 09:12:18 -0400
Subject: #725 also added push handler in portal if broadcast before view is
 ready. Removed from login as it may come here due to auth fail

---
 www/js/EventServer.js     |  8 ++++++--
 www/js/LoginCtrl.js       |  6 +++---
 www/js/PortalLoginCtrl.js | 33 +++++++++++++++++++++++++++++++--
 3 files changed, 40 insertions(+), 7 deletions(-)

(limited to 'www/js')

diff --git a/www/js/EventServer.js b/www/js/EventServer.js
index da1e07a3..a67d5426 100644
--- a/www/js/EventServer.js
+++ b/www/js/EventServer.js
@@ -617,8 +617,12 @@ angular.module('zmApp.controllers')
             // keep this emit not broadcast
             // see Portal latch for reason
 
-            NVRDataModel.debug ("EventServer: broadvasting process-push");
-            $rootScope.$broadcast('process-push');
+            //https://stackoverflow.com/a/22651128/1361529
+            $timeout ( function () {
+              NVRDataModel.debug ("EventServer: broadcasting process-push");
+              $rootScope.$broadcast('process-push');
+            },100);
+          
 
           } else // app is foreground
           {
diff --git a/www/js/LoginCtrl.js b/www/js/LoginCtrl.js
index 568b67ed..0585f3c3 100644
--- a/www/js/LoginCtrl.js
+++ b/www/js/LoginCtrl.js
@@ -34,14 +34,14 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r
   }
 
   $scope.$on ( "process-push", function () {
-    NVRDataModel.debug (">> LoginCtrl: push handler");
-    var s = NVRDataModel.evaluateTappedNotification();
+    NVRDataModel.debug (">> LoginCtrl: push handler. Not processing push, because you might be here due to login failure");
+    /*var s = NVRDataModel.evaluateTappedNotification();
     NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
     $ionicHistory.nextViewOptions({
       disableAnimate:true,
       disableBack: true
     });
-    $state.go(s[0],s[1],s[2]);
+    $state.go(s[0],s[1],s[2]);*/
   });
 
   //----------------------------------------------------------------
diff --git a/www/js/PortalLoginCtrl.js b/www/js/PortalLoginCtrl.js
index 9789ed56..1b2032b2 100644
--- a/www/js/PortalLoginCtrl.js
+++ b/www/js/PortalLoginCtrl.js
@@ -7,12 +7,25 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
 
  
   var broadcastHandles = [];
+  var processPush = false;
 
   $scope.$on('$ionicView.beforeLeave', function () {
-    //processPush = false;
+    processPush = false;
     // NVRDataModel.debug ("BeforeEnter in Portal: setting ProcessPush to false");
   });
 
+
+  
+
+
+  $scope.$on ( "process-push", function () {
+    processPush = true;
+
+    NVRDataModel.debug (">> PortalLogin: push handler, marking to resolve later");
+    
+  });
+
+
   $scope.$on('$ionicView.beforeLeave', function () {
     NVRDataModel.debug("Portal: Deregistering broadcast handles");
     for (var i = 0; i < broadcastHandles.length; i++) {
@@ -372,11 +385,27 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
                     //console.log ("NOTIFICATION TAPPED INSIDE CHECK IS "+$rootScope.tappedNotification);
                     var statetoGo = $rootScope.lastState ? $rootScope.lastState : 'app.montage';
                     //  NVRDataModel.debug("logging state transition");
-                    NVRDataModel.debug("Transitioning state to: " +
+
+                    if (!processPush) {
+                      NVRDataModel.debug("Transitioning state to: " +
                       statetoGo + " with param " + JSON.stringify($rootScope.lastStateParam));
 
                     $state.go(statetoGo, $rootScope.lastStateParam);
                     return;
+                    }
+                    else {
+                      NVRDataModel.debug ("Deferred handling of push:");
+                      processPush = false;
+                      var s = NVRDataModel.evaluateTappedNotification();
+                      NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+                      $ionicHistory.nextViewOptions({
+                        disableAnimate:true,
+                        disableBack: true
+                      });
+                      $state.go(s[0],s[1],s[2]);
+                      return;
+                    }
+                   
 
                
                 },
-- 
cgit v1.2.3


From e3ee3eeeb220cfce88ddfdb2189ec6e49432565f Mon Sep 17 00:00:00 2001
From: Pliable Pixels 
Date: Mon, 22 Oct 2018 09:38:27 -0400
Subject: other cleanup

---
 www/js/DataModel.js            |  8 ++++----
 www/js/EventCtrl.js            | 20 ++++++++++----------
 www/js/EventModalCtrl.js       |  2 +-
 www/js/EventsModalGraphCtrl.js |  2 +-
 www/js/MontageCtrl.js          |  2 +-
 www/js/PortalLoginCtrl.js      |  9 ++-------
 www/js/TimelineCtrl.js         |  2 +-
 www/js/app.js                  | 10 +++++-----
 8 files changed, 25 insertions(+), 30 deletions(-)

(limited to 'www/js')

diff --git a/www/js/DataModel.js b/www/js/DataModel.js
index 168c29f1..a2eac7ea 100644
--- a/www/js/DataModel.js
+++ b/www/js/DataModel.js
@@ -1885,7 +1885,7 @@ angular.module('zmApp.controllers')
           if (forceReload == 1 || configParams.ZM_EVENT_IMAGE_DIGITS == '-1') {
             var apiurl = loginData.apiurl;
             var myurl = apiurl + '/configs/viewByName/ZM_EVENT_IMAGE_DIGITS.json';
-            debug("Config URL for digits is:" + myurl);
+            //debug("Config URL for digits is:" + myurl);
             $http.get(myurl)
               .then(function (data) {
                 data = data.data;
@@ -1903,8 +1903,8 @@ angular.module('zmApp.controllers')
                 return (d.promise);
               });
           } else {
-            log("ZM_EVENT_IMAGE_DIGITS is already configured for " +
-              configParams.ZM_EVENT_IMAGE_DIGITS);
+           // log("ZM_EVENT_IMAGE_DIGITS is already configured for " +
+             // configParams.ZM_EVENT_IMAGE_DIGITS);
             d.resolve(configParams.ZM_EVENT_IMAGE_DIGITS);
             return (d.promise);
           }
@@ -2939,7 +2939,7 @@ angular.module('zmApp.controllers')
           $rootScope.authSession = "undefined";
 
 
-          console.log("CURRENT SERVER: " + loginData.currentServerVersion);
+         // console.log("CURRENT SERVER: " + loginData.currentServerVersion);
 
           if (loginData.currentServerVersion && (versionCompare(loginData.currentServerVersion, zm.versionWithLoginAPI) != -1 || loginData.loginAPISupported)) {
 
diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js
index cce81b3a..ef70fcf6 100644
--- a/www/js/EventCtrl.js
+++ b/www/js/EventCtrl.js
@@ -103,7 +103,7 @@ angular.module('zmApp.controllers')
       //
       window.addEventListener("resize", recomputeThumbSize, false);
       $ionicListDelegate.canSwipeItems(true);
-      NVRDataModel.debug("enabling options swipe");
+     // NVRDataModel.debug("enabling options swipe");
 
       // see if we come from monitors, if so, don't filter events
       if ($ionicHistory.backTitle() == 'Monitors') {
@@ -159,7 +159,7 @@ angular.module('zmApp.controllers')
 
       NVRDataModel.debug("EventCtrl: Deregistering resize listener");
       window.removeEventListener("resize", recomputeThumbSize, false);
-      NVRDataModel.debug("EventCtrl: Deregistering broadcast handles");
+      //NVRDataModel.debug("EventCtrl: Deregistering broadcast handles");
       for (var i = 0; i < broadcastHandles.length; i++) {
       //  broadcastHandles[i]();
       }
@@ -205,7 +205,7 @@ angular.module('zmApp.controllers')
 
 
       if (NVRDataModel.getLogin().enableThumbs) {
-        NVRDataModel.debug("--> thumbnail means increasing row size");
+       // NVRDataModel.debug("--> thumbnail means increasing row size");
         eventsListScrubHeight = 370;
         eventsListDetailsHeight = 330;
 
@@ -1821,7 +1821,7 @@ angular.module('zmApp.controllers')
       var af = "/AlarmFrames >=:" + (ld.enableAlarmCount ? ld.minAlarmCount : 0);
 
       var apiurl = ld.apiurl + "/events/consoleEvents/1 hour" + af + ".json";
-      NVRDataModel.debug("consoleEvents API:" + apiurl);
+      //NVRDataModel.debug("consoleEvents API:" + apiurl);
 
       $http.get(apiurl)
         .then(function (data) {
@@ -1858,7 +1858,7 @@ angular.module('zmApp.controllers')
         });
 
       apiurl = ld.apiurl + "/events/consoleEvents/1 day" + af + ".json";
-      NVRDataModel.debug("consoleEvents API:" + apiurl);
+      //NVRDataModel.debug("consoleEvents API:" + apiurl);
       $http.get(apiurl)
         .then(function (data) {
           data = data.data;
@@ -1891,7 +1891,7 @@ angular.module('zmApp.controllers')
         });
 
       apiurl = ld.apiurl + "/events/consoleEvents/1 week" + af + ".json";
-      NVRDataModel.debug("consoleEvents API:" + apiurl);
+      //NVRDataModel.debug("consoleEvents API:" + apiurl);
       $http.get(apiurl)
         .then(function (data) {
           data = data.data;
@@ -1925,7 +1925,7 @@ angular.module('zmApp.controllers')
         });
 
       apiurl = ld.apiurl + "/events/consoleEvents/1 month" + af + ".json";
-      NVRDataModel.debug("consoleEvents API:" + apiurl);
+      //NVRDataModel.debug("consoleEvents API:" + apiurl);
       $http.get(apiurl)
         .then(function (data) {
           data = data.data;
@@ -2028,7 +2028,7 @@ angular.module('zmApp.controllers')
         NVRDataModel.debug("disabling options swipe");
       } else {
         $ionicListDelegate.canSwipeItems(true);
-        NVRDataModel.debug("enabling options swipe");
+        //NVRDataModel.debug("enabling options swipe");
       }
 
     };
@@ -2070,11 +2070,11 @@ angular.module('zmApp.controllers')
 
       if (event.Event.ShowScrub == false) {
         $ionicListDelegate.canSwipeItems(true);
-        NVRDataModel.debug("enabling options swipe due to toggle");
+        //NVRDataModel.debug("enabling options swipe due to toggle");
       } else {
         $ionicListDelegate.canSwipeItems(false);
         $ionicListDelegate.closeOptionButtons();
-        NVRDataModel.debug("disabling options swipe due to toggle");
+       // NVRDataModel.debug("disabling options swipe due to toggle");
 
       }
 
diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js
index 7bd049a5..4097b92d 100644
--- a/www/js/EventModalCtrl.js
+++ b/www/js/EventModalCtrl.js
@@ -1303,7 +1303,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
 
     }
 
-    NVRDataModel.debug("Deregistering broadcast handles");
+   // NVRDataModel.debug("Deregistering broadcast handles");
     for (var i = 0; i < broadcastHandles.length; i++) {
       // broadcastHandles[i]();
     }
diff --git a/www/js/EventsModalGraphCtrl.js b/www/js/EventsModalGraphCtrl.js
index b4e82ee2..0cfacb68 100644
--- a/www/js/EventsModalGraphCtrl.js
+++ b/www/js/EventsModalGraphCtrl.js
@@ -23,7 +23,7 @@ angular.module('zmApp.controllers').controller('EventsModalGraphCtrl', ['$scope'
 
 
   $scope.$on('modal.removed', function (e, m) {
-    NVRDataModel.debug("Deregistering broadcast handles");
+    //NVRDataModel.debug("Deregistering broadcast handles");
     for (var i = 0; i < broadcastHandles.length; i++) {
       // broadcastHandles[i]();
     }
diff --git a/www/js/MontageCtrl.js b/www/js/MontageCtrl.js
index dd574704..ec569943 100644
--- a/www/js/MontageCtrl.js
+++ b/www/js/MontageCtrl.js
@@ -2026,7 +2026,7 @@ angular.module('zmApp.controllers')
       currentStreamState = streamState.STOPPED;
       viewCleanup();
       viewCleaned = true;
-      NVRDataModel.debug("Deregistering broadcast handles");
+      //NVRDataModel.debug("Deregistering broadcast handles");
     for (var i = 0; i < broadcastHandles.length; i++) {
       broadcastHandles[i]();
     }
diff --git a/www/js/PortalLoginCtrl.js b/www/js/PortalLoginCtrl.js
index 1b2032b2..f514917e 100644
--- a/www/js/PortalLoginCtrl.js
+++ b/www/js/PortalLoginCtrl.js
@@ -11,23 +11,18 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
 
   $scope.$on('$ionicView.beforeLeave', function () {
     processPush = false;
-    // NVRDataModel.debug ("BeforeEnter in Portal: setting ProcessPush to false");
+   
   });
 
-
-  
-
-
   $scope.$on ( "process-push", function () {
     processPush = true;
-
     NVRDataModel.debug (">> PortalLogin: push handler, marking to resolve later");
     
   });
 
 
   $scope.$on('$ionicView.beforeLeave', function () {
-    NVRDataModel.debug("Portal: Deregistering broadcast handles");
+    //NVRDataModel.debug("Portal: Deregistering broadcast handles");
     for (var i = 0; i < broadcastHandles.length; i++) {
       //broadcastHandles[i]();
     }
diff --git a/www/js/TimelineCtrl.js b/www/js/TimelineCtrl.js
index a75199f4..f6125fb6 100644
--- a/www/js/TimelineCtrl.js
+++ b/www/js/TimelineCtrl.js
@@ -295,7 +295,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
 
     }
 
-    NVRDataModel.debug("Timeline: Deregistering broadcast handles");
+    //NVRDataModel.debug("Timeline: Deregistering broadcast handles");
     for (var i = 0; i < broadcastHandles.length; i++) {
       broadcastHandles[i]();
     }
diff --git a/www/js/app.js b/www/js/app.js
index 8bbe4d1b..fd772197 100755
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -1009,7 +1009,7 @@ angular.module('zmApp', [
       proceedWithLogin()
         .then(function (success) {
 
-            NVRDataModel.debug("Storing login time as " + moment().toString());
+            //NVRDataModel.debug("Storing login time as " + moment().toString());
             localforage.setItem("lastLogin", moment().toString());
             d.resolve(success);
             return d.promise;
@@ -1813,7 +1813,7 @@ angular.module('zmApp', [
             toState.name != "app.zm-portal-login"
           ) {
 
-            NVRDataModel.debug("Setting last-desktop-state to:" + JSON.stringify(toState));
+           // NVRDataModel.debug("Setting last-desktop-state to:" + JSON.stringify(toState));
             localforage.setItem('last-desktop-state', {
               'name': toState.name,
               'params': toState.params
@@ -1852,7 +1852,7 @@ angular.module('zmApp', [
         // to work in Windows
 
 
-        NVRDataModel.debug("Setting last-desktop-state to:" + JSON.stringify(toState) + " with params:" + JSON.stringify(toParams));
+        //NVRDataModel.debug("Setting last-desktop-state to:" + JSON.stringify(toState) + " with params:" + JSON.stringify(toParams));
         localforage.setItem('last-desktop-state', {
           'name': toState,
           'params': toParams
@@ -2204,8 +2204,8 @@ angular.module('zmApp', [
               $rootScope.lastState = $ionicHistory.currentView().stateName;
               $rootScope.lastStateParam =
                 $ionicHistory.currentView().stateParams;
-              NVRDataModel.debug("Last State recorded:" +
-                JSON.stringify($ionicHistory.currentView()));
+              //NVRDataModel.debug("Last State recorded:" +
+                //JSON.stringify($ionicHistory.currentView()));
 
               if ($rootScope.lastState == "app.zm-portal-login") {
                 NVRDataModel.debug("Last state was portal-login, so forcing montage");
-- 
cgit v1.2.3


From ff613f8e6210d2c4cd2f8deacc0096e18aff2fcd Mon Sep 17 00:00:00 2001
From: Pliable Pixels 
Date: Mon, 22 Oct 2018 11:50:53 -0400
Subject: #725 move push handlers inside beforeEnter for better consistency

---
 www/js/DevOptionsCtrl.js     | 25 ++++++++++++++-----------
 www/js/EventCtrl.js          | 24 +++++++++++++-----------
 www/js/LogCtrl.js            | 27 +++++++++++++++++----------
 www/js/LoginCtrl.js          | 26 +++++++++++++++-----------
 www/js/MomentCtrl.js         | 23 +++++++++++++----------
 www/js/MonitorCtrl.js        | 25 +++++++++++++++----------
 www/js/MontageCtrl.js        | 25 ++++++++++++++-----------
 www/js/MontageHistoryCtrl.js | 23 +++++++++++++----------
 www/js/NewsCtrl.js           | 27 +++++++++++++++++----------
 www/js/PortalLoginCtrl.js    | 16 ++++++++++------
 www/js/StateCtrl.js          | 27 +++++++++++++++++----------
 www/js/TimelineCtrl.js       | 24 +++++++++++++-----------
 www/js/WizardCtrl.js         | 14 ++++++++++++++
 13 files changed, 185 insertions(+), 121 deletions(-)

(limited to 'www/js')

diff --git a/www/js/DevOptionsCtrl.js b/www/js/DevOptionsCtrl.js
index 5592baa3..1e194fab 100644
--- a/www/js/DevOptionsCtrl.js
+++ b/www/js/DevOptionsCtrl.js
@@ -10,17 +10,7 @@ angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope'
 
   };
 
-  $scope.$on ( "process-push", function () {
-    NVRDataModel.debug (">> DevOptionsCtrl: push handler");
-    var s = NVRDataModel.evaluateTappedNotification();
-    NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
-    $ionicHistory.nextViewOptions({
-      disableAnimate:true,
-      disableBack: true
-    });
-    $state.go(s[0],s[1],s[2]);
-  });
-
+  
   //----------------------------------------------------------------
   // Alarm notification handling
   //----------------------------------------------------------------
@@ -58,6 +48,19 @@ angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope'
   // state, that effectively overwrites current view power management needs
   //------------------------------------------------------------------------
   $scope.$on('$ionicView.beforeEnter', function () {
+
+    $scope.$on ( "process-push", function () {
+      NVRDataModel.debug (">> DevOptionsCtrl: push handler");
+      var s = NVRDataModel.evaluateTappedNotification();
+      NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+      $ionicHistory.nextViewOptions({
+        disableAnimate:true,
+        disableBack: true
+      });
+      $state.go(s[0],s[1],s[2]);
+    });
+  
+
     //console.log("**VIEW ** DevOptions Ctrl Entered");
     $scope.loginData = NVRDataModel.getLogin();
     console.log("DEV LOGS=" + $scope.loginData.enableLogs);
diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js
index ef70fcf6..a037c7ee 100644
--- a/www/js/EventCtrl.js
+++ b/www/js/EventCtrl.js
@@ -72,17 +72,7 @@ angular.module('zmApp.controllers')
     //---------------------------------------------------
 
 
-    $scope.$on ( "process-push", function () {
-      NVRDataModel.debug (">> EventCtrl: push handler");
-      var s = NVRDataModel.evaluateTappedNotification();
-      NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
-      $ionicHistory.nextViewOptions({
-        disableAnimate:true,
-        disableBack: true
-      });
-      $state.go(s[0],s[1],s[2]);
-    });
- 
+    
 
     //we come here is TZ is updated after the view loads
     var tzu = $scope.$on('tz-updated', function () {
@@ -171,6 +161,18 @@ angular.module('zmApp.controllers')
       //console.log ("********* BEFORE ENTER");
       //
 
+      $scope.$on ( "process-push", function () {
+        NVRDataModel.debug (">> EventCtrl: push handler");
+        var s = NVRDataModel.evaluateTappedNotification();
+        NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+        $ionicHistory.nextViewOptions({
+          disableAnimate:true,
+          disableBack: true
+        });
+        $state.go(s[0],s[1],s[2]);
+      });
+   
+
       $scope.modalData = {
         "doRefresh": false
       };
diff --git a/www/js/LogCtrl.js b/www/js/LogCtrl.js
index 9a84661a..2858e289 100644
--- a/www/js/LogCtrl.js
+++ b/www/js/LogCtrl.js
@@ -26,16 +26,7 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo
     loadLogs();
   }
 
-  $scope.$on ( "process-push", function () {
-    NVRDataModel.debug (">> LogCtrl: push handler");
-    var s = NVRDataModel.evaluateTappedNotification();
-    NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
-    $ionicHistory.nextViewOptions({
-      disableAnimate:true,
-      disableBack: true
-    });
-    $state.go(s[0],s[1],s[2]);
-  });
+
 
   $scope.flipLogs = function () {
     if ($scope.logEntity == 'ZoneMinder')
@@ -267,6 +258,22 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo
   // reset power state on exit as if it is called after we enter another
   // state, that effectively overwrites current view power management needs
   //------------------------------------------------------------------------
+  
+  
+  $scope.$on('$ionic.beforeEnter', function () {
+
+    $scope.$on ( "process-push", function () {
+      NVRDataModel.debug (">> LogCtrl: push handler");
+      var s = NVRDataModel.evaluateTappedNotification();
+      NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+      $ionicHistory.nextViewOptions({
+        disableAnimate:true,
+        disableBack: true
+      });
+      $state.go(s[0],s[1],s[2]);
+    });
+  });
+  
   $scope.$on('$ionicView.enter', function () {
     //console.log("**VIEW ** Log Ctrl Entered");
 
diff --git a/www/js/LoginCtrl.js b/www/js/LoginCtrl.js
index 0585f3c3..09a48ac2 100644
--- a/www/js/LoginCtrl.js
+++ b/www/js/LoginCtrl.js
@@ -33,17 +33,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r
 
   }
 
-  $scope.$on ( "process-push", function () {
-    NVRDataModel.debug (">> LoginCtrl: push handler. Not processing push, because you might be here due to login failure");
-    /*var s = NVRDataModel.evaluateTappedNotification();
-    NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
-    $ionicHistory.nextViewOptions({
-      disableAnimate:true,
-      disableBack: true
-    });
-    $state.go(s[0],s[1],s[2]);*/
-  });
-
+ 
   //----------------------------------------------------------------
   // Alarm notification handling
   //----------------------------------------------------------------
@@ -244,6 +234,20 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r
   // state, that effectively overwrites current view power management needs
   //------------------------------------------------------------------------
   $scope.$on('$ionicView.beforeEnter', function () {
+
+
+    $scope.$on ( "process-push", function () {
+      NVRDataModel.debug (">> LoginCtrl: push handler. Not processing push, because you might be here due to login failure");
+      /*var s = NVRDataModel.evaluateTappedNotification();
+      NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+      $ionicHistory.nextViewOptions({
+        disableAnimate:true,
+        disableBack: true
+      });
+      $state.go(s[0],s[1],s[2]);*/
+    });
+
+    
     oldLoginData = '';
 
     $scope.loginData = NVRDataModel.getLogin();
diff --git a/www/js/MomentCtrl.js b/www/js/MomentCtrl.js
index d108010d..44f653df 100644
--- a/www/js/MomentCtrl.js
+++ b/www/js/MomentCtrl.js
@@ -23,16 +23,7 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
     $ionicSideMenuDelegate.toggleLeft();
   };
 
-  $scope.$on ( "process-push", function () {
-    NVRDataModel.debug (">> MomentCtrl: push handler");
-    var s = NVRDataModel.evaluateTappedNotification();
-    NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
-    $ionicHistory.nextViewOptions({
-      disableAnimate:true,
-      disableBack: true
-    });
-    $state.go(s[0],s[1],s[2]);
-  });
+  
 
   //----------------------------------------------------------------
   // Alarm notification handling
@@ -844,6 +835,18 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
 
   $scope.$on('$ionicView.beforeEnter', function () {
 
+
+    $scope.$on ( "process-push", function () {
+      NVRDataModel.debug (">> MomentCtrl: push handler");
+      var s = NVRDataModel.evaluateTappedNotification();
+      NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+      $ionicHistory.nextViewOptions({
+        disableAnimate:true,
+        disableBack: true
+      });
+      $state.go(s[0],s[1],s[2]);
+    });
+
     //console.log ("HERE>>>>>>>>>>>>>>>>>>>>>>>>>>>");
 
     monitors = angular.copy(message); // don't mess up the main monitors list
diff --git a/www/js/MonitorCtrl.js b/www/js/MonitorCtrl.js
index 6e2ce019..8926688b 100644
--- a/www/js/MonitorCtrl.js
+++ b/www/js/MonitorCtrl.js
@@ -48,16 +48,7 @@ angular.module('zmApp.controllers')
         $ionicSideMenuDelegate.toggleLeft();
       };
 
-      $scope.$on ( "process-push", function () {
-        NVRDataModel.debug (">> MonitorCtrl: push handler");
-        var s = NVRDataModel.evaluateTappedNotification();
-        NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
-        $ionicHistory.nextViewOptions({
-          disableAnimate:true,
-          disableBack: true
-        });
-        $state.go(s[0],s[1],s[2]);
-      });
+      
 
       //----------------------------------------------------------------
       // Alarm notification handling
@@ -262,6 +253,20 @@ angular.module('zmApp.controllers')
       // reset power state on exit as if it is called after we enter another
       // state, that effectively overwrites current view power management needs
       //------------------------------------------------------------------------
+
+      $scope.$on('$ionicView.beforeEnter', function() {
+
+        $scope.$on ( "process-push", function () {
+          NVRDataModel.debug (">> MonitorCtrl: push handler");
+          var s = NVRDataModel.evaluateTappedNotification();
+          NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+          $ionicHistory.nextViewOptions({
+            disableAnimate:true,
+            disableBack: true
+          });
+          $state.go(s[0],s[1],s[2]);
+        });
+      });
       $scope.$on('$ionicView.enter', function () {
         // console.log("**VIEW ** Monitor Ctrl Entered");
         NVRDataModel.setAwake(false);
diff --git a/www/js/MontageCtrl.js b/www/js/MontageCtrl.js
index ec569943..0e3d34d0 100644
--- a/www/js/MontageCtrl.js
+++ b/www/js/MontageCtrl.js
@@ -47,17 +47,7 @@ angular.module('zmApp.controllers')
 
     var broadcastHandles = [];
 
-    $scope.$on ( "process-push", function () {
-      NVRDataModel.debug (">> MontageCtrl: push handler");
-      var s = NVRDataModel.evaluateTappedNotification();
-      NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
-      $ionicHistory.nextViewOptions({
-        disableAnimate:true,
-        disableBack: true
-      });
-      $state.go(s[0],s[1],s[2]);
-    });
-   
+    
   
  
 
@@ -1830,6 +1820,19 @@ angular.module('zmApp.controllers')
     // minimal has to be beforeEnter or header won't hide
     $scope.$on('$ionicView.beforeEnter', function () {
 
+
+      $scope.$on ( "process-push", function () {
+        NVRDataModel.debug (">> MontageCtrl: push handler");
+        var s = NVRDataModel.evaluateTappedNotification();
+        NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+        $ionicHistory.nextViewOptions({
+          disableAnimate:true,
+          disableBack: true
+        });
+        $state.go(s[0],s[1],s[2]);
+      });
+     
+
       timeInMontage = new Date();
       broadcastHandles = [];
       randToAvoidCacheMem = new Date().getTime();
diff --git a/www/js/MontageHistoryCtrl.js b/www/js/MontageHistoryCtrl.js
index ea9f7f2f..0373adcd 100644
--- a/www/js/MontageHistoryCtrl.js
+++ b/www/js/MontageHistoryCtrl.js
@@ -12,16 +12,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc
   $scope.isScreenReady = false;
 
 
-  $scope.$on ( "process-push", function () {
-    NVRDataModel.debug (">> MontageHistoryCtrl: push handler");
-    var s = NVRDataModel.evaluateTappedNotification();
-    NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
-    $ionicHistory.nextViewOptions({
-      disableAnimate:true,
-      disableBack: true
-    });
-    $state.go(s[0],s[1],s[2]);
-  });
+
 
   //--------------------------------------------------------------------------------------
   // Handles bandwidth change, if required
@@ -1076,6 +1067,18 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc
     }
   }
   $scope.$on('$ionicView.beforeEnter', function () {
+
+    $scope.$on ( "process-push", function () {
+      NVRDataModel.debug (">> MontageHistoryCtrl: push handler");
+      var s = NVRDataModel.evaluateTappedNotification();
+      NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+      $ionicHistory.nextViewOptions({
+        disableAnimate:true,
+        disableBack: true
+      });
+      $state.go(s[0],s[1],s[2]);
+    });
+    
     // This rand is really used to reload the monitor image in img-src so it is not cached
     // I am making sure the image in montage view is always fresh
     // I don't think I am using this anymore FIXME: check and delete if needed
diff --git a/www/js/NewsCtrl.js b/www/js/NewsCtrl.js
index d9850080..180f70d7 100644
--- a/www/js/NewsCtrl.js
+++ b/www/js/NewsCtrl.js
@@ -27,16 +27,7 @@ angular.module('zmApp.controllers').controller('zmApp.NewsCtrl', ['$scope', '$ro
     }
   };
 
-  $scope.$on ( "process-push", function () {
-    NVRDataModel.debug (">> NewsCtrl: push handler");
-    var s = NVRDataModel.evaluateTappedNotification();
-    NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
-    $ionicHistory.nextViewOptions({
-      disableAnimate:true,
-      disableBack: true
-    });
-    $state.go(s[0],s[1],s[2]);
-  });
+  
 
   //-------------------------------------------------------------------------
   // Lets make sure we set screen dim properly as we enter
@@ -45,6 +36,22 @@ angular.module('zmApp.controllers').controller('zmApp.NewsCtrl', ['$scope', '$ro
   // reset power state on exit as if it is called after we enter another
   // state, that effectively overwrites current view power management needs
   //------------------------------------------------------------------------
+  
+  
+  $scope.$on ('$ionicView.beforeEnter', function () {
+
+    $scope.$on ( "process-push", function () {
+      NVRDataModel.debug (">> NewsCtrl: push handler");
+      var s = NVRDataModel.evaluateTappedNotification();
+      NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+      $ionicHistory.nextViewOptions({
+        disableAnimate:true,
+        disableBack: true
+      });
+      $state.go(s[0],s[1],s[2]);
+    });
+  });
+  
   $scope.$on('$ionicView.enter', function () {
     // console.log("**VIEW ** News Ctrl Entered");
     NVRDataModel.setAwake(false);
diff --git a/www/js/PortalLoginCtrl.js b/www/js/PortalLoginCtrl.js
index f514917e..fb317e5b 100644
--- a/www/js/PortalLoginCtrl.js
+++ b/www/js/PortalLoginCtrl.js
@@ -14,12 +14,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
    
   });
 
-  $scope.$on ( "process-push", function () {
-    processPush = true;
-    NVRDataModel.debug (">> PortalLogin: push handler, marking to resolve later");
-    
-  });
-
+  
 
   $scope.$on('$ionicView.beforeLeave', function () {
     //NVRDataModel.debug("Portal: Deregistering broadcast handles");
@@ -31,6 +26,15 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
 
   $scope.$on('$ionicView.enter',
     function () {
+
+
+      $scope.$on ( "process-push", function () {
+        processPush = true;
+        NVRDataModel.debug (">> PortalLogin: push handler, marking to resolve later");
+        
+      });
+    
+
       NVRDataModel.setJustResumed(false);
 
       NVRDataModel.debug("Inside Portal login Enter handler");
diff --git a/www/js/StateCtrl.js b/www/js/StateCtrl.js
index 096df1e0..cef454a7 100644
--- a/www/js/StateCtrl.js
+++ b/www/js/StateCtrl.js
@@ -35,16 +35,7 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup'
   getRunStatus();
 
 
-  $scope.$on ( "process-push", function () {
-    NVRDataModel.debug (">> StateCtrl: push handler");
-    var s = NVRDataModel.evaluateTappedNotification();
-    NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
-    $ionicHistory.nextViewOptions({
-      disableAnimate:true,
-      disableBack: true
-    });
-    $state.go(s[0],s[1],s[2]);
-  });
+
 
   // Let's stagger this by 500ms each to see if Chrome lets these through
   // This may also help if your Apache is not configured to let multiple connections through
@@ -72,6 +63,22 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup'
   // reset power state on exit as if it is called after we enter another
   // state, that effectively overwrites current view power management needs
   //------------------------------------------------------------------------
+  
+  
+  $scope.$on ('$ionicView.beforeEnter', function () {
+
+    $scope.$on ( "process-push", function () {
+      NVRDataModel.debug (">> StateCtrl: push handler");
+      var s = NVRDataModel.evaluateTappedNotification();
+      NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+      $ionicHistory.nextViewOptions({
+        disableAnimate:true,
+        disableBack: true
+      });
+      $state.go(s[0],s[1],s[2]);
+    });
+  });
+  
   $scope.$on('$ionicView.enter', function () {
     // console.log("**VIEW ** Montage Ctrl Entered");
     NVRDataModel.setAwake(false);
diff --git a/www/js/TimelineCtrl.js b/www/js/TimelineCtrl.js
index f6125fb6..bfcb34da 100644
--- a/www/js/TimelineCtrl.js
+++ b/www/js/TimelineCtrl.js
@@ -21,17 +21,6 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
   };
 
 
-  $scope.$on ( "process-push", function () {
-    NVRDataModel.debug (">> TimelineCtrl: push handler");
-    var s = NVRDataModel.evaluateTappedNotification();
-    NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
-    $ionicHistory.nextViewOptions({
-      disableAnimate:true,
-      disableBack: true
-    });
-    $state.go(s[0],s[1],s[2]);
-  });
-
   //---------------------------------------f-------------------------
   // Alarm notification handling
   //----------------------------------------------------------------
@@ -318,6 +307,19 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
 
   $scope.$on('$ionicView.beforeEnter', function () {
 
+
+
+  $scope.$on ( "process-push", function () {
+    NVRDataModel.debug (">> TimelineCtrl: push handler");
+    var s = NVRDataModel.evaluateTappedNotification();
+    NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+    $ionicHistory.nextViewOptions({
+      disableAnimate:true,
+      disableBack: true
+    });
+    $state.go(s[0],s[1],s[2]);
+  });
+  
     //$ionicHistory.clearCache();
     //$ionicHistory.clearHistory();
     timeline = '';
diff --git a/www/js/WizardCtrl.js b/www/js/WizardCtrl.js
index f4b3d456..fb76c64c 100644
--- a/www/js/WizardCtrl.js
+++ b/www/js/WizardCtrl.js
@@ -343,6 +343,20 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$
   function logout(u) {
     var d = $q.defer();
 
+    if (window.cordova) {
+      // we need to do this or ZM will send same auth hash
+      // this was fixed in a PR dated Oct 18
+      NVRDataModel.debug ("Clearing cookies");
+      cordova.plugin.http.clearCookies();
+
+      if ($scope.wizard.useauth && $scope.wizard.usebasicauth) {
+        NVRDataModel.debug ("setting basic auth");
+        cordova.plugin.http.useBasicAuth($scope.wizard.basicuser, $scope.wizard.basicpassword);
+
+      }
+    }
+
+
     $http({
         method: 'POST',
         url: u,
-- 
cgit v1.2.3


From 00c98cae610c0985c69b3b7bdb078cfbd354df0a Mon Sep 17 00:00:00 2001
From: Pliable Pixels 
Date: Mon, 22 Oct 2018 14:56:10 -0400
Subject: clear cookies in desktop too

---
 www/js/WizardCtrl.js | 16 +++++++++++-----
 www/js/app.js        | 16 ++++++++++++----
 2 files changed, 23 insertions(+), 9 deletions(-)

(limited to 'www/js')

diff --git a/www/js/WizardCtrl.js b/www/js/WizardCtrl.js
index fb76c64c..0852f4f6 100644
--- a/www/js/WizardCtrl.js
+++ b/www/js/WizardCtrl.js
@@ -2,7 +2,7 @@
 /* jslint browser: true*/
 /* global cordova,StatusBar,angular,console, Masonry, URI */
 
-angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$rootScope', '$ionicModal', 'NVRDataModel', '$ionicSideMenuDelegate', '$ionicHistory', '$state', '$ionicPopup', 'SecuredPopups', '$http', '$q', 'zm', '$ionicLoading', 'WizardHandler', '$translate', function ($scope, $rootScope, $ionicModal, NVRDataModel, $ionicSideMenuDelegate, $ionicHistory, $state, $ionicPopup, SecuredPopups, $http, $q, zm, $ionicLoading, WizardHandler, $translate) {
+angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$rootScope', '$ionicModal', 'NVRDataModel', '$ionicSideMenuDelegate', '$ionicHistory', '$state', '$ionicPopup', 'SecuredPopups', '$http', '$q', 'zm', '$ionicLoading', 'WizardHandler', '$translate', '$cookies', function ($scope, $rootScope, $ionicModal, NVRDataModel, $ionicSideMenuDelegate, $ionicHistory, $state, $ionicPopup, SecuredPopups, $http, $q, zm, $ionicLoading, WizardHandler, $translate, $cookies) {
   $scope.openMenu = function () {
     $ionicSideMenuDelegate.toggleLeft();
   };
@@ -342,19 +342,25 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$
 
   function logout(u) {
     var d = $q.defer();
-
+    NVRDataModel.debug ("Clearing cookies");
     if (window.cordova) {
       // we need to do this or ZM will send same auth hash
       // this was fixed in a PR dated Oct 18
-      NVRDataModel.debug ("Clearing cookies");
-      cordova.plugin.http.clearCookies();
+     
+        cordova.plugin.http.clearCookies();
+     }
+      else {
+        angular.forEach($cookies, function (v, k) {
+          $cookies.remove(k);
+         });
+      }
 
       if ($scope.wizard.useauth && $scope.wizard.usebasicauth) {
         NVRDataModel.debug ("setting basic auth");
         cordova.plugin.http.useBasicAuth($scope.wizard.basicuser, $scope.wizard.basicpassword);
 
       }
-    }
+    
 
 
     $http({
diff --git a/www/js/app.js b/www/js/app.js
index fd772197..993e5fff 100755
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -28,7 +28,8 @@ angular.module('zmApp', [
     'uk.ac.soton.ecs.videogular.plugins.cuepoints',
     'dcbImgFallback',
     'ngImageAppear',
-    'angular-websocket'
+    'angular-websocket',
+    'ngCookies'
 
 
   ])
@@ -860,7 +861,7 @@ angular.module('zmApp', [
   // This service automatically logs into ZM at periodic intervals
   //------------------------------------------------------------------
 
-  .factory('zmAutoLogin', function ($interval, NVRDataModel, $http, zm, $browser, $timeout, $q, $rootScope, $ionicLoading, $ionicPopup, $state, $ionicContentBanner, EventServer, $ionicHistory, $translate) {
+  .factory('zmAutoLogin', ['$interval', 'NVRDataModel', '$http', 'zm', '$timeout', '$q', '$rootScope', '$ionicLoading', '$ionicPopup', '$state', '$ionicContentBanner', 'EventServer', '$ionicHistory', '$translate', '$cookies',function ($interval, NVRDataModel, $http, zm, $timeout, $q, $rootScope, $ionicLoading, $ionicPopup, $state, $ionicContentBanner, EventServer, $ionicHistory, $translate, $cookies) {
     var zmAutoLoginHandle;
 
     //------------------------------------------------------------------
@@ -966,12 +967,19 @@ angular.module('zmApp', [
 
 
     function doLogoutAndLogin(str) {
+      NVRDataModel.debug ("Clearing cookies");
+
       if (window.cordova) {
         // we need to do this or ZM will send same auth hash
         // this was fixed in a PR dated Oct 18
-        NVRDataModel.debug ("Clearing cookies");
+       
         cordova.plugin.http.clearCookies();
       }
+      else {
+       angular.forEach($cookies, function (v, k) {
+         $cookies.remove(k);
+        });
+      }
       return NVRDataModel.logout()
         .then(function (ans) {
           return doLogin(str);
@@ -1417,7 +1425,7 @@ angular.module('zmApp', [
       stop: stop,
       doLogin: doLogoutAndLogin
     };
-  })
+  }])
 
   //====================================================================
   // First run in ionic
-- 
cgit v1.2.3


From 4496496240b6e3573c4c0892a28bfb0bcc288785 Mon Sep 17 00:00:00 2001
From: Pliable Pixels 
Date: Tue, 23 Oct 2018 10:36:38 -0400
Subject: increase default timeout

---
 www/js/app.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'www/js')

diff --git a/www/js/app.js b/www/js/app.js
index 993e5fff..f5ec5c47 100755
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -2341,7 +2341,7 @@ angular.module('zmApp', [
             method: method,
             data: arguments[0].data,
             headers: arguments[0].headers,
-            timeout: arguments[0].timeout || 10,
+            timeout: arguments[0].timeout || 20,
             responseType: arguments[0].responseType
           };
           // console.log ("**** -->"+method+"<-- using native HTTP with:"+encodeURI(url)+" payload:"+JSON.stringify(options));
-- 
cgit v1.2.3


From 022cd0c6c49d8b163207d790496a1516d289a849 Mon Sep 17 00:00:00 2001
From: Pliable Pixels 
Date: Tue, 23 Oct 2018 13:39:06 -0400
Subject: #724 copy paths from portal to recording and multi-server port too

---
 www/js/DataModel.js | 38 +++++++++++++++++++++++---------------
 www/js/EventCtrl.js |  2 +-
 2 files changed, 24 insertions(+), 16 deletions(-)

(limited to 'www/js')

diff --git a/www/js/DataModel.js b/www/js/DataModel.js
index a2eac7ea..d3a48fcd 100644
--- a/www/js/DataModel.js
+++ b/www/js/DataModel.js
@@ -20,7 +20,7 @@ angular.module('zmApp.controllers')
         DO NOT TOUCH zmAppVersion
         It is changed by sync_version.sh
       */
-      var zmAppVersion = "1.3.026";
+      var zmAppVersion = "1.3.028";
       var isBackground = false;
       var justResumed = false;
       var timeSinceResumed = -1;
@@ -2178,15 +2178,16 @@ angular.module('zmApp.controllers')
                                   multiservers[j].Server.Hostname = multiserver_scheme + multiservers[j].Server.Hostname;
                                 }
 
-                                debug("Monitor " + monitors[i].Monitor.Id + " has a recording server hostname of " + multiservers[j].Server.Hostname);
+                             //   debug("Monitor " + monitors[i].Monitor.Id + " has a recording server hostname of " + multiservers[j].Server.Hostname);
 
 
 
                                 // Now here is the logic, I need to retrieve serverhostname,
                                 // and slap on the host protocol and path. Meh.
 
-                                var p = URI.parse(loginData.streamingurl);
-                                var s = URI.parse(multiservers[j].Server.Hostname);
+                                var s = URI.parse(loginData.streamingurl);
+                                var m = URI.parse(multiservers[j].Server.Hostname);
+                                var p = URI.parse(loginData.url);
 
                                 /* if (!p.port && !isNaN(p.path)) {
                               debug ("Portal: port path reversed?");
@@ -2203,31 +2204,33 @@ angular.module('zmApp.controllers')
                             }
 */
 
-                                debug("recording server parsed is " + JSON.stringify(s));
+                                debug("recording server reported  is " + JSON.stringify(m));
                                 debug("portal  parsed is " + JSON.stringify(p));
+                                debug("streaming url  parsed is " + JSON.stringify(s));
+                                debug ("multi-port is:"+zmsPort);
 
                                 var st = "";
                                 var baseurl = "";
                                 var streamingurl = "";
 
 
-                               st += (s.scheme ? s.scheme : p.scheme) + "://"; // server scheme overrides 
+                               st += (m.scheme ? m.scheme : p.scheme) + "://"; // server scheme overrides 
 
 
 
                                 // if server doesn't have a protocol, what we want is in path
-                                if (!s.host) {
-                                  s.host = s.path;
-                                  s.path = undefined;
+                                if (!m.host) {
+                                  m.host = m.path;
+                                  m.path = undefined;
                                 }
 
-                                st += s.host;
+                                st += m.host;
 
                                 //console.log ("STEP 1: ST="+st);
 
                                 if (zmsPort <= 0 || loginData.disableSimulStreaming) {
-                                  if (p.port || s.port) {
-                                    st += (s.port ? ":" + s.port : ":" + p.port);
+                                  if (p.port || m.port) {
+                                    st += (m.port ? ":" + m.port : ":" + p.port);
                                     streamingurl = st;
                                     //console.log ("STEP 2 no ZMS: ST="+st);
 
@@ -2235,17 +2238,19 @@ angular.module('zmApp.controllers')
 
                                 } else {
                                   var sport = parseInt(zmsPort) + parseInt(monitors[i].Monitor.Id);
-                                  streamingurl = st + ':' + sport;
+                                  st = st + ':' + sport;
 
-                                  if (p.port || s.port)
-                                    st += (s.port ? ":" + s.port : ":" + p.port);
+                                  if (p.port || m.port)
+                                    st += (m.port ? ":" + m.port : ":" + p.port);
                                   //console.log ("STEP 2: ST="+st);
 
                                 }
 
 
                                 baseurl = st;
+                  
                                 controlURL = st;
+                                controlURL += (p.path ? p.path:'');
 
                                 st += (s.path ? s.path : p.path);
                                 streamingurl += (s.path ? s.path : p.path);
@@ -2258,6 +2263,9 @@ angular.module('zmApp.controllers')
                                 monitors[i].Monitor.streamingURL = st;
                                 monitors[i].Monitor.baseURL = baseurl;
                                 monitors[i].Monitor.controlURL = controlURL;
+
+
+                                debug ("Storing baseurl="+baseurl+" streamingURL="+st+" recordingURL="+controlURL);
                                 //console.log ("** Streaming="+st+" **base="+baseurl);
                                 // starting 1.30 we have fid=xxx mode to return images
                                 monitors[i].Monitor.imageMode = (versionCompare($rootScope.apiVersion, "1.30") == -1) ? "path" : "fid";
diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js
index a037c7ee..1fe91c6e 100644
--- a/www/js/EventCtrl.js
+++ b/www/js/EventCtrl.js
@@ -884,7 +884,7 @@ angular.module('zmApp.controllers')
     $scope.showImage = function (p, f, fid, e, imode, id, parray, ndx) {
       var img;
 
-      console.log ("P="+p+" F="+f+" E="+e+" imode="+imode+"  id="+id+" parray="+JSON.stringify(parray)+" ndx="+ndx);
+//      console.log ("P="+p+" F="+f+" E="+e+" imode="+imode+"  id="+id+" parray="+JSON.stringify(parray)+" ndx="+ndx);
 
       //console.log ("HERE");
       $scope.kFrame = $translate.instant('kFrame');
-- 
cgit v1.2.3


From 9a847cc74b193ac9ba011d8f51f05588996aee5b Mon Sep 17 00:00:00 2001
From: Pliable Pixels 
Date: Tue, 23 Oct 2018 16:10:39 -0400
Subject: build sync and ES ver

---
 www/js/app.js | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

(limited to 'www/js')

diff --git a/www/js/app.js b/www/js/app.js
index f5ec5c47..f43afe28 100755
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -42,7 +42,7 @@ angular.module('zmApp', [
   .constant('zm', {
     minAppVersion: '1.28.107', // if ZM is less than this, the app won't work
     recommendedAppVersion: '1.32.0',
-    minEventServerVersion: '2.0',
+    minEventServerVersion: '2.1',
     castAppId: 'BA30FB4C',
     alarmFlashTimer: 20000, // time to flash alarm
     gcmSenderId: '710936220256',
@@ -2341,14 +2341,25 @@ angular.module('zmApp', [
             method: method,
             data: arguments[0].data,
             headers: arguments[0].headers,
-            timeout: arguments[0].timeout || 20,
+           // timeout: arguments[0].timeout, 
             responseType: arguments[0].responseType
           };
+
+          if (arguments[0].timeout) options.timeout = arguments[0].timeout;
           // console.log ("**** -->"+method+"<-- using native HTTP with:"+encodeURI(url)+" payload:"+JSON.stringify(options));
           cordova.plugin.http.sendRequest(encodeURI(url), options,
             function (succ) {
               // automatic JSON parse if no responseType: text
               // fall back to text if JSON parse fails too
+
+                   // work around for cake-error leak
+
+                  // console.log ("HTTP RESPONSE:" + JSON.stringify(succ.data));
+                   if (succ.data && succ.data.startsWith("
") ) {
+                    logger.debug ("**** Native: cake-error in message, trying fix...");
+                    succ.data = JSON.parse(succ.data.replace(/
[\s\S]*<\/pre>/,''));
+                  }
+
               if (options.responseType == 'text') {
                 // don't parse into JSON
                 d.resolve({
@@ -2357,11 +2368,7 @@ angular.module('zmApp', [
                 return d.promise;
               } else {
 
-                // work around for cake-error leak
-                if (succ.data.startsWith("
") ) {
-                  logger.debug ("**** Native: cake-error in message, trying fix...");
-                  succ.data = JSON.parse(succ.data.replace(/
[\s\S]*<\/pre>/,''));
-                }
+           
 
                 try {
                   d.resolve({
-- 
cgit v1.2.3


From da1db311fb6835e8d0b60cf073cd8803e96fe0a6 Mon Sep 17 00:00:00 2001
From: Pliable Pixels 
Date: Thu, 25 Oct 2018 13:06:47 -0400
Subject: fix live playback url, show snapshot instead of auto play #725

---
 www/js/EventCtrl.js      |  5 ++++-
 www/js/EventModalCtrl.js | 12 +++++++++---
 2 files changed, 13 insertions(+), 4 deletions(-)

(limited to 'www/js')

diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js
index 1fe91c6e..51333424 100644
--- a/www/js/EventCtrl.js
+++ b/www/js/EventCtrl.js
@@ -140,7 +140,7 @@ angular.module('zmApp.controllers')
       };
       $scope.event = event;
       $scope.currentEvent = event;
-      openModal(event);
+      openModal(event, 'enabled');
 
     }
 
@@ -161,10 +161,13 @@ angular.module('zmApp.controllers')
       //console.log ("********* BEFORE ENTER");
       //
 
+      $scope.mid = '';
+
       $scope.$on ( "process-push", function () {
         NVRDataModel.debug (">> EventCtrl: push handler");
         var s = NVRDataModel.evaluateTappedNotification();
         NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s));
+        $scope.mid = $rootScope.tappedMid;
         $ionicHistory.nextViewOptions({
           disableAnimate:true,
           disableBack: true
diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js
index 4097b92d..58247239 100644
--- a/www/js/EventModalCtrl.js
+++ b/www/js/EventModalCtrl.js
@@ -349,7 +349,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
         }
       })
       .then(function (resp) {
-          NVRDataModel.debug("sendCmd response:" + JSON.stringify(resp));
+         // NVRDataModel.debug("sendCmd response:" + JSON.stringify(resp));
           d.resolve(resp);
           return (d.promise);
 
@@ -1978,7 +1978,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
     NVRDataModel.log("*** Constructed API for detailed events: " + myurl);
     $scope.humanizeTime = "...";
     $scope.mName = "...";
-    $scope.liveFeedMid = '';
+    $scope.liveFeedMid = $scope.mid;
 
     $http.get(myurl)
       .then(function (success) {
@@ -1986,6 +1986,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
           var event = success.data.event;
           currentEvent = event;
           $scope.event = event;
+          $scope.currentEvent = event;
 
          // console.log ("prepareModal DATA:"+JSON.stringify(success.data));
           computeAlarmFrames(success.data);
@@ -2192,7 +2193,12 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
         },
         function (err) {
           NVRDataModel.log("Error retrieving detailed frame API " + JSON.stringify(err));
-          NVRDataModel.displayBanner('error', ['could not retrieve frame details', 'please try again']);
+          NVRDataModel.displayBanner('error', ['could not retrieve frame details']);
+          $scope.eventWarning = $translate.instant('kLiveView');
+            // if this happens we get to live feed 
+            $scope.liveFeedMid = $scope.mid;
+    
+
         });
 
   }
-- 
cgit v1.2.3


From 09a78638bd054f2188ddceaf59da4f144aec223a Mon Sep 17 00:00:00 2001
From: Pliable Pixels 
Date: Fri, 26 Oct 2018 15:16:57 -0400
Subject: #725 make sure online/offline don't interfere

---
 www/js/EventCtrl.js      |  2 +-
 www/js/EventModalCtrl.js |  2 +-
 www/js/app.js            | 50 +++++++++++++++++++++++++++++++-----------------
 3 files changed, 34 insertions(+), 20 deletions(-)

(limited to 'www/js')

diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js
index 51333424..caf27220 100644
--- a/www/js/EventCtrl.js
+++ b/www/js/EventCtrl.js
@@ -2153,7 +2153,7 @@ angular.module('zmApp.controllers')
               },
               function (err) {
                 NVRDataModel.log("Error retrieving detailed frame API " + JSON.stringify(err));
-                NVRDataModel.displayBanner('error', ['could not retrieve frame details', 'please try again']);
+               // NVRDataModel.displayBanner('error', ['could not retrieve frame details', 'please try again']);
               });
 
         } // end of groupType == alarms
diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js
index 58247239..58c65399 100644
--- a/www/js/EventModalCtrl.js
+++ b/www/js/EventModalCtrl.js
@@ -2193,7 +2193,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
         },
         function (err) {
           NVRDataModel.log("Error retrieving detailed frame API " + JSON.stringify(err));
-          NVRDataModel.displayBanner('error', ['could not retrieve frame details']);
+         // NVRDataModel.displayBanner('error', ['could not retrieve frame details']);
           $scope.eventWarning = $translate.instant('kLiveView');
             // if this happens we get to live feed 
             $scope.liveFeedMid = $scope.mid;
diff --git a/www/js/app.js b/www/js/app.js
index f43afe28..59c61d3e 100755
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -1180,8 +1180,9 @@ angular.module('zmApp', [
 
 
                 d.resolve("Login Success");
-
                 $rootScope.$broadcast('auth-success', succ);
+                return d.promise;
+
               } catch (e) {
                 NVRDataModel.debug("Login API approach did not work...");
                 var ld = NVRDataModel.getLogin();
@@ -1240,7 +1241,7 @@ angular.module('zmApp', [
 
 
             }
-          );
+          ); // post
 
 
 
@@ -1687,9 +1688,15 @@ angular.module('zmApp', [
       // android seems to howl about this at app start?
       $timeout (function() {
 
-        NVRDataModel.log ("--------->Setting up network state handlers....");
-      document.addEventListener("offline", function () {
-        //console.log ("OFFLINE------------------------------------");
+      NVRDataModel.log ("--------->Setting up network state handlers....");
+      document.addEventListener("offline", onOnline, false);
+      document.addEventListener("online", onOffline, false);
+
+      },3000);
+
+
+      function onOnline() {
+
         $timeout(function () {
           $rootScope.online = false;
           NVRDataModel.log("************** Your network went offline");
@@ -1697,19 +1704,19 @@ angular.module('zmApp', [
           //$rootScope.$emit('network-change', "offline");
 
         });
-      }, false);
 
-      document.addEventListener("online", function () {
-        //console.log ("ONLINE------------------------------------");
+      }
+
+      function onOffline() {
+
         $timeout(function () {
 
           NVRDataModel.log("************ Your network came back online");
 
           $rootScope.online = true;
 
-          $timeout(function () {
-            // NVRDataModel.debug ("Ignoring - Alex R. Hack");
-            if (1) {
+
+          
               var networkState = "browser not supported";
               if (navigator.connection) networkState = navigator.connection.type;
               NVRDataModel.debug("Detected network type as: " + networkState);
@@ -1725,16 +1732,11 @@ angular.module('zmApp', [
               }
               NVRDataModel.log("Your network is online, re-authenticating");
               zmAutoLogin.doLogin($translate.instant('kReAuthenticating'));
-            }
-
-          }, 1000); // need a time gap, seems network type registers late
-
-
+    
 
         });
-      }, false);
 
-      },3000);
+      }
       
 
       // This code takes care of trapping the Android back button
@@ -2194,7 +2196,14 @@ angular.module('zmApp', [
           NVRDataModel.setBackground(false);
           NVRDataModel.setJustResumed(true);
           $ionicPlatform.ready(function () {
+
             NVRDataModel.log("App is resuming from background");
+
+            NVRDataModel.log ("-->Re-registering online/offine");
+            document.addEventListener("offline", onOnline, false);
+            document.addEventListener("online", onOffline, false);
+
+
             $rootScope.isDownloading = false;
 
             var ld = NVRDataModel.getLogin();
@@ -2242,6 +2251,11 @@ angular.module('zmApp', [
         }
 
         function pauseHandler() {
+
+          NVRDataModel.log ("-->Clearing online/offine");
+          document.removeEventListener("offline", onOnline, false);
+          document.removeEventListener("online", onOffline, false);
+
           NVRDataModel.setBackground(true);
           NVRDataModel.setJustResumed(false);
           // NVRDataModel.setJustResumed(true); // used for window stop
-- 
cgit v1.2.3


From 73d3ab8eea13038d9ff3ab3bea0329fc48b6e464 Mon Sep 17 00:00:00 2001
From: Pliable Pixels 
Date: Sat, 27 Oct 2018 07:38:21 -0400
Subject: when doing re-auth, don't logout

---
 www/js/app.js | 41 +++++++++++++++++++++++------------------
 1 file changed, 23 insertions(+), 18 deletions(-)

(limited to 'www/js')

diff --git a/www/js/app.js b/www/js/app.js
index 59c61d3e..a8e31e5a 100755
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -965,8 +965,12 @@ angular.module('zmApp', [
     // which actually means auth failed, but ZM treats it as a success
     //------------------------------------------------------------------
 
+    function _doLoginNoLogout (str) {
+    
+      return _doLogin(str);
+    }
 
-    function doLogoutAndLogin(str) {
+    function _doLogoutAndLogin(str) {
       NVRDataModel.debug ("Clearing cookies");
 
       if (window.cordova) {
@@ -975,20 +979,20 @@ angular.module('zmApp', [
        
         cordova.plugin.http.clearCookies();
       }
-      else {
+    /*  else {
        angular.forEach($cookies, function (v, k) {
          $cookies.remove(k);
         });
-      }
+      }*/
       return NVRDataModel.logout()
         .then(function (ans) {
-          return doLogin(str);
+          return _doLogin(str);
 
         });
     }
 
 
-    function doLogin(str) {
+    function _doLogin(str) {
       var d = $q.defer();
       var ld = NVRDataModel.getLogin();
 
@@ -1001,13 +1005,6 @@ angular.module('zmApp', [
         return d.promise;
 
       }
-
-      if ($rootScope.isDownloading) {
-        NVRDataModel.log("Skipping login process as we are downloading...");
-        d.resolve("success");
-        return d.promise;
-      }
-
       NVRDataModel.debug("Resetting zmCookie...");
       $rootScope.zmCookie = '';
       // first try to login, if it works, good
@@ -1404,7 +1401,7 @@ angular.module('zmApp', [
       $interval.cancel(zmAutoLoginHandle);
       //doLogin();
       zmAutoLoginHandle = $interval(function () {
-        doLogin("");
+        _doLogin("");
 
       }, zm.loginInterval); // Auto login every 5 minutes
       // PHP timeout is around 10 minutes
@@ -1424,7 +1421,9 @@ angular.module('zmApp', [
     return {
       start: start,
       stop: stop,
-      doLogin: doLogoutAndLogin
+      doLogin: _doLogoutAndLogin,
+      doLoginNoLogout: _doLoginNoLogout
+
     };
   }])
 
@@ -1689,13 +1688,14 @@ angular.module('zmApp', [
       $timeout (function() {
 
       NVRDataModel.log ("--------->Setting up network state handlers....");
-      document.addEventListener("offline", onOnline, false);
+      document.addEventListener("offline", onOffline, false);
       document.addEventListener("online", onOffline, false);
 
       },3000);
 
 
-      function onOnline() {
+      function onOffline() {
+
 
         $timeout(function () {
           $rootScope.online = false;
@@ -1707,10 +1707,15 @@ angular.module('zmApp', [
 
       }
 
-      function onOffline() {
+      function onOnline() {
 
         $timeout(function () {
 
+
+          if ($rootScope.online == true) {
+            NVRDataModel.log ("**** network online, but looks like it was not offline, not doing anything");
+            return;
+          }
           NVRDataModel.log("************ Your network came back online");
 
           $rootScope.online = true;
@@ -1731,7 +1736,7 @@ angular.module('zmApp', [
                 NVRDataModel.debug("Not changing bandwidth state, as auto change is not on");
               }
               NVRDataModel.log("Your network is online, re-authenticating");
-              zmAutoLogin.doLogin($translate.instant('kReAuthenticating'));
+              zmAutoLogin.doLoginNoLogout($translate.instant('kReAuthenticating'));
     
 
         });
-- 
cgit v1.2.3


From 9514414907d78587d5ad78abd6849397d4973ff6 Mon Sep 17 00:00:00 2001
From: Pliable Pixels 
Date: Sat, 27 Oct 2018 07:38:31 -0400
Subject: attach logs instead of pasting

---
 www/js/LogCtrl.js | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

(limited to 'www/js')

diff --git a/www/js/LogCtrl.js b/www/js/LogCtrl.js
index 2858e289..c575b5fb 100644
--- a/www/js/LogCtrl.js
+++ b/www/js/LogCtrl.js
@@ -103,6 +103,46 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo
       });
   };
 
+
+  $scope.attachLogs = function() {
+
+    cordova.plugins.email.isAvailable(
+      function (isAvailable) {
+
+        if (isAvailable) {
+          
+       
+           $fileLogger.checkFile()
+           .then (function (d) {
+
+              var url = cordova.file.dataDirectory + d.name;
+              console.log ( "URL:"+url);
+              cordova.plugins.email.open({
+                to: zm.authoremail,
+                subject: $rootScope.appName + ' logs attached',
+                body: 'logs are attached',
+                attachments: url
+  
+              });
+           },
+           function (e) {
+              NVRDataModel.debug ("Error attaching log file:"+JSON.stringify(e));
+           });
+
+           
+
+        } else {
+          // kEmailNotConfigured		
+          $rootScope.zmPopup = SecuredPopups.show('alert', {
+            title: $translate.instant('kError'),
+            template: $translate.instant('kEmailNotConfigured'),
+            okText: $translate.instant('kButtonOk'),
+            cancelText: $translate.instant('kButtonCancel'),
+          });
+        }
+
+      });
+  };
   //--------------------------------------------------------------------------
   // Convenience function to send logs via email
   //--------------------------------------------------------------------------
-- 
cgit v1.2.3


From 42c068b2dd7ff891979cc39f532af1f4fd4d987c Mon Sep 17 00:00:00 2001
From: Pliable Pixels 
Date: Sat, 27 Oct 2018 07:39:21 -0400
Subject: bump up maxFilesize for logs since we are attaching

---
 www/js/app.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'www/js')

diff --git a/www/js/app.js b/www/js/app.js
index a8e31e5a..69c1c6bc 100755
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -50,7 +50,7 @@ angular.module('zmApp', [
     largeHttpTimeout: 30000,
     logFile: 'zmNinjaLog.txt',
     authoremail: 'pliablepixels+zmNinja@gmail.com',
-    logFileMaxSize: 30000, // after this limit log gets reset
+    logFileMaxSize: 100000, // after this limit log gets reset
 
     updateCheckInterval: 86400000, // 24 hrs
     loadingTimeout: 15000,
-- 
cgit v1.2.3


From 2ab37cf8e468fddf658897f6ef9c6391f8784b8f Mon Sep 17 00:00:00 2001
From: Pliable Pixels 
Date: Sat, 27 Oct 2018 07:51:57 -0400
Subject: modified sensitive info warning, removed old text from language
 files. Authors have to readd it

---
 www/js/LogCtrl.js | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

(limited to 'www/js')

diff --git a/www/js/LogCtrl.js b/www/js/LogCtrl.js
index c575b5fb..cba597ed 100644
--- a/www/js/LogCtrl.js
+++ b/www/js/LogCtrl.js
@@ -111,7 +111,15 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo
 
         if (isAvailable) {
           
-       
+
+          var body = "zmNinja version:" + $scope.zmAppVersion +
+          " (" + $rootScope.platformOS + ")
" + + "ZoneMinder version:" + NVRDataModel.getCurrentServerVersion(); + + + body = ''+$translate.instant('kSensitiveBody')+'

'+body; + + $fileLogger.checkFile() .then (function (d) { @@ -120,7 +128,8 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo cordova.plugins.email.open({ to: zm.authoremail, subject: $rootScope.appName + ' logs attached', - body: 'logs are attached', + body: body, + attachments: url }); -- cgit v1.2.3 From 5e954457a795f77804ccaef74c8012aac50d765b Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Sat, 27 Oct 2018 09:59:58 -0400 Subject: switch to diff email plugin to allow attachments properly --- www/js/LogCtrl.js | 52 +++++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 25 deletions(-) (limited to 'www/js') diff --git a/www/js/LogCtrl.js b/www/js/LogCtrl.js index cba597ed..e87b8034 100644 --- a/www/js/LogCtrl.js +++ b/www/js/LogCtrl.js @@ -106,11 +106,7 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo $scope.attachLogs = function() { - cordova.plugins.email.isAvailable( - function (isAvailable) { - - if (isAvailable) { - + var body = "zmNinja version:" + $scope.zmAppVersion + " (" + $rootScope.platformOS + ")
" + @@ -124,33 +120,39 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo .then (function (d) { var url = cordova.file.dataDirectory + d.name; + //url = url.replace("file://",""); console.log ( "URL:"+url); - cordova.plugins.email.open({ - to: zm.authoremail, - subject: $rootScope.appName + ' logs attached', - body: body, + NVRDataModel.log ( "URL:"+url); + + + var onSuccess = function(result) { + NVRDataModel.log("Share completed? " + result.completed); // On Android apps mostly return false even while it's true + NVRDataModel.log("Shared to app: " + result.app); // On Android result.app since plugin version 5.4.0 this is no longer empty. On iOS it's empty when sharing is cancelled (result.completed=false) + }; + + var onError = function(msg) { + NVRDataModel.log("Sharing failed with message: " + msg); + }; + + window.plugins.socialsharing.shareViaEmail( + body, //body + 'zmNinja Logs attached', // subject + [zm.authoremail], //to + null, // cc + null, //bcc + [url], + onSuccess, + onError + ); + + - attachments: url - - }); }, function (e) { NVRDataModel.debug ("Error attaching log file:"+JSON.stringify(e)); }); - - - } else { - // kEmailNotConfigured - $rootScope.zmPopup = SecuredPopups.show('alert', { - title: $translate.instant('kError'), - template: $translate.instant('kEmailNotConfigured'), - okText: $translate.instant('kButtonOk'), - cancelText: $translate.instant('kButtonCancel'), - }); - } - - }); + }; //-------------------------------------------------------------------------- // Convenience function to send logs via email -- cgit v1.2.3 From d47ab4f00dff7fea4f464b61f748cb2338dbe52d Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Sat, 27 Oct 2018 10:33:56 -0400 Subject: leanup --- www/js/LogCtrl.js | 100 ++++++++++++++++++++++++------------------------------ 1 file changed, 45 insertions(+), 55 deletions(-) (limited to 'www/js') diff --git a/www/js/LogCtrl.js b/www/js/LogCtrl.js index e87b8034..38cd3464 100644 --- a/www/js/LogCtrl.js +++ b/www/js/LogCtrl.js @@ -104,55 +104,45 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo }; - $scope.attachLogs = function() { - - - - var body = "zmNinja version:" + $scope.zmAppVersion + - " (" + $rootScope.platformOS + ")
" + - "ZoneMinder version:" + NVRDataModel.getCurrentServerVersion(); - - - body = ''+$translate.instant('kSensitiveBody')+'

'+body; - - - $fileLogger.checkFile() - .then (function (d) { - - var url = cordova.file.dataDirectory + d.name; - //url = url.replace("file://",""); - console.log ( "URL:"+url); - NVRDataModel.log ( "URL:"+url); - - - var onSuccess = function(result) { - NVRDataModel.log("Share completed? " + result.completed); // On Android apps mostly return false even while it's true - NVRDataModel.log("Shared to app: " + result.app); // On Android result.app since plugin version 5.4.0 this is no longer empty. On iOS it's empty when sharing is cancelled (result.completed=false) - }; - - var onError = function(msg) { - NVRDataModel.log("Sharing failed with message: " + msg); - }; - - window.plugins.socialsharing.shareViaEmail( - body, //body - 'zmNinja Logs attached', // subject - [zm.authoremail], //to - null, // cc - null, //bcc - [url], - onSuccess, - onError - ); - + // picks up applogs on the FS and sends an email with it + + $scope.attachLogs = function () { + var body = "zmNinja version:" + $scope.zmAppVersion + + " (" + $rootScope.platformOS + ")
" + + "ZoneMinder version:" + NVRDataModel.getCurrentServerVersion(); + body = '' + $translate.instant('kSensitiveBody') + '

' + body; + + $fileLogger.checkFile() + .then(function (d) { + var fileWithPath = cordova.file.dataDirectory + d.name; + NVRDataModel.log("file location:" + fileWithPath); + + var onSuccess = function (result) { + NVRDataModel.log("Share completed? " + result.completed); + NVRDataModel.log("Shared to app: " + result.app); + }; + + var onError = function (msg) { + NVRDataModel.log("Sharing failed with message: " + msg); + }; + + window.plugins.socialsharing.shareViaEmail( + body, //body + 'zmNinja Logs attached', // subject + [zm.authoremail], //to + null, // cc + null, //bcc + [fileWithPath], + onSuccess, + onError + ); + }, + function (e) { + NVRDataModel.debug("Error attaching log file:" + JSON.stringify(e)); + }); - }, - function (e) { - NVRDataModel.debug ("Error attaching log file:"+JSON.stringify(e)); - }); - }; //-------------------------------------------------------------------------- // Convenience function to send logs via email @@ -175,7 +165,7 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo var urlNoProtocol = loginData.url.replace(/.*?:\/\//, ""); if (urlNoProtocol != "") { var re2 = new RegExp(urlNoProtocol, "g"); - + logstring = logstring.replace(re2, ""); } urlNoProtocol = loginData.streamingurl.replace(/.*?:\/\//, ""); @@ -309,22 +299,22 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo // reset power state on exit as if it is called after we enter another // state, that effectively overwrites current view power management needs //------------------------------------------------------------------------ - - + + $scope.$on('$ionic.beforeEnter', function () { - $scope.$on ( "process-push", function () { - NVRDataModel.debug (">> LogCtrl: push handler"); + $scope.$on("process-push", function () { + NVRDataModel.debug(">> LogCtrl: push handler"); var s = NVRDataModel.evaluateTappedNotification(); - NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s)); + NVRDataModel.debug("tapped Notification evaluation:" + JSON.stringify(s)); $ionicHistory.nextViewOptions({ - disableAnimate:true, + disableAnimate: true, disableBack: true }); - $state.go(s[0],s[1],s[2]); + $state.go(s[0], s[1], s[2]); }); }); - + $scope.$on('$ionicView.enter', function () { //console.log("**VIEW ** Log Ctrl Entered"); -- cgit v1.2.3 From 1a9e196ba98c1c94ce3678d08b626bf0b942418e Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Sat, 27 Oct 2018 11:42:57 -0400 Subject: #725 online/offline registration fix --- www/js/app.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'www/js') diff --git a/www/js/app.js b/www/js/app.js index 69c1c6bc..332c4613 100755 --- a/www/js/app.js +++ b/www/js/app.js @@ -1689,7 +1689,7 @@ angular.module('zmApp', [ NVRDataModel.log ("--------->Setting up network state handlers...."); document.addEventListener("offline", onOffline, false); - document.addEventListener("online", onOffline, false); + document.addEventListener("online", onOnline, false); },3000); @@ -2205,8 +2205,8 @@ angular.module('zmApp', [ NVRDataModel.log("App is resuming from background"); NVRDataModel.log ("-->Re-registering online/offine"); - document.addEventListener("offline", onOnline, false); - document.addEventListener("online", onOffline, false); + document.addEventListener("offline", onOffline, false); + document.addEventListener("online", onOnline, false); $rootScope.isDownloading = false; @@ -2258,8 +2258,8 @@ angular.module('zmApp', [ function pauseHandler() { NVRDataModel.log ("-->Clearing online/offine"); - document.removeEventListener("offline", onOnline, false); - document.removeEventListener("online", onOffline, false); + document.removeEventListener("offline", onOffline, false); + document.removeEventListener("online", onOnline, false); NVRDataModel.setBackground(true); NVRDataModel.setJustResumed(false); -- cgit v1.2.3 From f1dbbabd0447bddfc6de3c4791951d2332d91def Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Sat, 27 Oct 2018 17:52:31 -0400 Subject: removed logs --- www/js/DataModel.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'www/js') diff --git a/www/js/DataModel.js b/www/js/DataModel.js index d3a48fcd..17e2a688 100644 --- a/www/js/DataModel.js +++ b/www/js/DataModel.js @@ -967,8 +967,8 @@ angular.module('zmApp.controllers') if (exists) { log("A cloud configuration has been found"); window.cordova.plugin.cloudsettings.load(function (cloudData) { - console.log("CLOUD DATA FOUND" + JSON.stringify(cloudData)); - debug("Cloud data retrieved is:" + JSON.stringify(cloudData)); + //console.log("CLOUD DATA FOUND" + JSON.stringify(cloudData)); + // debug("Cloud data retrieved is:" + JSON.stringify(cloudData)); if (cloudData && cloudData.defaultServerName && cloudData.serverGroupList) { log("retrieved a valid cloud config with a defaultServerName of:" + cloudData.defaultServerName); log("replacing local DB with cloud..."); -- cgit v1.2.3 From f28620166d390fa85f3d283a7307f0746d559cbb Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Sun, 28 Oct 2018 13:54:01 -0400 Subject: #725 if already transitioned out, handle process-push in Portal --- www/js/EventServer.js | 2 ++ www/js/PortalLoginCtrl.js | 30 +++++++++++++++++++++++++++++- www/js/app.js | 33 ++++----------------------------- 3 files changed, 35 insertions(+), 30 deletions(-) (limited to 'www/js') diff --git a/www/js/EventServer.js b/www/js/EventServer.js index a67d5426..68c21e9a 100644 --- a/www/js/EventServer.js +++ b/www/js/EventServer.js @@ -478,6 +478,7 @@ angular.module('zmApp.controllers') // console.log("*********** MEDIA BLOG IS " + mediasrc); media = $cordovaMedia.newMedia(mediasrc); + push.on('registration', function (data) { pushInited = true; NVRDataModel.debug("Push Notification registration ID received: " + JSON.stringify(data)); @@ -548,6 +549,7 @@ angular.module('zmApp.controllers') push.on('notification', function (data) { $ionicPlatform.ready(function () { + NVRDataModel.log("******* notification handler device ready"); NVRDataModel.debug("received push notification"); var ld = NVRDataModel.getLogin(); diff --git a/www/js/PortalLoginCtrl.js b/www/js/PortalLoginCtrl.js index fb317e5b..40dc446e 100644 --- a/www/js/PortalLoginCtrl.js +++ b/www/js/PortalLoginCtrl.js @@ -8,6 +8,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic var broadcastHandles = []; var processPush = false; + var alreadyTransitioned = false; $scope.$on('$ionicView.beforeLeave', function () { processPush = false; @@ -24,13 +25,38 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic broadcastHandles = []; }); + + $scope.$on('$ionicView.beforeEnter', + function () { + alreadyTransitioned = false; + + }); + + $scope.$on('$ionicView.enter', function () { $scope.$on ( "process-push", function () { processPush = true; - NVRDataModel.debug (">> PortalLogin: push handler, marking to resolve later"); + + if (!alreadyTransitioned) { + NVRDataModel.debug (">> PortalLogin: push handler, marking to resolve later"); + + } + else { + NVRDataModel.debug (">> PortalLoginCtrl: push handler"); + processPush = false; + var s = NVRDataModel.evaluateTappedNotification(); + NVRDataModel.debug("tapped Notification evaluation:"+ JSON.stringify(s)); + $ionicHistory.nextViewOptions({ + disableAnimate:true, + disableBack: true + }); + $state.go(s[0],s[1],s[2]); + return; + + } }); @@ -260,6 +286,8 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic //NVRDataModel.debug ("logging state transition"); NVRDataModel.debug("2nd Auth: Transitioning state to: " + statetoGo + " with param " + JSON.stringify($rootScope.lastStateParam)); + + alreadyTransitioned = true; $state.go(statetoGo, $rootScope.lastStateParam); return; diff --git a/www/js/app.js b/www/js/app.js index 332c4613..74f7d0cf 100755 --- a/www/js/app.js +++ b/www/js/app.js @@ -1437,6 +1437,7 @@ angular.module('zmApp', [ $ionicPlatform.ready(function () { //console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>INSIDE RUN"); + NVRDataModel.log("******* app .run device ready"); $fileLogger.setStorageFilename(zm.logFile); $fileLogger.setTimestampFormat('MMM d, y ' + NVRDataModel.getTimeFormatSec()); @@ -1475,26 +1476,6 @@ angular.module('zmApp', [ NVRDataModel.log("You are running on " + $rootScope.platformOS); - /*if (window.cordova && $rootScope.platformOS == 'android') { - - cordova.plugins.diagnostic.isExternalStorageAuthorized(function (authorized) { - if (!authorized) cordova.plugins.diagnostic.requestExternalStorageAuthorization(okperm, nopermerr); - }, function (err) { - console.log("diagnostic external storage error " + err); - }); - - - }*/ - - - function nopermerr() { - NVRDataModel.displayBanner('error', ['Storage permission must be allowed'], "", 4000); - } - - function okperm() { - //console.log("cool"); - NVRDataModel.displayBanner('success', ['Storage permission acquired'], "", 4000); - } $rootScope.appName = "zmNinja"; $rootScope.zmGlobalCookie = ""; @@ -1695,8 +1676,6 @@ angular.module('zmApp', [ function onOffline() { - - $timeout(function () { $rootScope.online = false; NVRDataModel.log("************** Your network went offline"); @@ -1704,14 +1683,10 @@ angular.module('zmApp', [ //$rootScope.$emit('network-change', "offline"); }); - } function onOnline() { - $timeout(function () { - - if ($rootScope.online == true) { NVRDataModel.log ("**** network online, but looks like it was not offline, not doing anything"); return; @@ -1719,9 +1694,7 @@ angular.module('zmApp', [ NVRDataModel.log("************ Your network came back online"); $rootScope.online = true; - - - + var networkState = "browser not supported"; if (navigator.connection) networkState = navigator.connection.type; NVRDataModel.debug("Detected network type as: " + networkState); @@ -2198,10 +2171,12 @@ angular.module('zmApp', [ function resumeHandler() { + NVRDataModel.setBackground(false); NVRDataModel.setJustResumed(true); $ionicPlatform.ready(function () { + NVRDataModel.log("******* resumeHandler device ready"); NVRDataModel.log("App is resuming from background"); NVRDataModel.log ("-->Re-registering online/offine"); -- cgit v1.2.3 From 583663789aebb45ff2c107857b5021d51c03ea6b Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Mon, 29 Oct 2018 08:49:29 -0400 Subject: #725 alreadyTransitioned at right place --- www/js/PortalLoginCtrl.js | 1 + 1 file changed, 1 insertion(+) (limited to 'www/js') diff --git a/www/js/PortalLoginCtrl.js b/www/js/PortalLoginCtrl.js index 40dc446e..22bb46f8 100644 --- a/www/js/PortalLoginCtrl.js +++ b/www/js/PortalLoginCtrl.js @@ -414,6 +414,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic // NVRDataModel.debug("logging state transition"); if (!processPush) { + alreadyTransitioned = true; NVRDataModel.debug("Transitioning state to: " + statetoGo + " with param " + JSON.stringify($rootScope.lastStateParam)); -- cgit v1.2.3 From d630c9aebdf9425caca52f3c447b628d563beb0d Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Mon, 29 Oct 2018 09:17:54 -0400 Subject: removed old "force image path" error --- www/js/EventModalCtrl.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'www/js') diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js index 58c65399..11a7434a 100644 --- a/www/js/EventModalCtrl.js +++ b/www/js/EventModalCtrl.js @@ -261,7 +261,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro NVRDataModel.debug("player reported a video error:" + JSON.stringify(event)); $rootScope.zmPopup = SecuredPopups.show('alert', { title: $translate.instant('kError'), - template: $rootScope.platformOS == 'desktop' ? $translate.instant('kVideoError') : $translate.instant('kVideoErrorMobile'), + template: $translate.instant('kVideoError'), okText: $translate.instant('kButtonOk'), cancelText: $translate.instant('kButtonCancel'), }); -- cgit v1.2.3 From d5e7a99c63213ad3b62a9e8e95cb57f0bb0c7e6a Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Mon, 29 Oct 2018 10:45:16 -0400 Subject: desktop logs rework --- www/js/DataModel.js | 2 +- www/js/LogCtrl.js | 154 ++++++++++++---------------------------------------- 2 files changed, 36 insertions(+), 120 deletions(-) (limited to 'www/js') diff --git a/www/js/DataModel.js b/www/js/DataModel.js index 17e2a688..cb33411d 100644 --- a/www/js/DataModel.js +++ b/www/js/DataModel.js @@ -20,7 +20,7 @@ angular.module('zmApp.controllers') DO NOT TOUCH zmAppVersion It is changed by sync_version.sh */ - var zmAppVersion = "1.3.028"; + var zmAppVersion = "1.3.029"; var isBackground = false; var justResumed = false; var timeSinceResumed = -1; diff --git a/www/js/LogCtrl.js b/www/js/LogCtrl.js index 38cd3464..599c63d1 100644 --- a/www/js/LogCtrl.js +++ b/www/js/LogCtrl.js @@ -2,7 +2,7 @@ /* jslint browser: true*/ /* global saveAs, cordova,StatusBar,angular,console,moment */ -angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$rootScope', 'zm', '$ionicModal', 'NVRDataModel', '$ionicSideMenuDelegate', '$fileLogger', '$cordovaEmailComposer', '$ionicPopup', '$timeout', '$ionicHistory', '$state', '$interval', '$ionicLoading', '$translate', '$http', function ($scope, $rootScope, zm, $ionicModal, NVRDataModel, $ionicSideMenuDelegate, $fileLogger, $cordovaEmailComposer, $ionicPopup, $timeout, $ionicHistory, $state, $interval, $ionicLoading, $translate, $http) { +angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$rootScope', 'zm', '$ionicModal', 'NVRDataModel', '$ionicSideMenuDelegate', '$fileLogger', '$cordovaEmailComposer', '$ionicPopup', '$timeout', '$ionicHistory', '$state', '$interval', '$ionicLoading', '$translate', '$http', 'SecuredPopups', function ($scope, $rootScope, zm, $ionicModal, NVRDataModel, $ionicSideMenuDelegate, $fileLogger, $cordovaEmailComposer, $ionicPopup, $timeout, $ionicHistory, $state, $interval, $ionicLoading, $translate, $http, SecuredPopups) { $scope.openMenu = function () { $ionicSideMenuDelegate.toggleLeft(); }; @@ -11,20 +11,7 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo // Controller main //--------------------------------------------------------------- - var intervalLogUpdateHandle; - document.addEventListener("pause", onPause, false); - document.addEventListener("resume", onResume, false); - - function onPause() { - NVRDataModel.debug("LogCtrl: pause called, killing log timer"); - // $interval.cancel(intervalLogUpdateHandle); - } - - function onResume() { - // NVRDataModel.debug("LogCtrl: resume called, starting log timer"); - loadLogs(); - } @@ -78,33 +65,44 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo } }; - //-------------------------------------------------------------------------- - // Make sure user knows information masking is best effort - //-------------------------------------------------------------------------- - - $scope.sendEmail = function (logstring) { - logstring = logstring.substring(0, 20000); - $ionicPopup.confirm({ - title: $translate.instant('kSensitiveTitle'), - template: $rootScope.appName + ' ' + $translate.instant('kSensitiveBody'), - okText: $translate.instant('kButtonOk'), - cancelText: $translate.instant('kButtonCancel'), - }) - .then(function (res) { - if (res) { - - logstring = "zmNinja version:" + $scope.zmAppVersion + - " (" + $rootScope.platformOS + ")\n" + - "ZoneMinder version:" + NVRDataModel.getCurrentServerVersion() + "\n" + - logstring; - sendEmailReally(logstring); - } + + // desktop download + $scope.downloadLogs = function () { + var body = "zmNinja version:" + $scope.zmAppVersion + + " (" + $rootScope.platformOS + ")\n" + + "ZoneMinder version:" + NVRDataModel.getCurrentServerVersion(); + + body = $translate.instant('kSensitiveBody') + '\n\n\n' + body; + var fname = $rootScope.appName + "-logs-" + + moment().format('MMM-DD-YY_HH-mm-ss') + ".txt"; + + $fileLogger.checkFile() + .then(function (d) { + + body = body + window.localStorage[d.name]; + var file = new Blob([body], { + type: 'text/plain' + }); + var url = URL.createObjectURL(file); + + $rootScope.zmPopup = SecuredPopups.show('alert', { + title: $translate.instant('kNote'), + template: $translate.instant('kTapDownloadLogs') + "

" + " " + $translate.instant('kDownload') + "
", + okText: $translate.instant('kDismiss'), + okType: 'button-stable' + }, + function (e) { + NVRDataModel.debug("Error getting log file:" + JSON.stringify(e)); + } + + ); }); - }; - // picks up applogs on the FS and sends an email with it + }; + + // mobile - picks up applogs on the FS and sends an email with it $scope.attachLogs = function () { var body = "zmNinja version:" + $scope.zmAppVersion + @@ -144,90 +142,8 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo }; - //-------------------------------------------------------------------------- - // Convenience function to send logs via email - //-------------------------------------------------------------------------- - function sendEmailReally(logstring) { - - //console.log ("LOGSTRING:"+logstring); - if (window.cordova) { - - // do my best to replace sensitive information - var loginData = NVRDataModel.getLogin(); - - // We don't need this anymore as log and debug now strip passwords - /*if (loginData.password !="") - { - var re1 = new RegExp(loginData.password, "g"); - logstring = logstring.replace(re1, ""); - }*/ - // keep the protocol, helps to debug - var urlNoProtocol = loginData.url.replace(/.*?:\/\//, ""); - if (urlNoProtocol != "") { - var re2 = new RegExp(urlNoProtocol, "g"); - - logstring = logstring.replace(re2, ""); - } - urlNoProtocol = loginData.streamingurl.replace(/.*?:\/\//, ""); - if (urlNoProtocol != "") { - var re3 = new RegExp(urlNoProtocol, "g"); - logstring = logstring.replace(re3, ""); - } - - urlNoProtocol = loginData.eventServer.replace(/.*?:\/\//, ""); - if (urlNoProtocol != "") { - var re4 = new RegExp(urlNoProtocol, "g"); - logstring = logstring.replace(re4, ""); - } - - //console.log ("NEW LOGSTRING:"+logstring); - /* window.plugins.emailComposer.showEmailComposerWithCallback(callback, $rootScope.appName + ' logs', logstring, [zm.authoremail]);*/ - - - cordova.plugins.email.isAvailable( - function (isAvailable) { - - if (isAvailable) { - // body encapsulation requires br :^ - // see https://github.com/katzer/cordova-plugin-email-composer/issues/150 - logstring = logstring.split('\n').join('
'); - cordova.plugins.email.open({ - to: zm.authoremail, - subject: $rootScope.appName + ' logs', - body: logstring - }); - } else { - // kEmailNotConfigured - $rootScope.zmPopup = SecuredPopups.show('alert', { - title: $translate.instant('kError'), - template: $translate.instant('kEmailNotConfigured'), - okText: $translate.instant('kButtonOk'), - cancelText: $translate.instant('kButtonCancel'), - }); - } - - }); - } else { - // console.log("Using default email client to send data"); - - var fname = $rootScope.appName + "-logs-" + - moment().format('MMM-DD-YY_HH-mm-ss') + ".txt"; - - var blob = new Blob([logstring], { - type: "text/plain;charset=utf-8" - }); - saveAs(blob, fname); - } - - } - - function callback() { - // console.log ("EMAIL SENT"); - NVRDataModel.debug("Email sent callback called"); - } - function loadZMlogs() { var ld = NVRDataModel.getLogin(); var lapi = ld.apiurl + "/logs.json?sort=TimeKey&direction=desc&page=" + $scope.zmPage; -- cgit v1.2.3 From 87c98d7dae141e359e92058a7696e0d15d4b658e Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Mon, 29 Oct 2018 13:47:22 -0400 Subject: nits --- www/js/DataModel.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'www/js') diff --git a/www/js/DataModel.js b/www/js/DataModel.js index cb33411d..17305f22 100644 --- a/www/js/DataModel.js +++ b/www/js/DataModel.js @@ -1980,11 +1980,11 @@ angular.module('zmApp.controllers') return $http.get(req + "&command=1") .then( function (s) { - debug("pause success for ck:" + ck + " with:" + JSON.stringify(s)); + // debug("pause success for ck:" + ck ); }, function (e) { - debug("pause success for ck:" + ck + " with:" + JSON.stringify(e)); + // debug("pause error for ck:" + ck + " with:" + JSON.stringify(e)); } ); @@ -2004,11 +2004,11 @@ angular.module('zmApp.controllers') return $http.get(req + "&command=2") .then( function (s) { - debug("play success for ck:" + ck + " with:" + JSON.stringify(s)); + // debug("play success for ck:" + ck + " with:" + JSON.stringify(s)); }, function (e) { - debug("play success for ck:" + ck + " with:" + JSON.stringify(e)); + // debug("play error for ck:" + ck + " with:" + JSON.stringify(e)); } ); -- cgit v1.2.3 From 836f2d1c187047c8c6f4182c91a8ffb48d7c0de6 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Mon, 29 Oct 2018 16:52:27 -0400 Subject: #733 initial rough in --- www/js/StateCtrl.js | 117 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 85 insertions(+), 32 deletions(-) (limited to 'www/js') diff --git a/www/js/StateCtrl.js b/www/js/StateCtrl.js index cef454a7..c14c8628 100644 --- a/www/js/StateCtrl.js +++ b/www/js/StateCtrl.js @@ -26,30 +26,59 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup' var apiRun = loginData.apiurl + "/host/daemonCheck.json"; var apiLoad = loginData.apiurl + "/host/getLoad.json"; - var apiDisk = loginData.apiurl + "/host/getDiskPercent.json"; + var apiStorage = loginData.apiurl + "/storage.json"; + var apiServer = loginData.apiurl + "/servers.json"; var apiCurrentState = loginData.apiurl + "/States.json"; var apiExec = loginData.apiurl + "/states/change/"; var inProgress = 0; // prevents user from another op if one is in progress getRunStatus(); + getLoadStatus(); + getCurrentState(); + getStorageStatus(); + getServerStatus(); + + +// credit https://stackoverflow.com/a/14919494/1361529 + $scope.humanFileSize = function(bytes, si) { + var thresh = si ? 1000 : 1024; + bytes = parseFloat(bytes); + if (isNaN(bytes)) bytes=0; + if(Math.abs(bytes) < thresh) { + return bytes + ' B'; + } + var units = si? ['kB','MB','GB','TB','PB','EB','ZB','YB']:['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB']; + var u = -1; + do { + bytes /= thresh; + ++u; + } while(Math.abs(bytes) >= thresh && u < units.length - 1); + return bytes.toFixed(1)+' '+units[u]; +}; + +$scope.matchServer = function (id) { + var str = id; + var name = ""; + for (var i=0; i< $scope.servers.length; i++) { + if ($scope.servers[i].Server.Id == id) { + name = $scope.servers[i].Server.Name; + break; + } + } + if (name) { + str = name + " ("+id+")"; + } + return str; +}; +$scope.toggleStorage = function() { + $scope.showStorage = !$scope.showStorage; +}; - - - // Let's stagger this by 500ms each to see if Chrome lets these through - // This may also help if your Apache is not configured to let multiple connections through - - $timeout(function () { - NVRDataModel.debug("invoking LoadStatus..."); - getLoadStatus(); - }, 2000); - - $timeout(function () { - NVRDataModel.debug("invoking CurrentState..."); - getCurrentState(); - }, 4000); - +$scope.toggleServer = function() { + $scope.showServer = !$scope.showServer; +}; /* $timeout(function () { NVRDataModel.debug("invoking DiskStatus..."); @@ -67,6 +96,9 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup' $scope.$on ('$ionicView.beforeEnter', function () { + $scope.showStorage = true; + $scope.showServer = true; + $scope.$on ( "process-push", function () { NVRDataModel.debug (">> StateCtrl: push handler"); var s = NVRDataModel.evaluateTappedNotification(); @@ -194,22 +226,42 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup' } //---------------------------------------------------------------------- - // returns disk space in gigs taken up by events + // returns Storage data //---------------------------------------------------------------------- - function getDiskStatus() { - NVRDataModel.debug("StateCtrl/getDiskStatus: " + apiDisk); - $http.get(apiDisk) + function getStorageStatus() { + + $scope.storage = []; + NVRDataModel.debug("StorageStatus: " + apiStorage); + $http.get(apiStorage) .then( function (success) { - NVRDataModel.debug("StateCtrl/getDiskStatus: success"); - NVRDataModel.debug("Disk results: " + JSON.stringify(success)); - var obj = success.data.usage; - if (obj.Total.space != undefined) { - $scope.zmDisk = parseFloat(obj.Total.space).toFixed(1).toString() + "G"; - } else { - $scope.zmDisk = "unknown"; - NVRDataModel.log("Error retrieving disk space, API returned null for obj.Total.space"); - } + + $scope.storage = success.data.storage; + //console.log (JSON.stringify($scope.storage)); + + }, + function (error) { + $scope.zmDisk = "unknown"; + // console.log("ERROR:" + JSON.stringify(error)); + NVRDataModel.log("Error retrieving DiskStatus: " + JSON.stringify(error), "error"); + } + ); + } + + + //---------------------------------------------------------------------- + // returns Storage data + //---------------------------------------------------------------------- + function getServerStatus() { + + $scope.servers = []; + NVRDataModel.debug("ServerStatus: " + apiStorage); + $http.get(apiServer) + .then( + function (success) { + + $scope.servers = success.data.servers; + // console.log (JSON.stringify($scope.storage)); }, function (error) { @@ -386,9 +438,10 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup' //console.log("***Pull to Refresh"); NVRDataModel.debug("StateCtrl/refresh: calling getRun/Load/Disk/CurrentState"); getRunStatus(); - $timeout(getLoadStatus, 2000); - $timeout(getCurrentState, 4000); - //$timeout (getDiskStatus,6000); + getLoadStatus(); + getCurrentState(); + getStorageStatus(); + getServerStatus(); $scope.$broadcast('scroll.refreshComplete'); }; -- cgit v1.2.3 From bbbf935e2abd9b603a090c594d09ea91d7a92f6e Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Tue, 30 Oct 2018 11:21:39 -0400 Subject: #733 other cleanup --- www/js/StateCtrl.js | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'www/js') diff --git a/www/js/StateCtrl.js b/www/js/StateCtrl.js index c14c8628..34255287 100644 --- a/www/js/StateCtrl.js +++ b/www/js/StateCtrl.js @@ -261,6 +261,10 @@ $scope.toggleServer = function() { function (success) { $scope.servers = success.data.servers; + if ($scope.servers.length > 0) { + $scope.zmRun =$translate.instant('kStateMultiServer'); + $scope.color = 'grey'; + } // console.log (JSON.stringify($scope.storage)); }, @@ -276,6 +280,10 @@ $scope.toggleServer = function() { // returns ZM running status //---------------------------------------------------------------------- function getRunStatus() { + + + + NVRDataModel.debug("StateCtrl/getRunStatus: " + apiRun); $http.get(apiRun) .then( -- cgit v1.2.3 From 91c6171487cc4f88b935deb8b3cf61ef9728e009 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Wed, 31 Oct 2018 09:10:54 -0400 Subject: send ES monlist along with auth. Needed for https://github.com/pliablepixels/zmeventserver/issues/57 --- www/js/EventServer.js | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'www/js') diff --git a/www/js/EventServer.js b/www/js/EventServer.js index 68c21e9a..5ef0a260 100644 --- a/www/js/EventServer.js +++ b/www/js/EventServer.js @@ -17,6 +17,7 @@ angular.module('zmApp.controllers') var pushInited = false; var isTimerOn = false; var nativeWebSocketId = -1; + var iClosed = false; @@ -31,7 +32,10 @@ angular.module('zmApp.controllers') NVRDataModel.log("openHandshake: Websocket open, sending Auth"); sendMessage("auth", { user: loginData.username, - password: loginData.password + password: loginData.password, + monlist: loginData.eventServerMonitors, + intlist: loginData.eventServerInterval + }); @@ -63,6 +67,13 @@ angular.module('zmApp.controllers') function handleClose(event) { + + if (iClosed) { + NVRDataModel.debug ("App closed socket, not reconnecting"); + iClosed = false; + return; + } + console.log("*********** WEBSOCKET CLOSE CALLED"); if (!NVRDataModel.getLogin().isUseEventServer) return; @@ -99,6 +110,7 @@ angular.module('zmApp.controllers') if (str.reason == 'APNSDISABLED') { console.log("FORCE CLOSING"); + iClosed=true; ws.close(); NVRDataModel.displayBanner('error', ['Event Server: APNS disabled'], 2000, 6000); $rootScope.apnsToken = ""; @@ -319,7 +331,7 @@ angular.module('zmApp.controllers') NVRDataModel.log("Clearing error/close cbk, disconnecting and deleting Event Server socket..."); - if ($rootScope.platforOS == 'desktop') { + if ($rootScope.platformOS == 'desktop') { if (typeof ws === 'undefined') { NVRDataModel.log("Event server socket is empty, nothing to disconnect"); return; @@ -327,10 +339,12 @@ angular.module('zmApp.controllers') ws.onmessage = null; + iClosed = true; ws.close(); ws = undefined; } else { if (nativeWebSocketId != -1) //native; + iClosed = true; CordovaWebsocketPlugin.wsClose(nativeWebSocketId, 1000, "Connection closed"); nativeWebSocketId = -1; @@ -523,10 +537,6 @@ angular.module('zmApp.controllers') } - - - //console.log ("WUTPUT SENDING REG WITH "+monstring); - $rootScope.monstring = monstring; $rootScope.intstring = intstring; -- cgit v1.2.3 From 38aecc45c37dbaf35a0523f3e8a880570b64f47a Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Wed, 31 Oct 2018 14:51:39 -0400 Subject: #733 use new Monitor_Status if available --- www/js/DataModel.js | 31 ++++++++++++++++++++++++++++- www/js/EventCtrl.js | 2 +- www/js/MonitorCtrl.js | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 84 insertions(+), 3 deletions(-) (limited to 'www/js') diff --git a/www/js/DataModel.js b/www/js/DataModel.js index 17305f22..c558d884 100644 --- a/www/js/DataModel.js +++ b/www/js/DataModel.js @@ -2081,6 +2081,29 @@ angular.module('zmApp.controllers') },*/ + getMultiServersCached: function () { + return multiservers; + }, + + // use non cached for daemon status + getMultiServers: function () { + return $http.get (loginData.apiurl+'/servers.json'); + + }, + + getMultiServer: function (id) { + + var ndx = -1; + for (var i=0; i < multiservers.length; i++) { + if (multiservers[i].Server.Id == id) { + ndx = i; + break; + } + } + return ndx == -1 ? {}:multiservers[ndx]; + + }, + regenConnKeys: function () { debug("DataModel: Regenerating connkeys..."); @@ -2144,7 +2167,7 @@ angular.module('zmApp.controllers') data = data.data; // We found a server list API, so lets make sure // we get the hostname as it will be needed for playback - log("multi server list loaded" + JSON.stringify(data)); + log("multi server list loaded:" + JSON.stringify(data)); multiservers = data.servers; var multiserver_scheme = "http://"; @@ -2158,6 +2181,8 @@ angular.module('zmApp.controllers') for (var i = 0; i < monitors.length; i++) { // make them all show for now + + monitors[i].Monitor.listDisplay = 'show'; monitors[i].Monitor.isAlarmed = false; monitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); @@ -2276,11 +2301,13 @@ angular.module('zmApp.controllers') } else { //monitors[i].Monitor.listDisplay = 'show'; + debug ("No servers matched, filling defaults..."); monitors[i].Monitor.isAlarmed = false; monitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); monitors[i].Monitor.rndKey = (Math.floor((Math.random() * 999999) + 1)).toString(); var st2 = loginData.streamingurl; + controlURL = loginData.url; if (zmsPort > 0 && !loginData.disableSimulStreaming) { // we need to insert minport @@ -2302,6 +2329,8 @@ angular.module('zmApp.controllers') if (p3.path) controlURL += p3.path; } + debug ("Storing streaming="+st2+" recording="+controlURL); + monitors[i].Monitor.streamingURL = st2; monitors[i].Monitor.controlURL = controlURL; //debug ("Streaming URL for Monitor " + monitors[i].Monitor.Id + " is " + monitors[i].Monitor.streamingURL ); diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js index caf27220..66ff6463 100644 --- a/www/js/EventCtrl.js +++ b/www/js/EventCtrl.js @@ -2815,7 +2815,7 @@ angular.module('zmApp.controllers') function recomputeThumbSize() { - NVRDataModel.debug("EventCtrl: recompute thumbnails"); + // NVRDataModel.debug("EventCtrl: recompute thumbnails"); for (var i = 0; i < $scope.events.length; i++) { var tempMon = NVRDataModel.getMonitorObject($scope.events[i].Event.MonitorId); diff --git a/www/js/MonitorCtrl.js b/www/js/MonitorCtrl.js index 8926688b..6008a4a0 100644 --- a/www/js/MonitorCtrl.js +++ b/www/js/MonitorCtrl.js @@ -415,8 +415,60 @@ angular.module('zmApp.controllers') //----------------------------------------------------------------------- function monitorStateCheck() { + + var ld = NVRDataModel.getLogin(); + // force get for latest status of monitors if av. + NVRDataModel.getMonitors(1) + .then (function (data) { + + $scope.monitors = data; + if (!$scope.monitors[0].Monitor_Status ) { + NVRDataModel.debug ("no Monitor_Status found reverting to daemonCheck..."); + forceDaemonCheck(); + } + else { + NVRDataModel.debug ("reporting status of monitors from multi-server API"); + processMonitorStatus(); + } + + }, + function (err) { + NVRDataModel.debug ("Monitor fetch error, reverting to daemonCheck..."); + forceDaemonCheck(); + }) + + } + + function processMonitorStatus () { + + //array('Unknown','NotRunning','Running','NoSignal','Signal'), + + + // console.log (JSON.stringify($scope.monitors)); + for (var j=0; j < $scope.monitors.length; j++) { + + if ($scope.monitors[j].Monitor_Status.Status == 'Connected') { + $scope.monitors[j].Monitor.isRunning = "true"; + $scope.monitors[j].Monitor.color = zm.monitorRunningColor; + $scope.monitors[j].Monitor.char = "ion-checkmark-circled"; + $scope.monitors[j].Monitor.isRunningText = $scope.monitors[j].Monitor_Status.Status; + } + else { + $scope.monitors[j].Monitor.isRunning = "false"; + $scope.monitors[j].Monitor.color = zm.monitorNotRunningColor; + $scope.monitors[j].Monitor.char = "ion-close-circled"; + $scope.monitors[j].Monitor.isRunningText = $scope.monitors[j].Monitor_Status.Status; + } + + } + + } + + function forceDaemonCheck() { var apiMonCheck; + $scope.loginData = NVRDataModel.getLogin(); + // The status is provided by zmdc.pl // "not running", "pending", "running since", "Unable to connect" var i; @@ -426,7 +478,7 @@ angular.module('zmApp.controllers') $scope.monitors[j].Monitor.isRunning = "..."; $scope.monitors[j].Monitor.color = zm.monitorCheckingColor; $scope.monitors[j].Monitor.char = "ion-checkmark-circled"; - apiMonCheck = loginData.apiurl + "/monitors/daemonStatus/id:" + $scope.monitors[j].Monitor.Id + "/daemon:zmc.json"; + apiMonCheck = $scope.loginData.apiurl + "/monitors/daemonStatus/id:" + $scope.monitors[j].Monitor.Id + "/daemon:zmc.json"; NVRDataModel.debug("MonitorCtrl:monitorStateCheck: " + apiMonCheck); -- cgit v1.2.3 From 326c2fa79cc6538e4352398ee1aba0f102c4cd75 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Wed, 31 Oct 2018 19:41:35 -0400 Subject: #733 typo --- www/js/MonitorCtrl.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'www/js') diff --git a/www/js/MonitorCtrl.js b/www/js/MonitorCtrl.js index 6008a4a0..d4620cd3 100644 --- a/www/js/MonitorCtrl.js +++ b/www/js/MonitorCtrl.js @@ -416,6 +416,7 @@ angular.module('zmApp.controllers') function monitorStateCheck() { + // console.log ("Checking monitors"); var ld = NVRDataModel.getLogin(); // force get for latest status of monitors if av. NVRDataModel.getMonitors(1) @@ -435,7 +436,7 @@ angular.module('zmApp.controllers') function (err) { NVRDataModel.debug ("Monitor fetch error, reverting to daemonCheck..."); forceDaemonCheck(); - }) + }); } -- cgit v1.2.3 From 5e20084f130e02b137acd3807148a4982ed39301 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Wed, 31 Oct 2018 20:10:32 -0400 Subject: #733 fix icon --- www/js/MonitorCtrl.js | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) (limited to 'www/js') diff --git a/www/js/MonitorCtrl.js b/www/js/MonitorCtrl.js index d4620cd3..0ed5883c 100644 --- a/www/js/MonitorCtrl.js +++ b/www/js/MonitorCtrl.js @@ -9,13 +9,6 @@ angular.module('zmApp.controllers') .controller('zmApp.MonitorCtrl', ['$ionicPopup', 'zm', '$scope', 'NVRDataModel', 'message', '$ionicSideMenuDelegate', '$ionicLoading', '$ionicModal', '$state', '$http', '$rootScope', '$timeout', '$ionicHistory', '$ionicPlatform', '$translate', '$q', function ($ionicPopup, zm, $scope, NVRDataModel, message, $ionicSideMenuDelegate, $ionicLoading, $ionicModal, $state, $http, $rootScope, $timeout, $ionicHistory, $ionicPlatform, $translate, $q) { - //----------------------------------------------------------------------- - // Controller Main - //----------------------------------------------------------------------- - - // var isModalOpen = false; - - // console.log("***EVENTS: Waiting for Monitors to load before I proceed"); var loginData; @@ -478,7 +471,7 @@ angular.module('zmApp.controllers') $scope.monitors[j].Monitor.isRunningText = "..."; $scope.monitors[j].Monitor.isRunning = "..."; $scope.monitors[j].Monitor.color = zm.monitorCheckingColor; - $scope.monitors[j].Monitor.char = "ion-checkmark-circled"; + $scope.monitors[j].Monitor.char = "ion-help-circled"; apiMonCheck = $scope.loginData.apiurl + "/monitors/daemonStatus/id:" + $scope.monitors[j].Monitor.Id + "/daemon:zmc.json"; @@ -498,6 +491,7 @@ angular.module('zmApp.controllers') } else if (data.statustext.indexOf("running since") > -1) { $scope.monitors[j].Monitor.isRunning = "true"; $scope.monitors[j].Monitor.color = zm.monitorRunningColor; + $scope.monitors[j].Monitor.char = "ion-checkmark-circled"; } else if (data.statustext.indexOf("Unable to connect") > -1) { $scope.monitors[j].Monitor.isRunning = "false"; $scope.monitors[j].Monitor.color = zm.monitorNotRunningColor; -- cgit v1.2.3 From 164ebf1745517bb2bc9be8eedb5bdf709168d801 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Thu, 1 Nov 2018 11:20:41 -0400 Subject: #733 remove getMonitor dependency for monitor view, show the right loading message --- www/js/MonitorCtrl.js | 30 ++++++++++++++---------------- www/js/app.js | 4 ++-- 2 files changed, 16 insertions(+), 18 deletions(-) (limited to 'www/js') diff --git a/www/js/MonitorCtrl.js b/www/js/MonitorCtrl.js index 0ed5883c..7fc2cec2 100644 --- a/www/js/MonitorCtrl.js +++ b/www/js/MonitorCtrl.js @@ -6,11 +6,12 @@ // refer to comments in EventCtrl for the modal stuff. They are almost the same angular.module('zmApp.controllers') - .controller('zmApp.MonitorCtrl', ['$ionicPopup', 'zm', '$scope', 'NVRDataModel', 'message', '$ionicSideMenuDelegate', '$ionicLoading', '$ionicModal', '$state', '$http', '$rootScope', '$timeout', '$ionicHistory', '$ionicPlatform', '$translate', '$q', - function ($ionicPopup, zm, $scope, NVRDataModel, message, $ionicSideMenuDelegate, $ionicLoading, $ionicModal, $state, $http, $rootScope, $timeout, $ionicHistory, $ionicPlatform, $translate, $q) { + .controller('zmApp.MonitorCtrl', ['$ionicPopup', 'zm', '$scope', 'NVRDataModel', '$ionicSideMenuDelegate', '$ionicLoading', '$ionicModal', '$state', '$http', '$rootScope', '$timeout', '$ionicHistory', '$ionicPlatform', '$translate', '$q', + function ($ionicPopup, zm, $scope, NVRDataModel, $ionicSideMenuDelegate, $ionicLoading, $ionicModal, $state, $http, $rootScope, $timeout, $ionicHistory, $ionicPlatform, $translate, $q) { var loginData; + $scope.monitorLoadStatus = "..."; // -------------------------------------------------------- // Handling of back button in case modal is open should @@ -269,24 +270,15 @@ angular.module('zmApp.controllers') $scope.$on('$ionicView.afterEnter', function () { // console.log("**VIEW ** Monitor Ctrl Entered"); + + NVRDataModel.debug ("Monitor Control afterEnter"); $scope.monitors = []; - $scope.monitors = message; + $scope.monitorLoadStatus = $translate.instant ('kPleaseWait')+'...'; + //console.log (">>>>>>>>>>>> MONITOR CTRL " + JSON.stringify($scope.monitors)); - if ($scope.monitors.length == 0) { - $rootScope.zmPopup = $ionicPopup.alert({ - title: $translate.instant('kNoMonitors'), - template: $translate.instant('kPleaseCheckCredentials') - }); - $ionicHistory.nextViewOptions({ - disableBack: true - }); - $state.go("app.login", { - "wizard": false - }); - return; - } + loginData = NVRDataModel.getLogin(); monitorStateCheck(); @@ -416,6 +408,11 @@ angular.module('zmApp.controllers') .then (function (data) { $scope.monitors = data; + + if (!$scope.monitors.length) { + $scope.monitorLoadStatus = $translate.instant ('kNoMonitors'); + } + if (!$scope.monitors[0].Monitor_Status ) { NVRDataModel.debug ("no Monitor_Status found reverting to daemonCheck..."); forceDaemonCheck(); @@ -428,6 +425,7 @@ angular.module('zmApp.controllers') }, function (err) { NVRDataModel.debug ("Monitor fetch error, reverting to daemonCheck..."); + $scope.monitorLoadStatus = $translate.instant ('kNoMonitors'); forceDaemonCheck(); }); diff --git a/www/js/app.js b/www/js/app.js index 74f7d0cf..696006dd 100755 --- a/www/js/app.js +++ b/www/js/app.js @@ -2539,12 +2539,12 @@ angular.module('zmApp', [ data: { requireLogin: true }, - resolve: { + /*resolve: { message: function (NVRDataModel) { // console.log("Inside app.montage resolve"); return NVRDataModel.getMonitors(0); } - }, + },*/ url: "/monitors", cache: false, templateUrl: "templates/monitors.html", -- cgit v1.2.3 From 2ea8d3b31d217ac5cbfdd8554097168a16ad8e91 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Thu, 1 Nov 2018 11:45:04 -0400 Subject: reflect new ES version --- www/js/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'www/js') diff --git a/www/js/app.js b/www/js/app.js index 696006dd..c14180f2 100755 --- a/www/js/app.js +++ b/www/js/app.js @@ -42,7 +42,7 @@ angular.module('zmApp', [ .constant('zm', { minAppVersion: '1.28.107', // if ZM is less than this, the app won't work recommendedAppVersion: '1.32.0', - minEventServerVersion: '2.1', + minEventServerVersion: '2.2', castAppId: 'BA30FB4C', alarmFlashTimer: 20000, // time to flash alarm gcmSenderId: '710936220256', -- cgit v1.2.3 From 73014ac9a48fd584a4e0665358d240dde3024887 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Fri, 2 Nov 2018 14:32:25 -0400 Subject: add ZM version to display --- www/js/LogCtrl.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'www/js') diff --git a/www/js/LogCtrl.js b/www/js/LogCtrl.js index 599c63d1..01566750 100644 --- a/www/js/LogCtrl.js +++ b/www/js/LogCtrl.js @@ -70,7 +70,7 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo $scope.downloadLogs = function () { var body = "zmNinja version:" + $scope.zmAppVersion + " (" + $rootScope.platformOS + ")\n" + - "ZoneMinder version:" + NVRDataModel.getCurrentServerVersion(); + "ZoneMinder version:" + NVRDataModel.getCurrentServerVersion()+"\n\n"; body = $translate.instant('kSensitiveBody') + '\n\n\n' + body; var fname = $rootScope.appName + "-logs-" + @@ -107,7 +107,7 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo $scope.attachLogs = function () { var body = "zmNinja version:" + $scope.zmAppVersion + " (" + $rootScope.platformOS + ")
" + - "ZoneMinder version:" + NVRDataModel.getCurrentServerVersion(); + "ZoneMinder version:" + NVRDataModel.getCurrentServerVersion() + "
"; body = '' + $translate.instant('kSensitiveBody') + '

' + body; $fileLogger.checkFile() @@ -254,6 +254,7 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo }; $scope.zmAppVersion = NVRDataModel.getAppVersion(); + $scope.zmVersion = NVRDataModel.getCurrentServerVersion(); /* intervalLogUpdateHandle = $interval(function () { -- cgit v1.2.3 From a8f91b80946aecd460543c551dd30dc9db401e5f Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Fri, 2 Nov 2018 14:32:31 -0400 Subject: odd case? --- www/js/DataModel.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'www/js') diff --git a/www/js/DataModel.js b/www/js/DataModel.js index c558d884..3e5f41c1 100644 --- a/www/js/DataModel.js +++ b/www/js/DataModel.js @@ -408,7 +408,7 @@ angular.module('zmApp.controllers') var as = 'undefined'; - if (!mid && monitors.length > 0) { + if (!mid && monitors && monitors.length > 0) { mid = monitors[0].Monitor.Id; } @@ -2145,7 +2145,7 @@ angular.module('zmApp.controllers') .then(function (data) { // console.log("HTTP success got " + JSON.stringify(data.monitors)); data = data.data; - monitors = data.monitors; + if (data.monitors) monitors = data.monitors; if ($rootScope.authSession == 'undefined') { -- cgit v1.2.3 From 8c33f90e9f9920b6eda552c6d69277468a0fb23f Mon Sep 17 00:00:00 2001 From: Arseny Zorin Date: Wed, 7 Nov 2018 11:47:04 +0300 Subject: Fixes double definition in www/js/app.js --- www/js/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'www/js') diff --git a/www/js/app.js b/www/js/app.js index c14180f2..130d732a 100755 --- a/www/js/app.js +++ b/www/js/app.js @@ -1165,7 +1165,7 @@ angular.module('zmApp', [ } } - var ldg = NVRDataModel.getLogin(); + ldg = NVRDataModel.getLogin(); ldg.loginAPISupported = true; NVRDataModel.setLogin(ldg); @@ -1182,7 +1182,7 @@ angular.module('zmApp', [ } catch (e) { NVRDataModel.debug("Login API approach did not work..."); - var ld = NVRDataModel.getLogin(); + ld = NVRDataModel.getLogin(); ld.loginAPISupported = false; NVRDataModel.setLogin(ld); loginWebScrape() -- cgit v1.2.3 From c80a2d1ef37551191093bdae160315c4c7a95336 Mon Sep 17 00:00:00 2001 From: Arseny Zorin Date: Wed, 7 Nov 2018 18:41:42 +0300 Subject: Returns removed ldg by mistake and finally fixes ld double def --- www/js/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'www/js') diff --git a/www/js/app.js b/www/js/app.js index 130d732a..02f5e8fb 100755 --- a/www/js/app.js +++ b/www/js/app.js @@ -1134,7 +1134,7 @@ angular.module('zmApp', [ if (!succ.version) { NVRDataModel.debug("API login returned fake success, going back to webscrape"); - var ld = NVRDataModel.getLogin(); + ld = NVRDataModel.getLogin(); ld.loginAPISupported = false; NVRDataModel.setLogin(ld); @@ -1165,7 +1165,7 @@ angular.module('zmApp', [ } } - ldg = NVRDataModel.getLogin(); + var ldg = NVRDataModel.getLogin(); ldg.loginAPISupported = true; NVRDataModel.setLogin(ldg); -- cgit v1.2.3 From d8b0c15aaf7fbaca2442c9312e65da8ecae2c8dd Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Wed, 7 Nov 2018 10:47:40 -0500 Subject: es version --- www/js/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'www/js') diff --git a/www/js/app.js b/www/js/app.js index 02f5e8fb..cf64c31b 100755 --- a/www/js/app.js +++ b/www/js/app.js @@ -42,7 +42,7 @@ angular.module('zmApp', [ .constant('zm', { minAppVersion: '1.28.107', // if ZM is less than this, the app won't work recommendedAppVersion: '1.32.0', - minEventServerVersion: '2.2', + minEventServerVersion: '2.4', castAppId: 'BA30FB4C', alarmFlashTimer: 20000, // time to flash alarm gcmSenderId: '710936220256', -- cgit v1.2.3 From e5c31879213c3038abcf7fe1d84fef28dd5bf6ba Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Wed, 7 Nov 2018 11:46:00 -0500 Subject: process push in monitors after we load the array --- www/js/MonitorCtrl.js | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'www/js') diff --git a/www/js/MonitorCtrl.js b/www/js/MonitorCtrl.js index 7fc2cec2..7241db53 100644 --- a/www/js/MonitorCtrl.js +++ b/www/js/MonitorCtrl.js @@ -293,15 +293,21 @@ angular.module('zmApp.controllers') var tm = $rootScope.tappedMid; $rootScope.tappedMid = 0; var monitem; - for (var m = 0; m < $scope.monitors.length; m++) { - if ($scope.monitors[m].Monitor.Id == tm) { - monitem = $scope.monitors[m]; - break; - } - } + NVRDataModel.getMonitors(0) + .then ( function (data) { + $scope.monitors = data; + for (var m = 0; m < $scope.monitors.length; m++) { + if ($scope.monitors[m].Monitor.Id == tm) { + monitem = $scope.monitors[m]; + break; + } + } + openModal(monitem.Monitor.Id, monitem.Monitor.Controllable, monitem.Monitor.ControlId, monitem.Monitor.connKey, monitem); + }); + - openModal(monitem.Monitor.Id, monitem.Monitor.Controllable, monitem.Monitor.ControlId, monitem.Monitor.connKey, monitem); + } }); -- cgit v1.2.3 From 58039e034a7078868839c74a6c7e1970d670dd5b Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Wed, 7 Nov 2018 11:46:04 -0500 Subject: nits --- www/js/WizardCtrl.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'www/js') diff --git a/www/js/WizardCtrl.js b/www/js/WizardCtrl.js index 0852f4f6..8a5f1ac4 100644 --- a/www/js/WizardCtrl.js +++ b/www/js/WizardCtrl.js @@ -356,7 +356,7 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$ } if ($scope.wizard.useauth && $scope.wizard.usebasicauth) { - NVRDataModel.debug ("setting basic auth"); + NVRDataModel.debug ("setting basic auth with "+$scope.wizard.basicuser+":"+$scope.wizard.basicpassword); cordova.plugin.http.useBasicAuth($scope.wizard.basicuser, $scope.wizard.basicpassword); } -- cgit v1.2.3