diff options
Diffstat (limited to 'www')
| -rw-r--r-- | www/js/DataModel.js | 119 | ||||
| -rw-r--r-- | www/js/DevOptionsCtrl.js | 71 | ||||
| -rw-r--r-- | www/js/EventCtrl.js | 2690 | ||||
| -rw-r--r-- | www/js/EventDateTimeFilterCtrl.js | 52 | ||||
| -rw-r--r-- | www/js/EventModalCtrl.js | 26 | ||||
| -rw-r--r-- | www/js/EventServer.js | 171 | ||||
| -rw-r--r-- | www/js/EventServerSettingsCtrl.js | 79 | ||||
| -rw-r--r-- | www/js/EventsGraphsCtrl.js | 36 | ||||
| -rw-r--r-- | www/js/EventsModalGraphCtrl.js | 472 | ||||
| -rw-r--r-- | www/js/FirstUseCtrl.js | 69 | ||||
| -rw-r--r-- | www/js/HelpCtrl.js | 89 | ||||
| -rw-r--r-- | www/js/ImportantMessageCtrl.js | 14 | ||||
| -rw-r--r-- | www/js/LogCtrl.js | 197 | ||||
| -rw-r--r-- | www/js/LoginCtrl.js | 362 | ||||
| -rw-r--r-- | www/js/MenuController.js | 8 | ||||
| -rw-r--r-- | www/js/MonitorCtrl.js | 81 | ||||
| -rw-r--r-- | www/js/MonitorModalCtrl.js | 968 | ||||
| -rw-r--r-- | www/js/MontageCtrl.js | 1341 | ||||
| -rw-r--r-- | www/js/MontageHistoryCtrl.js | 1179 | ||||
| -rw-r--r-- | www/js/NewsCtrl.js | 120 | ||||
| -rw-r--r-- | www/js/PortalLoginCtrl.js | 396 | ||||
| -rw-r--r-- | www/js/StateCtrl.js | 56 | ||||
| -rw-r--r-- | www/js/TimelineCtrl.js | 363 | ||||
| -rw-r--r-- | www/js/TimelineModalCtrl.js | 564 | ||||
| -rw-r--r-- | www/js/WizardCtrl.js | 20 | ||||
| -rw-r--r-- | www/js/app.js | 370 | ||||
| -rw-r--r-- | www/js/controllers.js | 33 |
27 files changed, 4851 insertions, 5095 deletions
diff --git a/www/js/DataModel.js b/www/js/DataModel.js index 109745fe..5f292909 100644 --- a/www/js/DataModel.js +++ b/www/js/DataModel.js @@ -142,43 +142,39 @@ angular.module('zmApp.controllers') //-------------------------------------------------------------------------- // uses fileLogger to write logs to file for later investigation //-------------------------------------------------------------------------- - + // separate out a debug so we don't do this if comparison for normal logs function zmDebug(val) { - if (loginData.enableDebug && loginData.enableLogs) - { - if (val!== undefined) - { - var regex1 = /"password":".*?"/g; - var regex2 = /&pass=.*?(?=["&]|$)/g; - + if (loginData.enableDebug && loginData.enableLogs) { + if (val !== undefined) { + var regex1 = /"password":".*?"/g; + var regex2 = /&pass=.*?(?=["&]|$)/g; + //console.log ("VAL IS " + val); val = val.replace(regex1, "<password removed>"); val = val.replace(regex2, "<password removed>"); } $fileLogger.debug(val); - //console.log (val); + //console.log (val); } } - + function zmLog(val, logtype) { - if (loginData.enableLogs) - { - if (val!== undefined) - { - var regex1 = /"password":".*?"/g; - var regex2 = /&pass=.*?(?=["&]|$)/g; - + if (loginData.enableLogs) { + if (val !== undefined) { + var regex1 = /"password":".*?"/g; + var regex2 = /&pass=.*?(?=["&]|$)/g; + //console.log ("VAL IS " + val); val = val.replace(regex1, "<password removed>"); val = val.replace(regex2, "<password removed>"); - + } // make sure password is removed //"username":"zmninja","password":"xyz", //val = val.replace(/\"password:\", $fileLogger.log(logtype, val); - // console.log (val); + // console.log (val); } } @@ -188,10 +184,10 @@ angular.module('zmApp.controllers') function setLogin(newLogin) { loginData = angular.copy(newLogin); serverGroupList[loginData.serverName] = angular.copy(loginData); - + var ct = CryptoJS.AES.encrypt(JSON.stringify(serverGroupList), zm.cipherKey).toString(); - - console.log ("****serverLogin was encrypted to " + ct); + + //console.log ("****serverLogin was encrypted to " + ct); //$localstorage.setObject("serverGroupList", serverGroupList); localforage.setItem("serverGroupList", ct, function (err) { if (err) zmLog("localforage store error " + JSON.stringify(err)); @@ -206,7 +202,7 @@ angular.module('zmApp.controllers') } - + //credit: https://gist.github.com/alexey-bass/1115557 function versionCompare(left, right) { @@ -277,7 +273,7 @@ angular.module('zmApp.controllers') zmDebug: function (val) { - + zmDebug(val); }, @@ -291,7 +287,7 @@ angular.module('zmApp.controllers') }, setLatestBlogPostChecked: function (val) { - console.log (">>>>>>>>>>>> Setting blog date: " + val); + //console.log (">>>>>>>>>>>> Setting blog date: " + val); latestBlogPostChecked = val; localforage.setItem("latestBlogPostChecked", latestBlogPostChecked); }, @@ -388,7 +384,7 @@ angular.module('zmApp.controllers') //$localstorage.set("defaultServerName",firstReachableUrl.server); zmLog("Based on reachability, first serverName will be " + firstReachableUrl.server); - console.log("set login Data to " + JSON.stringify(loginData)); + //console.log("set login Data to " + JSON.stringify(loginData)); return d.promise; // OK: do something with firstReachableUrl @@ -454,43 +450,40 @@ angular.module('zmApp.controllers') zmLog("ZMData init: checking for stored variables & setting up log file"); - + latestBlogPostChecked = localforage.getItem("latestBlogPostChecked") || null; $ionicLoading.show({ template: "retrieving profile data..." }); - - - - + + + + localforage.getItem("serverGroupList").then(function (val) { // decrypt it now - + var decodedVal; - - if (typeof val == 'string') - { - zmLog ("user profile encrypted, decoding..."); - var bytes = CryptoJS.AES.decrypt(val.toString(), zm.cipherKey); + + if (typeof val == 'string') { + zmLog("user profile encrypted, decoding..."); + var bytes = CryptoJS.AES.decrypt(val.toString(), zm.cipherKey); decodedVal = JSON.parse(bytes.toString(CryptoJS.enc.Utf8)); - - } - else - { - zmLog ("user profile not encrypted"); + + } else { + zmLog("user profile not encrypted"); decodedVal = val; } - + //decodedVal = val; - - zmDebug ("user profile retrieved:"+JSON.stringify(decodedVal)); - + + zmDebug("user profile retrieved:" + JSON.stringify(decodedVal)); + $ionicLoading.hide(); serverGroupList = decodedVal; - - - // console.log(">>>> DECRYPTED serverGroupList " + JSON.stringify(serverGroupList)); + + + // console.log(">>>> DECRYPTED serverGroupList " + JSON.stringify(serverGroupList)); var demoServer = "{\"serverName\":\"zmNinjaDemo\",\"username\":\"zmninja\",\"password\":\"zmNinja$xc129\",\"url\":\"https://demo.zoneminder.com/zm\",\"apiurl\":\"https://demo.zoneminder.com/zm/api\",\"eventServer\":\"\",\"maxMontage\":\"40\",\"streamingurl\":\"https://demo.zoneminder.com/cgi-bin-zm\",\"maxFPS\":\"3\",\"montageQuality\":\"50\",\"singleImageQuality\":\"100\",\"montageHistoryQuality\":\"50\",\"useSSL\":true,\"keepAwake\":true,\"isUseAuth\":\"1\",\"isUseEventServer\":false,\"disablePush\":false,\"eventServerMonitors\":\"\",\"eventServerInterval\":\"\",\"refreshSec\":\"2\",\"enableDebug\":false,\"usePin\":false,\"pinCode\":\"\",\"canSwipeMonitors\":true,\"persistMontageOrder\":false,\"onTapScreen\":\"Events\",\"enableh264\":true,\"gapless\":false,\"montageOrder\":\"\",\"montageHiddenOrder\":\"\",\"montageArraySize\":\"0\",\"graphSize\":2000,\"enableAlarmCount\":true,\"montageSize\":\"3\",\"useNphZms\":true,\"useNphZmsForEvents\":true,\"packMontage\":false,\"exitOnSleep\":false,\"forceNetworkStop\":false,\"defaultPushSound\":false,\"enableBlog\":true,\"use24hr\":false, \"packeryPositions\":\"\"}"; var demoS = JSON.parse(demoServer); //console.log("JSON parsed demo" + JSON.stringify(demoS)); @@ -522,9 +515,9 @@ angular.module('zmApp.controllers') $ionicLoading.hide(); //console.log ("!!!!!!!!!!!!!!!!!!default server name is " + sname); sname = val; - // console.log("!!!!!!!!!!!!!!!!!!!Got VAL " + sname); + // console.log("!!!!!!!!!!!!!!!!!!!Got VAL " + sname); var loadedData = serverGroupList[sname]; - // console.log(">>>>>>>>>>> loadedData is: " + JSON.stringify(loadedData)); + // console.log(">>>>>>>>>>> loadedData is: " + JSON.stringify(loadedData)); if (!isEmpty(loadedData)) { loginData = loadedData; @@ -668,20 +661,20 @@ angular.module('zmApp.controllers') loginData.disableNative = false; } - + if (typeof loginData.vibrateOnPush == 'undefined') { zmDebug("vibrate on push not found, setting to true"); loginData.vibrateOnPush = true; } - + if (typeof loginData.soundOnPush == 'undefined') { zmDebug("sound on push not found, setting to true"); loginData.soundOnPush = true; } - + zmLog("DataModel init recovered this loginData as " + JSON.stringify(loginData)); } else { zmLog("defaultServer configuration NOT found. Keeping login at defaults"); @@ -695,7 +688,7 @@ angular.module('zmApp.controllers') //console.log("Getting out of ZMDataModel init"); $rootScope.showBlog = loginData.enableBlog; //zmDebug("loginData structure values: " + JSON.stringify(loginData)); - + }); }, @@ -746,14 +739,14 @@ angular.module('zmApp.controllers') if (permanent) { //window.localStorage.setItem("defaultLang", l); - console.log("setting default lang"); + //console.log("setting default lang"); localforage.setItem("defaultLang", l) - .then (function (val) { - zmLog ("Set language in localforage to: " + val); - }); + .then(function (val) { + zmLog("Set language in localforage to: " + val); + }); } - console.log("invoking translate use with " + l); + //console.log("invoking translate use with " + l); $translate.use(l).then(function (data) { zmLog("Device Language is:" + data); moment.locale(data); @@ -812,7 +805,7 @@ angular.module('zmApp.controllers') }, isFirstUse: function () { - console.log("isFirstUse is " + isFirstUse); + // console.log("isFirstUse is " + isFirstUse); return isFirstUse; // return ((window.localStorage.getItem("isFirstUse") == undefined) ? true : false); @@ -830,8 +823,8 @@ angular.module('zmApp.controllers') //localforage.setItem("isFirstUse", val, // function(err) {if (err) zmLog ("localforage error, //storing isFirstUse: " + JSON.stringify(err));}); isFirstUse = val; - localforage.setItem ("isFirstUse",val); - console.log (">>>>>>setting isFirstUse to " + val); + localforage.setItem("isFirstUse", val); + //console.log (">>>>>>setting isFirstUse to " + val); }, diff --git a/www/js/DevOptionsCtrl.js b/www/js/DevOptionsCtrl.js index 502c02d0..fab6cfc2 100644 --- a/www/js/DevOptionsCtrl.js +++ b/www/js/DevOptionsCtrl.js @@ -2,36 +2,40 @@ /* jslint browser: true*/ /* global cordova,StatusBar,angular,console */ -angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope', '$rootScope', '$ionicModal', 'zm', 'ZMDataModel', '$ionicSideMenuDelegate', '$ionicPopup', '$http', '$q', '$ionicLoading', '$ionicHistory','$state', 'SecuredPopups', '$translate', function ($scope, $rootScope, $ionicModal, zm, ZMDataModel, $ionicSideMenuDelegate, $ionicPopup, $http, $q, $ionicLoading, $ionicHistory, $state, SecuredPopups, $translate) { +angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope', '$rootScope', '$ionicModal', 'zm', 'ZMDataModel', '$ionicSideMenuDelegate', '$ionicPopup', '$http', '$q', '$ionicLoading', '$ionicHistory', '$state', 'SecuredPopups', '$translate', function ($scope, $rootScope, $ionicModal, zm, ZMDataModel, $ionicSideMenuDelegate, $ionicPopup, $http, $q, $ionicLoading, $ionicHistory, $state, SecuredPopups, $translate) { $scope.openMenu = function () { $ionicSideMenuDelegate.toggleLeft(); - // $scope.this.will.crash = 1; - + // $scope.this.will.crash = 1; + }; - + //---------------------------------------------------------------- // Alarm notification handling //---------------------------------------------------------------- - $scope.handleAlarms = function() - { - $rootScope.isAlarm=!$rootScope.isAlarm; - if (!$rootScope.isAlarm) - { - $rootScope.alarmCount="0"; - $ionicHistory.nextViewOptions({disableBack: true}); - $state.go("events", {"id": 0}, { reload: true }); + $scope.handleAlarms = function () { + $rootScope.isAlarm = !$rootScope.isAlarm; + if (!$rootScope.isAlarm) { + $rootScope.alarmCount = "0"; + $ionicHistory.nextViewOptions({ + disableBack: true + }); + $state.go("events", { + "id": 0 + }, { + reload: true + }); } }; - - + + //---------------------------------------------------------------- // Save anyway when you exit //---------------------------------------------------------------- - - $scope.$on('$ionicView.beforeLeave', function () { - saveDevOptions(); + + $scope.$on('$ionicView.beforeLeave', function () { + saveDevOptions(); }); @@ -46,27 +50,26 @@ angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope' $scope.$on('$ionicView.enter', function () { //console.log("**VIEW ** DevOptions Ctrl Entered"); $scope.loginData = ZMDataModel.getLogin(); - + ZMDataModel.setAwake(false); }); //------------------------------------------------------------------ // Perform the login action when the user submits the login form //------------------------------------------------------------------ - - function saveDevOptions() - { + + function saveDevOptions() { ZMDataModel.zmDebug("SaveDevOptions: called"); - + if ((parseInt($scope.loginData.maxFPS) < 0) || (parseInt($scope.loginData.maxFPS) > zm.maxFPS)) { $scope.loginData.maxFPS = zm.defaultFPS.toString(); } - + if (parseInt($scope.loginData.refreshSec) <= 0) { - ZMDataModel.zmDebug("SaveDevOptions: refresh sec was too low at " + - $scope.loginData.refreshSec + " reset to 1"); + ZMDataModel.zmDebug("SaveDevOptions: refresh sec was too low at " + + $scope.loginData.refreshSec + " reset to 1"); $scope.loginData.refreshSec = 1; } @@ -76,8 +79,8 @@ angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope' (parseInt($scope.loginData.montageQuality) > 70)) { $scope.loginData.montageQuality = 70; } - - + + if ((parseInt($scope.loginData.singleImageQuality) < zm.safeImageQuality) || (parseInt($scope.loginData.singleImageQuality) > 100)) { $scope.loginData.singleImageQuality = zm.safeImageQuality.toString(); @@ -88,27 +91,27 @@ angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope' ZMDataModel.setLogin($scope.loginData); ZMDataModel.getMonitors(1); - + } - + $scope.saveDevOptions = function () { - - saveDevOptions(); + + saveDevOptions(); // $rootScope.zmPopup.close(); - $rootScope.zmPopup= SecuredPopups.show('alert',{ + $rootScope.zmPopup = SecuredPopups.show('alert', { title: $translate.instant('kSettingsSaved'), template: "{{'kExploreEnjoy' | translate }} {{$root.appName}}" }).then(function (res) { $ionicSideMenuDelegate.toggleLeft(); }); - + }; //------------------------------------------------------------------ // controller main //------------------------------------------------------------------ - + diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js index b6c99b76..6b6f81ca 100644 --- a/www/js/EventCtrl.js +++ b/www/js/EventCtrl.js @@ -8,23 +8,22 @@ angular.module('zmApp.controllers') - // alarm frames filter +// alarm frames filter .filter('selectFrames', function ($filter, $translate) { // Create the return function and set the required parameter name to **input** return function (input, typeOfFrames) { - + var out = []; angular.forEach(input, function (item) { - if (typeOfFrames==$translate.instant ('kShowTimeDiffFrames')) { - if (item.type == $translate.instant ('kShowTimeDiffFrames')) + if (typeOfFrames == $translate.instant('kShowTimeDiffFrames')) { + if (item.type == $translate.instant('kShowTimeDiffFrames')) out.push(item); - } - else + } else out.push(item); }); @@ -34,80 +33,80 @@ angular.module('zmApp.controllers') }) - .controller('zmApp.EventCtrl', ['$scope', '$rootScope', 'zm', 'ZMDataModel', 'message', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$ionicPlatform', '$ionicSlideBoxDelegate', '$ionicPosition', '$ionicPopover', '$ionicPopup', 'EventServer', '$sce', '$cordovaBadge', '$cordovaLocalNotification', '$q', 'carouselUtils', '$translate', function ($scope, $rootScope, zm, ZMDataModel, message, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $ionicPlatform, $ionicSlideBoxDelegate, $ionicPosition, $ionicPopover, $ionicPopup, EventServer, $sce, $cordovaBadge, $cordovaLocalNotification, $q, carouselUtils, $translate) { - - // events in last 5 minutes - // TODO https://server/zm/api/events/consoleEvents/5%20minute.json - - //--------------------------------------------------- - // Controller main - //--------------------------------------------------- - - var loginData; - var oldEvent; - var scrollbynumber; - var eventImageDigits = 5; // failsafe - var eventsPage; - var moreEvents; - var pageLoaded; - var enableLoadMore; - var lData; - var stackState; - var ionRangeWatcher; - var mycarouselWatcher; - $scope.typeOfFrames = $translate.instant('kShowTimeDiffFrames'); - - - //--------------------------------------------------- - // initial code - //--------------------------------------------------- - - - $scope.$on('$ionicView.afterEnter', function () { - console.log ("********* AFTER ENTER"); - $scope.events = []; - getInitialEvents(); - setupWatchers(); - }); - - $scope.$on('$ionicView.beforeEnter', function () { - - console.log ("********* BEFORE ENTER"); - document.addEventListener("pause", onPause, false); +.controller('zmApp.EventCtrl', ['$scope', '$rootScope', 'zm', 'ZMDataModel', 'message', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$ionicPlatform', '$ionicSlideBoxDelegate', '$ionicPosition', '$ionicPopover', '$ionicPopup', 'EventServer', '$sce', '$cordovaBadge', '$cordovaLocalNotification', '$q', 'carouselUtils', '$translate', function ($scope, $rootScope, zm, ZMDataModel, message, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $ionicPlatform, $ionicSlideBoxDelegate, $ionicPosition, $ionicPopover, $ionicPopup, EventServer, $sce, $cordovaBadge, $cordovaLocalNotification, $q, carouselUtils, $translate) { + + // events in last 5 minutes + // TODO https://server/zm/api/events/consoleEvents/5%20minute.json + + //--------------------------------------------------- + // Controller main + //--------------------------------------------------- + + var loginData; + var oldEvent; + var scrollbynumber; + var eventImageDigits = 5; // failsafe + var eventsPage; + var moreEvents; + var pageLoaded; + var enableLoadMore; + var lData; + var stackState; + var ionRangeWatcher; + var mycarouselWatcher; + $scope.typeOfFrames = $translate.instant('kShowTimeDiffFrames'); + + + //--------------------------------------------------- + // initial code + //--------------------------------------------------- + + + $scope.$on('$ionicView.afterEnter', function () { + //console.log ("********* AFTER ENTER"); + $scope.events = []; + getInitialEvents(); + setupWatchers(); + }); + + $scope.$on('$ionicView.beforeEnter', function () { + + //console.log ("********* BEFORE ENTER"); + document.addEventListener("pause", onPause, false); //console.log("I got STATE PARAM " + $stateParams.id); - $scope.id = parseInt($stateParams.id, 10); - - pageLoaded = false; - enableLoadMore = true; - - $scope.mycarousel = { + $scope.id = parseInt($stateParams.id, 10); + + pageLoaded = false; + enableLoadMore = true; + + $scope.mycarousel = { index: 0 - }; - - $scope.ionRange = { - index: 1 - }; - $scope.animationInProgress = false; - - $scope.hours = []; - $scope.days = []; - $scope.weeks = []; - $scope.months = []; - - - $scope.eventList = { + }; + + $scope.ionRange = { + index: 1 + }; + $scope.animationInProgress = false; + + $scope.hours = []; + $scope.days = []; + $scope.weeks = []; + $scope.months = []; + + + $scope.eventList = { showDelete: false - }; + }; - $scope.slides = []; // will hold scrub frames - $scope.totalEventTime = 0; // used to display max of progress bar - $scope.currentEventTime = 0; - oldEvent = ""; // will hold previous event that had showScrub = true - scrollbynumber = 0; - $scope.eventsBeingLoaded = true; - $scope.FrameArray = []; // will hold frame info from detailed Events API - loginData = ZMDataModel.getLogin(); - ZMDataModel.getKeyConfigParams(0) + $scope.slides = []; // will hold scrub frames + $scope.totalEventTime = 0; // used to display max of progress bar + $scope.currentEventTime = 0; + oldEvent = ""; // will hold previous event that had showScrub = true + scrollbynumber = 0; + $scope.eventsBeingLoaded = true; + $scope.FrameArray = []; // will hold frame info from detailed Events API + loginData = ZMDataModel.getLogin(); + ZMDataModel.getKeyConfigParams(0) .then(function (data) { //console.log ("***GETKEY: " + JSON.stringify(data)); eventImageDigits = parseInt(data); @@ -115,233 +114,225 @@ angular.module('zmApp.controllers') }); - $scope.showSearch = false; - eventsPage = 1; - moreEvents = true; - $scope.viewTitle = { - title: "" - }; - $scope.search = { - text:"" - - }; - $scope.myfilter = ""; - - $scope.loginData = ZMDataModel.getLogin(); - $scope.playbackURL = $scope.loginData.url; - - }); - - - - - - - - + $scope.showSearch = false; + eventsPage = 1; + moreEvents = true; + $scope.viewTitle = { + title: "" + }; + $scope.search = { + text: "" + + }; + $scope.myfilter = ""; + + $scope.loginData = ZMDataModel.getLogin(); + $scope.playbackURL = $scope.loginData.url; + + }); + + + + + + + + // -------------------------------------------------------- // Handling of back button in case modal is open should // close the modal // -------------------------------------------------------- - + $ionicPlatform.registerBackButtonAction(function (e) { - e.preventDefault(); - if ($scope.modal !=undefined && $scope.modal.isShown()) - { - // switch off awake, as liveview is finished - ZMDataModel.zmDebug("Modal is open, closing it"); - ZMDataModel.setAwake(false); - $scope.modal.remove(); + e.preventDefault(); + if ($scope.modal != undefined && $scope.modal.isShown()) { + // switch off awake, as liveview is finished + ZMDataModel.zmDebug("Modal is open, closing it"); + ZMDataModel.setAwake(false); + $scope.modal.remove(); + } else { + ZMDataModel.zmDebug("Modal is closed, so toggling or exiting"); + if (!$ionicSideMenuDelegate.isOpenLeft()) { + $ionicSideMenuDelegate.toggleLeft(); + + } else { + navigator.app.exitApp(); } - else - { - ZMDataModel.zmDebug("Modal is closed, so toggling or exiting"); - if (!$ionicSideMenuDelegate.isOpenLeft()) - { - $ionicSideMenuDelegate.toggleLeft(); - - } - else - { - navigator.app.exitApp(); + + } + + }, 1000); + + + //-------------------------------------- + // monitor the slider for carousels + //-------------------------------------- + function setupWatchers() { + ZMDataModel.zmDebug("Setting up carousel watchers"); + + ionRangeWatcher = $scope.$watch('ionRange.index', function () { + // console.log ("Watching index"); + $scope.mycarousel.index = parseInt($scope.ionRange.index) - 1; + if (carouselUtils.getStop() == true) + return; + + + //console.log ("***ION RANGE CHANGED TO " + $scope.mycarousel.index); + }); + + + + mycarouselWatcher = $scope.$watch('mycarousel.index', function () { + + + if ($scope.event && $scope.ionRange.index == parseInt($scope.event.Event.Frames) - 1) { + if (!$scope.modal || $scope.modal.isShown() == false) { + // console.log("quick scrub playback over"); + carouselUtils.setStop(true); + $scope.ionRange.index = 0; + $scope.mycarousel.index = 1; } - + } - - }, 1000); - - - //-------------------------------------- - // monitor the slider for carousels - //-------------------------------------- - function setupWatchers() - { - ZMDataModel.zmDebug ("Setting up carousel watchers"); - - ionRangeWatcher = $scope.$watch('ionRange.index', function () { - // console.log ("Watching index"); - $scope.mycarousel.index = parseInt($scope.ionRange.index) - 1; - if (carouselUtils.getStop() == true) - return; + if (carouselUtils.getStop() == true) + return; + $scope.ionRange.index = ($scope.mycarousel.index + 1).toString(); + // console.log ("***IONRANGE RANGE CHANGED TO " + $scope.ionRange.index); - //console.log ("***ION RANGE CHANGED TO " + $scope.mycarousel.index); - }); - - - - mycarouselWatcher = $scope.$watch('mycarousel.index', function () { - - - if ($scope.event && $scope.ionRange.index == parseInt($scope.event.Event.Frames) - 1) { - if (!$scope.modal || $scope.modal.isShown() == false) { - // console.log("quick scrub playback over"); - carouselUtils.setStop(true); - $scope.ionRange.index = 0; - $scope.mycarousel.index = 1; - } + }); - } - if (carouselUtils.getStop() == true) - return; - $scope.ionRange.index = ($scope.mycarousel.index + 1).toString(); - // console.log ("***IONRANGE RANGE CHANGED TO " + $scope.ionRange.index); + } + + // -------------------------------------------------------- + // Handling of back button in case modal is open should + // close the modal + // -------------------------------------------------------- + + function getInitialEvents() { + ZMDataModel.zmDebug("getInitialEvents called"); + var lData = ZMDataModel.getLogin(); + + var stackState = $ionicHistory.backTitle(); + + // If you came from Monitors, disregard hidden monitors in montage + if (lData.persistMontageOrder && stackState != "Monitors") { + var tempMon = message; + $scope.monitors = ZMDataModel.applyMontageMonitorPrefs(tempMon, 2)[0]; + } else + $scope.monitors = message; - }); - + if ($scope.monitors.length == 0) { + var pTitle = $translate.instant('kNoMonitors'); + $ionicPopup.alert({ + title: pTitle, + template: "{{'kCheckCredentials' | translate }}" + }); + $ionicHistory.nextViewOptions({ + disableBack: true + }); + $state.go("login", { + "wizard": false + }); + return; } - - // -------------------------------------------------------- - // Handling of back button in case modal is open should - // close the modal - // -------------------------------------------------------- - - function getInitialEvents() - { - ZMDataModel.zmDebug ("getInitialEvents called"); - var lData = ZMDataModel.getLogin(); - var stackState = $ionicHistory.backTitle(); + $scope.events = []; - // If you came from Monitors, disregard hidden monitors in montage - if (lData.persistMontageOrder && stackState != "Monitors") { - var tempMon = message; - $scope.monitors = ZMDataModel.applyMontageMonitorPrefs(tempMon, 2)[0]; - } else - $scope.monitors = message; + // First get total pages and then + // start from the latest. If this fails, nothing displays + + ZMDataModel.zmDebug("EventCtrl: grabbing # of event pages"); + ZMDataModel.getEventsPages($scope.id, $rootScope.fromString, $rootScope.toString) + .then(function (data) { + eventsPage = data.pageCount; + ZMDataModel.zmDebug("EventCtrl: found " + eventsPage + " pages of events"); + pageLoaded = true; + $scope.viewTitle.title = data.count; + ZMDataModel.zmDebug("EventCtrl: grabbing events for: id=" + $scope.id + " Date/Time:" + $rootScope.fromString + + "-" + $rootScope.toString); + ZMDataModel.getEvents($scope.id, eventsPage, "", $rootScope.fromString, $rootScope.toString) + .then(function (data) { - if ($scope.monitors.length == 0) - { - var pTitle = $translate.instant('kNoMonitors'); - $ionicPopup.alert({ - title: pTitle, - template: "{{'kCheckCredentials' | translate }}" - }); - $ionicHistory.nextViewOptions({ - disableBack: true - }); - $state.go("login" ,{"wizard": false}); - return; - } + var myevents = data; + ZMDataModel.zmDebug("EventCtrl: success, got " + myevents.length + " events"); + var loginData = ZMDataModel.getLogin(); + for (var i = 0; i < myevents.length; i++) { - $scope.events = []; - - // First get total pages and then - // start from the latest. If this fails, nothing displays - - ZMDataModel.zmDebug("EventCtrl: grabbing # of event pages"); - ZMDataModel.getEventsPages($scope.id, $rootScope.fromString, $rootScope.toString) - .then(function (data) { - eventsPage = data.pageCount; - ZMDataModel.zmDebug("EventCtrl: found " + eventsPage + " pages of events"); - - pageLoaded = true; - $scope.viewTitle.title = data.count; - ZMDataModel.zmDebug("EventCtrl: grabbing events for: id=" + $scope.id + " Date/Time:" + $rootScope.fromString + - "-" + $rootScope.toString); - ZMDataModel.getEvents($scope.id, eventsPage, "", $rootScope.fromString, $rootScope.toString) - .then(function (data) { - - var myevents = data; - ZMDataModel.zmDebug("EventCtrl: success, got " + myevents.length + " events"); - var loginData = ZMDataModel.getLogin(); - for (var i = 0; i < myevents.length; i++) { - - var idfound = true; - if (loginData.persistMontageOrder) { - idfound = false; - for (var ii = 0; ii < $scope.monitors.length; ii++) { - if ($scope.monitors[ii].Monitor.Id == myevents[i].Event.MonitorId) { - - idfound = true; - break; - } + var idfound = true; + if (loginData.persistMontageOrder) { + idfound = false; + for (var ii = 0; ii < $scope.monitors.length; ii++) { + if ($scope.monitors[ii].Monitor.Id == myevents[i].Event.MonitorId) { + + idfound = true; + break; } } + } - myevents[i].Event.streamingURL = ZMDataModel.getStreamingURL (myevents[i].Event.MonitorId); - myevents[i].Event.baseURL = ZMDataModel.getBaseURL (myevents[i].Event.MonitorId); - myevents[i].Event.imageMode = ZMDataModel.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); - - myevents[i].Event.MonitorName = ZMDataModel.getMonitorName(myevents[i].Event.MonitorId); - myevents[i].Event.ShowScrub = false; - myevents[i].Event.height = zm.eventsListDetailsHeight; - // now construct base path - myevents[i].Event.BasePath = computeBasePath(myevents[i]); - myevents[i].Event.relativePath = computeRelativePath(myevents[i]); - - - // in multiserver BasePath is login url for frames - // http://login.url/index.php?view=frame&eid=19696772&fid=21 - - // console.log ("COMPARING "+ZMDataModel.getLogin().url+ " TO " +myevents[i].Event.baseURL); - if (ZMDataModel.getLogin().url != myevents[i].Event.baseURL) - { - //ZMDataModel.zmDebug ("Multi server, changing base"); - myevents[i].Event.baseURL = ZMDataModel.getLogin().url; - - } - - if (idfound) { - $scope.events.push(myevents[i]); - } else { - //console.log ("Skipping Event MID = " + myevents[i].Event.MonitorId); - } + myevents[i].Event.streamingURL = ZMDataModel.getStreamingURL(myevents[i].Event.MonitorId); + myevents[i].Event.baseURL = ZMDataModel.getBaseURL(myevents[i].Event.MonitorId); + myevents[i].Event.imageMode = ZMDataModel.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); + + myevents[i].Event.MonitorName = ZMDataModel.getMonitorName(myevents[i].Event.MonitorId); + myevents[i].Event.ShowScrub = false; + myevents[i].Event.height = zm.eventsListDetailsHeight; + // now construct base path + myevents[i].Event.BasePath = computeBasePath(myevents[i]); + myevents[i].Event.relativePath = computeRelativePath(myevents[i]); + - } //for + // in multiserver BasePath is login url for frames + // http://login.url/index.php?view=frame&eid=19696772&fid=21 + // console.log ("COMPARING "+ZMDataModel.getLogin().url+ " TO " +myevents[i].Event.baseURL); + if (ZMDataModel.getLogin().url != myevents[i].Event.baseURL) { + //ZMDataModel.zmDebug ("Multi server, changing base"); + myevents[i].Event.baseURL = ZMDataModel.getLogin().url; - //$scope.events = myevents; - // we only need to stop the template from loading when the list is empty - // so this can be false once we have _some_ content - // FIXME: check reload - $scope.eventsBeingLoaded = false; - // to avoid only few events being displayed - // if last page has less events - //console.log("**Loading Next Page ***"); - if (myevents.length < 50) { - ZMDataModel.zmDebug("EventCtrl:loading one more page just in case we don't have enough to display"); - loadMore(); } - }); - }); - } - - - + if (idfound) { + $scope.events.push(myevents[i]); + } else { + //console.log ("Skipping Event MID = " + myevents[i].Event.MonitorId); + } + + } //for + + + //$scope.events = myevents; + // we only need to stop the template from loading when the list is empty + // so this can be false once we have _some_ content + // FIXME: check reload + $scope.eventsBeingLoaded = false; + // to avoid only few events being displayed + // if last page has less events + //console.log("**Loading Next Page ***"); + if (myevents.length < 50) { + ZMDataModel.zmDebug("EventCtrl:loading one more page just in case we don't have enough to display"); + loadMore(); + } + }); + + }); + } + + + //------------------------------------------------------- // Tapping on a frame shows this image //------------------------------------------------------ - + function SaveSuccess() { $ionicLoading.show({ template: $translate.instant('kDone'), @@ -361,141 +352,134 @@ angular.module('zmApp.controllers') //console.log("***ERROR"); } - - function saveNow(imgsrc,r,f) - { - - $ionicLoading.show({ - template: $translate.instant('kSavingSnapshot') + "...", - noBackdrop: true, - duration: zm.httpTimeout - }); - var url = imgsrc; - ZMDataModel.zmLog("saveNow: File path to grab is " + url); - - var img = new Image(); - img.onload = function () { - // console.log("********* ONLOAD"); - var canvas = document.createElement('canvas'); - canvas.width = img.width; - canvas.height = img.height; - var context = canvas.getContext('2d'); - context.drawImage(img, 0, 0); - - var imageDataUrl = canvas.toDataURL('image/jpeg', 1.0); - var imageData = imageDataUrl.replace(/data:image\/jpeg;base64,/, ''); - - if ($rootScope.platformOS != "desktop") { - try { - - cordova.exec( - SaveSuccess, - SaveError, - 'Canvas2ImagePlugin', - 'saveImageDataToLibrary', [imageData] - ); - // carouselUtils.setStop(curState); - } catch (e) { - - SaveError(e.message); - // carouselUtils.setStop(curState); - } - } else { + function saveNow(imgsrc, r, f) { - var fname = r + f + ".png"; - fname = fname.replace(/\//, "-"); - fname = fname.replace(/\.jpg/, ''); - - canvas.toBlob(function (blob) { - saveAs(blob, fname); - SaveSuccess(); - }); + $ionicLoading.show({ + template: $translate.instant('kSavingSnapshot') + "...", + noBackdrop: true, + duration: zm.httpTimeout + }); + var url = imgsrc; + ZMDataModel.zmLog("saveNow: File path to grab is " + url); + + var img = new Image(); + img.onload = function () { + // console.log("********* ONLOAD"); + var canvas = document.createElement('canvas'); + canvas.width = img.width; + canvas.height = img.height; + var context = canvas.getContext('2d'); + context.drawImage(img, 0, 0); + + var imageDataUrl = canvas.toDataURL('image/jpeg', 1.0); + var imageData = imageDataUrl.replace(/data:image\/jpeg;base64,/, ''); + + if ($rootScope.platformOS != "desktop") { + try { + + cordova.exec( + SaveSuccess, + SaveError, + 'Canvas2ImagePlugin', + 'saveImageDataToLibrary', [imageData] + ); + // carouselUtils.setStop(curState); + } catch (e) { + + SaveError(e.message); + // carouselUtils.setStop(curState); } - }; - try { - img.src = url; - // console.log ("SAVING IMAGE SOURCE"); - } catch (e) { - SaveError(e.message); + } else { + + + var fname = r + f + ".png"; + fname = fname.replace(/\//, "-"); + fname = fname.replace(/\.jpg/, ''); + + canvas.toBlob(function (blob) { + saveAs(blob, fname); + SaveSuccess(); + }); } - + }; + try { + img.src = url; + // console.log ("SAVING IMAGE SOURCE"); + } catch (e) { + SaveError(e.message); + } + } - - $scope.showImage = function (p,r,f, fid,e, imode, id, parray, ndx) - { + + $scope.showImage = function (p, r, f, fid, e, imode, id, parray, ndx) { var img; - - + + //console.log ("HERE"); - $scope.kFrame = $translate.instant ('kFrame'); - $scope.kEvent = $translate.instant ('kEvent'); - $scope.ndx = ndx; - $scope.parray = parray; - $scope.imode = imode; - + $scope.kFrame = $translate.instant('kFrame'); + $scope.kEvent = $translate.instant('kEvent'); + $scope.ndx = ndx; + $scope.parray = parray; + $scope.imode = imode; + // note ndx may be incorrect if we are looking // at unique frames; - - // ZMDataModel.zmDebug("Hello"); - if ($scope.typeOfFrames == $translate.instant('kShowTimeDiffFrames')) - { - + + // ZMDataModel.zmDebug("Hello"); + if ($scope.typeOfFrames == $translate.instant('kShowTimeDiffFrames')) { + var ic; - - for ( ic = 0; ic < $scope.parray.length; ic++) - { + + for (ic = 0; ic < $scope.parray.length; ic++) { if ($scope.parray[ic].frameid == fid) break; } - - - ZMDataModel.zmDebug ("Readjusting selected frame ID from:"+$scope.ndx+" to actual frame ID of:" + ic); + + + ZMDataModel.zmDebug("Readjusting selected frame ID from:" + $scope.ndx + " to actual frame ID of:" + ic); $scope.ndx = ic; + } else { + ZMDataModel.zmDebug("No index adjustment necessary as we are using all frames"); } - else - { - ZMDataModel.zmDebug ("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') - - $scope.imgsrc = 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; - + + + + + // console.log ("Image Mode " + imode); + // console.log ("parray : " + JSON.stringify(parray)); + // console.log ("index: " + ndx); + if ($scope.imode == 'path') + + $scope.imgsrc = 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; + } - - - + + + //$rootScope.zmPopup = $ionicPopup.alert({title: kFrame+':'+fid+'/'+kEvent+':'+e,template:img, cssClass:'popup80'}); - - $rootScope.zmPopup = $ionicPopup.show({ - template: '<center>'+$translate.instant('kFrame')+':{{parray[ndx].frameid}}@{{prettifyTimeSec(parray[ndx].time)}}</center><br/><img src="{{imgsrc}}" width="100%" />', - title: $translate.instant('kImages') + " ("+$translate.instant($scope.typeOfFrames) +")", + + $rootScope.zmPopup = $ionicPopup.show({ + template: '<center>' + $translate.instant('kFrame') + ':{{parray[ndx].frameid}}@{{prettifyTimeSec(parray[ndx].time)}}</center><br/><img src="{{imgsrc}}" width="100%" />', + title: $translate.instant('kImages') + " (" + $translate.instant($scope.typeOfFrames) + ")", subTitle: 'use left and right arrows to change', scope: $scope, cssClass: 'popup80', buttons: [ - + { text: '', type: 'button-assertive button-small ion-camera', onTap: function (e) { e.preventDefault(); - saveNow($scope.imgsrc,r,parray[$scope.ndx].fname); + saveNow($scope.imgsrc, r, parray[$scope.ndx].fname); } }, - + { // left 1 text: '', @@ -503,36 +487,31 @@ angular.module('zmApp.controllers') onTap: function (e) { // look for next frame that matches the type of frame // we are showing (all or diff timestamps); - - // console.log ("TYPE OF FRAMES: " + $scope.typeOfFrames); + + // console.log ("TYPE OF FRAMES: " + $scope.typeOfFrames); var nndx = null; var alltype = $translate.instant('kShowAllFrames'); - for (var i=$scope.ndx-1; i>=0; i--) - { - if ($scope.parray[i].type == $scope.typeOfFrames|| $scope.typeOfFrames == alltype) - { + for (var i = $scope.ndx - 1; i >= 0; i--) { + if ($scope.parray[i].type == $scope.typeOfFrames || $scope.typeOfFrames == alltype) { nndx = i; break; } } if (nndx == null) nndx = $scope.ndx; $scope.ndx = nndx; - - if ($scope.imode=='path') - { - - $scope.imgsrc = 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; + + if ($scope.imode == 'path') { + + $scope.imgsrc = 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; } - - + + e.preventDefault(); - - + + } }, { @@ -540,681 +519,602 @@ angular.module('zmApp.controllers') text: '', type: 'button-small button-energized ion-chevron-right', onTap: function (e) { - - // look for next frame that matches the type of frame + + // look for next frame that matches the type of frame // we are showing (all or diff timestamps); - - // console.log ("TYPE OF FRAMES: " + $scope.typeOfFrames); + + // console.log ("TYPE OF FRAMES: " + $scope.typeOfFrames); var nndx = null; var alltype = $translate.instant('kShowAllFrames'); - for (var i=$scope.ndx+1; i<$scope.parray.length; i++) - { + for (var i = $scope.ndx + 1; i < $scope.parray.length; i++) { //console.log ("Comparing: " +$scope.parray[i].type +" to " + $scope.typeOfFrames); - if ($scope.parray[i].type == $scope.typeOfFrames || $scope.typeOfFrames == alltype) - { + if ($scope.parray[i].type == $scope.typeOfFrames || $scope.typeOfFrames == alltype) { nndx = i; break; } } if (nndx == null) nndx = $scope.ndx; $scope.ndx = nndx; - - if ($scope.imode=='path') - { - - $scope.imgsrc = 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; + + if ($scope.imode == 'path') { + + $scope.imgsrc = 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; } e.preventDefault(); - - + + } }, - - + + { text: '', type: 'button-positive button-small ion-checkmark-round', onTap: function (e) { - + } }] }); - - - - + + + + }; - - - - - - - $scope.toggleTypeOfAlarms = function() - { - // "kShowAllFrames" : "all", - // "kShowTimeDiffFrames" : "different timestamps" - - if ($scope.typeOfFrames == $translate.instant('kShowAllFrames')) - { - $scope.typeOfFrames = $translate.instant ('kShowTimeDiffFrames'); - } - else - { - $scope.typeOfFrames = $translate.instant ('kShowAllFrames'); + + + + + + + $scope.toggleTypeOfAlarms = function () { + // "kShowAllFrames" : "all", + // "kShowTimeDiffFrames" : "different timestamps" + + if ($scope.typeOfFrames == $translate.instant('kShowAllFrames')) { + $scope.typeOfFrames = $translate.instant('kShowTimeDiffFrames'); + } else { + $scope.typeOfFrames = $translate.instant('kShowAllFrames'); } }; - - // not explictly handling error --> I have a default "No events found" message - // displayed in the template if events list is null - //-------------------------------------------------------------------------- - // This is what the pullup bar calls depending on what range is specified - //-------------------------------------------------------------------------- - $scope.showEvents = function (val, unit, monitorId) { - ZMDataModel.zmDebug("ShowEvents called with val:" + val + " unit:" + unit + " for Monitor:" + monitorId); + // not explictly handling error --> I have a default "No events found" message + // displayed in the template if events list is null - $ionicHistory.nextViewOptions({ - disableBack: true - }); + //-------------------------------------------------------------------------- + // This is what the pullup bar calls depending on what range is specified + //-------------------------------------------------------------------------- + $scope.showEvents = function (val, unit, monitorId) { + ZMDataModel.zmDebug("ShowEvents called with val:" + val + " unit:" + unit + " for Monitor:" + monitorId); + + $ionicHistory.nextViewOptions({ + disableBack: true + }); - var mToDate = moment(); + var mToDate = moment(); - var mFromDate = moment().subtract(parseInt(val), unit); + var mFromDate = moment().subtract(parseInt(val), unit); - // console.log("Moment Dates:" + mFromDate.format() + " TO " + mToDate.format()); + // console.log("Moment Dates:" + mFromDate.format() + " TO " + mToDate.format()); - $rootScope.fromTime = mFromDate.toDate(); - $rootScope.toTime = mToDate.toDate(); - $rootScope.fromDate = $rootScope.fromTime; - $rootScope.toDate = $rootScope.toTime; + $rootScope.fromTime = mFromDate.toDate(); + $rootScope.toTime = mToDate.toDate(); + $rootScope.fromDate = $rootScope.fromTime; + $rootScope.toDate = $rootScope.toTime; - ZMDataModel.zmDebug("From: " + $rootScope.fromTime); - ZMDataModel.zmDebug("To: " + $rootScope.toTime); + ZMDataModel.zmDebug("From: " + $rootScope.fromTime); + ZMDataModel.zmDebug("To: " + $rootScope.toTime); - //$rootScope.fromDate = fromDate.toDate(); - //$rootScope.toDate = toDate.toDate(); - $rootScope.isEventFilterOn = true; - $rootScope.fromString = mFromDate - .format("YYYY-MM-DD") + " " + mFromDate.format("HH:mm:ss"); + //$rootScope.fromDate = fromDate.toDate(); + //$rootScope.toDate = toDate.toDate(); + $rootScope.isEventFilterOn = true; + $rootScope.fromString = mFromDate + .format("YYYY-MM-DD") + " " + mFromDate.format("HH:mm:ss"); - $rootScope.toString = mToDate - .format("YYYY-MM-DD") + " " + mToDate - .format("HH:mm:ss"); + $rootScope.toString = mToDate + .format("YYYY-MM-DD") + " " + mToDate + .format("HH:mm:ss"); - // console.log("**************From String: " + $rootScope.fromString); - // console.log("**************To String: " + $rootScope.toString); + // console.log("**************From String: " + $rootScope.fromString); + // console.log("**************To String: " + $rootScope.toString); - // reloading - may solve https://github.com/pliablepixels/zmNinja/issues/36 - // if you are in the same mid event page $state.go won't work + // reloading - may solve https://github.com/pliablepixels/zmNinja/issues/36 + // if you are in the same mid event page $state.go won't work + $state.go("events", { + "id": monitorId + }, { + reload: true + }); + }; + + //---------------------------------------------------------------- + // Alarm notification handling + //---------------------------------------------------------------- + $scope.handleAlarms = function () { + $rootScope.isAlarm = !$rootScope.isAlarm; + if (!$rootScope.isAlarm) { + $rootScope.alarmCount = "0"; + $ionicHistory.nextViewOptions({ + disableBack: true + }); $state.go("events", { - "id": monitorId + "id": 0 }, { reload: true }); - }; - - //---------------------------------------------------------------- - // Alarm notification handling - //---------------------------------------------------------------- - $scope.handleAlarms = function () { - $rootScope.isAlarm = !$rootScope.isAlarm; - if (!$rootScope.isAlarm) { - $rootScope.alarmCount = "0"; - $ionicHistory.nextViewOptions({ - disableBack: true - }); - $state.go("events", { - "id": 0 - }, { - reload: true - }); - } - }; + } + }; - //-------------------------------------------------------------------------- - // Takes care of deleting individual events - //-------------------------------------------------------------------------- - $scope.deleteEvent = function (id, itemid) { - //$scope.eventList.showDelete = false; - //curl -XDELETE http://server/zm/api/events/1.json - var loginData = ZMDataModel.getLogin(); - var apiDelete = loginData.apiurl + "/events/" + id + ".json"; - ZMDataModel.zmDebug("DeleteEvent: ID=" + id + " item=" + itemid); - ZMDataModel.zmLog("Delete event " + apiDelete); + //-------------------------------------------------------------------------- + // Takes care of deleting individual events + //-------------------------------------------------------------------------- + $scope.deleteEvent = function (id, itemid) { + //$scope.eventList.showDelete = false; + //curl -XDELETE http://server/zm/api/events/1.json + var loginData = ZMDataModel.getLogin(); + var apiDelete = loginData.apiurl + "/events/" + id + ".json"; + ZMDataModel.zmDebug("DeleteEvent: ID=" + id + " item=" + itemid); + ZMDataModel.zmLog("Delete event " + apiDelete); - $ionicLoading.show({ - template: "{{'kDeletingEvent' | translate}}...", - noBackdrop: true, - duration: zm.httpTimeout - }); + $ionicLoading.show({ + template: "{{'kDeletingEvent' | translate}}...", + noBackdrop: true, + duration: zm.httpTimeout + }); - $http.delete(apiDelete) - .success(function (data) { - $ionicLoading.hide(); - ZMDataModel.zmDebug("delete success: " + JSON.stringify(data)); - ZMDataModel.displayBanner('info', [$translate.instant('kDeleteEventSuccess')], 2000, 2000); + $http.delete(apiDelete) + .success(function (data) { + $ionicLoading.hide(); + ZMDataModel.zmDebug("delete success: " + JSON.stringify(data)); + ZMDataModel.displayBanner('info', [$translate.instant('kDeleteEventSuccess')], 2000, 2000); - $scope.events.splice(itemid, 1); - //doRefresh(); + $scope.events.splice(itemid, 1); + //doRefresh(); - }) - .error(function (data) { - $ionicLoading.hide(); - ZMDataModel.zmDebug("delete error: " + JSON.stringify(data)); - ZMDataModel.displayBanner('error', [$translate.instant('kDeleteEventError1'), $translate.instant('kDeleteEventError2')]); - }); + }) + .error(function (data) { + $ionicLoading.hide(); + ZMDataModel.zmDebug("delete error: " + JSON.stringify(data)); + ZMDataModel.displayBanner('error', [$translate.instant('kDeleteEventError1'), $translate.instant('kDeleteEventError2')]); + }); - }; + }; - //------------------------------------------------ - // Tapping on the filter sign lets you reset it - //------------------------------------------------- + //------------------------------------------------ + // Tapping on the filter sign lets you reset it + //------------------------------------------------- - $scope.filterTapped = function () { - //console.log("FILTER TAPPED"); - var myFrom = moment($rootScope.fromString).format("MMM/DD/YYYY "+ZMDataModel.getTimeFormat()).toString(); - var toString = moment($rootScope.toString).format("MMM/DD/YYYY "+ZMDataModel.getTimeFormat()).toString(); + $scope.filterTapped = function () { + //console.log("FILTER TAPPED"); + var myFrom = moment($rootScope.fromString).format("MMM/DD/YYYY " + ZMDataModel.getTimeFormat()).toString(); + var toString = moment($rootScope.toString).format("MMM/DD/YYYY " + ZMDataModel.getTimeFormat()).toString(); - $rootScope.zmPopup = $ionicPopup.confirm({ - title: $translate.instant('kFilterSettings'), - template: $translate.instant('kFilterEventsBetween1')+':<br/> <b>' + myFrom + "</b> "+$translate.instant('kTo')+" <b>" + toString + '</b><br/>' + $translate.instant('kFilterEventsBetween2') - }); - $rootScope.zmPopup.then(function (res) { - if (res) { - ZMDataModel.zmLog("Filter reset requested in popup"); - $rootScope.isEventFilterOn = false; - $rootScope.fromDate = ""; - $rootScope.fromTime = ""; - $rootScope.toDate = ""; - $rootScope.toTime = ""; - $rootScope.fromString = ""; - $rootScope.toString = ""; - $ionicHistory.nextViewOptions({ - disableBack: true - }); - $state.go("events", { - "id": 0 - }); - } else { - ZMDataModel.zmLog("Filter reset cancelled in popup"); - } - }); + $rootScope.zmPopup = $ionicPopup.confirm({ + title: $translate.instant('kFilterSettings'), + template: $translate.instant('kFilterEventsBetween1') + ':<br/> <b>' + myFrom + "</b> " + $translate.instant('kTo') + " <b>" + toString + '</b><br/>' + $translate.instant('kFilterEventsBetween2') + }); + $rootScope.zmPopup.then(function (res) { + if (res) { + ZMDataModel.zmLog("Filter reset requested in popup"); + $rootScope.isEventFilterOn = false; + $rootScope.fromDate = ""; + $rootScope.fromTime = ""; + $rootScope.toDate = ""; + $rootScope.toTime = ""; + $rootScope.fromString = ""; + $rootScope.toString = ""; + $ionicHistory.nextViewOptions({ + disableBack: true + }); + $state.go("events", { + "id": 0 + }); + } else { + ZMDataModel.zmLog("Filter reset cancelled in popup"); + } + }); - }; + }; - //-------------------------------------------------------------------------- - // When the user pulls the pullup bar we call this to get the latest - // data for events ranges summaries using the consolveEvents facility of ZM - //-------------------------------------------------------------------------- + //-------------------------------------------------------------------------- + // When the user pulls the pullup bar we call this to get the latest + // data for events ranges summaries using the consolveEvents facility of ZM + //-------------------------------------------------------------------------- - $scope.footerExpand = function () { - //https://server/zm/api/events/consoleEvents/5%20minute.json - var ld = ZMDataModel.getLogin(); - - var af = "/AlarmFrames >=: " + ld.enableAlarmCount; + $scope.footerExpand = function () { + //https://server/zm/api/events/consoleEvents/5%20minute.json + var ld = ZMDataModel.getLogin(); - var apiurl = ld.apiurl + "/events/consoleEvents/1%20hour"+af+".json"; - ZMDataModel.zmDebug ("consoleEvents API:"+apiurl); - - - $http.get(apiurl) - .success(function (data) { - ZMDataModel.zmDebug(JSON.stringify(data)); - $scope.hours = []; - var p = data.results; - for (var key in data.results) { + var af = "/AlarmFrames >=: " + ld.enableAlarmCount; + var apiurl = ld.apiurl + "/events/consoleEvents/1%20hour" + af + ".json"; + ZMDataModel.zmDebug("consoleEvents API:" + apiurl); - if (p.hasOwnProperty(key)) { + $http.get(apiurl) + .success(function (data) { + ZMDataModel.zmDebug(JSON.stringify(data)); + $scope.hours = []; + var p = data.results; + for (var key in data.results) { - var idfound = true; - if (ld.persistMontageOrder) { - idfound = false; - for (var ii = 0; ii < $scope.monitors.length; ii++) { - if ($scope.monitors[ii].Monitor.Id == key) { - idfound = true; - break; - } - } - } - //console.log(ZMDataModel.getMonitorName(key) + " -> " + p[key]); - if (idfound) - $scope.hours.push({ - monitor: ZMDataModel.getMonitorName(key), - events: p[key], - mid: key - }); - } - } - }); + if (p.hasOwnProperty(key)) { - apiurl = ld.apiurl + "/events/consoleEvents/1%20day"+af+".json"; - ZMDataModel.zmDebug ("consoleEvents API:"+apiurl); - $http.get(apiurl) - .success(function (data) { - ZMDataModel.zmDebug(JSON.stringify(data)); - $scope.days = []; - var p = data.results; - for (var key in data.results) { - if (p.hasOwnProperty(key)) { - var idfound = true; - if (ld.persistMontageOrder) { - idfound = false; - for (var ii = 0; ii < $scope.monitors.length; ii++) { - if ($scope.monitors[ii].Monitor.Id == key) { - idfound = true; - break; - } + var idfound = true; + if (ld.persistMontageOrder) { + idfound = false; + for (var ii = 0; ii < $scope.monitors.length; ii++) { + if ($scope.monitors[ii].Monitor.Id == key) { + idfound = true; + break; } } - //console.log(ZMDataModel.getMonitorName(key) + " -> " + p[key]); - if (idfound) - //console.log(ZMDataModel.getMonitorName(key) + " -> " + p[key]); - $scope.days.push({ + } + //console.log(ZMDataModel.getMonitorName(key) + " -> " + p[key]); + if (idfound) + $scope.hours.push({ monitor: ZMDataModel.getMonitorName(key), events: p[key], mid: key }); - } } - }); - - + } + }); - apiurl = ld.apiurl + "/events/consoleEvents/1%20week"+af+".json"; - ZMDataModel.zmDebug ("consoleEvents API:"+apiurl); - $http.get(apiurl) - .success(function (data) { - ZMDataModel.zmDebug(JSON.stringify(data)); - $scope.weeks = []; - var p = data.results; - for (var key in data.results) { - if (p.hasOwnProperty(key)) { - var idfound = true; - if (ld.persistMontageOrder) { - idfound = false; - for (var ii = 0; ii < $scope.monitors.length; ii++) { - if ($scope.monitors[ii].Monitor.Id == key) { - idfound = true; - break; - } + apiurl = ld.apiurl + "/events/consoleEvents/1%20day" + af + ".json"; + ZMDataModel.zmDebug("consoleEvents API:" + apiurl); + $http.get(apiurl) + .success(function (data) { + ZMDataModel.zmDebug(JSON.stringify(data)); + $scope.days = []; + var p = data.results; + for (var key in data.results) { + if (p.hasOwnProperty(key)) { + var idfound = true; + if (ld.persistMontageOrder) { + idfound = false; + for (var ii = 0; ii < $scope.monitors.length; ii++) { + if ($scope.monitors[ii].Monitor.Id == key) { + idfound = true; + break; } } - //console.log(ZMDataModel.getMonitorName(key) + " -> " + p[key]); - if (idfound) - //console.log(ZMDataModel.getMonitorName(key) + " -> " + p[key]); - $scope.weeks.push({ - monitor: ZMDataModel.getMonitorName(key), - events: p[key], - mid: key - }); - } + //console.log(ZMDataModel.getMonitorName(key) + " -> " + p[key]); + if (idfound) + //console.log(ZMDataModel.getMonitorName(key) + " -> " + p[key]); + $scope.days.push({ + monitor: ZMDataModel.getMonitorName(key), + events: p[key], + mid: key + }); + } - }); + } + }); - apiurl = ld.apiurl + "/events/consoleEvents/1%20month"+af+".json"; - ZMDataModel.zmDebug ("consoleEvents API:"+apiurl); - $http.get(apiurl) - .success(function (data) { - ZMDataModel.zmDebug(JSON.stringify(data)); - $scope.months = []; - var p = data.results; - for (var key in data.results) { - if (p.hasOwnProperty(key)) { - var idfound = true; - var ld = ZMDataModel.getLogin(); - if (ld.persistMontageOrder) { - idfound = false; - for (var ii = 0; ii < $scope.monitors.length; ii++) { - if ($scope.monitors[ii].Monitor.Id == key) { - idfound = true; - break; - } + apiurl = ld.apiurl + "/events/consoleEvents/1%20week" + af + ".json"; + ZMDataModel.zmDebug("consoleEvents API:" + apiurl); + $http.get(apiurl) + .success(function (data) { + ZMDataModel.zmDebug(JSON.stringify(data)); + $scope.weeks = []; + var p = data.results; + for (var key in data.results) { + if (p.hasOwnProperty(key)) { + + var idfound = true; + if (ld.persistMontageOrder) { + idfound = false; + for (var ii = 0; ii < $scope.monitors.length; ii++) { + if ($scope.monitors[ii].Monitor.Id == key) { + idfound = true; + break; } } - //console.log(ZMDataModel.getMonitorName(key) + " -> " + p[key]); - if (idfound) - //console.log(ZMDataModel.getMonitorName(key) + " -> " + p[key]); - $scope.months.push({ - monitor: ZMDataModel.getMonitorName(key), - events: p[key], - mid: key - }); - } + //console.log(ZMDataModel.getMonitorName(key) + " -> " + p[key]); + if (idfound) + //console.log(ZMDataModel.getMonitorName(key) + " -> " + p[key]); + $scope.weeks.push({ + monitor: ZMDataModel.getMonitorName(key), + events: p[key], + mid: key + }); + } - }); + } + }); - }; + apiurl = ld.apiurl + "/events/consoleEvents/1%20month" + af + ".json"; + ZMDataModel.zmDebug("consoleEvents API:" + apiurl); + $http.get(apiurl) + .success(function (data) { + ZMDataModel.zmDebug(JSON.stringify(data)); + $scope.months = []; + var p = data.results; + for (var key in data.results) { + if (p.hasOwnProperty(key)) { + + var idfound = true; + var ld = ZMDataModel.getLogin(); + if (ld.persistMontageOrder) { + idfound = false; + for (var ii = 0; ii < $scope.monitors.length; ii++) { + if ($scope.monitors[ii].Monitor.Id == key) { + idfound = true; + break; + } + } + } + //console.log(ZMDataModel.getMonitorName(key) + " -> " + p[key]); + if (idfound) + //console.log(ZMDataModel.getMonitorName(key) + " -> " + p[key]); + $scope.months.push({ + monitor: ZMDataModel.getMonitorName(key), + events: p[key], + mid: key + }); - - $scope.openMenu = function () { - $ionicSideMenuDelegate.toggleLeft(); - }; + } + } + }); - $scope.scrollPosition = function () { - var scrl = parseFloat($ionicScrollDelegate.$getByHandle("mainScroll").getScrollPosition().top); - var item = Math.round(scrl / zm.eventsListDetailsHeight); - if ($scope.events == undefined || !$scope.events.length || $scope.events[item] == undefined) { - return ""; - } else { - return prettifyDate($scope.events[item].Event.StartTime); - } - //return Math.random(); - }; - //------------------------------------------------------------------------- - // called when user switches to background - //------------------------------------------------------------------------- - function onPause() { - ZMDataModel.zmDebug("EventCtrl:onpause called"); - if ($scope.popover) $scope.popover.remove(); + }; + - } - //------------------------------------------------------------------------- - // Pads the filename with leading 0s, depending on ZM_IMAGE_DIGITS - //------------------------------------------------------------------------- - function padToN(number, digits) { - - var i; - var stringMax = ""; - var stringLeading = ""; - for (i = 1; i <= digits; i++) { - stringMax = stringMax + "9"; - if (i != digits) stringLeading = stringLeading + "0"; - } - var numMax = parseInt(stringMax); + $scope.openMenu = function () { + $ionicSideMenuDelegate.toggleLeft(); + }; - if (number <= numMax) { - number = (stringLeading + number).slice(-digits); - } - //console.log ("PADTON: returning " + number); - return number; + $scope.scrollPosition = function () { + var scrl = parseFloat($ionicScrollDelegate.$getByHandle("mainScroll").getScrollPosition().top); + var item = Math.round(scrl / zm.eventsListDetailsHeight); + if ($scope.events == undefined || !$scope.events.length || $scope.events[item] == undefined) { + return ""; + } else { + return prettifyDate($scope.events[item].Event.StartTime); } + //return Math.random(); + }; + //------------------------------------------------------------------------- + // called when user switches to background + //------------------------------------------------------------------------- + function onPause() { + ZMDataModel.zmDebug("EventCtrl:onpause called"); + if ($scope.popover) $scope.popover.remove(); - //------------------------------------------------------------------------- - // FIXME: Are we using this? - //------------------------------------------------------------------------- - $scope.disableSlide = function () { - ZMDataModel.zmDebug("EventCtrl:DisableSlide called"); - $ionicSlideBoxDelegate.$getByHandle("eventSlideBox").enableSlide(false); - }; + } + //------------------------------------------------------------------------- + // Pads the filename with leading 0s, depending on ZM_IMAGE_DIGITS + //------------------------------------------------------------------------- + function padToN(number, digits) { + + var i; + var stringMax = ""; + var stringLeading = ""; + for (i = 1; i <= digits; i++) { + stringMax = stringMax + "9"; + if (i != digits) stringLeading = stringLeading + "0"; + } + var numMax = parseInt(stringMax); + if (number <= numMax) { + number = (stringLeading + number).slice(-digits); + } + //console.log ("PADTON: returning " + number); + return number; + } - - //------------------------------------------------------------------------- - // This function is called when a user enables or disables - // scrub view for an event. - //------------------------------------------------------------------------- + //------------------------------------------------------------------------- + // FIXME: Are we using this? + //------------------------------------------------------------------------- + $scope.disableSlide = function () { + ZMDataModel.zmDebug("EventCtrl:DisableSlide called"); + $ionicSlideBoxDelegate.$getByHandle("eventSlideBox").enableSlide(false); + }; - $scope.toggleGroupScrub = function (event, ndx, frames) { - $scope.groupType = "scrub"; - toggleGroup(event, ndx, frames,$scope.groupType); - }; - - $scope.toggleGroupAlarms = function (event, ndx, frames) { - $scope.groupType = "alarms"; - toggleGroup(event, ndx, frames,$scope.groupType); - }; - function toggleGroup(event, ndx, frames, groupType) { - - - // If we are here and there is a record of a previous scroll - // then we need to scroll back to hide that view - if (scrollbynumber) { - $ionicScrollDelegate.$getByHandle("mainScroll").scrollBy(0, -1 * scrollbynumber, true); - scrollbynumber = 0; - } - if (oldEvent && event != oldEvent) { - - ZMDataModel.zmDebug("EventCtrl:Old event scrub will hide now"); - oldEvent.Event.ShowScrub = false; - oldEvent.Event.height = zm.eventsListDetailsHeight; - oldEvent = ""; - } - event.Event.ShowScrub = !event.Event.ShowScrub; - // $ionicScrollDelegate.resize(); - - //console.log ("GROUP TYPE IS " + groupType); - - if (event.Event.ShowScrub == true) // turn on display now - { - - if (groupType == 'alarms') - { - $scope.alarm_images=[]; - event.Event.height = zm.eventsListDetailsHeight + zm.eventsListScrubHeight; - $ionicScrollDelegate.resize(); - var myurl = loginData.apiurl + '/events/' + event.Event.Id + ".json"; - ZMDataModel.zmLog("API for event details" + myurl); - $http.get(myurl) - .success(function (data) { - $scope.FrameArray = data.event.Frame; - // $scope.slider_options.scale=[]; + //------------------------------------------------------------------------- + // This function is called when a user enables or disables + // scrub view for an event. + //------------------------------------------------------------------------- - //$scope.slider_options.scale = []; + $scope.toggleGroupScrub = function (event, ndx, frames) { + $scope.groupType = "scrub"; + toggleGroup(event, ndx, frames, $scope.groupType); + }; - var i; - var timestamp = null; - for (i = 0; i < data.event.Frame.length; i++) { - if (data.event.Frame[i].Type == "Alarm") { - - //console.log ("**ONLY ALARM AT " + i + "of " + data.event.Frame.length); - var atype; - if (timestamp != data.event.Frame[i].TimeStamp) - { - - atype = $translate.instant('kShowTimeDiffFrames'); - } - else - { - atype = $translate.instant('kShowAllFrames'); - } - $scope.alarm_images.push({ - type:atype, - id: data.event.Frame[i].Id, - frameid: data.event.Frame[i].FrameId, - score: data.event.Frame[i].Score, - fname: padToN(data.event.Frame[i].FrameId, eventImageDigits) + "-capture.jpg", - time:data.event.Frame[i].TimeStamp - }); - timestamp = data.event.Frame[i].TimeStamp; - } + $scope.toggleGroupAlarms = function (event, ndx, frames) { + $scope.groupType = "alarms"; + toggleGroup(event, ndx, frames, $scope.groupType); + }; - } - oldEvent = event; + function toggleGroup(event, ndx, frames, groupType) { - //console.log (JSON.stringify(data)); - }) - .error(function (err) { - ZMDataModel.zmLog("Error retrieving detailed frame API " + JSON.stringify(err)); - ZMDataModel.displayBanner('error', ['could not retrieve frame details', 'please try again']); - }); - - } // end of groupType == alarms - else // groupType == scrub - { - ZMDataModel.zmDebug("EventCtrl: Scrubbing will turn on now"); - $scope.currentEvent = ""; - $scope.event = event; - //$ionicScrollDelegate.freezeScroll(true); - $ionicSideMenuDelegate.canDragContent(false); - $scope.slider_options = { - from: 1, - to: event.Event.Frames, - realtime: true, - step: 1, - className: "mySliderClass", - callback: function (value, released) { - //console.log("CALLBACK"+value+released); - $ionicScrollDelegate.freezeScroll(!released); - //ZMDataModel.zmDebug("EventCtrl: freezeScroll called with " + !released); + // If we are here and there is a record of a previous scroll + // then we need to scroll back to hide that view + if (scrollbynumber) { + $ionicScrollDelegate.$getByHandle("mainScroll").scrollBy(0, -1 * scrollbynumber, true); + scrollbynumber = 0; + } + if (oldEvent && event != oldEvent) { - }, - //modelLabels:function(val) {return "";}, - css: { - background: { - "background-color": "silver" - }, - before: { - "background-color": "purple" - }, - default: { - "background-color": "white" - }, // default value: 1px - after: { - "background-color": "green" - }, // zone after default value - pointer: { - "background-color": "red" - }, // circle pointer - range: { - "background-color": "red" - } // use it if double value - }, - scale: [] + ZMDataModel.zmDebug("EventCtrl:Old event scrub will hide now"); + oldEvent.Event.ShowScrub = false; + oldEvent.Event.height = zm.eventsListDetailsHeight; + oldEvent = ""; + } - }; + event.Event.ShowScrub = !event.Event.ShowScrub; + // $ionicScrollDelegate.resize(); - event.Event.height = zm.eventsListDetailsHeight + zm.eventsListScrubHeight; - $ionicScrollDelegate.resize(); - $scope.mycarousel.index = 0; - $scope.ionRange.index = 1; - //console.log("**Resetting range"); - $scope.slides = []; - var i; - - if (event.Event.imageMode == 'path') - { - ZMDataModel.zmDebug("EventCtrl: found " + frames + " frames to scrub"); + //console.log ("GROUP TYPE IS " + groupType); + if (event.Event.ShowScrub == true) // turn on display now + { + if (groupType == 'alarms') { + $scope.alarm_images = []; + event.Event.height = zm.eventsListDetailsHeight + zm.eventsListScrubHeight; + $ionicScrollDelegate.resize(); + var myurl = loginData.apiurl + '/events/' + event.Event.Id + ".json"; + ZMDataModel.zmLog("API for event details" + myurl); + $http.get(myurl) + .success(function (data) { + $scope.FrameArray = data.event.Frame; + // $scope.slider_options.scale=[]; + + //$scope.slider_options.scale = []; + + var i; + var timestamp = null; + for (i = 0; i < data.event.Frame.length; i++) { + if (data.event.Frame[i].Type == "Alarm") { + + //console.log ("**ONLY ALARM AT " + i + "of " + data.event.Frame.length); + var atype; + if (timestamp != data.event.Frame[i].TimeStamp) { + + atype = $translate.instant('kShowTimeDiffFrames'); + } else { + atype = $translate.instant('kShowAllFrames'); + } + $scope.alarm_images.push({ + type: atype, + id: data.event.Frame[i].Id, + frameid: data.event.Frame[i].FrameId, + score: data.event.Frame[i].Score, + fname: padToN(data.event.Frame[i].FrameId, eventImageDigits) + "-capture.jpg", + time: data.event.Frame[i].TimeStamp + }); + timestamp = data.event.Frame[i].TimeStamp; + } - for (i = 1; i <= frames; i++) { - var fname = padToN(i, eventImageDigits) + "-capture.jpg"; + } + oldEvent = event; + //console.log (JSON.stringify(data)); + }) + .error(function (err) { + ZMDataModel.zmLog("Error retrieving detailed frame API " + JSON.stringify(err)); + ZMDataModel.displayBanner('error', ['could not retrieve frame details', 'please try again']); + }); + } // end of groupType == alarms + else // groupType == scrub + { - $scope.slides.push({ - id: i, - img: fname - }); + ZMDataModel.zmDebug("EventCtrl: Scrubbing will turn on now"); + $scope.currentEvent = ""; + $scope.event = event; + //$ionicScrollDelegate.freezeScroll(true); + $ionicSideMenuDelegate.canDragContent(false); + $scope.slider_options = { + from: 1, + to: event.Event.Frames, + realtime: true, + step: 1, + className: "mySliderClass", + callback: function (value, released) { + //console.log("CALLBACK"+value+released); + $ionicScrollDelegate.freezeScroll(!released); + //ZMDataModel.zmDebug("EventCtrl: freezeScroll called with " + !released); - } - } - else // we need fids - { - var myurl_frames = loginData.apiurl + '/events/' + event.Event.Id + ".json"; - ZMDataModel.zmLog("API for event details" + myurl_frames); - $http.get(myurl_frames) - .success(function (data) { - $scope.FrameArray = data.event.Frame; - // $scope.slider_options.scale=[]; - - //$scope.slider_options.scale = []; - - var i; - for (i = 0; i < data.event.Frame.length; i++) { - - - //console.log ("**ONLY ALARM AT " + i + "of " + data.event.Frame.length); - $scope.slides.push({ - id: data.event.Frame[i].Id, - frameid: data.event.Frame[i].FrameId, - - }); - - } + }, + //modelLabels:function(val) {return "";}, + css: { + background: { + "background-color": "silver" + }, + before: { + "background-color": "purple" + }, + default: { + "background-color": "white" + }, // default value: 1px + after: { + "background-color": "green" + }, // zone after default value + pointer: { + "background-color": "red" + }, // circle pointer + range: { + "background-color": "red" + } // use it if double value + }, + scale: [] - //console.log (JSON.stringify(data)); - }) - .error(function (err) { - ZMDataModel.zmLog("Error retrieving detailed frame API " + JSON.stringify(err)); - ZMDataModel.displayBanner('error', [$translate.instant('kErrorFrameBanner'), $translate.instant('kErrorPleaseTryAgain')]); - }); - - } + }; + event.Event.height = zm.eventsListDetailsHeight + zm.eventsListScrubHeight; + $ionicScrollDelegate.resize(); + $scope.mycarousel.index = 0; + $scope.ionRange.index = 1; + //console.log("**Resetting range"); + $scope.slides = []; + var i; + if (event.Event.imageMode == 'path') { + ZMDataModel.zmDebug("EventCtrl: found " + frames + " frames to scrub"); - // now get event details to show alarm frames - loginData = ZMDataModel.getLogin(); - - if (typeof event.Event.DefaultVideo === 'undefined') - event.Event.DefaultVideo = ""; - // grab video details - event.Event.video = {}; - var videoURL; - - if (event.Event.imageMode == 'path') - 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; - - console.log("************** VIDEO IS " + videoURL); - event.Event.video.config = { - autoPlay: true, - sources: [ - { - src: $sce.trustAsResourceUrl(videoURL), - type: "video/mp4" - } - ], - theme: "lib/videogular-themes-default/videogular.css", + for (i = 1; i <= frames; i++) { + var fname = padToN(i, eventImageDigits) + "-capture.jpg"; + - }; + $scope.slides.push({ + id: i, + img: fname + }); - var myurl2 = loginData.apiurl + '/events/' + event.Event.Id + ".json"; - ZMDataModel.zmLog("API for event details" + myurl2); - $http.get(myurl2) + } + } else // we need fids + { + var myurl_frames = loginData.apiurl + '/events/' + event.Event.Id + ".json"; + ZMDataModel.zmLog("API for event details" + myurl_frames); + $http.get(myurl_frames) .success(function (data) { $scope.FrameArray = data.event.Frame; // $scope.slider_options.scale=[]; - $scope.slider_options.scale = []; + + //$scope.slider_options.scale = []; var i; for (i = 0; i < data.event.Frame.length; i++) { - if (data.event.Frame[i].Type == "Alarm") { - //console.log ("**ALARM AT " + i + "of " + data.event.Frame.length); - $scope.slider_options.scale.push({ - val: data.event.Frame[i].FrameId, - label: ' ' - }); - } else { - //$scope.slider_options.scale.push(' '); - } + + //console.log ("**ONLY ALARM AT " + i + "of " + data.event.Frame.length); + $scope.slides.push({ + id: data.event.Frame[i].Id, + frameid: data.event.Frame[i].FrameId, + + }); + } @@ -1225,29 +1125,93 @@ angular.module('zmApp.controllers') ZMDataModel.displayBanner('error', [$translate.instant('kErrorFrameBanner'), $translate.instant('kErrorPleaseTryAgain')]); }); + } - oldEvent = event; - $rootScope.rand = Math.floor(Math.random() * (999999 - 111111 + 1)) + 111111; - var elem = angular.element(document.getElementById("item-" + ndx)); - var locobject = $ionicPosition.offset(elem); - //console.log(JSON.stringify(locobject)); - var toplocation = parseInt(locobject.top); - var objheight = parseInt(locobject.height); - // console.log("top location is " + toplocation); - var distdiff = parseInt($rootScope.devHeight) - toplocation - objheight; - // console.log("*****Space at bottom is " + distdiff); - if (distdiff < zm.eventsListScrubHeight) // size of the scroller with bars - { - scrollbynumber = zm.eventsListScrubHeight - distdiff; - $ionicScrollDelegate.$getByHandle("mainScroll").scrollBy(0, scrollbynumber, true); - // we need to scroll up to make space - } + // now get event details to show alarm frames + loginData = ZMDataModel.getLogin(); + + if (typeof event.Event.DefaultVideo === 'undefined') + event.Event.DefaultVideo = ""; + // grab video details + event.Event.video = {}; + var videoURL; + + if (event.Event.imageMode == 'path') + 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; + + console.log("************** VIDEO IS " + videoURL); + event.Event.video.config = { + autoPlay: true, + sources: [ + { + src: $sce.trustAsResourceUrl(videoURL), + type: "video/mp4" + } + + ], + + theme: "lib/videogular-themes-default/videogular.css", + + }; + + + var myurl2 = loginData.apiurl + '/events/' + event.Event.Id + ".json"; + ZMDataModel.zmLog("API for event details" + myurl2); + $http.get(myurl2) + .success(function (data) { + $scope.FrameArray = data.event.Frame; + // $scope.slider_options.scale=[]; + $scope.slider_options.scale = []; + + var i; + for (i = 0; i < data.event.Frame.length; i++) { + if (data.event.Frame[i].Type == "Alarm") { + + //console.log ("**ALARM AT " + i + "of " + data.event.Frame.length); + $scope.slider_options.scale.push({ + val: data.event.Frame[i].FrameId, + label: ' ' + }); + } else { + //$scope.slider_options.scale.push(' '); + } - } // end of groupType == scrub - } // end of ShowScrub == true - else { + } + + //console.log (JSON.stringify(data)); + }) + .error(function (err) { + ZMDataModel.zmLog("Error retrieving detailed frame API " + JSON.stringify(err)); + ZMDataModel.displayBanner('error', [$translate.instant('kErrorFrameBanner'), $translate.instant('kErrorPleaseTryAgain')]); + }); + + + oldEvent = event; + $rootScope.rand = Math.floor(Math.random() * (999999 - 111111 + 1)) + 111111; + var elem = angular.element(document.getElementById("item-" + ndx)); + var locobject = $ionicPosition.offset(elem); + //console.log(JSON.stringify(locobject)); + var toplocation = parseInt(locobject.top); + var objheight = parseInt(locobject.height); + // console.log("top location is " + toplocation); + var distdiff = parseInt($rootScope.devHeight) - toplocation - objheight; + // console.log("*****Space at bottom is " + distdiff); + + if (distdiff < zm.eventsListScrubHeight) // size of the scroller with bars + { + scrollbynumber = zm.eventsListScrubHeight - distdiff; + $ionicScrollDelegate.$getByHandle("mainScroll").scrollBy(0, scrollbynumber, true); + + // we need to scroll up to make space + } + + } // end of groupType == scrub + } // end of ShowScrub == true + else { // $ionicScrollDelegate.freezeScroll(false); $ionicSideMenuDelegate.canDragContent(true); event.Event.height = zm.eventsListDetailsHeight; @@ -1257,519 +1221,517 @@ angular.module('zmApp.controllers') $ionicScrollDelegate.$getByHandle("mainScroll").scrollBy(0, -1 * scrollbynumber, true); scrollbynumber = 0; } - // we are turning off, so scroll by back + // we are turning off, so scroll by back } - } + } - $scope.closeIfOpen = function (event) { - if (event != undefined) { - if (event.Event.ShowScrub) - toggleGroup(event); + $scope.closeIfOpen = function (event) { + if (event != undefined) { + if (event.Event.ShowScrub) + toggleGroup(event); - } - }; + } + }; - $scope.isGroupShown = function (event) { - // console.log ("IS SHOW INDEX is " + ndx); - //console.log ("SHOW GROUP IS " + showGroup); + $scope.isGroupShown = function (event) { + // console.log ("IS SHOW INDEX is " + ndx); + //console.log ("SHOW GROUP IS " + showGroup); - return (event == undefined) ? false : event.Event.ShowScrub; + return (event == undefined) ? false : event.Event.ShowScrub; - }; + }; - //--------------------------------------------------- - // reload view - //--------------------------------------------------- - $scope.reloadView = function () { - // All we really need to do here is change the random token - // in the image src and it will refresh. No need to reload the view - // and if you did reload the view, it would go back to events list - // which is the view - and when you are in the modal it will go away - //console.log("*** Refreshing Modal view ***"); - //$state.go($state.current, {}, {reload: true}); - $rootScope.rand = Math.floor(Math.random() * (999999 - 111111 + 1)) + 111111; - $ionicLoading.show({ - template: $translate.instant('kRefreshedView'), - noBackdrop: true, - duration: 3000 - }); + //--------------------------------------------------- + // reload view + //--------------------------------------------------- + $scope.reloadView = function () { + // All we really need to do here is change the random token + // in the image src and it will refresh. No need to reload the view + // and if you did reload the view, it would go back to events list + // which is the view - and when you are in the modal it will go away + //console.log("*** Refreshing Modal view ***"); + //$state.go($state.current, {}, {reload: true}); + $rootScope.rand = Math.floor(Math.random() * (999999 - 111111 + 1)) + 111111; + $ionicLoading.show({ + template: $translate.instant('kRefreshedView'), + noBackdrop: true, + duration: 3000 + }); - }; + }; - //--------------------------------------------------- - // when you tap a list entry - to break search loop - //--------------------------------------------------- - $scope.tapped = function () { - // console.log("*** TAPPED ****"); - // if he tapped, the we are not infinite loading on ion-infinite - if (enableLoadMore == false) { - moreEvents = true; - enableLoadMore = true; - // console.log("REMOVING ARTIFICAL LOAD MORE BLOCK"); - } - }; + //--------------------------------------------------- + // when you tap a list entry - to break search loop + //--------------------------------------------------- + $scope.tapped = function () { + // console.log("*** TAPPED ****"); + // if he tapped, the we are not infinite loading on ion-infinite + if (enableLoadMore == false) { + moreEvents = true; + enableLoadMore = true; + // console.log("REMOVING ARTIFICAL LOAD MORE BLOCK"); + } + }; - $scope.$on('$ionicView.loaded', function () { - // console.log("**VIEW ** Events Ctrl Loaded"); + $scope.$on('$ionicView.loaded', function () { + // console.log("**VIEW ** Events Ctrl Loaded"); + }); + + //------------------------------------------------------------------------- + // Lets make sure we set screen dim properly as we enter + // The problem is we enter other states before we leave previous states + // from a callback perspective in ionic, so we really can't predictably + // 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.enter', function () { + // console.log("**VIEW ** Events Ctrl Entered"); + ZMDataModel.setAwake(false); + + EventServer.sendMessage('push', { + type: 'badge', + badge: 0, }); - //------------------------------------------------------------------------- - // Lets make sure we set screen dim properly as we enter - // The problem is we enter other states before we leave previous states - // from a callback perspective in ionic, so we really can't predictably - // 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.enter', function () { - // console.log("**VIEW ** Events Ctrl Entered"); - ZMDataModel.setAwake(false); + $ionicPopover.fromTemplateUrl('templates/events-popover.html', { + scope: $scope, + }).then(function (popover) { + $scope.popover = popover; + }); - EventServer.sendMessage('push', { - type: 'badge', - badge: 0, - }); - $ionicPopover.fromTemplateUrl('templates/events-popover.html', { - scope: $scope, - }).then(function (popover) { - $scope.popover = popover; + + //reset badge count + if (window.cordova && window.cordova.plugins.notification) { + $cordovaBadge.set(0).then(function () { + // You have permission, badge set. + }, function (err) { + ZMDataModel.zmDebug("app does not have badge permissions. Please check your phone notification settings"); + // You do not have permission. }); - - - //reset badge count - if (window.cordova && window.cordova.plugins.notification) { - $cordovaBadge.set(0).then(function () { - // You have permission, badge set. - }, function (err) { - ZMDataModel.zmDebug("app does not have badge permissions. Please check your phone notification settings"); - // You do not have permission. - }); + $cordovaLocalNotification.clearAll(); + } - $cordovaLocalNotification.clearAll(); - } + }); - }); + $scope.$on('$ionicView.leave', function () { + //console.log("**VIEW ** Events Ctrl Left"); + }); - $scope.$on('$ionicView.leave', function () { - //console.log("**VIEW ** Events Ctrl Left"); - }); + $scope.$on('$ionicView.unloaded', function () { + //console.log("**VIEW ** Events Ctrl Unloaded"); + //console.log("*** MODAL ** Destroying modal too"); + if ($scope.modal !== undefined) { + $scope.modal.remove(); + } - $scope.$on('$ionicView.unloaded', function () { - //console.log("**VIEW ** Events Ctrl Unloaded"); - //console.log("*** MODAL ** Destroying modal too"); - if ($scope.modal !== undefined) { - $scope.modal.remove(); - } + }); - }); + //--------------------------------------------------- + // used to hide loading image toast + //--------------------------------------------------- + $scope.finishedLoadingImage = function (ndx) { + // console.log("*** Events image FINISHED loading index: "+ndx+"***"); + $ionicLoading.hide(); + }; - //--------------------------------------------------- - // used to hide loading image toast - //--------------------------------------------------- - $scope.finishedLoadingImage = function (ndx) { - // console.log("*** Events image FINISHED loading index: "+ndx+"***"); - $ionicLoading.hide(); - }; + //--------------------------------------------------- + // + //--------------------------------------------------- + $scope.clearSearch = function () { + $scope.search.text = ""; + }; - //--------------------------------------------------- - // - //--------------------------------------------------- - $scope.clearSearch = function () { + //--------------------------------------------------- + // Called when user toggles search + //--------------------------------------------------- + $scope.searchClicked = function () { + $scope.showSearch = !$scope.showSearch; + // this helps greatly in repeat scroll gets + if ($scope.showSearch == false) $scope.search.text = ""; - }; - //--------------------------------------------------- - // Called when user toggles search - //--------------------------------------------------- - $scope.searchClicked = function () { - $scope.showSearch = !$scope.showSearch; - // this helps greatly in repeat scroll gets - if ($scope.showSearch == false) - $scope.search.text = ""; - - //console.log("**** Setting search view to " + $scope.showSearch + " ****"); - if (enableLoadMore == false && $scope.showSearch == false) { - moreEvents = true; - enableLoadMore = true; - //console.log("REMOVING ARTIFICAL LOAD MORE BLOCK"); - } - }; + //console.log("**** Setting search view to " + $scope.showSearch + " ****"); + if (enableLoadMore == false && $scope.showSearch == false) { + moreEvents = true; + enableLoadMore = true; + //console.log("REMOVING ARTIFICAL LOAD MORE BLOCK"); + } + }; - - //-------------------------------------------------------- - // utility function - //-------------------------------------------------------- - - function computeRelativePath(event) { - var relativePath = ""; - var loginData = ZMDataModel.getLogin(); - var str = event.Event.StartTime; - var yy = moment(str).format('YY'); - var mm = moment(str).format('MM'); - var dd = moment(str).format('DD'); - var hh = moment(str).format('HH'); - var min = moment(str).format('mm'); - var sec = moment(str).format('ss'); - relativePath = event.Event.MonitorId + "/" + - yy + "/" + - mm + "/" + - dd + "/" + - hh + "/" + - min + "/" + - sec + "/"; - return relativePath; - } - - //-------------------------------------------------------- - // utility function - //-------------------------------------------------------- - - function computeBasePath(event) { - var basePath = ""; - var loginData = ZMDataModel.getLogin(); - var str = event.Event.StartTime; - var yy = moment(str).format('YY'); - var mm = moment(str).format('MM'); - var dd = moment(str).format('DD'); - var hh = moment(str).format('HH'); - var min = moment(str).format('mm'); - var sec = moment(str).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', { + //-------------------------------------------------------- + // utility function + //-------------------------------------------------------- + + function computeRelativePath(event) { + var relativePath = ""; + var loginData = ZMDataModel.getLogin(); + var str = event.Event.StartTime; + var yy = moment(str).format('YY'); + var mm = moment(str).format('MM'); + var dd = moment(str).format('DD'); + var hh = moment(str).format('HH'); + var min = moment(str).format('mm'); + var sec = moment(str).format('ss'); + relativePath = event.Event.MonitorId + "/" + + yy + "/" + + mm + "/" + + dd + "/" + + hh + "/" + + min + "/" + + sec + "/"; + return relativePath; + + } + + //-------------------------------------------------------- + // utility function + //-------------------------------------------------------- + + function computeBasePath(event) { + var basePath = ""; + var loginData = ZMDataModel.getLogin(); + var str = event.Event.StartTime; + var yy = moment(str).format('YY'); + var mm = moment(str).format('MM'); + var dd = moment(str).format('DD'); + var hh = moment(str).format('HH'); + var min = moment(str).format('mm'); + var sec = moment(str).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', { scope: $scope, // give ModalCtrl access to this scope animation: 'slide-in-up', - id:'modalgraph', - + id: 'modalgraph', + }) .then(function (modal) { $scope.modal = modal; - - + + $scope.modal.show(); }); - }; + }; - $scope.analyzeEvent = function(ev) - { - $scope.event = ev; - $ionicModal.fromTemplateUrl('templates/timeline-modal.html', { + $scope.analyzeEvent = function (ev) { + $scope.event = ev; + $ionicModal.fromTemplateUrl('templates/timeline-modal.html', { scope: $scope, // give ModalCtrl access to this scope animation: 'slide-in-up', - id:'analyze', + id: 'analyze', }) .then(function (modal) { $scope.modal = modal; - - + + $scope.modal.show(); }); - }; - - $scope.$on('modal.removed', function (e,m) { - + }; + + $scope.$on('modal.removed', function (e, m) { + if (m.id != 'footage') return; - ZMDataModel.zmDebug ("Rebinding watchers of eventCtrl"); - setupWatchers(); - - //console.log ("************** FOOTAGE CLOSED"); - - }); - - //-------------------------------------------------------- - //This is called when we first tap on an event to see - // the feed. It's important to instantiate ionicModal here - // as otherwise you'd instantiate it when the view loads - // and our "Please wait loading" technique I explained - //earlier won't work - //-------------------------------------------------------- - - $scope.openModal = function (event) { - - ZMDataModel.zmDebug ("unbinding eventCtrl watchers as modal has its own"); - ionRangeWatcher(); - mycarouselWatcher(); - //ZMDataModel.zmDebug("EventCtrl: Open Modal with Base path " + relativepath); - - $scope.event = event; - - ZMDataModel.setAwake(ZMDataModel.getKeepAwake()); - - $scope.currentEvent = event; - $scope.followSameMonitor = ($stateParams.id == "0")?"0":"1"; - - - - $ionicModal.fromTemplateUrl('templates/events-modal.html', { - scope: $scope, - animation: 'slide-in-up', - id:'footage', - }) - .then(function (modal) { - $scope.modal = modal; - - $ionicLoading.show({ - template: $translate.instant('kPleaseWait')+"...", - noBackdrop: true, - duration: 10000 - }); + ZMDataModel.zmDebug("Rebinding watchers of eventCtrl"); + setupWatchers(); - $scope.modal.show(); + //console.log ("************** FOOTAGE CLOSED"); - var ld = ZMDataModel.getLogin(); + }); - + //-------------------------------------------------------- + //This is called when we first tap on an event to see + // the feed. It's important to instantiate ionicModal here + // as otherwise you'd instantiate it when the view loads + // and our "Please wait loading" technique I explained + //earlier won't work + //-------------------------------------------------------- - }); + $scope.openModal = function (event) { - }; + ZMDataModel.zmDebug("unbinding eventCtrl watchers as modal has its own"); + ionRangeWatcher(); + mycarouselWatcher(); + //ZMDataModel.zmDebug("EventCtrl: Open Modal with Base path " + relativepath); - //-------------------------------------------------------- - //We need to destroy because we are instantiating - // it on open - //-------------------------------------------------------- - $scope.closeModal = function () { - ZMDataModel.zmDebug(">>>EventCtrl:Close & Destroy Modal"); - ZMDataModel.setAwake(false); - if ($scope.modal !== undefined) { - $scope.modal.remove(); - } + $scope.event = event; - }; + ZMDataModel.setAwake(ZMDataModel.getKeepAwake()); - //-------------------------------------------------------- - //Cleanup the modal when we're done with it - // I Don't think it ever comes here - //-------------------------------------------------------- - $scope.$on('$destroy', function () { - //console.log("Destroy Modal"); - if ($scope.modal !== undefined) { - $scope.modal.remove(); - } - if ($scope.popover !== undefined) - $scope.popover.remove(); - }); + $scope.currentEvent = event; + $scope.followSameMonitor = ($stateParams.id == "0") ? "0" : "1"; + + + + $ionicModal.fromTemplateUrl('templates/events-modal.html', { + scope: $scope, + animation: 'slide-in-up', + id: 'footage', + }) + .then(function (modal) { + $scope.modal = modal; + + $ionicLoading.show({ + template: $translate.instant('kPleaseWait') + "...", + noBackdrop: true, + duration: 10000 + }); + + $scope.modal.show(); + + var ld = ZMDataModel.getLogin(); - //-------------------------------------------------------- - // used by infinite scrolling to see if we can get more - //-------------------------------------------------------- - $scope.moreDataCanBeLoaded = function () { - return moreEvents; - }; - //-------------------------------------------------------- - // stop searching for more data - //-------------------------------------------------------- - $scope.cancelSearch = function () { - $ionicLoading.hide(); //Or whatever action you want to preform - enableLoadMore = false; - //console.log("**** CANCELLED ****"); - $ionicLoading.show({ - template: $translate.instant('kSearchCancelled'), - animation: 'fade-in', - showBackdrop: true, - duration: 2000, - maxWidth: 200, - showDelay: 0 }); + }; - }; + //-------------------------------------------------------- + //We need to destroy because we are instantiating + // it on open + //-------------------------------------------------------- + $scope.closeModal = function () { + ZMDataModel.zmDebug(">>>EventCtrl:Close & Destroy Modal"); + ZMDataModel.setAwake(false); + if ($scope.modal !== undefined) { + $scope.modal.remove(); + } - //-------------------------------------------------------- - // loads next page of events - //-------------------------------------------------------- + }; + //-------------------------------------------------------- + //Cleanup the modal when we're done with it + // I Don't think it ever comes here + //-------------------------------------------------------- + $scope.$on('$destroy', function () { + //console.log("Destroy Modal"); + if ($scope.modal !== undefined) { + $scope.modal.remove(); + } + if ($scope.popover !== undefined) + $scope.popover.remove(); + }); - function loadMore() { - // the events API does not return an error for anything - // except greater page limits than reported + //-------------------------------------------------------- + // used by infinite scrolling to see if we can get more + //-------------------------------------------------------- - // console.log("***** LOADING MORE INFINITE SCROLL ****"); - eventsPage--; - if ((eventsPage <= 0) && (pageLoaded)) { - moreEvents = false; - //console.log("*** At Page " + eventsPage + ", not proceeding"); - return; - } + $scope.moreDataCanBeLoaded = function () { + return moreEvents; + }; - if (!enableLoadMore) { - moreEvents = false; // Don't ion-scroll till enableLoadMore is true; - $scope.$broadcast('scroll.infiniteScrollComplete'); + //-------------------------------------------------------- + // stop searching for more data + //-------------------------------------------------------- + $scope.cancelSearch = function () { + $ionicLoading.hide(); //Or whatever action you want to preform + enableLoadMore = false; + //console.log("**** CANCELLED ****"); + $ionicLoading.show({ + template: $translate.instant('kSearchCancelled'), + animation: 'fade-in', + showBackdrop: true, + duration: 2000, + maxWidth: 200, + showDelay: 0 + }); - // console.log("**** LOADMORE ARTIFICALLY DISABLED"); - return; - } - var loadingStr = ""; - if ($scope.search.text != "") { - var toastStr = $translate.instant('kToastSearchingPage') + eventsPage; - $ionicLoading.show({ - maxwidth: 100, - scope: $scope, - template: '<button class="button button-clear icon-left ion-close-circled button-text-wrap" ng-click="cancelSearch()" >' + toastStr + '</button>' - }); + }; - loadingStr = "none"; - } + //-------------------------------------------------------- + // loads next page of events + //-------------------------------------------------------- - ZMDataModel.getEvents($scope.id, eventsPage, loadingStr, $rootScope.fromString, $rootScope.toString) - .then(function (data) { - var loginData = ZMDataModel.getLogin(); - // console.log("Got new page of events with Page=" + eventsPage); - var myevents = data; - for (var i = 0; i < myevents.length; i++) { + function loadMore() { + // the events API does not return an error for anything + // except greater page limits than reported - var idfound = true; - var ld = ZMDataModel.getLogin(); + // console.log("***** LOADING MORE INFINITE SCROLL ****"); + eventsPage--; + if ((eventsPage <= 0) && (pageLoaded)) { + moreEvents = false; + //console.log("*** At Page " + eventsPage + ", not proceeding"); + return; + } - if (ld.persistMontageOrder) { - idfound = false; - for (var ii = 0; ii < $scope.monitors.length; ii++) { - if ($scope.monitors[ii].Monitor.Id == myevents[i].Event.MonitorId) { + if (!enableLoadMore) { + moreEvents = false; // Don't ion-scroll till enableLoadMore is true; + $scope.$broadcast('scroll.infiniteScrollComplete'); - //console.log ( $scope.monitors[ii].Monitor.Id + " MATCHES " + myevents[i].Event.MonitorId); - idfound = true; - - break; - } + // console.log("**** LOADMORE ARTIFICALLY DISABLED"); + return; + } + + var loadingStr = ""; + if ($scope.search.text != "") { + var toastStr = $translate.instant('kToastSearchingPage') + eventsPage; + $ionicLoading.show({ + maxwidth: 100, + scope: $scope, + template: '<button class="button button-clear icon-left ion-close-circled button-text-wrap" ng-click="cancelSearch()" >' + toastStr + '</button>' + }); + + loadingStr = "none"; + } + + ZMDataModel.getEvents($scope.id, eventsPage, loadingStr, $rootScope.fromString, $rootScope.toString) + .then(function (data) { + var loginData = ZMDataModel.getLogin(); + // console.log("Got new page of events with Page=" + eventsPage); + var myevents = data; + + for (var i = 0; i < myevents.length; i++) { + + var idfound = true; + var ld = ZMDataModel.getLogin(); + + if (ld.persistMontageOrder) { + idfound = false; + for (var ii = 0; ii < $scope.monitors.length; ii++) { + if ($scope.monitors[ii].Monitor.Id == myevents[i].Event.MonitorId) { + + //console.log ( $scope.monitors[ii].Monitor.Id + " MATCHES " + myevents[i].Event.MonitorId); + idfound = true; + + break; } } + } - myevents[i].Event.MonitorName = ZMDataModel.getMonitorName(myevents[i].Event.MonitorId); - // now construct base path + myevents[i].Event.MonitorName = ZMDataModel.getMonitorName(myevents[i].Event.MonitorId); + // now construct base path - myevents[i].Event.streamingURL = ZMDataModel.getStreamingURL (myevents[i].Event.MonitorId); - myevents[i].Event.baseURL = ZMDataModel.getBaseURL (myevents[i].Event.MonitorId); - myevents[i].Event.imageMode = ZMDataModel.getImageMode (myevents[i].Event.MonitorId); - // console.log ("***** MULTISERVER STREAMING URL FOR EVENTS " + myevents[i].Event.streamingURL); + myevents[i].Event.streamingURL = ZMDataModel.getStreamingURL(myevents[i].Event.MonitorId); + myevents[i].Event.baseURL = ZMDataModel.getBaseURL(myevents[i].Event.MonitorId); + myevents[i].Event.imageMode = ZMDataModel.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); - - myevents[i].Event.ShowScrub = false; - myevents[i].Event.BasePath = computeBasePath(myevents[i]); - myevents[i].Event.relativePath = computeRelativePath(myevents[i]); - myevents[i].Event.height = zm.eventsListDetailsHeight; - if (idfound) $scope.events.push(myevents[i]); - } + // console.log ("***** MULTISERVER BASE URL FOR EVENTS " + myevents[i].Event.baseURL); - //console.log("Got new page of events"); - moreEvents = true; - $scope.$broadcast('scroll.infiniteScrollComplete'); - }, + myevents[i].Event.ShowScrub = false; + myevents[i].Event.BasePath = computeBasePath(myevents[i]); + myevents[i].Event.relativePath = computeRelativePath(myevents[i]); + myevents[i].Event.height = zm.eventsListDetailsHeight; + if (idfound) $scope.events.push(myevents[i]); + } - function (error) { - // console.log("*** No More Events to Load, Stop Infinite Scroll ****"); - moreEvents = false; - $scope.$broadcast('scroll.infiniteScrollComplete'); + //console.log("Got new page of events"); + moreEvents = true; + $scope.$broadcast('scroll.infiniteScrollComplete'); + }, - }); - } + function (error) { + // console.log("*** No More Events to Load, Stop Infinite Scroll ****"); + moreEvents = false; + $scope.$broadcast('scroll.infiniteScrollComplete'); - $scope.loadMore = function () { - loadMore(); + }); + } - }; - - $scope.toggleMinAlarmFrameCount = function () { - - - var ld = ZMDataModel.getLogin(); - - console.log ("Toggling " + ld.enableAlarmCount); - ld.enableAlarmCount = !ld.enableAlarmCount; - ZMDataModel.setLogin(ld); - $scope.loginData = ZMDataModel.getLogin(); - doRefresh(); - }; + $scope.loadMore = function () { + loadMore(); + }; - //-------------------------------------- - // formats events dates in a nice way - //--------------------------------------- + $scope.toggleMinAlarmFrameCount = function () { - $scope.prettifyDate = function (str) { - return moment(str).format('MMM Do'); - }; - function prettifyDate(str) { - return moment(str).format('MMM Do'); - } + var ld = ZMDataModel.getLogin(); - $scope.prettifyTime = function (str) { - return moment(str).format(ZMDataModel.getTimeFormat()); - }; - - $scope.prettifyTimeSec = function (str) { - return moment(str).format(ZMDataModel.getTimeFormatSec()); - }; + console.log("Toggling " + ld.enableAlarmCount); + ld.enableAlarmCount = !ld.enableAlarmCount; + ZMDataModel.setLogin(ld); + $scope.loginData = ZMDataModel.getLogin(); + doRefresh(); + }; - $scope.prettify = function (str) { - return moment(str).format(ZMDataModel.getTimeFormat()+', MMMM Do YYYY'); - }; - //-------------------------------------------------------- - // For consistency we are keeping the refresher list - // but its a dummy. The reason I deviated is because - // refresh with infinite scroll is a UX problem - its - // easy to pull to refresh when scrolling up with - // a large list - //-------------------------------------------------------- - - $scope.dummyDoRefresh = function () { - $scope.$broadcast('scroll.refreshComplete'); - }; + //-------------------------------------- + // formats events dates in a nice way + //--------------------------------------- + $scope.prettifyDate = function (str) { + return moment(str).format('MMM Do'); + }; - $scope.doRefresh = function () { - doRefresh(); - }; //dorefresh + function prettifyDate(str) { + return moment(str).format('MMM Do'); + } - function doRefresh() { - // console.log("***Pull to Refresh"); + $scope.prettifyTime = function (str) { + return moment(str).format(ZMDataModel.getTimeFormat()); + }; - ZMDataModel.zmDebug("Reloading monitors"); - var refresh = ZMDataModel.getMonitors(1); - refresh.then(function (data) { + $scope.prettifyTimeSec = function (str) { + return moment(str).format(ZMDataModel.getTimeFormatSec()); + }; - var ld = ZMDataModel.getLogin(); - if (ld.persistMontageOrder) { - var tempMon = data; - $scope.monitors = ZMDataModel.applyMontageMonitorPrefs(tempMon, 2)[0]; - } else { - $scope.monitors = data; - } + $scope.prettify = function (str) { + return moment(str).format(ZMDataModel.getTimeFormat() + ', MMMM Do YYYY'); + }; + //-------------------------------------------------------- + // For consistency we are keeping the refresher list + // but its a dummy. The reason I deviated is because + // refresh with infinite scroll is a UX problem - its + // easy to pull to refresh when scrolling up with + // a large list + //-------------------------------------------------------- + + $scope.dummyDoRefresh = function () { + $scope.$broadcast('scroll.refreshComplete'); + }; - getInitialEvents(); - moreEvents = true; - - }); - } + + $scope.doRefresh = function () { + doRefresh(); + }; //dorefresh + + function doRefresh() { + // console.log("***Pull to Refresh"); + + ZMDataModel.zmDebug("Reloading monitors"); + var refresh = ZMDataModel.getMonitors(1); + refresh.then(function (data) { + + var ld = ZMDataModel.getLogin(); + if (ld.persistMontageOrder) { + var tempMon = data; + $scope.monitors = ZMDataModel.applyMontageMonitorPrefs(tempMon, 2)[0]; + } else { + $scope.monitors = data; + } + + + getInitialEvents(); + moreEvents = true; + + }); + } }]);
\ No newline at end of file diff --git a/www/js/EventDateTimeFilterCtrl.js b/www/js/EventDateTimeFilterCtrl.js index 1d2535b7..6337ea6b 100644 --- a/www/js/EventDateTimeFilterCtrl.js +++ b/www/js/EventDateTimeFilterCtrl.js @@ -6,24 +6,28 @@ angular.module('zmApp.controllers') .controller('zmApp.EventDateTimeFilterCtrl', ['$scope', '$ionicSlideBoxDelegate', '$ionicSideMenuDelegate', '$rootScope', '$ionicHistory', 'ZMDataModel', '$state', function ($scope, $ionicScrollDelegate, $ionicSideMenuDelegate, $rootScope, $ionicHistory, ZMDataModel, $state) { - - //---------------------------------------------------------------- - // Alarm notification handling - //---------------------------------------------------------------- - $scope.handleAlarms = function() - { - $rootScope.isAlarm=!$rootScope.isAlarm; - if (!$rootScope.isAlarm) - { - $rootScope.alarmCount="0"; - $ionicHistory.nextViewOptions({disableBack: true}); - $state.go("events", {"id": 0}, { reload: true }); - } - }; - - //-------------------------------------------------------------------------- - // Clears filters - //-------------------------------------------------------------------------- + + //---------------------------------------------------------------- + // Alarm notification handling + //---------------------------------------------------------------- + $scope.handleAlarms = function () { + $rootScope.isAlarm = !$rootScope.isAlarm; + if (!$rootScope.isAlarm) { + $rootScope.alarmCount = "0"; + $ionicHistory.nextViewOptions({ + disableBack: true + }); + $state.go("events", { + "id": 0 + }, { + reload: true + }); + } + }; + + //-------------------------------------------------------------------------- + // Clears filters + //-------------------------------------------------------------------------- $scope.removeFilters = function () { $rootScope.isEventFilterOn = false; @@ -48,10 +52,10 @@ angular.module('zmApp.controllers') //$ionicHistory.goBack(); }; - //-------------------------------------------------------------------------- - // Saves filters in root variables so EventFilter can access it. I know: - // don't root. - //-------------------------------------------------------------------------- + //-------------------------------------------------------------------------- + // Saves filters in root variables so EventFilter can access it. I know: + // don't root. + //-------------------------------------------------------------------------- $scope.saveFilters = function () { if (!$rootScope.fromDate) { //console.log("RESET fromDate"); @@ -60,13 +64,13 @@ angular.module('zmApp.controllers') } if (!$rootScope.toDate) { - // console.log("RESET toDate"); + // console.log("RESET toDate"); $rootScope.toDate = new Date(); ZMDataModel.zmDebug("DateTimeFilter: resetting to date"); } if (!$rootScope.fromTime) { - // console.log("RESET fromTime"); + // console.log("RESET fromTime"); $rootScope.fromTime = new Date(99, 5, 24, 0, 0, 0, 0); //moment().format("hh:mm:ss"); ZMDataModel.zmDebug("DateTimeFilter: resetting from time"); } diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js index 45fb501c..4bd5d4e4 100644 --- a/www/js/EventModalCtrl.js +++ b/www/js/EventModalCtrl.js @@ -152,7 +152,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro //console.log ("Event timer"); $scope.checkEventOn = true; if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '') { - console.log("playing video, not using zms, skipping event commands"); + //console.log("playing video, not using zms, skipping event commands"); } else { processEvent('99', $scope.connKey); } @@ -163,7 +163,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro var d = $q.defer(); if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '') { - console.log("playing video, not using zms, skipping event commands"); + // console.log("playing video, not using zms, skipping event commands"); d.resolve(true); return (d.promise); } @@ -171,7 +171,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro var loginData = ZMDataModel.getLogin(); - console.log("Sending CGI command to " + loginData.url); + //console.log("Sending CGI command to " + loginData.url); var rqtoken = rq ? rq : "stream"; var myauthtoken = $rootScope.authSession.replace("&auth=", ""); //&auth= @@ -193,7 +193,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro foo = foo + extras; //console.log("EXTRAS****SUB RETURNING " + foo); } - console.log("CGI subcommand=" + foo); + //console.log("CGI subcommand=" + foo); return foo; }, @@ -228,12 +228,12 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro function processEvent(cmd, connkey) { if ($scope.blockSlider) { - console.log("Not doing ZMS Command as slider is depressed..."); + //console.log("Not doing ZMS Command as slider is depressed..."); return; } var loginData = ZMDataModel.getLogin(); - console.log("sending process Event command to " + loginData.url); + //console.log("sending process Event command to " + loginData.url); var myauthtoken = $rootScope.authSession.replace("&auth=", ""); //&auth= var req = $http({ @@ -250,7 +250,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); var foo = str.join("&"); - console.log("****processEvent subcommands RETURNING " + foo); + //console.log("****processEvent subcommands RETURNING " + foo); return foo; }, @@ -355,7 +355,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro $scope.youChangedSlider = function () { - console.log("YOU changed " + $scope.sliderProgress.progress); + //console.log("YOU changed " + $scope.sliderProgress.progress); $scope.currentProgress.progress = $scope.sliderProgress.progress; $timeout(function () { sendCommand('14', $scope.connKey, '&offset=' + $scope.currentProgress.progress); @@ -719,7 +719,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro currentEvent = $scope.currentEvent; - console.log("Current Event " + JSON.stringify(currentEvent)); + //console.log("Current Event " + JSON.stringify(currentEvent)); $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); ZMDataModel.zmDebug("Generated Connkey:" + $scope.connKey); @@ -1130,7 +1130,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro duration: zm.httpTimeout }); - console.log("Send command connkey: " + connkey); + //console.log("Send command connkey: " + connkey); sendCommand(cmd, connkey) .then( function (success) { @@ -1321,9 +1321,9 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro $scope.defaultVideo = event.Event.DefaultVideo; - console.log("loginData is " + JSON.stringify($scope.loginData)); - console.log("Event ID is " + $scope.eventId); - console.log("video is " + $scope.defaultVideo); + //console.log("loginData is " + JSON.stringify($scope.loginData)); + //console.log("Event ID is " + $scope.eventId); + //console.log("video is " + $scope.defaultVideo); neighborEvents(event.Event.Id) diff --git a/www/js/EventServer.js b/www/js/EventServer.js index 391c4485..e4c4e7cb 100644 --- a/www/js/EventServer.js +++ b/www/js/EventServer.js @@ -20,7 +20,7 @@ angular.module('zmApp.controllers') var localNotificationId = 0; - + //-------------------------------------------------------------------------- // called when the websocket is opened @@ -68,8 +68,8 @@ angular.module('zmApp.controllers') var d = $q.defer(); var loginData = ZMDataModel.getLogin(); - - console.log ("INIT GOT " + JSON.stringify(loginData)); + + //console.log ("INIT GOT " + JSON.stringify(loginData)); if (loginData.isUseEventServer == false || !loginData.eventServer) { ZMDataModel.zmLog("No Event Server present. Not initializing"); @@ -78,7 +78,7 @@ angular.module('zmApp.controllers') } //if (!$rootScope.apnsToken) - pushInit(); + pushInit(); @@ -112,7 +112,7 @@ angular.module('zmApp.controllers') ws.$on('$message', function (str) { ZMDataModel.zmLog("Real-time event: " + JSON.stringify(str)); - + // Error messages if (str.status != 'Success') { @@ -130,9 +130,9 @@ angular.module('zmApp.controllers') if (str.version == undefined) str.version = "0.1"; if (ZMDataModel.versionCompare(str.version, zm.minEventServerVersion) == -1) { - $rootScope.zmPopup= $ionicPopup.alert({ + $rootScope.zmPopup = $ionicPopup.alert({ title: $translate.instant('kEventServerVersionTitle'), - template: $translate.instant('kEventServerVersionBody1') + " " + str.version + ". "+ $translate.instant('kEventServerVersionBody2') + + template: $translate.instant('kEventServerVersionBody1') + " " + str.version + ". " + $translate.instant('kEventServerVersionBody2') + zm.minEventServerVersion }); } @@ -144,11 +144,10 @@ angular.module('zmApp.controllers') if (str.status == 'Success' && str.event == 'alarm') // new events { - + var localNotText; // ZMN specific hack for Event Server - if (str.supplementary != 'true') - { + if (str.supplementary != 'true') { new Audio('sounds/blop.mp3').play(); localNotText = "Latest Alarms: "; $rootScope.isAlarm = 1; @@ -162,13 +161,11 @@ angular.module('zmApp.controllers') $rootScope.alarmCount = (parseInt($rootScope.alarmCount) + 1).toString(); } - } - else - { + } else { ZMDataModel.zmDebug("received supplementary event information over websockets"); } var eventsToDisplay = []; - var listOfMonitors=[]; + var listOfMonitors = []; for (var iter = 0; iter < str.events.length; iter++) { // lets stack the display so they don't overwrite eventsToDisplay.push(str.events[iter].Name + ": latest new alarm (" + str.events[iter].EventId + ")"); @@ -181,13 +178,14 @@ angular.module('zmApp.controllers') // if we are in background, do a local notification, else do an in app display if (!ZMDataModel.isBackground()) { - + //emit alarm details - this is when received over websockets - $rootScope.$emit('alarm',{message:listOfMonitors}); - - if (str.supplementary != 'true') - { - + $rootScope.$emit('alarm', { + message: listOfMonitors + }); + + if (str.supplementary != 'true') { + ZMDataModel.zmDebug("App is in foreground, displaying banner"); if (eventsToDisplay.length > 0) { @@ -195,15 +193,15 @@ angular.module('zmApp.controllers') //console.log("Single Display: " + eventsToDisplay[0]); ZMDataModel.displayBanner('alarm', [eventsToDisplay[0]], 5000, 5000); } else { - ZMDataModel.displayBanner('alarm', eventsToDisplay, - 5000, 5000 * eventsToDisplay.length); + ZMDataModel.displayBanner('alarm', eventsToDisplay, + 5000, 5000 * eventsToDisplay.length); } } } } - + } //end of success handler @@ -216,20 +214,19 @@ angular.module('zmApp.controllers') return (d.promise); } - - function disconnect() - { + + function disconnect() { ZMDataModel.zmLog("Disconnecting and deleting Event Server socket..."); - - if (typeof ws === 'undefined') - return; - + + if (typeof ws === 'undefined') + return; + ws.$close(); ws.$un('open'); ws.$un('close'); ws.$un('message'); ws = undefined; - + } //-------------------------------------------------------------------------- @@ -242,7 +239,7 @@ angular.module('zmApp.controllers') //-------------------------------------------------------------------------- function sendMessage(type, obj, isForce) { var ld = ZMDataModel.getLogin(); - if (ld.isUseEventServer == false && isForce!=1) { + if (ld.isUseEventServer == false && isForce != 1) { ZMDataModel.zmDebug("Not sending WSS message as event server is off"); return; } @@ -264,7 +261,7 @@ angular.module('zmApp.controllers') ws.$on('$open', openHandshake, function () { //console.log(" sending " + type + " " + - // JSON.stringify(obj)); + // JSON.stringify(obj)); ws.$emit(type, obj); ws.$un('$open'); @@ -331,14 +328,13 @@ angular.module('zmApp.controllers') var push; var mediasrc; var media; - var ld = ZMDataModel.getLogin(); + var ld = ZMDataModel.getLogin(); var plat = $ionicPlatform.is('ios') ? 'ios' : 'android'; - if ($rootScope.platformOS == 'desktop') - { - ZMDataModel.zmLog ("Desktop instance, not setting up push. Websockets only, I hope"); + if ($rootScope.platformOS == 'desktop') { + ZMDataModel.zmLog("Desktop instance, not setting up push. Websockets only, I hope"); return; } @@ -362,30 +358,30 @@ angular.module('zmApp.controllers') } else { mediasrc = "/android_asset/www/sounds/blop.mp3"; var android_media_file = "blop"; - - - - - push = PushNotification.init( - - { - "android": { - "senderID": zm.gcmSenderId, - "icon": "ic_stat_notification", - sound:ld.soundOnPush, - vibrate: ld.vibrateOnPush + + + + + push = PushNotification.init( + + { + "android": { + "senderID": zm.gcmSenderId, + "icon": "ic_stat_notification", + sound: ld.soundOnPush, + vibrate: ld.vibrateOnPush //"sound": android_media_file - } } + } + + ); - ); - } - // console.log("*********** MEDIA BLOG IS " + mediasrc); + // console.log("*********** MEDIA BLOG IS " + mediasrc); media = $cordovaMedia.newMedia(mediasrc); - + push.on('registration', function (data) { ZMDataModel.zmDebug("Push Notification registration ID received: " + JSON.stringify(data)); $rootScope.apnsToken = data.registrationId; @@ -393,7 +389,7 @@ angular.module('zmApp.controllers') var plat = $ionicPlatform.is('ios') ? 'ios' : 'android'; var ld = ZMDataModel.getLogin(); var pushstate = "enabled"; - if (ld.disablePush ==true) + if (ld.disablePush == true) pushstate = "disabled"; sendMessage('push', { @@ -401,74 +397,73 @@ angular.module('zmApp.controllers') platform: plat, token: $rootScope.apnsToken, state: pushstate - },1); + }, 1); }); push.on('notification', function (data) { - - ZMDataModel.zmDebug ("received push notification"); + + ZMDataModel.zmDebug("received push notification"); var ld = ZMDataModel.getLogin(); - if (ld.isUseEventServer ==false) { + if (ld.isUseEventServer == false) { ZMDataModel.zmDebug("received push notification, but event server disabled. Not acting on it"); return; } - + if (data.additionalData.foreground == false) { // This means push notification tap in background - - ZMDataModel.zmDebug ("*** PUSH NOTFN.>>>>"+JSON.stringify(data)); - + + ZMDataModel.zmDebug("*** PUSH NOTFN.>>>>" + JSON.stringify(data)); + // set tappedMid to monitor //*** PUSH DATA>>>>{"sound":"blop","message":"Alarms: Basement (2854) ","additionalData":{"mid":"2","coldstart":false,"collapse_key":"do_not_collapse","foreground":false}} - + ZMDataModel.zmDebug("Notification Tapped"); $rootScope.alarmCount = "0"; $rootScope.isAlarm = 0; $rootScope.tappedNotification = 1; var mid = data.additionalData.mid; - + // if Multiple mids, take the first one var mi = mid.indexOf(','); - if (mi > 0) - { - mid = mid.slice(0,mi); + if (mi > 0) { + mid = mid.slice(0, mi); } mid = parseInt(mid); - + $rootScope.tappedMid = mid; - ZMDataModel.zmLog ("Push notification: Tapped Monitor taken as:"+$rootScope.tappedMid); - - - - if ($rootScope.platformOS == 'ios') - { - - - ZMDataModel.zmDebug ("iOS only: clearing background push"); - push.finish(function() { + ZMDataModel.zmLog("Push notification: Tapped Monitor taken as:" + $rootScope.tappedMid); + + + + if ($rootScope.platformOS == 'ios') { + + + ZMDataModel.zmDebug("iOS only: clearing background push"); + push.finish(function () { ZMDataModel.zmDebug("processing of push data is finished"); }); } - + } else { - + // this flag honors the HW mute button. Go figure // http://ilee.co.uk/phonegap-plays-sound-on-mute/ - if (ld.soundOnPush) - { - media.play({ playAudioWhenScreenIsLocked : false }); + if (ld.soundOnPush) { + media.play({ + playAudioWhenScreenIsLocked: false + }); } - + var str = data.message; // console.log ("***STRING: " + str + " " +str.status); var eventsToDisplay = []; - + ZMDataModel.displayBanner('alarm', [str], 0, 5000 * eventsToDisplay.length); @@ -487,8 +482,8 @@ angular.module('zmApp.controllers') }); push.on('error', function (e) { - ZMDataModel.zmDebug ("Push error: " + JSON.stringify(e)); - // console.log("************* PUSH ERROR ******************"); + ZMDataModel.zmDebug("Push error: " + JSON.stringify(e)); + // console.log("************* PUSH ERROR ******************"); }); } diff --git a/www/js/EventServerSettingsCtrl.js b/www/js/EventServerSettingsCtrl.js index 215a6c4c..4ee0b4a3 100644 --- a/www/js/EventServerSettingsCtrl.js +++ b/www/js/EventServerSettingsCtrl.js @@ -33,17 +33,16 @@ } }; - + // we need this to dynamically get title // name as ion-view is set in stone and // we don't get title till beforeEnter // which is odd - I'd expect beforeEnter to load // before View is loaded - $scope.getTitle = function() - { + $scope.getTitle = function () { return $scope.loginData.serverName; }; - + //---------------------------------------------------------------- // Save anyway when you exit //---------------------------------------------------------------- @@ -53,40 +52,40 @@ }); - - + + $scope.$on('$ionicView.beforeEnter', function () { - - $scope.loginData = ZMDataModel.getLogin(); - console.log ("Event server - before Enter, loginData is " + JSON.stringify($scope.loginData)); - $scope.defScreen = $scope.loginData.onTapScreen; - if ($scope.loginData.eventServer == "") { - $scope.loginData.eventServer = "wss://" + extractDomain($scope.loginData.url) + ":9000"; - } + $scope.loginData = ZMDataModel.getLogin(); + //console.log ("Event server - before Enter, loginData is " + JSON.stringify($scope.loginData)); + $scope.defScreen = $scope.loginData.onTapScreen; + if ($scope.loginData.eventServer == "") { + $scope.loginData.eventServer = "wss://" + extractDomain($scope.loginData.url) + ":9000"; + } - res = $scope.loginData.eventServerMonitors.split(","); - minterval = $scope.loginData.eventServerInterval.split(","); + res = $scope.loginData.eventServerMonitors.split(","); + minterval = $scope.loginData.eventServerInterval.split(","); - for (var i = 0; i < $scope.monitors.length; i++) { + for (var i = 0; i < $scope.monitors.length; i++) { - if (!isEnabled($scope.monitors[i].Monitor.Id)) { - // if the filter list has IDs and this is not part of it, uncheck it - $scope.monitors[i].Monitor.isChecked = false; - //console.log("Marking false"); - $scope.monitors[i].Monitor.reportingInterval = 0; - } else { - // console.log("Marking true"); - $scope.monitors[i].Monitor.isChecked = true; - $scope.monitors[i].Monitor.reportingInterval = getInterval($scope.monitors[i].Monitor.Id); - } - } - }); + if (!isEnabled($scope.monitors[i].Monitor.Id)) { + // if the filter list has IDs and this is not part of it, uncheck it + $scope.monitors[i].Monitor.isChecked = false; + //console.log("Marking false"); + $scope.monitors[i].Monitor.reportingInterval = 0; + } else { + // console.log("Marking true"); + $scope.monitors[i].Monitor.isChecked = true; + $scope.monitors[i].Monitor.reportingInterval = getInterval($scope.monitors[i].Monitor.Id); + } + + } + }); //-------------------------------------------------- @@ -194,8 +193,8 @@ $scope.loginData.eventServerInterval = intervalstring; - console.log ("SAVED: " + JSON.stringify($scope.loginData)); - ZMDataModel.setLogin($scope.loginData); + //console.log ("SAVED: " + JSON.stringify($scope.loginData)); + ZMDataModel.setLogin($scope.loginData); var pushstate = "enabled"; if ($scope.loginData.disablePush == true || $scope.loginData.isUseEventServer == false) @@ -224,15 +223,15 @@ platform: plat, token: $rootScope.apnsToken, state: pushstate - },1); + }, 1); } }); - - - + + + } else { if ($rootScope.apnsToken != "") // if its defined then this is post init work @@ -250,10 +249,10 @@ } // Give the above some time to transmit - - EventServer.disconnect(); - - + + EventServer.disconnect(); + + } @@ -322,10 +321,10 @@ //------------------------------------------------------------------------ $scope.monitors = []; $scope.monitors = message; - var res ,minterval; + var res, minterval; + - diff --git a/www/js/EventsGraphsCtrl.js b/www/js/EventsGraphsCtrl.js index 758e7ec8..cda51415 100644 --- a/www/js/EventsGraphsCtrl.js +++ b/www/js/EventsGraphsCtrl.js @@ -15,21 +15,25 @@ angular.module('zmApp.controllers').controller('zmApp.EventsGraphsCtrl', ['$ioni }; $scope.$on('$ionicView.loaded', function () { - // console.log("**VIEW ** Graph Ctrl Loaded"); + // console.log("**VIEW ** Graph Ctrl Loaded"); }); - - + + //---------------------------------------------------------------- // Alarm notification handling //---------------------------------------------------------------- - $scope.handleAlarms = function() - { - $rootScope.isAlarm=!$rootScope.isAlarm; - if (!$rootScope.isAlarm) - { - $rootScope.alarmCount="0"; - $ionicHistory.nextViewOptions({disableBack: true}); - $state.go("events", {"id": 0}, { reload: true }); + $scope.handleAlarms = function () { + $rootScope.isAlarm = !$rootScope.isAlarm; + if (!$rootScope.isAlarm) { + $rootScope.alarmCount = "0"; + $ionicHistory.nextViewOptions({ + disableBack: true + }); + $state.go("events", { + "id": 0 + }, { + reload: true + }); } }; @@ -41,16 +45,16 @@ angular.module('zmApp.controllers').controller('zmApp.EventsGraphsCtrl', ['$ioni // state, that effectively overwrites current view power management needs //------------------------------------------------------------------------ $scope.$on('$ionicView.enter', function () { - // console.log("**VIEW ** EventsGraphs Ctrl Entered"); + // console.log("**VIEW ** EventsGraphs Ctrl Entered"); ZMDataModel.setAwake(false); }); $scope.$on('$ionicView.leave', function () { - // console.log("**VIEW ** Graph Ctrl Left"); + // console.log("**VIEW ** Graph Ctrl Left"); }); $scope.$on('$ionicView.unloaded', function () { - // console.log("**VIEW ** Graph Ctrl Unloaded"); + // console.log("**VIEW ** Graph Ctrl Unloaded"); }); @@ -141,8 +145,8 @@ angular.module('zmApp.controllers').controller('zmApp.EventsGraphsCtrl', ['$ioni if (hrs) { // Apply a time based filter if I am not watching all events var cur = moment(); - endDate = cur.format("YYYY-MM-DD "+ZMDataModel.getTimeFormat()); - startDate = cur.subtract(hrs, 'hours').format("YYYY-MM-DD "+ZMDataModel.getTimeFormat()); + endDate = cur.format("YYYY-MM-DD " + ZMDataModel.getTimeFormat()); + startDate = cur.subtract(hrs, 'hours').format("YYYY-MM-DD " + ZMDataModel.getTimeFormat()); //console.log("Start and End " + startDate + "==" + endDate); ZMDataModel.zmLog("Generating graph for " + startDate + " to " + endDate); diff --git a/www/js/EventsModalGraphCtrl.js b/www/js/EventsModalGraphCtrl.js index 43fef865..1a5f818c 100644 --- a/www/js/EventsModalGraphCtrl.js +++ b/www/js/EventsModalGraphCtrl.js @@ -8,14 +8,14 @@ angular.module('zmApp.controllers').controller('EventsModalGraphCtrl', ['$scope', '$rootScope', 'zm', 'ZMDataModel', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$q', '$sce', 'carouselUtils', '$ionicPopup', '$translate', function ($scope, $rootScope, zm, ZMDataModel, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $q, $sce, carouselUtils, $ionicPopup, $translate) { - - + + var Graph2d; var tcGraph; var items; var groups; - var eventImageDigits=5; + var eventImageDigits = 5; var cv; var ctx; //var options; @@ -24,112 +24,114 @@ angular.module('zmApp.controllers').controller('EventsModalGraphCtrl', ['$scope' var current_data; var current_options; var btype; - var data,options; - - - - - - - $scope.$on('modal.shown', function (e,m) { - - if (m.id != 'modalgraph') + var data, options; + + + + + + + $scope.$on('modal.shown', function (e, m) { + + if (m.id != 'modalgraph') return; - - - console.log ("INSIDE MODAL GRAPH>>>>>>>>>>>>>>>>>"); - data = { - labels: ["January", "February", "March", "April", "May", "June", "July"], - datasets: [ - { - label: "My First dataset", - fillColor: "rgba(220,220,220,0.5)", - strokeColor: "rgba(220,220,220,0.8)", - highlightFill: "rgba(220,220,220,0.75)", - highlightStroke: "rgba(220,220,220,1)", - data: [65, 59, 80, 81, 56, 55, 40] + + + //console.log ("INSIDE MODAL GRAPH>>>>>>>>>>>>>>>>>"); + data = { + labels: ["January", "February", "March", "April", "May", "June", "July"], + datasets: [ + { + label: "My First dataset", + fillColor: "rgba(220,220,220,0.5)", + strokeColor: "rgba(220,220,220,0.8)", + highlightFill: "rgba(220,220,220,0.75)", + highlightStroke: "rgba(220,220,220,1)", + data: [65, 59, 80, 81, 56, 55, 40] }, - { - label: "My Second dataset", - fillColor: "rgba(151,187,205,0.5)", - strokeColor: "rgba(151,187,205,0.8)", - highlightFill: "rgba(151,187,205,0.75)", - highlightStroke: "rgba(151,187,205,1)", - data: [28, 48, 40, 19, 86, 27, 90] + { + label: "My Second dataset", + fillColor: "rgba(151,187,205,0.5)", + strokeColor: "rgba(151,187,205,0.8)", + highlightFill: "rgba(151,187,205,0.75)", + highlightStroke: "rgba(151,187,205,1)", + data: [28, 48, 40, 19, 86, 27, 90] } ] -}; - - options = { - - scales: { - yAxes:[{ - ticks: { - // beginAtZero:true, - min:-1, - }, + }; + + options = { + + scales: { + yAxes: [{ + ticks: { + // beginAtZero:true, + min: -1, + }, }], - xAxes:[{ - display:false + xAxes: [{ + display: false }] - }, + }, - responsive: true, - scaleBeginAtZero : true, - scaleShowGridLines : true, - scaleGridLineColor : "rgba(0,0,0,.05)", - scaleGridLineWidth : 1, - - - hover: - { - mode:'single', - onHover:function(obj) - { - if (obj.length > 0) - tapOrHover(obj[0]._index); - } - }, + responsive: true, + scaleBeginAtZero: true, + scaleShowGridLines: true, + scaleGridLineColor: "rgba(0,0,0,.05)", + scaleGridLineWidth: 1, - //String - A legend template - legendTemplate : '<ul class="tc-chart-js-legend"><% for (var i=0; i<datasets.length; i++){%><li><span style="background-color:<%=datasets[i].fillColor%>"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>' - }; - - cv = document.getElementById("eventchart"); - ctx = cv.getContext("2d"); - $timeout (function() { - var tcGraph2 = new Chart(ctx,{type:'bar', data: data, options:options}); }); + + hover: { + mode: 'single', + onHover: function (obj) { + if (obj.length > 0) + tapOrHover(obj[0]._index); + } + }, + + //String - A legend template + legendTemplate: '<ul class="tc-chart-js-legend"><% for (var i=0; i<datasets.length; i++){%><li><span style="background-color:<%=datasets[i].fillColor%>"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>' + }; + + cv = document.getElementById("eventchart"); + ctx = cv.getContext("2d"); + $timeout(function () { + var tcGraph2 = new Chart(ctx, { + type: 'bar', + data: data, + options: options + }); + }); }); - + //------------------------------------------------------- // we use this to reload the connkey if authkey changed //------------------------------------------------------ - - - $rootScope.$on("auth-success", function () { - ZMDataModel.zmDebug("EventModalCtrl: Re-login detected, resetting everything & re-generating connkey"); - - + + $rootScope.$on("auth-success", function () { + + ZMDataModel.zmDebug("EventModalCtrl: Re-login detected, resetting everything & re-generating connkey"); + + }); - - - - - + + + + + //------------------------------------------------------- // I was kidding, this is where it really is drawn // scout's promise //------------------------------------------------------ - - function drawGraphTC(event) - { - - $scope.eid = event.event.Event.Id; - - $scope.alarm_images=[]; - - /*data = { + + function drawGraphTC(event) { + + $scope.eid = event.event.Event.Id; + + $scope.alarm_images = []; + + /*data = { labels: [], datasets: [ { @@ -152,180 +154,178 @@ angular.module('zmApp.controllers').controller('EventsModalGraphCtrl', ['$scope' ] };*/ - - - data = { - labels: [], - datasets: [ - { - label: $translate.instant('kScore'), - fill:true, - backgroundColor: 'rgba(129, 207, 224, 1.0)', - borderColor: 'rgb(92, 147, 159)', - borderCapStyle: 'butt', - borderJoinStyle: 'miter', - pointBorderColor: "rgba(220,220,220,1)", - pointBackgroundColor: "#e74c3c", - - pointHoverRadius: 10, - pointHoverBackgroundColor: "#f39c12", - pointHoverBorderWidth: 1, - tension: 0.1, - - data: [], - frames: [] + + + data = { + labels: [], + datasets: [ + { + label: $translate.instant('kScore'), + fill: true, + backgroundColor: 'rgba(129, 207, 224, 1.0)', + borderColor: 'rgb(92, 147, 159)', + borderCapStyle: 'butt', + borderJoinStyle: 'miter', + pointBorderColor: "rgba(220,220,220,1)", + pointBackgroundColor: "#e74c3c", + + pointHoverRadius: 10, + pointHoverBackgroundColor: "#f39c12", + pointHoverBorderWidth: 1, + tension: 0.1, + + data: [], + frames: [] }, - + ] - }; - - onlyalarm_data = { - labels: [], - datasets: [ - { - label: $translate.instant ('kScore'), - backgroundColor: 'rgba(129, 207, 224, 1.0)', - borderColor: 'rgba(129, 207, 224, 1.0)', - hoverBackgroundColor: 'rgba(248, 148, 6,1.0)', - hoverBorderColor: 'rgba(248, 148, 6,1.0)', - data: [], - frames: [] + }; + + onlyalarm_data = { + labels: [], + datasets: [ + { + label: $translate.instant('kScore'), + backgroundColor: 'rgba(129, 207, 224, 1.0)', + borderColor: 'rgba(129, 207, 224, 1.0)', + hoverBackgroundColor: 'rgba(248, 148, 6,1.0)', + hoverBorderColor: 'rgba(248, 148, 6,1.0)', + data: [], + frames: [] }, - + ] - }; - - // Chart.js Options - options = { - - scales: { - yAxes:[{ - ticks: { - // beginAtZero:true, - min:-1, - }, + }; + + // Chart.js Options + options = { + + scales: { + yAxes: [{ + ticks: { + // beginAtZero:true, + min: -1, + }, }], - xAxes:[{ - display:false + xAxes: [{ + display: false }] - }, + }, - responsive: true, - scaleBeginAtZero : true, - scaleShowGridLines : true, - scaleGridLineColor : "rgba(0,0,0,.05)", - scaleGridLineWidth : 1, - - - hover: - { - mode:'single', - onHover:function(obj) - { - if (obj.length > 0) - tapOrHover(obj[0]._index); - } - }, + responsive: true, + scaleBeginAtZero: true, + scaleShowGridLines: true, + scaleGridLineColor: "rgba(0,0,0,.05)", + scaleGridLineWidth: 1, + + + hover: { + mode: 'single', + onHover: function (obj) { + if (obj.length > 0) + tapOrHover(obj[0]._index); + } + }, + + //String - A legend template + legendTemplate: '<ul class="tc-chart-js-legend"><% for (var i=0; i<datasets.length; i++){%><li><span style="background-color:<%=datasets[i].fillColor%>"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>' + }; - //String - A legend template - legendTemplate : '<ul class="tc-chart-js-legend"><% for (var i=0; i<datasets.length; i++){%><li><span style="background-color:<%=datasets[i].fillColor%>"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>' - }; - $scope.graphWidth = event.event.Frame.length * 10; if ($scope.graphWidth < $rootScope.devWidth) $scope.graphWidth = $rootScope.devWidth; - - // ZMDataModel.zmLog ("Changing graph width to " + $scope.graphWidth); - - for (var i=0; i< event.event.Frame.length; i++) - { - - + + // ZMDataModel.zmLog ("Changing graph width to " + $scope.graphWidth); + + for (var i = 0; i < event.event.Frame.length; i++) { + + data.labels.push(event.event.Frame[i].TimeStamp); //data.labels.push(' '); data.datasets[0].data.push(event.event.Frame[i].Score); - data.datasets[0].frames.push({x:event.event.Frame[i].TimeStamp, - y:event.event.Frame[i].Score, - 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", - - }); - - if (event.event.Frame[i].Type=="Alarm") - { - + data.datasets[0].frames.push({ + x: event.event.Frame[i].TimeStamp, + y: event.event.Frame[i].Score, + 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", + + }); + + if (event.event.Frame[i].Type == "Alarm") { + onlyalarm_data.labels.push(event.event.Frame[i].TimeStamp); //data.labels.push(' '); onlyalarm_data.datasets[0].data.push(event.event.Frame[i].Score); - onlyalarm_data.datasets[0].frames.push({x:event.event.Frame[i].TimeStamp, - y:event.event.Frame[i].Score, - 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", - - }); + onlyalarm_data.datasets[0].frames.push({ + x: event.event.Frame[i].TimeStamp, + y: event.event.Frame[i].Score, + 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", + + }); } - + } - + $scope.dataReady = true; - - cv = document.getElementById("tcchart"); - ctx = cv.getContext("2d"); - - if (ZMDataModel.getLogin().timelineModalGraphType == 'all') - { + + cv = document.getElementById("tcchart"); + ctx = cv.getContext("2d"); + + if (ZMDataModel.getLogin().timelineModalGraphType == 'all') { btype = 'line'; current_data = data; - } - else - { + } else { btype = 'bar'; current_data = onlyalarm_data; } - $timeout(function() { - tcGraph = new Chart(ctx,{type:btype, data: current_data, options:options});}); - - cv.onclick = function(e) - { - var b = tcGraph.getElementAtEvent(e); - if (b.length > 0) - { + $timeout(function () { + tcGraph = new Chart(ctx, { + type: btype, + data: current_data, + options: options + }); + }); + + cv.onclick = function (e) { + var b = tcGraph.getElementAtEvent(e); + if (b.length > 0) { tapOrHover(b[0]._index); } }; } - - function tapOrHover(ndx) - { - - $timeout (function() { - - - //console.log ("You tapped " + ndx); - $scope.alarm_images=[]; - $scope.playbackURL = ZMDataModel.getLogin().url; - var items = current_data.datasets[0].frames[ndx]; - $scope.alarm_images.push({ - relativePath:items.relativePath, - fid:items.fid, - fname:items.fname, - score:items.score, - time:moment(items.x).format("MMM D,"+ZMDataModel.getTimeFormatSec()), - eid:items.eid}); + + function tapOrHover(ndx) { + + $timeout(function () { + + + //console.log ("You tapped " + ndx); + $scope.alarm_images = []; + $scope.playbackURL = ZMDataModel.getLogin().url; + var items = current_data.datasets[0].frames[ndx]; + $scope.alarm_images.push({ + relativePath: items.relativePath, + fid: items.fid, + fname: items.fname, + score: items.score, + time: moment(items.x).format("MMM D," + ZMDataModel.getTimeFormatSec()), + eid: items.eid }); - + }); + } - - - + + + //-------------------------------------------------------- // utility function //-------------------------------------------------------- @@ -397,8 +397,6 @@ angular.module('zmApp.controllers').controller('EventsModalGraphCtrl', ['$scope' return number; } - - -}]); +}]);
\ No newline at end of file diff --git a/www/js/FirstUseCtrl.js b/www/js/FirstUseCtrl.js index 66b7712c..bf3f328d 100644 --- a/www/js/FirstUseCtrl.js +++ b/www/js/FirstUseCtrl.js @@ -2,10 +2,10 @@ /* jslint browser: true*/ /* global cordova,StatusBar,angular,console */ -angular.module('zmApp.controllers').controller('zmApp.FirstUseCtrl', ['$scope','$ionicSideMenuDelegate', 'zm', '$stateParams', '$ionicHistory','$state', 'ZMDataModel', '$rootScope', '$ionicPopup', '$translate', function ($scope,$ionicSideMenuDelegate,zm, $stateParams, $ionicHistory, $state, ZMDataModel, $rootScope, $ionicPopup, $translate) { -$scope.openMenu = function () { - $ionicSideMenuDelegate.toggleLeft(); - }; +angular.module('zmApp.controllers').controller('zmApp.FirstUseCtrl', ['$scope', '$ionicSideMenuDelegate', 'zm', '$stateParams', '$ionicHistory', '$state', 'ZMDataModel', '$rootScope', '$ionicPopup', '$translate', function ($scope, $ionicSideMenuDelegate, zm, $stateParams, $ionicHistory, $state, ZMDataModel, $rootScope, $ionicPopup, $translate) { + $scope.openMenu = function () { + $ionicSideMenuDelegate.toggleLeft(); + }; @@ -13,24 +13,25 @@ $scope.openMenu = function () { // Controller Main //------------------------------------------------------------------------ $scope.$on('$ionicView.enter', function () { - console.log("**VIEW ** FirstUse Ctrl Entered"); + //console.log("**VIEW ** FirstUse Ctrl Entered"); $ionicSideMenuDelegate.canDragContent(true); - + }); - - $scope.switchLang = function() - { + + $scope.switchLang = function () { $scope.lang = ZMDataModel.getLanguages(); - $scope.myopt = {lang:""}; - + $scope.myopt = { + lang: "" + }; + $rootScope.zmPopup = $ionicPopup.show({ scope: $scope, template: '<ion-radio-fix ng-repeat="item in lang" ng-value="item.value" ng-model="myopt.lang"> {{item.text}} </ion-radio-fix>', title: $translate.instant('kSelectLanguage'), - + buttons: [ { text: $translate.instant('kButtonCancel'), @@ -42,38 +43,38 @@ $scope.openMenu = function () { { text: $translate.instant('kButtonOk'), onTap: function (e) { - ZMDataModel.zmLog("Language selected:"+$scope.myopt.lang); + ZMDataModel.zmLog("Language selected:" + $scope.myopt.lang); ZMDataModel.setDefaultLanguage($scope.myopt.lang, true); - - + + //return "OK"; } } ] }); - - + + }; - - $scope.goToLogin = function() - { + + $scope.goToLogin = function () { $ionicHistory.nextViewOptions({ - disableAnimate: false, - disableBack: true - }); - $state.go("login" ,{"wizard": false}); + disableAnimate: false, + disableBack: true + }); + $state.go("login", { + "wizard": false + }); }; - - $scope.goToWizard = function() - { + + $scope.goToWizard = function () { $ionicHistory.nextViewOptions({ - disableAnimate: false, - disableBack: true - }); - $state.go("wizard" ); + disableAnimate: false, + disableBack: true + }); + $state.go("wizard"); }; - - -}]); + + +}]);
\ No newline at end of file diff --git a/www/js/HelpCtrl.js b/www/js/HelpCtrl.js index 15504f7b..8506b2f1 100644 --- a/www/js/HelpCtrl.js +++ b/www/js/HelpCtrl.js @@ -2,66 +2,67 @@ /* jslint browser: true*/ /* global cordova,StatusBar,angular,console, Masonry */ -angular.module('zmApp.controllers').controller('zmApp.HelpCtrl', ['$scope', '$rootScope', '$ionicModal', 'ZMDataModel','$ionicSideMenuDelegate', '$ionicHistory', '$state', '$translate', '$q', '$templateRequest', '$sce', '$compile', function ($scope, $rootScope, $ionicModal, ZMDataModel,$ionicSideMenuDelegate, $ionicHistory, $state, $translate, $q, $templateRequest, $sce, $compile) { -$scope.openMenu = function () { - $ionicSideMenuDelegate.toggleLeft(); - }; +angular.module('zmApp.controllers').controller('zmApp.HelpCtrl', ['$scope', '$rootScope', '$ionicModal', 'ZMDataModel', '$ionicSideMenuDelegate', '$ionicHistory', '$state', '$translate', '$q', '$templateRequest', '$sce', '$compile', function ($scope, $rootScope, $ionicModal, ZMDataModel, $ionicSideMenuDelegate, $ionicHistory, $state, $translate, $q, $templateRequest, $sce, $compile) { + $scope.openMenu = function () { + $ionicSideMenuDelegate.toggleLeft(); + }; //---------------------------------------------------------------- // Alarm notification handling //---------------------------------------------------------------- - $scope.handleAlarms = function() - { - $rootScope.isAlarm=!$rootScope.isAlarm; - if (!$rootScope.isAlarm) - { - $rootScope.alarmCount="0"; - $ionicHistory.nextViewOptions({disableBack: true}); - $state.go("events", {"id": 0}, { reload: true }); + $scope.handleAlarms = function () { + $rootScope.isAlarm = !$rootScope.isAlarm; + if (!$rootScope.isAlarm) { + $rootScope.alarmCount = "0"; + $ionicHistory.nextViewOptions({ + disableBack: true + }); + $state.go("events", { + "id": 0 + }, { + reload: true + }); } }; - - function insertHelp() - { - - - + //---------------------------------------------------------------- + // This function dynamically inserts the relevant help text file + // based on selected language + //---------------------------------------------------------------- + + function insertHelp() { + var l = ZMDataModel.getDefaultLanguage() || 'en'; - var lang = "lang/help/help-"+l+".html"; - console.log ("LANG IS " + lang); + var lang = "lang/help/help-" + l + ".html"; + //console.log ("LANG IS " + lang); var templateUrl = $sce.getTrustedResourceUrl(lang); - var lang_fb= "lang/help/help-"+"en"+".html"; + var lang_fb = "lang/help/help-" + "en" + ".html"; var templateUrlFB = $sce.getTrustedResourceUrl(lang_fb); - + $templateRequest(lang) - .then (function(template) - { + .then(function (template) { var elem = angular.element(document.getElementById('insertHelp')); - $compile(elem.html(template).contents())($scope); - }, - function (error) - { - ZMDataModel.zmLog ("Language file " + lang + " not found, falling back"); + $compile(elem.html(template).contents())($scope); + }, + function (error) { + ZMDataModel.zmLog("Language file " + lang + " not found, falling back"); $templateRequest(templateUrlFB) - .then (function( template) - { + .then(function (template) { var elem = angular.element(document.getElementById('insertHelp')); $compile(elem.html(template).contents())($scope); - }, - function (error) - { + }, + function (error) { ZMDataModel.zmLog("fallback help not found"); - }); + }); } - ); - - - + ); + + + } - //------------------------------------------------------------------------- + //------------------------------------------------------------------------- // Lets make sure we set screen dim properly as we enter // The problem is we enter other states before we leave previous states // from a callback perspective in ionic, so we really can't predictably @@ -73,11 +74,11 @@ $scope.openMenu = function () { ZMDataModel.setAwake(false); $scope.zmAppVersion = ZMDataModel.getAppVersion(); insertHelp(); - - - + + + }); -}]); +}]);
\ No newline at end of file diff --git a/www/js/ImportantMessageCtrl.js b/www/js/ImportantMessageCtrl.js index bbb34c32..814359cf 100644 --- a/www/js/ImportantMessageCtrl.js +++ b/www/js/ImportantMessageCtrl.js @@ -2,10 +2,10 @@ /* jslint browser: true*/ /* global cordova,StatusBar,angular,console */ -angular.module('zmApp.controllers').controller('zmApp.ImportantMessageCtrl', ['$scope','$ionicSideMenuDelegate', 'zm', '$stateParams', '$timeout','$rootScope', function ($scope,$ionicSideMenuDelegate,zm, $stateParams, $timeout, $rootScope) { -$scope.openMenu = function () { - $ionicSideMenuDelegate.toggleLeft(); - }; +angular.module('zmApp.controllers').controller('zmApp.ImportantMessageCtrl', ['$scope', '$ionicSideMenuDelegate', 'zm', '$stateParams', '$timeout', '$rootScope', function ($scope, $ionicSideMenuDelegate, zm, $stateParams, $timeout, $rootScope) { + $scope.openMenu = function () { + $ionicSideMenuDelegate.toggleLeft(); + }; @@ -21,8 +21,8 @@ $scope.openMenu = function () { $scope.recommendedVersion = zm.recommendedAppVersion; }); - - $scope.openMenu = function () { + + $scope.openMenu = function () { $timeout(function () { $rootScope.stateofSlide = $ionicSideMenuDelegate.isOpen(); }, 500); @@ -30,4 +30,4 @@ $scope.openMenu = function () { $ionicSideMenuDelegate.toggleLeft(); }; -}]); +}]);
\ No newline at end of file diff --git a/www/js/LogCtrl.js b/www/js/LogCtrl.js index 31e580e3..76683257 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', 'ZMDataModel', '$ionicSideMenuDelegate', '$fileLogger', '$cordovaEmailComposer', '$ionicPopup', '$timeout', '$ionicHistory', '$state', '$interval', '$ionicLoading', '$translate', function ($scope, $rootScope,zm, $ionicModal, ZMDataModel, $ionicSideMenuDelegate, $fileLogger, $cordovaEmailComposer, $ionicPopup, $timeout, $ionicHistory, $state, $interval, $ionicLoading, $translate) { +angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$rootScope', 'zm', '$ionicModal', 'ZMDataModel', '$ionicSideMenuDelegate', '$fileLogger', '$cordovaEmailComposer', '$ionicPopup', '$timeout', '$ionicHistory', '$state', '$interval', '$ionicLoading', '$translate', function ($scope, $rootScope, zm, $ionicModal, ZMDataModel, $ionicSideMenuDelegate, $fileLogger, $cordovaEmailComposer, $ionicPopup, $timeout, $ionicHistory, $state, $interval, $ionicLoading, $translate) { $scope.openMenu = function () { $ionicSideMenuDelegate.toggleLeft(); }; @@ -10,31 +10,29 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo //--------------------------------------------------------------- // Controller main //--------------------------------------------------------------- - - var intervalLogUpdateHandle; - - document.addEventListener("pause", onPause, false); + + var intervalLogUpdateHandle; + + document.addEventListener("pause", onPause, false); document.addEventListener("resume", onResume, false); - - function onPause() - { + + function onPause() { ZMDataModel.zmDebug("LogCtrl: pause called, killing log timer"); // $interval.cancel(intervalLogUpdateHandle); } - - - function onResume() - { + + + function onResume() { ZMDataModel.zmDebug("LogCtrl: resume called, starting log timer"); - /* intervalLogUpdateHandle = $interval(function () + /* intervalLogUpdateHandle = $interval(function () { loadLogs(); }.bind(this), 3000);*/ - + loadLogs(); } - + $scope.deleteLogs = function () { @@ -57,14 +55,18 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo //---------------------------------------------------------------- // Alarm notification handling //---------------------------------------------------------------- - $scope.handleAlarms = function() - { - $rootScope.isAlarm=!$rootScope.isAlarm; - if (!$rootScope.isAlarm) - { - $rootScope.alarmCount="0"; - $ionicHistory.nextViewOptions({disableBack: true}); - $state.go("events", {"id": 0}, { reload: true }); + $scope.handleAlarms = function () { + $rootScope.isAlarm = !$rootScope.isAlarm; + if (!$rootScope.isAlarm) { + $rootScope.alarmCount = "0"; + $ionicHistory.nextViewOptions({ + disableBack: true + }); + $state.go("events", { + "id": 0 + }, { + reload: true + }); } }; @@ -75,7 +77,7 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo $scope.sendEmail = function (logstring) { $ionicPopup.confirm({ title: $translate.instant('kSensitiveTitle'), - template: $rootScope.appName+' '+$translate.instant('kSensitiveBody') + template: $rootScope.appName + ' ' + $translate.instant('kSensitiveBody') }) .then(function (res) { if (res) sendEmailReally(logstring); @@ -88,79 +90,77 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo //-------------------------------------------------------------------------- function sendEmailReally(logstring) { if (window.cordova) { - - - - - - - // do my best to replace sensitive information - var loginData = ZMDataModel.getLogin(); - - - // We don't need this anymore as zmLog and zmDebug now strip passwords - /*if (loginData.password !="") - { - var re1 = new RegExp(loginData.password, "g"); - logstring = logstring.replace(re1, "<deleted>"); - }*/ - // keep the protocol, helps to debug - 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, "<server>"); - } - urlNoProtocol = loginData.streamingurl.replace(/.*?:\/\//, ""); - if (urlNoProtocol != "") - { - var re3 = new RegExp(urlNoProtocol, "g"); - logstring = logstring.replace(re3, "<server>"); - } - - urlNoProtocol = loginData.eventServer.replace(/.*?:\/\//, ""); - if (urlNoProtocol != "") - { - var re4 = new RegExp(urlNoProtocol, "g"); - logstring = logstring.replace(re4, "<server>"); - } - - window.plugins.emailComposer.showEmailComposerWithCallback(callback,$rootScope.appName+' logs',logstring,[zm.authoremail]); - - + + + + + + + // do my best to replace sensitive information + var loginData = ZMDataModel.getLogin(); + + + // We don't need this anymore as zmLog and zmDebug now strip passwords + /*if (loginData.password !="") + { + var re1 = new RegExp(loginData.password, "g"); + logstring = logstring.replace(re1, "<deleted>"); + }*/ + // keep the protocol, helps to debug + 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, "<server>"); + } + urlNoProtocol = loginData.streamingurl.replace(/.*?:\/\//, ""); + if (urlNoProtocol != "") { + var re3 = new RegExp(urlNoProtocol, "g"); + logstring = logstring.replace(re3, "<server>"); + } + + urlNoProtocol = loginData.eventServer.replace(/.*?:\/\//, ""); + if (urlNoProtocol != "") { + var re4 = new RegExp(urlNoProtocol, "g"); + logstring = logstring.replace(re4, "<server>"); + } + + window.plugins.emailComposer.showEmailComposerWithCallback(callback, $rootScope.appName + ' logs', logstring, [zm.authoremail]); + + } 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 dlogstring = "version:"+$scope.zmAppVersion + "\n" + logstring; - var blob = new Blob([dlogstring], {type: "text/plain;charset=utf-8"}); -saveAs(blob, fname); + // console.log("Using default email client to send data"); + + var fname = $rootScope.appName + "-logs-" + + moment().format('MMM-DD-YY_HH-mm-ss') + ".txt"; + + var dlogstring = "version:" + $scope.zmAppVersion + "\n" + logstring; + var blob = new Blob([dlogstring], { + type: "text/plain;charset=utf-8" + }); + saveAs(blob, fname); } } - - function callback () - { - console.log ("EMAIL SENT"); + + function callback() { + // console.log ("EMAIL SENT"); + ZMDataModel.zmDebug("Email sent callback called"); } - - function loadLogs() - { + + function loadLogs() { //console.log ("GETTING LOGS"); - - $ionicLoading.show({ - template: $translate.instant('kLoading'), - noBackdrop: true, - duration: zm.loadingTimeout - }); - + + $ionicLoading.show({ + template: $translate.instant('kLoading'), + noBackdrop: true, + duration: zm.loadingTimeout + }); + $fileLogger.getLogfile().then(function (l) { - + $scope.zmLog.logString = l.split('\n').reverse().join('\n'); $ionicLoading.hide(); }, @@ -184,26 +184,25 @@ saveAs(blob, fname); $scope.zmLog = { logString: "" }; - + $scope.zmAppVersion = ZMDataModel.getAppVersion(); - - + + /* intervalLogUpdateHandle = $interval(function () { loadLogs(); }.bind(this), 3000);*/ - + loadLogs(); - + }); - - $scope.$on('$ionicView.leave', function () - { + + $scope.$on('$ionicView.leave', function () { //console.log ("Deleting Log interval..."); - // $interval.cancel(intervalLogUpdateHandle); + // $interval.cancel(intervalLogUpdateHandle); }); -}]); +}]);
\ No newline at end of file diff --git a/www/js/LoginCtrl.js b/www/js/LoginCtrl.js index 439b9f56..b71058cf 100644 --- a/www/js/LoginCtrl.js +++ b/www/js/LoginCtrl.js @@ -2,7 +2,7 @@ /* jslint browser: true*/ /* global cordova,StatusBar,angular,console,alert,URI, localforage */ -angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$rootScope', 'zm', '$ionicModal', 'ZMDataModel', '$ionicSideMenuDelegate', '$ionicPopup', '$http', '$q', '$ionicLoading', 'zmAutoLogin', '$cordovaPinDialog', 'EventServer', '$ionicHistory', '$state', '$ionicActionSheet', 'SecuredPopups', '$stateParams', '$translate', function ($scope, $rootScope, zm, $ionicModal, ZMDataModel, $ionicSideMenuDelegate, $ionicPopup, $http, $q, $ionicLoading, zmAutoLogin, $cordovaPinDialog, EventServer, $ionicHistory, $state, $ionicActionSheet, SecuredPopups, $stateParams, $translate) { +angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$rootScope', 'zm', '$ionicModal', 'ZMDataModel', '$ionicSideMenuDelegate', '$ionicPopup', '$http', '$q', '$ionicLoading', 'zmAutoLogin', '$cordovaPinDialog', 'EventServer', '$ionicHistory', '$state', '$ionicActionSheet', 'SecuredPopups', '$stateParams', '$translate', function ($scope, $rootScope, zm, $ionicModal, ZMDataModel, $ionicSideMenuDelegate, $ionicPopup, $http, $q, $ionicLoading, zmAutoLogin, $cordovaPinDialog, EventServer, $ionicHistory, $state, $ionicActionSheet, SecuredPopups, $stateParams, $translate) { $scope.openMenu = function () { $ionicSideMenuDelegate.toggleLeft(); }; @@ -18,26 +18,24 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r isUseEventServer: false }; - $scope.check.isUseAuth = ($scope.loginData.isUseAuth ) ? true : false; + $scope.check.isUseAuth = ($scope.loginData.isUseAuth) ? true : false; $scope.check.isUseEventServer = ($scope.loginData.isUseEventServer == true) ? true : false; - - + + document.addEventListener("pause", onPause, false); document.addEventListener("resume", onResume, false); - - function onResume() - { - ZMDataModel.zmLog ("Login screen resumed"); - + + function onResume() { + ZMDataModel.zmLog("Login screen resumed"); + } - - function onPause() - { - ZMDataModel.zmLog ("Login screen going to background, saving data"); - localforage.setItem ("settings-temp-data",$scope.loginData); - + + function onPause() { + ZMDataModel.zmLog("Login screen going to background, saving data"); + localforage.setItem("settings-temp-data", $scope.loginData); + } - + //---------------------------------------------------------------- // Alarm notification handling @@ -60,43 +58,46 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r //---------------------------------------------------------------- // Specifies a linked profile to try if this profile fails //---------------------------------------------------------------- - - $scope.selectFallback = function () - { + + $scope.selectFallback = function () { var as = Object.keys(ZMDataModel.getServerGroups()); - if (as.length < 2) - { - $rootScope.zmPopup= SecuredPopups.show('alert',{ - title: $translate.instant('kError'), - template: $translate.instant('kFallback2Configs') - }); + if (as.length < 2) { + $rootScope.zmPopup = SecuredPopups.show('alert', { + title: $translate.instant('kError'), + template: $translate.instant('kFallback2Configs') + }); return; - + } - var ab = [{text:$translate.instant('kClear')}]; + var ab = [{ + text: $translate.instant('kClear') + }]; var ld = ZMDataModel.getLogin(); - as.forEach(function(item) { if (item != ld.serverName) ab.push({text:item});}); + as.forEach(function (item) { + if (item != ld.serverName) ab.push({ + text: item + }); + }); var sheet = $ionicActionSheet.show({ buttons: ab, titleText: $translate.instant('kSelectFallback'), cancelText: $translate.instant('kButtonCancel'), - cancel: function() {}, - buttonClicked: function (index) - { - console.log ("YOU WANT " + ab[index].text + index); - if (index==0) - $scope.loginData.fallbackConfiguration=""; + cancel: function () {}, + buttonClicked: function (index) { + //console.log ("YOU WANT " + ab[index].text + index); + if (index == 0) + $scope.loginData.fallbackConfiguration = ""; else $scope.loginData.fallbackConfiguration = ab[index].text; ZMDataModel.setLogin($scope.loginData); return true; } }); - - - + + + }; - + //---------------------------------------------------------------- // This is called when the user changes profiles //---------------------------------------------------------------- @@ -111,21 +112,20 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r // add cancel code.. }, buttonClicked: function (index) { - //console.log ("YOU WANT " + serverbuttons[index].text + " INDEX " + index); - - if (serverbuttons[index].text == $translate.instant('kServerAdd')+"...") - { - + //console.log ("YOU WANT " + serverbuttons[index].text + " INDEX " + index); + + if (serverbuttons[index].text == $translate.instant('kServerAdd') + "...") { + $scope.loginData = angular.copy(ZMDataModel.getDefaultLoginObject()); return true; } - + var zmServers = ZMDataModel.getServerGroups(); $scope.loginData = zmServers[serverbuttons[index].text]; - - console.log ("NEW LOGIN OBJECT IS " + JSON.stringify($scope.loginData)); - - + + //console.log ("NEW LOGIN OBJECT IS " + JSON.stringify($scope.loginData)); + + $scope.check.isUseAuth = ($scope.loginData.isUseAuth) ? true : false; $scope.check.isUseEventServer = ($scope.loginData.isUseEventServer == true) ? true : false; @@ -142,20 +142,19 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r }, destructiveButtonClicked: function () { - - - if (!$scope.loginData.serverName) - { + + + if (!$scope.loginData.serverName) { ZMDataModel.zmDebug("cannot delete empty entry"); return true; - - + + } var zmServers = ZMDataModel.getServerGroups(); //console.log ("YOU WANT TO DELETE " + $scope.loginData.serverName); //console.log ("LENGTH OF SERVERS IS " + Object.keys(zmServers).length); if (Object.keys(zmServers).length > 1) { - + ZMDataModel.zmLog("Deleting " + $scope.loginData.serverName); delete zmServers[$scope.loginData.serverName]; ZMDataModel.setServerGroups(zmServers); @@ -166,14 +165,16 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r ZMDataModel.setLogin($scope.loginData); availableServers = Object.keys(ZMDataModel.getServerGroups()); - serverbuttons = [{text:$translate.instant('kServerAdd')+"..."}]; + serverbuttons = [{ + text: $translate.instant('kServerAdd') + "..." + }]; for (var servIter = 0; servIter < availableServers.length; servIter++) { serverbuttons.push({ text: availableServers[servIter] }); //console.log("ADDING : " + availableServers[servIter]); } - console.log (">>>>>>>delete: server buttons " + JSON.stringify(serverbuttons)); + //console.log (">>>>>>>delete: server buttons " + JSON.stringify(serverbuttons)); } else { ZMDataModel.displayBanner('error', [$translate.instant('kBannerCannotDeleteNeedOne')]); @@ -189,7 +190,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r //---------------------------------------------------------------- // This is when you tap on event server settings //---------------------------------------------------------------- - + $scope.eventServerSettings = function () { ZMDataModel.zmDebug("Saving settings before going to Event Server settings"); //console.log ( "My loginData saved " + JSON.stringify($scope.loginData)); @@ -198,7 +199,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r }; - + //------------------------------------------------------------------------- // Lets make sure we set screen dim properly as we enter @@ -212,79 +213,70 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r ZMDataModel.setAwake(false); var ld = ZMDataModel.getLogin(); oldName = ld.serverName; - + availableServers = Object.keys(ZMDataModel.getServerGroups()); - serverbuttons = [{text:$translate.instant('kServerAdd')+"..."}]; + serverbuttons = [{ + text: $translate.instant('kServerAdd') + "..." + }]; for (var servIter = 0; servIter < availableServers.length; servIter++) { serverbuttons.push({ - text: availableServers[servIter] - }); - - - console.log (">>>>>>>ionicview enter: server buttons " + JSON.stringify(serverbuttons)); + text: availableServers[servIter] + }); + + + //console.log (">>>>>>>ionicview enter: server buttons " + JSON.stringify(serverbuttons)); } - - - - ZMDataModel.zmDebug ("Does login need to hear the wizard? " + $stateParams.wizard); - - if ($stateParams.wizard == "true") - { - ZMDataModel.zmLog ("Creating new login entry for wizard"); + + + + ZMDataModel.zmDebug("Does login need to hear the wizard? " + $stateParams.wizard); + + if ($stateParams.wizard == "true") { + ZMDataModel.zmLog("Creating new login entry for wizard"); $scope.loginData = angular.copy(ZMDataModel.getDefaultLoginObject()); $scope.loginData.serverName = $rootScope.wizard.serverName; $scope.loginData.url = $rootScope.wizard.loginURL; $scope.loginData.apiurl = $rootScope.wizard.apiURL; $scope.loginData.streamingurl = $rootScope.wizard.streamingURL; - if ($rootScope.wizard.useauth && $rootScope.wizard.usezmauth) - { + if ($rootScope.wizard.useauth && $rootScope.wizard.usezmauth) { $scope.loginData.username = $rootScope.wizard.zmuser; $scope.loginData.password = $rootScope.wizard.zmpassword; - } - else - { + } else { $scope.loginData.isUseAuth = false; } - - if ((/^https:\/\//i.test($scope.loginData.url))) - { + + if ((/^https:\/\//i.test($scope.loginData.url))) { $scope.loginData.useSSL = true; } - - - } - - else - { + + + } else { var savedData; - localforage.getItem("settings-temp-data").then (function(value) { + localforage.getItem("settings-temp-data").then(function (value) { savedData = value; //= zmStorageService.getObject ("settings-temp-data"); - if (! ZMDataModel.isEmpty(savedData)) - { + if (!ZMDataModel.isEmpty(savedData)) { $scope.loginData = savedData; - ZMDataModel.zmLog ("retrieved pre-stored loginData on past pause: " + JSON.stringify($scope.loginData)); + ZMDataModel.zmLog("retrieved pre-stored loginData on past pause: " + JSON.stringify($scope.loginData)); localforage.removeItem("settings-temp-data"); //zmStorageService.setObject("settings-temp-data", {}); - } - else - { - ZMDataModel.zmLog ("Not recovering login data as its empty"); + } else { + ZMDataModel.zmLog("Not recovering login data as its empty"); } }); } - - + + }); - - + + $scope.$on('$ionicView.beforeLeave', function () { //console.log("**VIEW ** LoginCtrl Entered"); - - - + + + }); - + //---------------------------------------------------------------- // We need to make sure that if the user changes a profile, that // its saved, which involves re-auth. Not doing this will mess @@ -295,33 +287,34 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r // So instead, if check if the profile name has changed - if it has // we block state change and ask the user to save //---------------------------------------------------------------- - + // credit: http://stackoverflow.com/questions/33385610/ionic-prevent-navigation-on-leave - $scope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) - { + $scope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) { ZMDataModel.setAwake(false); var ld = ZMDataModel.getLogin(); - - if(ld.serverName != oldName ) - { + + if (ld.serverName != oldName) { event.preventDefault(); - $rootScope.zmPopup = SecuredPopups.show('alert',{ + $rootScope.zmPopup = SecuredPopups.show('alert', { title: $translate.instant('kPleaseSave'), - template: $translate.instant('kProfileChangeNotification', {oldName: oldName, newName:ld.serverName}) - + template: $translate.instant('kProfileChangeNotification', { + oldName: oldName, + newName: ld.serverName + }) + }); - + } }); - - $rootScope.$on('$stateChangeSuccess', function(){ - $scope.ignoreDirty = false; + + $rootScope.$on('$stateChangeSuccess', function () { + $scope.ignoreDirty = false; }); - + // Make a noble attempt at deciphering - - + + //-------------------------------------------------------------------------- // When PIN is enabled, this is called to specify a PIN // FIXME: Get rid of cordovaPinDialog. It's really not needed @@ -374,22 +367,19 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r if (/^https:\/\//i.test($scope.loginData.url)) { $scope.loginData.useSSL = true; + } else { + $scope.loginData.useSSL = false; } - else - {$scope.loginData.useSSL = false;} - - if ($scope.loginData.url.slice(-1)=='/') - { + + if ($scope.loginData.url.slice(-1) == '/') { $scope.loginData.apiurl = $scope.loginData.url + "api"; $scope.loginData.streamingurl = $scope.loginData.url + "cgi-bin"; - } - else - { + } else { $scope.loginData.apiurl = $scope.loginData.url + "/api"; $scope.loginData.streamingurl = $scope.loginData.url + "/cgi-bin"; } - - + + }; //------------------------------------------------------------------------------- // Adds http to url if not present @@ -424,7 +414,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r function saveItems(showalert) { - console.log ("*********** SAVE ITEMS CALLED "); + //console.log ("*********** SAVE ITEMS CALLED "); //console.log('Saving login'); ZMDataModel.setFirstUse(false); @@ -439,13 +429,13 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r $scope.loginData.apiurl = $scope.loginData.apiurl.replace(/\s/g, ""); $scope.loginData.streamingurl = $scope.loginData.streamingurl.replace(/\s/g, ""); $scope.loginData.eventServer = $scope.loginData.eventServer.replace(/\s/g, ""); - + $scope.loginData.username = $scope.loginData.username.trim(); - - $scope.loginData.isUseAuth = ($scope.check.isUseAuth) ? true:false; + + $scope.loginData.isUseAuth = ($scope.check.isUseAuth) ? true : false; $scope.loginData.isUseEventServer = ($scope.check.isUseEventServer) ? true : false; if ($scope.loginData.url.slice(-1) == '/') { @@ -526,7 +516,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r platform: $rootScope.platformOS, token: $rootScope.apnsToken, state: "disabled" - },1); + }, 1); } } @@ -542,7 +532,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r platform: $rootScope.platformOS, token: $rootScope.apnsToken, state: "enabled" - },1); + }, 1); } EventServer.sendMessage("control", { type: 'filter', @@ -552,12 +542,12 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r } - + // lets logout - ZMDataModel.zmDebug ("Logging out of current session..."); + ZMDataModel.zmDebug("Logging out of current session..."); $rootScope.authSession = "undefined"; $http({ - method: 'POST', + method: 'POST', //withCredentials: true, url: $scope.loginData.url + '/index.php', headers: { @@ -578,10 +568,9 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r view: "login" } }) - .finally ( function (ans) - { - - zmAutoLogin.doLogin("<button class='button button-clear' style='line-height: normal; min-height: 0; min-width: 0; color:#fff;' ng-click='$root.cancelAuth()'><i class='ion-close-circled'></i> "+$translate.instant('kAuthenticating')+"...</button>") + .finally(function (ans) { + + zmAutoLogin.doLogin("<button class='button button-clear' style='line-height: normal; min-height: 0; min-width: 0; color:#fff;' ng-click='$root.cancelAuth()'><i class='ion-close-circled'></i> " + $translate.instant('kAuthenticating') + "...</button>") // Do the happy menu only if authentication works // if it does not work, there is an emitter for auth // fail in app.js that will be called to show an error @@ -590,25 +579,24 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r .then(function (data) { // Now let's validate if the API works - + // note that due to reachability, it might have switched to another server - - if ($scope.loginData.serverName != ZMDataModel.getLogin().serverName) - { - ZMDataModel.zmDebug (">>> Server information has changed, likely a fallback took over!"); + + if ($scope.loginData.serverName != ZMDataModel.getLogin().serverName) { + ZMDataModel.zmDebug(">>> Server information has changed, likely a fallback took over!"); $scope.loginData = ZMDataModel.getLogin(); apiurl = $scope.loginData.apiurl + '/host/getVersion.json'; portalurl = $scope.loginData.url + '/index.php'; } - + // possible image digits changed between servers ZMDataModel.getKeyConfigParams(0); - + ZMDataModel.zmLog("Validating APIs at " + apiurl); $http.get(apiurl) .success(function (data) { - var loginStatus = $translate.instant('kExploreEnjoy')+" "+$rootScope.appName+"!"; + var loginStatus = $translate.instant('kExploreEnjoy') + " " + $rootScope.appName + "!"; EventServer.refresh(); @@ -626,22 +614,21 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r .success(function (data) { ZMDataModel.zmDebug("Urk! cgi-path returned success, but it should not have come here"); loginStatus = $translate.instant('kLoginStatusNoCgi'); - - ZMDataModel.zmDebug ("refreshing API version..."); + + ZMDataModel.zmDebug("refreshing API version..."); ZMDataModel.getAPIversion() - .then (function (data) { - var refresh = ZMDataModel.getMonitors(1); - $rootScope.apiVersion = data; - }, - function (error) { - var refresh = ZMDataModel.getMonitors(1); - $rootScope.apiVersion = "0.0.0"; - ZMDataModel.zmDebug ("Error, failed API version, setting to " +$rootScope.apiVersion); - }); - - if (showalert) - { - $rootScope.zmPopup = SecuredPopups.show('alert',{ + .then(function (data) { + var refresh = ZMDataModel.getMonitors(1); + $rootScope.apiVersion = data; + }, + function (error) { + var refresh = ZMDataModel.getMonitors(1); + $rootScope.apiVersion = "0.0.0"; + ZMDataModel.zmDebug("Error, failed API version, setting to " + $rootScope.apiVersion); + }); + + if (showalert) { + $rootScope.zmPopup = SecuredPopups.show('alert', { title: $translate.instant('kLoginValidatedTitle'), template: loginStatus }).then(function (res) { @@ -659,30 +646,29 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r if (status < 500) { loginStatus = $translate.instant('kLoginStatusNoCgiAlt'); } - - if (showalert) - { - $rootScope.zmPopup = SecuredPopups.show('alert',{ + + if (showalert) { + $rootScope.zmPopup = SecuredPopups.show('alert', { title: $translate.instant('kLoginValidatedTitle'), template: loginStatus }).then(function (res) { $ionicSideMenuDelegate.toggleLeft(); ZMDataModel.zmDebug("Force reloading monitors..."); - + }); } - ZMDataModel.zmDebug ("refreshing API version..."); + ZMDataModel.zmDebug("refreshing API version..."); ZMDataModel.getAPIversion() - .then (function (data) { - var refresh = ZMDataModel.getMonitors(1); - $rootScope.apiVersion = data; - }, - function (error) { - var refresh = ZMDataModel.getMonitors(1); - $rootScope.apiVersion = "0.0.0"; - ZMDataModel.zmDebug ("Error, failed API version, setting to " +$rootScope.apiVersion); - }); + .then(function (data) { + var refresh = ZMDataModel.getMonitors(1); + $rootScope.apiVersion = data; + }, + function (error) { + var refresh = ZMDataModel.getMonitors(1); + $rootScope.apiVersion = "0.0.0"; + ZMDataModel.zmDebug("Error, failed API version, setting to " + $rootScope.apiVersion); + }); }); }); @@ -693,8 +679,8 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r .error(function (error) { ZMDataModel.displayBanner('error', [$translate.instant('kBannerAPICheckFailed'), $translate.instant('kBannerPleaseCheck')]); ZMDataModel.zmLog("API login error " + JSON.stringify(error)); - - $rootScope.zmPopup= SecuredPopups.show('alert',{ + + $rootScope.zmPopup = SecuredPopups.show('alert', { title: $translate.instant('kLoginValidAPIFailedTitle'), template: $translate.instant('kBannerPleaseCheck') }); @@ -703,9 +689,9 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r - }); + }); } - + // ---------------------------------------------- // Saves the current profile. Note that // calling saveItems also updates the defaultServer @@ -724,13 +710,15 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r } else { saveItems(true); availableServers = Object.keys(ZMDataModel.getServerGroups()); - serverbuttons = [{text:$translate.instant('kServerAdd')+"..."}]; + serverbuttons = [{ + text: $translate.instant('kServerAdd') + "..." + }]; for (var servIter = 0; servIter < availableServers.length; servIter++) { serverbuttons.push({ text: availableServers[servIter] }); } - console.log (">>>>>>>ionicview save: server buttons " + JSON.stringify(serverbuttons)); + //console.log (">>>>>>>ionicview save: server buttons " + JSON.stringify(serverbuttons)); } diff --git a/www/js/MenuController.js b/www/js/MenuController.js index d0dd56fa..9eca0051 100644 --- a/www/js/MenuController.js +++ b/www/js/MenuController.js @@ -7,10 +7,10 @@ $scope.openMenu = function () { $ionicSideMenuDelegate.toggleLeft(); }; - - - - +//---------------------------------------------------------------- +// This controller sits along with the main app to bring up +// the language menu from the main menu +//---------------------------------------------------------------- $scope.switchLang = function() { $scope.lang = ZMDataModel.getLanguages(); diff --git a/www/js/MonitorCtrl.js b/www/js/MonitorCtrl.js index e56ae47d..33229b85 100644 --- a/www/js/MonitorCtrl.js +++ b/www/js/MonitorCtrl.js @@ -83,12 +83,11 @@ angular.module('zmApp.controllers') //----------------------------------------------------------------------- $scope.changeConfig = function (monitorName, monitorId, enabled, func) { var checked = false; - - if (monitorName == 'All') - { + + if (monitorName == 'All') { monitorName = $translate.instant('kAll'); } - + //console.log("called with " + monitorId + ":" + enabled + ":" + func); if (enabled == '1') checked = true; @@ -98,9 +97,8 @@ angular.module('zmApp.controllers') for (var i = 0; i < $scope.monitors.length; i++) { monitorsIds[i] = $scope.monitors[i].Monitor.Id; } - } - else { - monitorsIds[0] = monitorId; + } else { + monitorsIds[0] = monitorId; } $scope.monFunctions = [ @@ -153,7 +151,7 @@ angular.module('zmApp.controllers') { text: $translate.instant('kButtonSave'), onTap: function (e) { - $scope.monfunc.mymonitorsIds.forEach( function(item, index) { + $scope.monfunc.mymonitorsIds.forEach(function (item, index) { ZMDataModel.zmDebug("MonitorCtrl:changeConfig selection:" + $scope.monfunc.myenabled + $scope.monfunc.myfunc); var loginData = ZMDataModel.getLogin(); @@ -172,40 +170,40 @@ angular.module('zmApp.controllers') }); var httpPromise = $http({ - url: apiMon, - method: 'post', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - 'Accept': '*/*', - }, - transformRequest: function (obj) { - var str = []; - for (var p in obj) - str.push(encodeURIComponent(p) + "=" + - encodeURIComponent(obj[p])); - var foo = str.join("&"); - // console.log("****RETURNING " + foo); - ZMDataModel.zmDebug("MonitorCtrl: parmeters constructed: " + foo); - return foo; - }, - data: { - 'Monitor[Function]': $scope.monfunc.myfunc, - 'Monitor[Enabled]': isEnabled, - } - - }) - .success(function () { - ZMDataModel.zmDebug("MonitorCtrl: Not restarting ZM - Make sure you have the patch installed in MonitorsController.php or this won't work"); - }) - .error(function (data, status, headers, config) { - ZMDataModel.zmDebug("MonitorCtrl: Error changing monitor " + JSON.stringify(data)); - $scope.monfunc.myfailedIds.push(item); - }); + url: apiMon, + method: 'post', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Accept': '*/*', + }, + transformRequest: function (obj) { + var str = []; + for (var p in obj) + str.push(encodeURIComponent(p) + "=" + + encodeURIComponent(obj[p])); + var foo = str.join("&"); + // console.log("****RETURNING " + foo); + ZMDataModel.zmDebug("MonitorCtrl: parmeters constructed: " + foo); + return foo; + }, + data: { + 'Monitor[Function]': $scope.monfunc.myfunc, + 'Monitor[Enabled]': isEnabled, + } + + }) + .success(function () { + ZMDataModel.zmDebug("MonitorCtrl: Not restarting ZM - Make sure you have the patch installed in MonitorsController.php or this won't work"); + }) + .error(function (data, status, headers, config) { + ZMDataModel.zmDebug("MonitorCtrl: Error changing monitor " + JSON.stringify(data)); + $scope.monfunc.myfailedIds.push(item); + }); $scope.monfunc.mypromises.push(httpPromise); }); - $q.all($scope.monfunc.mypromises).then(function(e) { + $q.all($scope.monfunc.mypromises).then(function (e) { $ionicLoading.hide(); // if there's a failed ID, an error has occurred if ($scope.monfunc.myfailedIds.length != 0) { @@ -214,9 +212,8 @@ angular.module('zmApp.controllers') noBackdrop: true, duration: 3000, }); - } - else { - // I am not restarting ZM after monitor change + } else { + // I am not restarting ZM after monitor change /* ZMDataModel.zmDebug ("MonitorCtrl: Restarting ZM"); $ionicLoading.show({ template: "Successfully changed Monitor. Please wait, restarting ZoneMinder...", @@ -521,4 +518,4 @@ angular.module('zmApp.controllers') }; -}]); +}]);
\ No newline at end of file diff --git a/www/js/MonitorModalCtrl.js b/www/js/MonitorModalCtrl.js index 13ded330..9d84e2a3 100644 --- a/www/js/MonitorModalCtrl.js +++ b/www/js/MonitorModalCtrl.js @@ -8,8 +8,8 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$rootScope', 'zm', 'ZMDataModel', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$q', '$sce', 'carouselUtils', '$ionicPopup', 'SecuredPopups', '$translate', function ($scope, $rootScope, zm, ZMDataModel, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $q, $sce, carouselUtils, $ionicPopup, SecuredPopups, $translate) { - - + + $scope.animationInProgress = false; $scope.imageFit = true; @@ -17,11 +17,11 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ var intervalModalHandle; var nphTimer; var ld = ZMDataModel.getLogin(); - + $rootScope.authSession = "undefined"; - + $ionicLoading.show({ - template: $translate.instant('kNegotiatingStreamAuth')+'...', + template: $translate.instant('kNegotiatingStreamAuth') + '...', animation: 'fade-in', showBackdrop: true, duration: zm.loadingTimeout, @@ -33,8 +33,8 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ $scope.currentStreamMode = 'single'; ZMDataModel.zmLog("Using stream mode " + $scope.currentStreamMode); - ZMDataModel.zmDebug ("MonitorModalCtrl called from " + $ionicHistory.currentStateName()); - + ZMDataModel.zmDebug("MonitorModalCtrl called from " + $ionicHistory.currentStateName()); + $rootScope.validMonitorId = $scope.monitors[0].Monitor.Id; ZMDataModel.getAuthKey($rootScope.validMonitorId, $scope.monitors[0].Monitor.connKey) .then(function (success) { @@ -50,10 +50,10 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ //$rootScope.authSession=""; ZMDataModel.zmLog("Modal: Error returned Stream authentication construction. Retaining old value of: " + $rootScope.authSession); }); - - - - $interval.cancel(intervalModalHandle); + + + + $interval.cancel(intervalModalHandle); intervalModalHandle = $interval(function () { loadModalNotifications(); @@ -61,12 +61,12 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ }.bind(this), 5000); - $timeout.cancel(nphTimer); - nphTimer = $timeout(function () { - $scope.currentStreamMode = 'jpeg'; - ZMDataModel.zmLog("Switching playback via nphzms"); - }, zm.nphSwitchTimer); - + $timeout.cancel(nphTimer); + nphTimer = $timeout(function () { + $scope.currentStreamMode = 'jpeg'; + ZMDataModel.zmLog("Switching playback via nphzms"); + }, zm.nphSwitchTimer); + // This is the PTZ menu $scope.ptzRadialMenuOptions = { @@ -111,7 +111,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ empty: true, onclick: function () { - // console.log('About'); + // console.log('About'); } }, @@ -182,86 +182,87 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ //------------------------------------------------------------- // On re-auth, we need a new zms //------------------------------------------------------------- - - $rootScope.$on("auth-success", function () { - - ZMDataModel.zmDebug("MonitorModalCtrl: Re-login detected, resetting everything & re-generating connkey"); - ZMDataModel.stopNetwork("MonitorModal-auth success"); - $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); - - + + $rootScope.$on("auth-success", function () { + + ZMDataModel.zmDebug("MonitorModalCtrl: Re-login detected, resetting everything & re-generating connkey"); + ZMDataModel.stopNetwork("MonitorModal-auth success"); + $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); + + }); - - $scope.cast = function(mid, mon) - { - - console.log ("PASSED WITH " + JSON.stringify(mon)); - //ConnectSDK.discoveryManager.startDiscovery(); - - console.log ("Stopping"); - ConnectSDK.discoveryManager.stopDiscovery(); - - console.log ("Starting"); - ConnectSDK.discoveryManager.startDiscovery(); - console.log ("picking"); - ConnectSDK.discoveryManager.pickDevice() - .success(function (device) { - //device.disconnect(); - function sendVideo (mid,mon) { + + $scope.cast = function (mid, mon) { + + //console.log ("PASSED WITH " + JSON.stringify(mon)); + //ConnectSDK.discoveryManager.startDiscovery(); + + //console.log ("Stopping"); + ConnectSDK.discoveryManager.stopDiscovery(); + + //console.log ("Starting"); + ConnectSDK.discoveryManager.startDiscovery(); + //console.log ("picking"); + ConnectSDK.discoveryManager.pickDevice() + .success(function (device) { + //device.disconnect(); + function sendVideo(mid, mon) { //device.getMediaPlayer().playMedia("http://media.w3.org/2010/05/sintel/trailer.mp4", "video/mp4"); - - // var url = "http://www.connectsdk.com/files/9613/9656/8539/test_image.jpg"; - - //var url = mon.Monitor.streamingURL+"/nph-zms?mode=jpeg&monitor="+mid+$rootScope.authSession+"&rand="+$rootScope.modalRand; - - var ld = ZMDataModel.getLogin(); - var url = mon.Monitor.streamingURL+"/nph-zms?mode=jpeg&monitor="+mid+"&user="+ld.username+"&pass="+ld.password+"&rand="+$rootScope.modalRand; - - console.log ("URL: " + url); - var iconUrl = "http://www.connectsdk.com/files/9613/9656/8539/test_image.jpg"; - var mimeType = "image/jpeg"; - - device.getMediaPlayer().displayImage(url, mimeType, { - title: "Monitor: "+mid, - description: "Monitor feed", - }).success(function (launchSession, mediaControl) { - console.log("Image launch successful"); - }).error(function (err) { - console.log("error: " + err.message); - }); + + // var url = "http://www.connectsdk.com/files/9613/9656/8539/test_image.jpg"; + + //var url = mon.Monitor.streamingURL+"/nph-zms?mode=jpeg&monitor="+mid+$rootScope.authSession+"&rand="+$rootScope.modalRand; + + var ld = ZMDataModel.getLogin(); + var url = mon.Monitor.streamingURL + "/nph-zms?mode=jpeg&monitor=" + mid + "&user=" + ld.username + "&pass=" + ld.password + "&rand=" + $rootScope.modalRand; + + //console.log ("URL: " + url); + var iconUrl = "http://www.connectsdk.com/files/9613/9656/8539/test_image.jpg"; + var mimeType = "image/jpeg"; + + device.getMediaPlayer().displayImage(url, mimeType, { + title: "Monitor: " + mid, + description: "Monitor feed", + }).success(function (launchSession, mediaControl) { + //console.log("Image launch successful"); + }).error(function (err) { + //console.log("error: " + err.message); + }); } if (device.isReady()) { // already connected - console.log (">>> device ready sending video"); - sendVideo(mid,mon); + // console.log (">>> device ready sending video"); + sendVideo(mid, mon); } else { - device.on("ready", function() {sendVideo(mid,mon);}); - console.log (">>> device not ready connecting"); + device.on("ready", function () { + sendVideo(mid, mon); + }); + //console.log (">>> device not ready connecting"); device.connect(); } - }) - .error ( + }) + .error( function (error) { - console.log ("ERROR"); - }); + // console.log ("ERROR"); + }); }; - + //------------------------------------------------------------- // PTZ enable/disable //------------------------------------------------------------- - - - $scope.togglePTZ = function () { + + + $scope.togglePTZ = function () { //console.log("PTZ"); if ($scope.isControllable == '1') { //console.log ("iscontrollable is true"); $scope.showPTZ = !$scope.showPTZ; - - + + } else { $ionicLoading.show({ template: $translate.instant('kPTZnotConfigured'), @@ -271,9 +272,9 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ } }; - - + + //------------------------------------------------------------- // Pause and resume handlers //------------------------------------------------------------- @@ -295,11 +296,11 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ $interval.cancel(intervalModalHandle); var ld = ZMDataModel.getLogin(); - - intervalModalHandle = $interval(function () { - loadModalNotifications(); - }.bind(this),5000); - + + intervalModalHandle = $interval(function () { + loadModalNotifications(); + }.bind(this), 5000); + $rootScope.modalRand = Math.floor((Math.random() * 100000) + 1); } @@ -311,14 +312,13 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ // Queries the 1.30 API for recording state of current monitor //------------------------------------------------------------- function loadModalNotifications() { - - if (ZMDataModel.versionCompare($rootScope.apiVersion,"1.30")==-1) - { - + + if (ZMDataModel.versionCompare($rootScope.apiVersion, "1.30") == -1) { + return; } - var status = [$translate.instant('kMonIdle'), + var status = [$translate.instant('kMonIdle'), $translate.instant('kMonPreAlarm'), $translate.instant('kMonAlarmed'), $translate.instant('kMonAlert'), @@ -326,41 +326,38 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ ]; //console.log ("Inside Modal timer..."); var apiurl = ZMDataModel.getLogin().apiurl; - var alarmurl = apiurl+"/monitors/alarm/id:"+$scope.monitorId+"/command:status.json"; - ZMDataModel.zmLog ("Invoking " + alarmurl); - - + var alarmurl = apiurl + "/monitors/alarm/id:" + $scope.monitorId + "/command:status.json"; + ZMDataModel.zmLog("Invoking " + alarmurl); + + $http.get(alarmurl) - .then (function (data) { - // ZMDataModel.zmDebug ("Success in monitor alarmed status " + JSON.stringify(data)); - - $scope.monStatus = status[parseInt(data.data.status)]; - - }, + .then(function (data) { + // ZMDataModel.zmDebug ("Success in monitor alarmed status " + JSON.stringify(data)); + + $scope.monStatus = status[parseInt(data.data.status)]; + + }, function (error) { - - - $scope.monStatus = ""; - ZMDataModel.zmDebug ("Error in monitor alarmed status "); - }); - + + + $scope.monStatus = ""; + ZMDataModel.zmDebug("Error in monitor alarmed status "); + }); + } - + //------------------------------------------------------------- // Enable/Disable preset list //------------------------------------------------------------- $scope.togglePresets = function () { $scope.presetOn = !$scope.presetOn; - - if ($scope.presetOn) - { + + if ($scope.presetOn) { $scope.controlToggle = "hide buttons"; - } - else - { + } else { $scope.controlToggle = "show buttons"; } //console.log("Changing preset to " + $scope.presetOn); @@ -392,12 +389,12 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ // ZMDataModel.isBackground()); return ZMDataModel.isBackground(); }; - - - - - - + + + + + + //------------------------------------------------------------- // Send PTZ command to ZM // Note: PTZ fails on desktop, don't bother about it @@ -452,7 +449,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ //console.log("PTZDATA is " + JSON.stringify(ptzData)); $ionicLoading.hide(); $ionicLoading.show({ - template: $translate.instant('kPleaseWait')+"...", + template: $translate.instant('kPleaseWait') + "...", noBackdrop: true, duration: zm.loadingTimeout, }); @@ -460,7 +457,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ var loginData = ZMDataModel.getLogin(); $ionicLoading.hide(); $ionicLoading.show({ - template: $translate.instant('kSendingPTZ')+"...", + template: $translate.instant('kSendingPTZ') + "...", noBackdrop: true, duration: zm.loadingTimeout, }); @@ -483,14 +480,14 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ //console.log("****RETURNING " + foo); return foo; }, - + data: ptzData }); req.success(function (resp) { $ionicLoading.hide(); - + }); req.error(function (resp) { @@ -500,9 +497,9 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ }); } - - + + $scope.getZoomLevel = function () { //console.log("ON RELEASE"); var zl = $ionicScrollDelegate.$getByHandle("imgscroll").getScrollPosition(); @@ -514,7 +511,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ moveToMonitor(m, d); }; - + $scope.onSwipe = function (m, d) { var ld = ZMDataModel.getLogin(); if (!ld.canSwipeMonitors) return; @@ -630,7 +627,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ $ionicLoading.hide(); - + } @@ -664,111 +661,104 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ //------------------------------------------------------------- // Turns on or off an alarm forcibly (mode true = on, false = off) //------------------------------------------------------------- - $scope.enableAlarm = function(mid,mode) - { - + $scope.enableAlarm = function (mid, mode) { + if (mode) // trigger alarm { - $rootScope.zmPopup = SecuredPopups.show('show',{ - title: 'Confirm', - template: $translate.instant('kForceAlarmConfirm')+$scope.monitorName+"?", - buttons: [ - { - text: $translate.instant('kButtonYes'), - onTap: function(e) - { - enableAlarm(mid, mode); - } + $rootScope.zmPopup = SecuredPopups.show('show', { + title: 'Confirm', + template: $translate.instant('kForceAlarmConfirm') + $scope.monitorName + "?", + buttons: [ + { + text: $translate.instant('kButtonYes'), + onTap: function (e) { + enableAlarm(mid, mode); + } }, - { - text: $translate.instant('kButtonNo'), - onTap: function (e) - { - return; - } + { + text: $translate.instant('kButtonNo'), + onTap: function (e) { + return; + } } ] - - }); - } - else - enableAlarm(mid,mode); - - function enableAlarm(mid,mode) - { + + }); + } else + enableAlarm(mid, mode); + + function enableAlarm(mid, mode) { var apiurl = ZMDataModel.getLogin().apiurl; - var c = mode? "on":"off"; - var alarmurl = apiurl+"/monitors/alarm/id:"+mid+"/command:"+c+".json"; - ZMDataModel.zmLog ("Invoking " + alarmurl); - - var status = mode? $translate.instant('kForcingAlarm'): $translate.instant('kCancellingAlarm'); + var c = mode ? "on" : "off"; + var alarmurl = apiurl + "/monitors/alarm/id:" + mid + "/command:" + c + ".json"; + ZMDataModel.zmLog("Invoking " + alarmurl); + + var status = mode ? $translate.instant('kForcingAlarm') : $translate.instant('kCancellingAlarm'); $ionicLoading.show({ - template: status, - noBackdrop: true, - duration: zm.largeHttpTimeout, - }); - + template: status, + noBackdrop: true, + duration: zm.largeHttpTimeout, + }); + $http.get(alarmurl) - .then (function (data) { - $ionicLoading.show({ + .then(function (data) { + $ionicLoading.show({ template: $translate.instant('kSuccess'), noBackdrop: true, duration: 2000, }); - }, - function (error) { - - $ionicLoading.show({ + }, + function (error) { + + $ionicLoading.show({ template: $translate.instant('kAlarmAPIError'), noBackdrop: true, duration: 3000, }); - ZMDataModel.zmDebug ("Error in enableAlarm " + JSON.stringify(error)); - }); + ZMDataModel.zmDebug("Error in enableAlarm " + JSON.stringify(error)); + }); } - - - + + + }; - - + + //----------------------------------------------------------------------- // color for monitor state //----------------------------------------------------------------------- - - $scope.stateColor = function() - { - var status = [$translate.instant('kMonIdle'), + + $scope.stateColor = function () { + var status = [$translate.instant('kMonIdle'), $translate.instant('kMonPreAlarm'), $translate.instant('kMonAlarmed'), $translate.instant('kMonAlert'), $translate.instant('kMonRecord') ]; //console.log ("***MONSTATUS**"+$scope.monStatus+"**"); - var color=""; - switch ($scope.monStatus) - { + var color = ""; + switch ($scope.monStatus) { case "": - color="background-color:none"; + color = "background-color:none"; break; case status[0]: - color="background-color:#4B77BE"; + color = "background-color:#4B77BE"; break; case status[1]: - color="background-color:#e67e22"; + color = "background-color:#e67e22"; break; - case status[2]: - color="background-color:#D91E18"; + case status[2]: + color = "background-color:#D91E18"; break; case status[3]: - color="background-color:#e67e22"; + color = "background-color:#e67e22"; break; case status[4]: - color="background-color:#26A65B"; + color = "background-color:#26A65B"; break; } - - return "padding-left:4px;padding-right:4px;"+color; + + return "padding-left:4px;padding-right:4px;" + color; }; @@ -778,7 +768,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ $scope.saveImageToPhone = function (mid) { $ionicLoading.show({ - template: $translate.instant('kSavingSnapshot')+'...', + template: $translate.instant('kSavingSnapshot') + '...', noBackdrop: true, duration: zm.httpTimeout }); @@ -824,7 +814,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ canvas.toBlob(function (blob) { saveAs(blob, fname); SaveSuccess(); - + }); } }; @@ -854,42 +844,41 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ $scope.scaleImage = function () { $scope.imageFit = !$scope.imageFit; - // console.log("Switching image style to " + $scope.imageFit); + // console.log("Switching image style to " + $scope.imageFit); }; $scope.$on('$ionicView.enter', function () { - - - + + + }); $scope.$on('$ionicView.leave', function () { - // console.log("**MODAL: Stopping modal timer"); + // console.log("**MODAL: Stopping modal timer"); $scope.isModalActive = false; $interval.cancel(intervalModalHandle); }); - - + + $scope.$on('$ionicView.beforeLeave', function () { - - ZMDataModel.zmLog ("Nullifying the streams..."); - - + + ZMDataModel.zmLog("Nullifying the streams..."); + + var element = document.getElementById("singlemonitor"); - if (element) - { + if (element) { ZMDataModel.zmDebug("Nullifying " + element.src); - element.src=""; + element.src = ""; } - - - + + + }); $scope.$on('$ionicView.unloaded', function () { $scope.isModalActive = false; - + $interval.cancel(intervalModalHandle); }); @@ -898,11 +887,11 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ $scope.isModalActive = false; //console.log("**MODAL REMOVED: Stopping modal timer"); $interval.cancel(intervalModalHandle); - - ZMDataModel.zmDebug ("Modal removed - killing connkey"); - controlStream(17,"",$scope.connKey,-1); - - + + ZMDataModel.zmDebug("Modal removed - killing connkey"); + controlStream(17, "", $scope.connKey, -1); + + // Execute action }); @@ -913,128 +902,123 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ // anyway //------------------------------------------------------------- - + function controlStream(cmd, disp, connkey, ndx) { - // console.log("Command value " + cmd); + // console.log("Command value " + cmd); - if (disp) { - $ionicLoading.hide(); - $ionicLoading.show({ - template: $translate.instant('kPleaseWait')+'...', - noBackdrop: true, - duration: zm.loadingTimeout, - }); - } - var loginData = ZMDataModel.getLogin(); - - /* - var CMD_NONE = 0; - var CMD_PAUSE = 1; - var CMD_PLAY = 2; - var CMD_STOP = 3; - var CMD_FASTFWD = 4; - var CMD_SLOWFWD = 5; - var CMD_SLOWREV = 6; - var CMD_FASTREV = 7; - var CMD_ZOOMIN = 8; - var CMD_ZOOMOUT = 9; - var CMD_PAN = 10; - var CMD_SCALE = 11; - var CMD_PREV = 12; - var CMD_NEXT = 13; - var CMD_SEEK = 14; - var CMD_QUIT = 17; - var CMD_QUERY = 99; - */ - - var myauthtoken = $rootScope.authSession.replace("&auth=",""); + if (disp) { + $ionicLoading.hide(); + $ionicLoading.show({ + template: $translate.instant('kPleaseWait') + '...', + noBackdrop: true, + duration: zm.loadingTimeout, + }); + } + var loginData = ZMDataModel.getLogin(); + + /* + var CMD_NONE = 0; + var CMD_PAUSE = 1; + var CMD_PLAY = 2; + var CMD_STOP = 3; + var CMD_FASTFWD = 4; + var CMD_SLOWFWD = 5; + var CMD_SLOWREV = 6; + var CMD_FASTREV = 7; + var CMD_ZOOMIN = 8; + var CMD_ZOOMOUT = 9; + var CMD_PAN = 10; + var CMD_SCALE = 11; + var CMD_PREV = 12; + var CMD_NEXT = 13; + var CMD_SEEK = 14; + var CMD_QUIT = 17; + var CMD_QUERY = 99; + */ + + var myauthtoken = $rootScope.authSession.replace("&auth=", ""); //&auth= - var req = $http({ - method: 'POST', - /*timeout: 15000,*/ - url: loginData.url + '/index.php', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - //'Accept': '*/*', - }, - transformRequest: function (obj) { - var str = []; - for (var p in obj) - str.push(encodeURIComponent(p) + "=" + - encodeURIComponent(obj[p])); - var foo = str.join("&"); - //console.log("****RETURNING " + foo); - return foo; - }, + var req = $http({ + method: 'POST', + /*timeout: 15000,*/ + url: loginData.url + '/index.php', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + //'Accept': '*/*', + }, + transformRequest: function (obj) { + var str = []; + for (var p in obj) + str.push(encodeURIComponent(p) + "=" + + encodeURIComponent(obj[p])); + var foo = str.join("&"); + //console.log("****RETURNING " + foo); + return foo; + }, - data: { - view: "request", - request: "stream", - connkey: connkey, - command: cmd, - auth: myauthtoken, - - } - }); - req.success(function (resp) { + data: { + view: "request", + request: "stream", + connkey: connkey, + command: cmd, + auth: myauthtoken, + + } + }); + req.success(function (resp) { + + if (resp.result == "Ok" && ndx != -1) { + var ld = ZMDataModel.getLogin(); + var apiurl = ld.apiurl + "/events/" + resp.status.event + ".json"; + //console.log ("API " + apiurl); + $http.get(apiurl) + .success(function (data) { + if ($scope.MontageMonitors[ndx].eventUrlTime != data.event.Event.StartTime) { + + var element = angular.element(document.getElementById($scope.MontageMonitors[ndx].Monitor.Id + "-timeline")); + element.removeClass('animated slideInRight'); + element.addClass('animated slideOutRight'); + $timeout(function () { + element.removeClass('animated slideOutRight'); + element.addClass('animated slideInRight'); + $scope.MontageMonitors[ndx].eventUrlTime = data.event.Event.StartTime; + }, 300); - if (resp.result=="Ok" && ndx != -1) - { - var ld = ZMDataModel.getLogin(); - var apiurl= ld.apiurl + "/events/"+resp.status.event+".json"; - //console.log ("API " + apiurl); - $http.get (apiurl) - .success (function (data) - { - if ($scope.MontageMonitors[ndx].eventUrlTime!=data.event.Event.StartTime) - { - - var element = angular.element(document.getElementById($scope.MontageMonitors[ndx].Monitor.Id+"-timeline")); - element.removeClass ('animated slideInRight'); - element.addClass('animated slideOutRight'); - $timeout (function() { - element.removeClass ('animated slideOutRight'); - element.addClass('animated slideInRight'); - $scope.MontageMonitors[ndx].eventUrlTime=data.event.Event.StartTime; - },300); - } - + }) - .error (function (data) - { - $scope.MontageMonitors[ndx].eventUrlTime="-"; + .error(function (data) { + $scope.MontageMonitors[ndx].eventUrlTime = "-"; }); - - } - }); + } - req.error(function (resp) { - //console.log("ERROR: " + JSON.stringify(resp)); - ZMDataModel.zmLog("Error sending event command " + JSON.stringify(resp), "error"); - }); - } + }); + + req.error(function (resp) { + //console.log("ERROR: " + JSON.stringify(resp)); + ZMDataModel.zmLog("Error sending event command " + JSON.stringify(resp), "error"); + }); + } //------------------------------------------------------------- // Zoom in and out via +- for desktops //------------------------------------------------------------- - $scope.zoomImage = function (val) - { + $scope.zoomImage = function (val) { var zl = parseInt($ionicScrollDelegate.$getByHandle("imgscroll").getScrollPosition().zoom); - if (zl == 1 && val == -1) - { - ZMDataModel.zmDebug ("Already zoomed out max"); + if (zl == 1 && val == -1) { + ZMDataModel.zmDebug("Already zoomed out max"); return; } - - - zl+=val; - ZMDataModel.zmDebug ("Zoom level is " + zl); $ionicScrollDelegate.$getByHandle("imgscroll").zoomTo(zl,true); - + + + zl += val; + ZMDataModel.zmDebug("Zoom level is " + zl); + $ionicScrollDelegate.$getByHandle("imgscroll").zoomTo(zl, true); + }; - + //------------------------------------------------------------- // Retrieves PTZ state for each monitor @@ -1043,206 +1027,210 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ // $scope.isControllable // $scope.controlid // - function configurePTZ(mid) - { + function configurePTZ(mid) { $scope.presetAndControl = $translate.instant('kMore'); - $scope.ptzWakeCommand = ""; + $scope.ptzWakeCommand = ""; $scope.ptzSleepCommand = ""; $scope.ptzResetCommand = ""; $scope.ptzMoveCommand = ""; $scope.ptzStopCommand = ""; - + $scope.zoomInCommand = ""; $scope.zoomOutCommand = ""; $scope.zoomStopCommand = "zoomStop"; $scope.canZoom = false; - + $scope.presetOn = true; $scope.controlToggle = "hide buttons"; - - ZMDataModel.zmDebug ("configurePTZ: called with mid="+mid); + + ZMDataModel.zmDebug("configurePTZ: called with mid=" + mid); var ld = ZMDataModel.getLogin(); - var url = ld.apiurl+"/monitors/"+mid+".json"; - $http.get (url) - .success (function (data) - { - $scope.isControllable = data.monitor.Monitor.Controllable; - - // *** Only for testing - comment out // - //$scope.isControllable = '1'; - // for testing only - // $scope.isControllable = 1; - $scope.controlid = data.monitor.Monitor.ControlId; - if ($scope.isControllable=='1' ) - { - - - var apiurl = ZMDataModel.getLogin().apiurl; - var myurl = apiurl + "/controls/" + $scope.controlid + ".json"; - ZMDataModel.zmDebug("configurePTZ : getting controllable data " + myurl); + var url = ld.apiurl + "/monitors/" + mid + ".json"; + $http.get(url) + .success(function (data) { + $scope.isControllable = data.monitor.Monitor.Controllable; + + // *** Only for testing - comment out // + //$scope.isControllable = '1'; + // for testing only + // $scope.isControllable = 1; + $scope.controlid = data.monitor.Monitor.ControlId; + if ($scope.isControllable == '1') { + + + var apiurl = ZMDataModel.getLogin().apiurl; + var myurl = apiurl + "/controls/" + $scope.controlid + ".json"; + ZMDataModel.zmDebug("configurePTZ : getting controllable data " + myurl); + + $http.get(myurl) + .success(function (data) { + + // *** Only for testing - comment out - start// + /*data.Control.Control.CanSleep = '1'; + data.Control.Control.CanWake = '1'; + data.Control.Control.CanReset = '1'; + data.Control.Control.CanZoom = '1'; + data.control.Control.HasPresets = '1'; + data.control.Control.HasHomePreset = '1';*/ + // *** Only for testing - comment out - end // + + + + $scope.ptzMoveCommand = "move"; // start with as move; + $scope.ptzStopCommand = ""; + + if (data.control.Control.CanZoom == '1') { + $scope.canZoom = true; + if (data.control.Control.CanZoomCon == '1') { + $scope.zoomInCommand = "zoomConTele"; + $scope.zoomOutCommand = "zoomConWide"; + + } else if (data.control.Control.CanZoomRel == '1') { + $scope.zoomInCommand = "zoomRelTele"; + $scope.zoomOutCommand = "zoomRelWide"; + } else if (data.control.Control.CanZoomAbs == '1') { + $scope.zoomInCommand = "zoomRelAbs"; + $scope.zoomOutCommand = "zoomRelAbs"; + } + } - $http.get(myurl) - .success(function (data) { - - // *** Only for testing - comment out - start// - /*data.Control.Control.CanSleep = '1'; - data.Control.Control.CanWake = '1'; - data.Control.Control.CanReset = '1'; - data.Control.Control.CanZoom = '1'; - data.control.Control.HasPresets = '1'; - data.control.Control.HasHomePreset = '1';*/ - // *** Only for testing - comment out - end // - - - - $scope.ptzMoveCommand = "move"; // start with as move; - $scope.ptzStopCommand = ""; - - if (data.control.Control.CanZoom=='1') - { - $scope.canZoom = true; - if (data.control.Control.CanZoomCon == '1') - { - $scope.zoomInCommand = "zoomConTele"; - $scope.zoomOutCommand = "zoomConWide"; - - } - else if (data.control.Control.CanZoomRel == '1') - { - $scope.zoomInCommand = "zoomRelTele"; - $scope.zoomOutCommand = "zoomRelWide"; - } - - else if (data.control.Control.CanZoomAbs == '1') - { - $scope.zoomInCommand = "zoomRelAbs"; - $scope.zoomOutCommand = "zoomRelAbs"; - } - } - - ZMDataModel.zmDebug("configurePTZ: control data returned " + JSON.stringify(data)); - - if (data.control.Control.CanMoveRel == '1') - { - - $scope.ptzMoveCommand = "moveRel"; - $scope.ptzStopCommand = "moveStop"; - } - - // Prefer con over rel if both enabled - // I've tested con - - if (data.control.Control.CanMoveCon == '1') - { - - $scope.ptzMoveCommand = "moveCon"; - $scope.ptzStopCommand = "moveStop"; - } - - - - // presets - ZMDataModel.zmDebug ("ConfigurePTZ Preset value is " +data.control.Control.HasPresets); - $scope.ptzPresets = []; - - if (data.control.Control.HasPresets == '1') - { - //$scope.presetAndControl = $translate.instant('kPresets'); - - $scope.ptzPresetCount = parseInt(data.control.Control.NumPresets); - - ZMDataModel.zmDebug ("ConfigurePTZ Number of presets is " + $scope.ptzPresetCount); - - - for (var p=0; p<$scope.ptzPresetCount; p++) - { - $scope.ptzPresets.push ({name:(p+1).toString(), icon:'', cmd:"presetGoto"+(p+1).toString(), style:'button-royal'}); - - } - - if (data.control.Control.HasHomePreset == '1') - { - $scope.ptzPresets.unshift({name:'', icon:"ion-ios-home", cmd:'presetHome' , style:'button-royal'}); - - } - - - - } - /*else - { - $scope.presetAndControl = $translate.instant('kMore'); - }*/ - // lets add these to the end - // strictly speaking, they aren't really presets, but meh for now - - // no need to darken these buttons if presets are not there - var buttonAccent = "button-dark"; - if ($scope.ptzPresets.length == 0) - { - buttonAccent = ""; - } - - if (data.control.Control.CanWake == '1') - { + ZMDataModel.zmDebug("configurePTZ: control data returned " + JSON.stringify(data)); - $scope.ptzPresets.push({name:'W', icon:"ion-eye", cmd:'wake', style:'button-royal '+buttonAccent}); + if (data.control.Control.CanMoveRel == '1') { - } + $scope.ptzMoveCommand = "moveRel"; + $scope.ptzStopCommand = "moveStop"; + } + + // Prefer con over rel if both enabled + // I've tested con + + if (data.control.Control.CanMoveCon == '1') { + + $scope.ptzMoveCommand = "moveCon"; + $scope.ptzStopCommand = "moveStop"; + } + + + + // presets + ZMDataModel.zmDebug("ConfigurePTZ Preset value is " + data.control.Control.HasPresets); + $scope.ptzPresets = []; + + if (data.control.Control.HasPresets == '1') { + //$scope.presetAndControl = $translate.instant('kPresets'); + + $scope.ptzPresetCount = parseInt(data.control.Control.NumPresets); + + ZMDataModel.zmDebug("ConfigurePTZ Number of presets is " + $scope.ptzPresetCount); + + + for (var p = 0; p < $scope.ptzPresetCount; p++) { + $scope.ptzPresets.push({ + name: (p + 1).toString(), + icon: '', + cmd: "presetGoto" + (p + 1).toString(), + style: 'button-royal' + }); + + } + + if (data.control.Control.HasHomePreset == '1') { + $scope.ptzPresets.unshift({ + name: '', + icon: "ion-ios-home", + cmd: 'presetHome', + style: 'button-royal' + }); + + } + + + + } + /*else + { + $scope.presetAndControl = $translate.instant('kMore'); + }*/ + // lets add these to the end + // strictly speaking, they aren't really presets, but meh for now + + // no need to darken these buttons if presets are not there + var buttonAccent = "button-dark"; + if ($scope.ptzPresets.length == 0) { + buttonAccent = ""; + } + + if (data.control.Control.CanWake == '1') { + + $scope.ptzPresets.push({ + name: 'W', + icon: "ion-eye", + cmd: 'wake', + style: 'button-royal ' + buttonAccent + }); + + } + + if (data.control.Control.CanSleep == '1') { + $scope.ptzPresets.push({ + name: 'S', + icon: "ion-eye-disabled", + cmd: 'sleep', + style: 'button-royal ' + buttonAccent + }); + + } + + if (data.control.Control.CanReset == '1') { + $scope.ptzPresets.push({ + name: 'R', + icon: "ion-ios-loop-strong", + cmd: 'reset', + style: 'button-royal ' + buttonAccent + }); + + } + + + ZMDataModel.zmLog("ConfigurePTZ Modal: ControlDB reports PTZ command to be " + $scope.ptzMoveCommand); + }) + .error(function (data) { + // console.log("** Error retrieving move PTZ command"); + ZMDataModel.zmLog("ConfigurePTZ : Error retrieving PTZ command " + JSON.stringify(data), "error"); + }); + + } else { + ZMDataModel.zmLog("configurePTZ " + mid + " is not PTZ controllable"); + } + }) + .error(function (data) { + // console.log("** Error retrieving move PTZ command"); + ZMDataModel.zmLog("configurePTZ : Error retrieving PTZ command " + JSON.stringify(data), "error"); + }); - if (data.control.Control.CanSleep == '1') - { - $scope.ptzPresets.push({name:'S', icon:"ion-eye-disabled", cmd:'sleep', style:'button-royal '+buttonAccent}); - } - if (data.control.Control.CanReset == '1') - { - $scope.ptzPresets.push({name:'R', icon:"ion-ios-loop-strong", cmd:'reset', style:'button-royal '+buttonAccent}); - - } - - - ZMDataModel.zmLog("ConfigurePTZ Modal: ControlDB reports PTZ command to be " + $scope.ptzMoveCommand); - }) - .error(function (data) { - // console.log("** Error retrieving move PTZ command"); - ZMDataModel.zmLog("ConfigurePTZ : Error retrieving PTZ command " + JSON.stringify(data), "error"); - }); - - } - else - { - ZMDataModel.zmLog ("configurePTZ " + mid+" is not PTZ controllable"); - } - }) - .error(function (data) { - // console.log("** Error retrieving move PTZ command"); - ZMDataModel.zmLog("configurePTZ : Error retrieving PTZ command " + JSON.stringify(data), "error"); - }); - - - } - - + + $scope.$on('modal.shown', function () { - + $scope.monStatus = ""; document.addEventListener("pause", onPause, false); document.addEventListener("resume", onResume, false); - + var ld = ZMDataModel.getLogin(); //currentEvent = $scope.currentEvent; - $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); - console.log ("************* GENERATED CONNKEY " + $scope.connKey); + $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); + //console.log ("************* GENERATED CONNKEY " + $scope.connKey); $scope.currentFrame = 1; $scope.monStatus = ""; - + configurePTZ($scope.monitorId); }); -}]); +}]);
\ No newline at end of file diff --git a/www/js/MontageCtrl.js b/www/js/MontageCtrl.js index 595f61f1..73de328b 100644 --- a/www/js/MontageCtrl.js +++ b/www/js/MontageCtrl.js @@ -4,7 +4,7 @@ /* global cordova,StatusBar,angular,console,ionic,Packery, Draggabilly, imagesLoaded, ConnectSDK */ -angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', '$rootScope', 'ZMDataModel', 'message', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$ionicPopup', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$ionicPlatform', 'zm', '$ionicPopover', '$controller', 'imageLoadingDataShare', '$window', '$localstorage', '$translate', function ($scope, $rootScope, ZMDataModel, message, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $ionicPopup, $stateParams, $ionicHistory, $ionicScrollDelegate, $ionicPlatform, zm, $ionicPopover, $controller, imageLoadingDataShare, $window, $localstorage, $translate) { +angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', '$rootScope', 'ZMDataModel', 'message', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$ionicPopup', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$ionicPlatform', 'zm', '$ionicPopover', '$controller', 'imageLoadingDataShare', '$window', '$localstorage', '$translate', function ($scope, $rootScope, ZMDataModel, message, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $ionicPopup, $stateParams, $ionicHistory, $ionicScrollDelegate, $ionicPlatform, zm, $ionicPopover, $controller, imageLoadingDataShare, $window, $localstorage, $translate) { //--------------------------------------------------------------------- // Controller main @@ -12,8 +12,8 @@ angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', ' var intervalHandleMontage; // image re-load handler var intervalHandleAlarmStatus; // status of each alarm state - - + + var gridcontainer; var pckry, draggie; var draggies; @@ -22,40 +22,34 @@ angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', ' var sizeInProgress; var modalIntervalHandle; var ld; - - - // -------------------------------------------------------- + + + // -------------------------------------------------------- // Handling of back button in case modal is open should // close the modal // -------------------------------------------------------- - - + + $ionicPlatform.registerBackButtonAction(function (e) { - e.preventDefault(); - if ($scope.modal !=undefined && $scope.modal.isShown()) - { - // switch off awake, as liveview is finished - ZMDataModel.zmDebug("Modal is open, closing it"); - ZMDataModel.setAwake(false); - $scope.isModalActive = false; - cleanupOnClose(); - } - else - { - ZMDataModel.zmDebug("Modal is closed, so toggling or exiting"); - if (!$ionicSideMenuDelegate.isOpenLeft()) - { - $ionicSideMenuDelegate.toggleLeft(); - - } - else - { - navigator.app.exitApp(); - } - + e.preventDefault(); + if ($scope.modal != undefined && $scope.modal.isShown()) { + // switch off awake, as liveview is finished + ZMDataModel.zmDebug("Modal is open, closing it"); + ZMDataModel.setAwake(false); + $scope.isModalActive = false; + cleanupOnClose(); + } else { + ZMDataModel.zmDebug("Modal is closed, so toggling or exiting"); + if (!$ionicSideMenuDelegate.isOpenLeft()) { + $ionicSideMenuDelegate.toggleLeft(); + + } else { + navigator.app.exitApp(); } - - }, 1000); + + } + + }, 1000); /*$scope.toggleHide = function(mon) { @@ -69,362 +63,343 @@ angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', ' };*/ - - -// called by afterEnter to load Packery -function initPackery() -{ - - + + + // called by afterEnter to load Packery + function initPackery() { + + $ionicLoading.show({ - template: $translate.instant('kArrangingImages'), - noBackdrop: true, - duration: zm.loadingTimeout - }); - + template: $translate.instant('kArrangingImages'), + noBackdrop: true, + duration: zm.loadingTimeout + }); + var progressCalled = false; draggies = []; var layouttype = true; var ld = ZMDataModel.getLogin(); - - + + var positionsStr = ld.packeryPositions; - var positions={}; - - if (positionsStr == '') - { - ZMDataModel.zmLog ("Did NOT find a packery layout"); - layouttype = true; - } - else - { - - console.log ("POSITION STR IS " + positionsStr); + var positions = {}; + + if (positionsStr == '') { + ZMDataModel.zmLog("Did NOT find a packery layout"); + layouttype = true; + } else { + + //console.log ("POSITION STR IS " + positionsStr); positions = JSON.parse(positionsStr); - ZMDataModel.zmLog ("found a packery layout"); + ZMDataModel.zmLog("found a packery layout"); layouttype = false; } - - - var cnt=0; - $scope.MontageMonitors.forEach(function(elem) - { - if ((elem.Monitor.Enabled!='0') && (elem.Monitor.Function!='None') ) + + + var cnt = 0; + $scope.MontageMonitors.forEach(function (elem) { + if ((elem.Monitor.Enabled != '0') && (elem.Monitor.Function != 'None')) cnt++; }); - - ZMDataModel.zmLog ("Monitors that are active and not DOM hidden: " + cnt + " while grid has " + positions.length); - - if (cnt > ZMDataModel.getLogin().maxMontage ) - { - cnt = ZMDataModel.getLogin().maxMontage; - ZMDataModel.zmLog ("restricting monitor count to " + cnt + " due to max-montage setting"); - } - - if (cnt!= positions.length) - { - - ZMDataModel.zmLog ("Whoops!! Monitors have changed. I'm resetting layouts, sorry!"); - layouttype = true; - positions = {}; - } - - var elem = angular.element(document.getElementById("mygrid")); - - //console.log ("**** mygrid is " + JSON.stringify(elem)); - - imagesLoaded(elem).on('progress', function(instance, img) { - - progressCalled = true; - - // if (layouttype) $timeout (function(){layout(pckry);},100); + + ZMDataModel.zmLog("Monitors that are active and not DOM hidden: " + cnt + " while grid has " + positions.length); + + if (cnt > ZMDataModel.getLogin().maxMontage) { + cnt = ZMDataModel.getLogin().maxMontage; + ZMDataModel.zmLog("restricting monitor count to " + cnt + " due to max-montage setting"); + } + + if (cnt != positions.length) { + + ZMDataModel.zmLog("Whoops!! Monitors have changed. I'm resetting layouts, sorry!"); + layouttype = true; + positions = {}; + } + + var elem = angular.element(document.getElementById("mygrid")); + + //console.log ("**** mygrid is " + JSON.stringify(elem)); + + imagesLoaded(elem).on('progress', function (instance, img) { + + progressCalled = true; + + // if (layouttype) $timeout (function(){layout(pckry);},100); }); - - imagesLoaded(elem).on('always', function() { - //console.log ("******** ALL IMAGES LOADED"); - ZMDataModel.zmDebug ("All images loaded"); - $scope.allImagesLoaded = true; - - $ionicLoading.hide(); - - pckry = new Packery('.grid', - { - itemSelector: '.grid-item', - percentPosition: true, - columnWidth: '.grid-sizer', - gutter:0, - initLayout:layouttype - - }); - if (!progressCalled) - { - ZMDataModel.zmLog ("*** BUG PROGRESS WAS NOT CALLED"); - pckry.reloadItems(); - - } - - $timeout (function() { - - pckry.getItemElements().forEach(function (itemElem) { - draggie = new Draggabilly(itemElem); - pckry.bindDraggabillyEvents(draggie); - draggies.push(draggie); - draggie.disable(); - draggie.unbindHandles(); - }); - - pckry.on( 'dragItemPositioned', itemDragged ); - - - - if (!isEmpty(positions)) - { - ZMDataModel.zmLog ("Arranging as per packery grid"); - - for (var i =0; i< $scope.MontageMonitors.length; i++) - { - for (var j=0; j < positions.length; j++) - { - if ($scope.MontageMonitors[i].Monitor.Id == positions[j].attr) - { - $scope.MontageMonitors[i].Monitor.gridScale = positions[j].size; - $scope.MontageMonitors[i].Monitor.listDisplay = positions[j].display; - ZMDataModel.zmDebug ("Setting monitor ID: " + $scope.MontageMonitors[i].Monitor.Id + " to size: " +positions[j].size + " and display:" + positions[j].display); - } - //console.log ("Index:"+positions[j].attr+ " with size: " + positions[j].size); + + imagesLoaded(elem).on('always', function () { + //console.log ("******** ALL IMAGES LOADED"); + ZMDataModel.zmDebug("All images loaded"); + $scope.allImagesLoaded = true; + + $ionicLoading.hide(); + + pckry = new Packery('.grid', { + itemSelector: '.grid-item', + percentPosition: true, + columnWidth: '.grid-sizer', + gutter: 0, + initLayout: layouttype + + }); + if (!progressCalled) { + ZMDataModel.zmLog("*** BUG PROGRESS WAS NOT CALLED"); + pckry.reloadItems(); + + } + + $timeout(function () { + + pckry.getItemElements().forEach(function (itemElem) { + draggie = new Draggabilly(itemElem); + pckry.bindDraggabillyEvents(draggie); + draggies.push(draggie); + draggie.disable(); + draggie.unbindHandles(); + }); + + pckry.on('dragItemPositioned', itemDragged); + + + + if (!isEmpty(positions)) { + ZMDataModel.zmLog("Arranging as per packery grid"); + + for (var i = 0; i < $scope.MontageMonitors.length; i++) { + for (var j = 0; j < positions.length; j++) { + if ($scope.MontageMonitors[i].Monitor.Id == positions[j].attr) { + $scope.MontageMonitors[i].Monitor.gridScale = positions[j].size; + $scope.MontageMonitors[i].Monitor.listDisplay = positions[j].display; + ZMDataModel.zmDebug("Setting monitor ID: " + $scope.MontageMonitors[i].Monitor.Id + " to size: " + positions[j].size + " and display:" + positions[j].display); } + //console.log ("Index:"+positions[j].attr+ " with size: " + positions[j].size); } + } + + + ZMDataModel.zmDebug("All images loaded, doing image layout"); + $timeout(function () { + pckry.initShiftLayout(positions, 'data-item-id'); + }, 0); + } + $timeout(function () { + ZMDataModel.zmLog("Force calling resize"); + pckry.shiftLayout(); + }, zm.packeryTimer); // don't ask - ZMDataModel.zmDebug ("All images loaded, doing image layout"); - $timeout (function() {pckry.initShiftLayout(positions, 'data-item-id');},0); - } - $timeout(function(){ZMDataModel.zmLog ("Force calling resize"); pckry.shiftLayout();},zm.packeryTimer);// don't ask - - - },zm.packeryTimer); - + }, zm.packeryTimer); + }); - - function itemDragged(item) - { - ZMDataModel.zmDebug ("drag complete"); - - pckry.getItemElements().forEach(function (itemElem) { - - console.log (itemElem.attributes['data-item-id'].value+" size "+itemElem.attributes['data-item-size'].value ); - }); - + + function itemDragged(item) { + ZMDataModel.zmDebug("drag complete"); + + //pckry.getItemElements().forEach(function (itemElem) { + + //console.log (itemElem.attributes['data-item-id'].value+" size "+itemElem.attributes['data-item-size'].value ); + // }); + var positions = pckry.getShiftPositions('data-item-id'); - //console.log ("POSITIONS MAP " + JSON.stringify(positions)); - var ld = ZMDataModel.getLogin(); - ld.packeryPositions = JSON.stringify(positions); - ZMDataModel.setLogin(ld); + //console.log ("POSITIONS MAP " + JSON.stringify(positions)); + var ld = ZMDataModel.getLogin(); + ld.packeryPositions = JSON.stringify(positions); + ZMDataModel.setLogin(ld); } - - + + } - - function isEmpty( obj ) - { - for ( var prop in obj ) { - return false; - } - return true; + + function isEmpty(obj) { + for (var prop in obj) { + return false; + } + return true; } - + //----------------------------------------------------------------------- // color for monitor state in montage //----------------------------------------------------------------------- - - $scope.stateColor = function() - { - console.log ("***MONSTATUS**"+$scope.monStatus+"**"); - var attr=""; - switch ($scope.monStatus) - { + + $scope.stateColor = function () { + //console.log ("***MONSTATUS**"+$scope.monStatus+"**"); + var attr = ""; + switch ($scope.monStatus) { case "": - attr="color:rgba(0, 0, 0, 0)"; + attr = "color:rgba(0, 0, 0, 0)"; break; case "idle": - attr="color:rgba(0, 0, 0, 0)"; + attr = "color:rgba(0, 0, 0, 0)"; break; case "pre-alarm": - attr="color:#e67e22"; + attr = "color:#e67e22"; break; case "alarmed": - attr="color:#D91E18"; + attr = "color:#D91E18"; break; case "alert": - attr="color:#e67e22"; + attr = "color:#e67e22"; break; case "record": - attr="color:#26A65B"; + attr = "color:#26A65B"; break; } - + return attr; }; //----------------------------------------------------------------------- // cycle through all displayed monitors and check alarm status //----------------------------------------------------------------------- - - function loadAlarmStatus() - { - - if (ZMDataModel.versionCompare($rootScope.apiVersion,"1.30")==-1) - { - + + function loadAlarmStatus() { + + if (ZMDataModel.versionCompare($rootScope.apiVersion, "1.30") == -1) { + return; } - - for (var i=0; i < $scope.MontageMonitors.length; i++) - { - if (($scope.MontageMonitors[i].Monitor.Function == 'None') || + + for (var i = 0; i < $scope.MontageMonitors.length; i++) { + if (($scope.MontageMonitors[i].Monitor.Function == 'None') || ($scope.MontageMonitors[i].Monitor.Enabled == '0') || - ($scope.MontageMonitors[i].Monitor.listDisplay == 'noshow')) - { + ($scope.MontageMonitors[i].Monitor.listDisplay == 'noshow')) { continue; } getAlarmStatus($scope.MontageMonitors[i]); - + } - + } - - //----------------------------------------------------------------------- + + //----------------------------------------------------------------------- // get alarm status over HTTP for a single monitor //----------------------------------------------------------------------- - function getAlarmStatus(monitor) - { + function getAlarmStatus(monitor) { var apiurl = ZMDataModel.getLogin().apiurl; //console.log ("ALARM CALLED WITH " +JSON.stringify(monitor)); - - var alarmurl = apiurl+"/monitors/alarm/id:"+monitor.Monitor.Id+"/command:status.json"; - // console.log("Alarm Check: Invoking " + alarmurl); - - + + var alarmurl = apiurl + "/monitors/alarm/id:" + monitor.Monitor.Id + "/command:status.json"; + // console.log("Alarm Check: Invoking " + alarmurl); + + $http.get(alarmurl) - .then (function (data) { - // ZMDataModel.zmDebug ("Success in monitor alarmed status " + JSON.stringify(data)); - - var sid = parseInt(data.data.status); - switch (sid) { - case 0: // idle - monitor.Monitor.alarmState = 'color:rgba(0,0,0,0);'; - break; - case 1:// pre alarm - monitor.Monitor.alarmState = 'color:#e67e22;'; - break; - case 2: // alarm - monitor.Monitor.alarmState = 'color:#D91E18;'; - break; - case 3: // alert - monitor.Monitor.alarmState = 'color:#e67e22;'; - break; - case 4: - monitor.Monitor.alarmState = 'color:#26A65B;'; - break; - - } - - }, + .then(function (data) { + // ZMDataModel.zmDebug ("Success in monitor alarmed status " + JSON.stringify(data)); + + var sid = parseInt(data.data.status); + switch (sid) { + case 0: // idle + monitor.Monitor.alarmState = 'color:rgba(0,0,0,0);'; + break; + case 1: // pre alarm + monitor.Monitor.alarmState = 'color:#e67e22;'; + break; + case 2: // alarm + monitor.Monitor.alarmState = 'color:#D91E18;'; + break; + case 3: // alert + monitor.Monitor.alarmState = 'color:#e67e22;'; + break; + case 4: + monitor.Monitor.alarmState = 'color:#26A65B;'; + break; + + } + + }, function (error) { - - - monitor.Monitor.alarmState = 'color:rgba(0,0,0,0);'; - ZMDataModel.zmDebug ("Error in monitor alarmed status "); - }); + + + monitor.Monitor.alarmState = 'color:rgba(0,0,0,0);'; + ZMDataModel.zmDebug("Error in monitor alarmed status "); + }); } - - - //----------------------------------------------------------------------- + + + //----------------------------------------------------------------------- // re-compute rand so snapshot in montage reloads //----------------------------------------------------------------------- - + function loadNotifications() { - - if (!$scope.allImagesLoaded) - { - ZMDataModel.zmDebug ("skipping image refresh, packery is still loading"); + + if (!$scope.allImagesLoaded) { + ZMDataModel.zmDebug("skipping image refresh, packery is still loading"); return; } - + $rootScope.rand = Math.floor((Math.random() * 100000) + 1); //console.log ("Inside Montage timer..."); } - $scope.cancelReorder = function() - { - $scope.modal.remove(); + $scope.cancelReorder = function () { + $scope.modal.remove(); }; - - $scope.saveReorder = function() - { - ZMDataModel.zmDebug ("Saving monitor hide/unhide and sizes"); - - - - + + $scope.saveReorder = function () { + ZMDataModel.zmDebug("Saving monitor hide/unhide and sizes"); + + + + $scope.MontageMonitors = $scope.copyMontage; $scope.modal.remove(); - $timeout( function() {pckry.reloadItems();},400); - $timeout( function() { - + $timeout(function () { + pckry.reloadItems(); + }, 400); + $timeout(function () { + draggies.forEach(function (drag) { drag.destroy(); }); - + draggies = []; - - pckry.once( 'layoutComplete', function() { - console.log('Saving packery order now, layout rendered'); - $timeout(function() {var positions = pckry.getShiftPositions('data-item-id'); - ZMDataModel.zmDebug ("POSITIONS MAP " + JSON.stringify(positions)); - var ld = ZMDataModel.getLogin(); - ld.packeryPositions = JSON.stringify(positions); - ZMDataModel.setLogin(ld);}); + + pckry.once('layoutComplete', function () { + //console.log('Saving packery order now, layout rendered'); + $timeout(function () { + var positions = pckry.getShiftPositions('data-item-id'); + ZMDataModel.zmDebug("POSITIONS MAP " + JSON.stringify(positions)); + var ld = ZMDataModel.getLogin(); + ld.packeryPositions = JSON.stringify(positions); + ZMDataModel.setLogin(ld); + }); }); - + pckry.getItemElements().forEach(function (itemElem) { - draggie = new Draggabilly(itemElem); - pckry.bindDraggabillyEvents(draggie); - draggies.push(draggie); - draggie.disable(); - }); + draggie = new Draggabilly(itemElem); + pckry.bindDraggabillyEvents(draggie); + draggies.push(draggie); + draggie.disable(); + }); pckry.layout(); - - },800); - - $ionicScrollDelegate.$getByHandle("montage-delegate").scrollTop(); - + + }, 800); + + $ionicScrollDelegate.$getByHandle("montage-delegate").scrollTop(); + }; - - $scope.toggleDelete = function (i) - { - + + $scope.toggleDelete = function (i) { + if ($scope.copyMontage[i].Monitor.listDisplay == 'show') $scope.copyMontage[i].Monitor.listDisplay = 'noshow'; else $scope.copyMontage[i].Monitor.listDisplay = 'show'; - - ZMDataModel.zmDebug ("index " + i + " is now " + $scope.copyMontage[i].Monitor.listDisplay); + + ZMDataModel.zmDebug("index " + i + " is now " + $scope.copyMontage[i].Monitor.listDisplay); }; - - $scope.hideUnhide = function() - { - if ($scope.isDragabillyOn) - { - dragToggle(); + + $scope.hideUnhide = function () { + if ($scope.isDragabillyOn) { + dragToggle(); } - $scope.copyMontage = angular.copy ($scope.MontageMonitors); + $scope.copyMontage = angular.copy($scope.MontageMonitors); $ionicModal.fromTemplateUrl('templates/reorder-modal.html', { scope: $scope, animation: 'slide-in-up' @@ -434,17 +409,17 @@ function initPackery() $scope.modal.show(); }); }; - - - -/* - $scope.closeReorderModal = function () { - - $scope.modal.remove(); - }; - */ - + + + /* + $scope.closeReorderModal = function () { + + $scope.modal.remove(); + + }; + */ + //---------------------------------------------------------------- // Alarm emit handling //---------------------------------------------------------------- @@ -454,91 +429,94 @@ function initPackery() return; //console.log ("***EVENT TRAP***"); var alarmMonitors = args.message; - for (var i=0; i< alarmMonitors.length; i++) - { + for (var i = 0; i < alarmMonitors.length; i++) { //console.log ("**** TRAPPED EVENT: "+alarmMonitors[i]); - - for (var j=0; j<$scope.MontageMonitors.length; j++) - { - if ($scope.MontageMonitors[j].Monitor.Id == alarmMonitors[i]) - { - ZMDataModel.zmDebug ("Enabling alarm for Monitor:"+$scope.monitors[j].Monitor.Id ); - $scope.MontageMonitors[j].Monitor.isAlarmed=true; + + for (var j = 0; j < $scope.MontageMonitors.length; j++) { + if ($scope.MontageMonitors[j].Monitor.Id == alarmMonitors[i]) { + ZMDataModel.zmDebug("Enabling alarm for Monitor:" + $scope.monitors[j].Monitor.Id); + $scope.MontageMonitors[j].Monitor.isAlarmed = true; scheduleRemoveFlash(j); } } - + } - - + + }); - - function scheduleRemoveFlash(id) - { - ZMDataModel.zmDebug ("Scheduled a "+zm.alarmFlashTimer+"ms timer for dis-alarming monitor ID:"+$scope.MontageMonitors[id].Monitor.Id); - $timeout( function() { + + function scheduleRemoveFlash(id) { + ZMDataModel.zmDebug("Scheduled a " + zm.alarmFlashTimer + "ms timer for dis-alarming monitor ID:" + $scope.MontageMonitors[id].Monitor.Id); + $timeout(function () { $scope.MontageMonitors[id].Monitor.isAlarmed = false; - ZMDataModel.zmDebug ("dis-alarming monitor ID:"+$scope.MontageMonitors[id].Monitor.Id); - },zm.alarmFlashTimer); + ZMDataModel.zmDebug("dis-alarming monitor ID:" + $scope.MontageMonitors[id].Monitor.Id); + }, zm.alarmFlashTimer); } //---------------------------------------------------------------- // Alarm notification handling //---------------------------------------------------------------- - $scope.handleAlarms = function() - { - $rootScope.isAlarm=!$rootScope.isAlarm; - if (!$rootScope.isAlarm) - { - $rootScope.alarmCount="0"; - $ionicHistory.nextViewOptions({disableBack: true}); - $state.go("events", {"id": 0}, { reload: true }); + $scope.handleAlarms = function () { + $rootScope.isAlarm = !$rootScope.isAlarm; + if (!$rootScope.isAlarm) { + $rootScope.alarmCount = "0"; + $ionicHistory.nextViewOptions({ + disableBack: true + }); + $state.go("events", { + "id": 0 + }, { + reload: true + }); } }; - - $scope.handleAlarmsWhileMinimized = function() - { - $rootScope.isAlarm=!$rootScope.isAlarm; - - $scope.minimal = !$scope.minimal; + + $scope.handleAlarmsWhileMinimized = function () { + $rootScope.isAlarm = !$rootScope.isAlarm; + + $scope.minimal = !$scope.minimal; ZMDataModel.zmDebug("MontageCtrl: switch minimal is " + $scope.minimal); ionic.Platform.fullScreen($scope.minimal, !$scope.minimal); - console.log ("alarms:Cancelling timer"); + //console.log ("alarms:Cancelling timer"); $interval.cancel(intervalHandleMontage); $interval.cancel(intervalHandleAlarmStatus); - - if (!$rootScope.isAlarm) - { - $rootScope.alarmCount="0"; - $ionicHistory.nextViewOptions({disableBack: true}); - $state.go("events", {"id": 0}, { reload: true }); + + if (!$rootScope.isAlarm) { + $rootScope.alarmCount = "0"; + $ionicHistory.nextViewOptions({ + disableBack: true + }); + $state.go("events", { + "id": 0 + }, { + reload: true + }); } }; - - + + //------------------------------------------------------------- // this is checked to make sure we are not pulling images // when app is in background. This is a problem with Android, // for example //------------------------------------------------------------- - $scope.isBackground = function() - { + $scope.isBackground = function () { //console.log ("Is background called from Montage and returned " + //ZMDataModel.isBackground()); return ZMDataModel.isBackground(); }; - + //--------------------------------------------------------------------- // Triggered when you enter/exit full screen //--------------------------------------------------------------------- $scope.switchMinimal = function () { $scope.minimal = !$scope.minimal; ZMDataModel.zmDebug("MontageCtrl: switch minimal is " + $scope.minimal); - // console.log("Hide Statusbar"); + // console.log("Hide Statusbar"); ionic.Platform.fullScreen($scope.minimal, !$scope.minimal); - console.log ("minimal switch:Cancelling timer"); + //console.log ("minimal switch:Cancelling timer"); $interval.cancel(intervalHandleMontage); //we will renew on reload $interval.cancel(intervalHandleAlarmStatus); // We are reloading this view, so we don't want entry animations @@ -559,92 +537,83 @@ function initPackery() $scope.showPTZ = !$scope.showPTZ; }; - - - $scope.toggleSelectItem = function(ndx) - { - - if ($scope.MontageMonitors[ndx].Monitor.selectStyle !== "undefined" && $scope.MontageMonitors[ndx].Monitor.selectStyle=="dragborder-selected") - { - $scope.MontageMonitors[ndx].Monitor.selectStyle=""; - } - else - { - $scope.MontageMonitors[ndx].Monitor.selectStyle="dragborder-selected"; - } - console.log ("Switched value to " + $scope.MontageMonitors[ndx].Monitor.selectStyle); + + + $scope.toggleSelectItem = function (ndx) { + + if ($scope.MontageMonitors[ndx].Monitor.selectStyle !== "undefined" && $scope.MontageMonitors[ndx].Monitor.selectStyle == "dragborder-selected") { + $scope.MontageMonitors[ndx].Monitor.selectStyle = ""; + } else { + $scope.MontageMonitors[ndx].Monitor.selectStyle = "dragborder-selected"; + } + //console.log ("Switched value to " + $scope.MontageMonitors[ndx].Monitor.selectStyle); }; //--------------------------------------------------------------------- // Called when you enable/disable dragging //--------------------------------------------------------------------- - - $scope.dragToggle = function() - { + + $scope.dragToggle = function () { dragToggle(); - - + + }; - - function dragToggle() - { + + function dragToggle() { var i; $scope.isDragabillyOn = !$scope.isDragabillyOn; - - $ionicSideMenuDelegate.canDragContent($scope.isDragabillyOn? false: true); - + + $ionicSideMenuDelegate.canDragContent($scope.isDragabillyOn ? false : true); + //$timeout(function(){pckry.reloadItems();},10); - ZMDataModel.zmDebug ("setting dragabilly to " + $scope.isDragabillyOn); - if ($scope.isDragabillyOn) - { + ZMDataModel.zmDebug("setting dragabilly to " + $scope.isDragabillyOn); + if ($scope.isDragabillyOn) { $scope.showSizeButtons = true; - - $scope.dragBorder="dragborder"; - ZMDataModel.zmDebug ("Enabling drag for " + draggies.length + " items"); - for (i=0; i < draggies.length; i++) - { + + $scope.dragBorder = "dragborder"; + ZMDataModel.zmDebug("Enabling drag for " + draggies.length + " items"); + for (i = 0; i < draggies.length; i++) { draggies[i].enable(); draggies[i].bindHandles(); } - - // reflow and reload as some may be hidden + + // reflow and reload as some may be hidden // $timeout(function(){pckry.reloadItems();$timeout(function(){pckry.layout();},300);},100); - } - else - { - $scope.dragBorder=""; - ZMDataModel.zmDebug ("Disabling drag for " + draggies.length + " items"); - for ( i=0; i < draggies.length; i++) - { + } else { + $scope.dragBorder = ""; + ZMDataModel.zmDebug("Disabling drag for " + draggies.length + " items"); + for (i = 0; i < draggies.length; i++) { draggies[i].disable(); draggies[i].unbindHandles(); } - for (i=0; i < $scope.MontageMonitors.length; i++) - { - $scope.MontageMonitors[i].Monitor.selectStyle=""; + for (i = 0; i < $scope.MontageMonitors.length; i++) { + $scope.MontageMonitors[i].Monitor.selectStyle = ""; } // reflow and reload as some may be hidden - $timeout(function(){$timeout(function(){ var positions = pckry.getShiftPositions('data-item-id'); - console.log ("POSITIONS MAP " + JSON.stringify(positions)); - var ld = ZMDataModel.getLogin(); - ld.packeryPositions = JSON.stringify(positions); - ZMDataModel.setLogin(ld);},300);},100); - + $timeout(function () { + $timeout(function () { + var positions = pckry.getShiftPositions('data-item-id'); + //console.log ("POSITIONS MAP " + JSON.stringify(positions)); + var ld = ZMDataModel.getLogin(); + ld.packeryPositions = JSON.stringify(positions); + ZMDataModel.setLogin(ld); + }, 300); + }, 100); + } } - - + + //--------------------------------------------------------------------- // main monitor modal open - if drag is not on, this is called on touch //--------------------------------------------------------------------- - - $scope.openModal = function (mid, controllable, controlid, connKey, monitor) - { - openModal (mid, controllable, controlid, connKey, monitor); + + $scope.openModal = function (mid, controllable, controlid, connKey, monitor) { + openModal(mid, controllable, controlid, connKey, monitor); }; - - function openModal(mid, controllable, controlid, connKey, monitor) { + + function openModal(mid, controllable, controlid, connKey, monitor) { ZMDataModel.zmDebug("MontageCtrl: Open Monitor Modal with monitor Id=" + mid + " and Controllable:" + controllable + " with control ID:" + controlid); // $scope.isModalActive = true; // Note: no need to setAwake(true) as its already awake @@ -652,7 +621,7 @@ function initPackery() ZMDataModel.zmLog("Cancelling montage timer, opening Modal"); // ZMDataModel.zmLog("Starting Modal timer"); - console.log ("openModal:Cancelling timer"); + //console.log ("openModal:Cancelling timer"); $interval.cancel(intervalHandleMontage); $interval.cancel(intervalHandleAlarmStatus); @@ -668,24 +637,24 @@ function initPackery() $scope.ptzMoveCommand = ""; $scope.ptzStopCommand = ""; - + $scope.zoomInCommand = ""; $scope.zoomOutCommand = ""; $scope.zoomStopCommand = "zoomStop"; $scope.canZoom = false; - + $scope.presetOn = false; - + $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); - $scope.isControllable = controllable; + $scope.isControllable = controllable; $scope.refMonitor = monitor; - + // This is a modal to show the monitor footage // We need to switch to always awake if set so the feed doesn't get interrupted ZMDataModel.setAwake(ZMDataModel.getKeepAwake()); - + // This is a modal to show the monitor footage $ionicModal.fromTemplateUrl('templates/monitors-modal.html', { @@ -701,10 +670,10 @@ function initPackery() noBackdrop: true, duration: zm.loadingTimeout }); - - + + // we don't really need this as we have stopped the timer - // $scope.isModalActive = true; + // $scope.isModalActive = true; //$timeout (function() {pckry.shiftLayout();},zm.packeryTimer); $scope.modal.show(); @@ -717,10 +686,12 @@ function initPackery() // //--------------------------------------------------------------------- - function cleanupOnClose() - { + function cleanupOnClose() { $scope.modal.remove(); - $timeout (function() {ZMDataModel.zmLog("MontageCtrl:Stopping network pull...");if (ZMDataModel.isForceNetworkStop()) ZMDataModel.stopNetwork();},50); + $timeout(function () { + ZMDataModel.zmLog("MontageCtrl:Stopping network pull..."); + if (ZMDataModel.isForceNetworkStop()) ZMDataModel.stopNetwork(); + }, 50); $rootScope.rand = Math.floor((Math.random() * 100000) + 1); $scope.isModalActive = false; @@ -730,34 +701,34 @@ function initPackery() // console.log ("closeModal: Cancelling timer"); $interval.cancel(intervalHandleMontage); $interval.cancel(intervalHandleAlarmStatus); - + intervalHandleMontage = $interval(function () { loadNotifications(); // console.log ("Refreshing Image..."); }.bind(this), ld.refreshSec * 1000); - + intervalHandleAlarmStatus = $interval(function () { loadAlarmStatus(); // console.log ("Refreshing Image..."); }.bind(this), 5000); - - // $timeout (function() {pckry.shiftLayout();},zm.packeryTimer); - - + + // $timeout (function() {pckry.shiftLayout();},zm.packeryTimer); + + } - + $scope.closeModal = function () { ZMDataModel.zmDebug("MontageCtrl: Close & Destroy Monitor Modal"); cleanupOnClose(); // $scope.isModalActive = false; // Note: no need to setAwake(false) as needs to be awake // in montage view - - - + + + }; - + //--------------------------------------------------------------------- @@ -778,8 +749,8 @@ function initPackery() function onResume() { - - + + } $scope.openMenu = function () { @@ -791,240 +762,236 @@ function initPackery() }; $scope.$on('$destroy', function () { - + }); $scope.$on('$ionicView.loaded', function () { - // console.log("**VIEW ** Montage Ctrl Loaded"); + // console.log("**VIEW ** Montage Ctrl Loaded"); }); - + $scope.$on('$ionicView.leave', function () { - // console.log("**VIEW ** Montage Ctrl Left, force removing modal"); + // console.log("**VIEW ** Montage Ctrl Left, force removing modal"); if ($scope.modal) $scope.modal.remove(); }); - - - + + + function orientationChanged() { - ZMDataModel.zmDebug("Detected orientation change, redoing packery resize"); - $timeout(function () { - pckry.onresize(); + ZMDataModel.zmDebug("Detected orientation change, redoing packery resize"); + $timeout(function () { + pckry.onresize(); + }); + } + + $scope.toggleSizeButtons = function () { + + $scope.showSizeButtons = !$scope.showSizeButtons; + ZMDataModel.zmDebug("toggling size buttons:" + $scope.showSizeButtons); + }; + + // minimal has to be beforeEnter or header won't hide + $scope.$on('$ionicView.beforeEnter', function () { + $scope.minimal = $stateParams.minimal; + //console.log ("**************** MINIMAL ENTER " + $scope.minimal); + $scope.zmMarginTop = $scope.minimal ? 0 : 15; + + + + }); -} - -$scope.toggleSizeButtons = function() -{ - - $scope.showSizeButtons = !$scope.showSizeButtons; - ZMDataModel.zmDebug ("toggling size buttons:"+$scope.showSizeButtons); -}; - -// minimal has to be beforeEnter or header won't hide -$scope.$on ('$ionicView.beforeEnter', function() { - $scope.minimal = $stateParams.minimal; - //console.log ("**************** MINIMAL ENTER " + $scope.minimal); - $scope.zmMarginTop = $scope.minimal ? 0 : 15; - - - - -}); - -$scope.$on('$ionicView.afterEnter', function () { - ZMDataModel.zmDebug("Setting image mode to snapshot, will change to image when packery is all done"); - $scope.allImagesLoaded = false; - $scope.isDragabillyOn = false; - $scope.allImagesLoaded = false; - $scope.gridScale = "grid-item-50"; - $scope.LoginData = ZMDataModel.getLogin(); - $scope.monLimit = $scope.LoginData.maxMontage; - $scope.showSizeButtons = false; - - $scope.monitors = message; - $scope.MontageMonitors = angular.copy(message); - $scope.sliderChanging = false; - loginData = ZMDataModel.getLogin(); + $scope.$on('$ionicView.afterEnter', function () { + ZMDataModel.zmDebug("Setting image mode to snapshot, will change to image when packery is all done"); + $scope.allImagesLoaded = false; + $scope.isDragabillyOn = false; + $scope.allImagesLoaded = false; + $scope.gridScale = "grid-item-50"; + $scope.LoginData = ZMDataModel.getLogin(); + $scope.monLimit = $scope.LoginData.maxMontage; + $scope.showSizeButtons = false; - $scope.isRefresh = $stateParams.isRefresh; - sizeInProgress = false; - $scope.imageStyle = true; - intervalHandleMontage = ""; - $scope.isModalActive = false; - $scope.isReorder = false; - $ionicSideMenuDelegate.canDragContent($scope.minimal ? true : true); - - - //$scope.areImagesLoading = true; + $scope.monitors = message; + $scope.MontageMonitors = angular.copy(message); + $scope.sliderChanging = false; + loginData = ZMDataModel.getLogin(); + + $scope.isRefresh = $stateParams.isRefresh; + sizeInProgress = false; + $scope.imageStyle = true; + intervalHandleMontage = ""; + $scope.isModalActive = false; + $scope.isReorder = false; + + $ionicSideMenuDelegate.canDragContent($scope.minimal ? true : true); + + + //$scope.areImagesLoading = true; var ld = ZMDataModel.getLogin(); //console.log("Setting Awake to " + ZMDataModel.getKeepAwake()); ZMDataModel.setAwake(ZMDataModel.getKeepAwake()); $interval.cancel(intervalHandleMontage); $interval.cancel(intervalHandleAlarmStatus); - + intervalHandleMontage = $interval(function () { loadNotifications(); // console.log ("Refreshing Image..."); }.bind(this), ld.refreshSec * 1000); - + intervalHandleAlarmStatus = $interval(function () { loadAlarmStatus(); // console.log ("Refreshing Image..."); }.bind(this), 5000); - + loadNotifications(); - if ($scope.MontageMonitors.length == 0) { - $rootScope.zmPopup = $ionicPopup.alert({ - title: $translate.instant('kNoMonitors'), - template: $translate.instant('kCheckCredentials') - }); - $ionicHistory.nextViewOptions({ - disableBack: true - }); - $state.go("login", { - "wizard": false - }); - return; - } + if ($scope.MontageMonitors.length == 0) { + $rootScope.zmPopup = $ionicPopup.alert({ + title: $translate.instant('kNoMonitors'), + template: $translate.instant('kCheckCredentials') + }); + $ionicHistory.nextViewOptions({ + disableBack: true + }); + $state.go("login", { + "wizard": false + }); + return; + } - ld = ZMDataModel.getLogin(); + ld = ZMDataModel.getLogin(); - $rootScope.authSession = "undefined"; - $ionicLoading.show({ - template: $translate.instant('kNegotiatingStreamAuth'), - animation: 'fade-in', - showBackdrop: true, - duration: zm.loadingTimeout, - maxWidth: 300, - showDelay: 0 - }); + $rootScope.authSession = "undefined"; + $ionicLoading.show({ + template: $translate.instant('kNegotiatingStreamAuth'), + animation: 'fade-in', + showBackdrop: true, + duration: zm.loadingTimeout, + maxWidth: 300, + showDelay: 0 + }); - ZMDataModel.zmLog("Inside Montage Ctrl:We found " + $scope.monitors.length + " monitors"); + ZMDataModel.zmLog("Inside Montage Ctrl:We found " + $scope.monitors.length + " monitors"); - // set them all at 50% for packery - for (var i = 0; i < $scope.MontageMonitors.length; i++) { - $scope.MontageMonitors[i].Monitor.gridScale = "50"; - $scope.MontageMonitors[i].Monitor.selectStyle = ""; - $scope.MontageMonitors[i].Monitor.alarmState='color:rgba(0,0,0,0);'; + // set them all at 50% for packery + for (var i = 0; i < $scope.MontageMonitors.length; i++) { + $scope.MontageMonitors[i].Monitor.gridScale = "50"; + $scope.MontageMonitors[i].Monitor.selectStyle = ""; + $scope.MontageMonitors[i].Monitor.alarmState = 'color:rgba(0,0,0,0);'; - } + } - $rootScope.validMonitorId = $scope.monitors[0].Monitor.Id; - ZMDataModel.getAuthKey($rootScope.validMonitorId, (Math.floor((Math.random() * 999999) + 1)).toString()) - .then(function (success) { - $ionicLoading.hide(); - //console.log(success); - $rootScope.authSession = success; - ZMDataModel.zmLog("Stream authentication construction: " + - $rootScope.authSession); + $rootScope.validMonitorId = $scope.monitors[0].Monitor.Id; + ZMDataModel.getAuthKey($rootScope.validMonitorId, (Math.floor((Math.random() * 999999) + 1)).toString()) + .then(function (success) { + $ionicLoading.hide(); + //console.log(success); + $rootScope.authSession = success; + ZMDataModel.zmLog("Stream authentication construction: " + + $rootScope.authSession); - }, - function (error) { + }, + function (error) { - $ionicLoading.hide(); - ZMDataModel.zmDebug("MontageCtrl: Error in authkey retrieval " + error); - //$rootScope.authSession=""; - ZMDataModel.zmLog("MontageCtrl: Error returned Stream authentication construction. Retaining old value of: " + $rootScope.authSession); - }); + $ionicLoading.hide(); + ZMDataModel.zmDebug("MontageCtrl: Error in authkey retrieval " + error); + //$rootScope.authSession=""; + ZMDataModel.zmLog("MontageCtrl: Error returned Stream authentication construction. Retaining old value of: " + $rootScope.authSession); + }); - console.log("**VIEW ** Montage Ctrl AFTER ENTER"); + //console.log("**VIEW ** Montage Ctrl AFTER ENTER"); window.addEventListener("resize", orientationChanged, false); - $timeout ( function () {initPackery(); },zm.packeryTimer); + $timeout(function () { + initPackery(); + }, zm.packeryTimer); document.addEventListener("pause", onPause, false); document.addEventListener("resume", onResume, false); - - - -}); - + + + + }); + $scope.$on('$ionicView.beforeLeave', function () { - // console.log("**VIEW ** Montage Ctrl Left, force removing modal"); - - console.log ("beforeLeave:Cancelling timer"); + // console.log("**VIEW ** Montage Ctrl Left, force removing modal"); + + //console.log ("beforeLeave:Cancelling timer"); $interval.cancel(intervalHandleMontage); $interval.cancel(intervalHandleAlarmStatus); pckry.destroy(); - window.removeEventListener("resize", orientationChanged, false); - - + window.removeEventListener("resize", orientationChanged, false); + + // make sure this is applied in scope digest to stop network pull // thats why we are doing it beforeLeave - - if (ZMDataModel.isForceNetworkStop()) - { - ZMDataModel.zmLog ("MontageCtrl:Stopping network pull..."); + + if (ZMDataModel.isForceNetworkStop()) { + ZMDataModel.zmLog("MontageCtrl:Stopping network pull..."); ZMDataModel.stopNetwork(); - + } - + }); - - - + + + $scope.$on('$ionicView.unloaded', function () { - + }); - - $scope.resetSizes = function() - { + + $scope.resetSizes = function () { var somethingReset = false; - for (var i=0; i< $scope.MontageMonitors.length; i++) - { - if ($scope.isDragabillyOn) - { - if ($scope.MontageMonitors[i].Monitor.selectStyle=="dragborder-selected") - { - $scope.MontageMonitors[i].Monitor.gridScale="50"; - somethingReset = true; - } - } - else - { - $scope.MontageMonitors[i].Monitor.gridScale="50"; - // somethingReset = true; + for (var i = 0; i < $scope.MontageMonitors.length; i++) { + if ($scope.isDragabillyOn) { + if ($scope.MontageMonitors[i].Monitor.selectStyle == "dragborder-selected") { + $scope.MontageMonitors[i].Monitor.gridScale = "50"; + somethingReset = true; + } + } else { + $scope.MontageMonitors[i].Monitor.gridScale = "50"; + // somethingReset = true; } } if (!somethingReset && $scope.isDragabillyOn) // nothing was selected { - for (i=0; i< $scope.MontageMonitors.length; i++){$scope.MontageMonitors[i].Monitor.gridScale="50";} + for (i = 0; i < $scope.MontageMonitors.length; i++) { + $scope.MontageMonitors[i].Monitor.gridScale = "50"; + } } - - $timeout (function() - { - pckry.reloadItems(); - - pckry.once( 'layoutComplete', function() { - console.log ("Layout complete"); - var positions = pckry.getShiftPositions('data-item-id'); - console.log ("POSITIONS MAP " + JSON.stringify(positions)); - var ld = ZMDataModel.getLogin(); - ld.packeryPositions = JSON.stringify(positions); - ZMDataModel.setLogin(ld); - // $scope.slider.monsize = 2; - }); - //layout(pckry); - $timeout (function(){pckry.layout();},zm.packeryTimer); // force here - no shiftlayout - - - },100); - + + $timeout(function () { + pckry.reloadItems(); + + pckry.once('layoutComplete', function () { + //console.log ("Layout complete"); + var positions = pckry.getShiftPositions('data-item-id'); + //console.log ("POSITIONS MAP " + JSON.stringify(positions)); + var ld = ZMDataModel.getLogin(); + ld.packeryPositions = JSON.stringify(positions); + ZMDataModel.setLogin(ld); + // $scope.slider.monsize = 2; + }); + //layout(pckry); + $timeout(function () { + pckry.layout(); + }, zm.packeryTimer); // force here - no shiftlayout + + + }, 100); + }; - - - function layout(pckry) - { + + + function layout(pckry) { pckry.shiftLayout(); } @@ -1036,95 +1003,89 @@ $scope.$on('$ionicView.afterEnter', function () { //--------------------------------------------------------- $scope.sliderChanged = function (dirn) { - - if ($scope.sliderChanging) - { - // console.log ("too fast my friend"); + + if ($scope.sliderChanging) { + // console.log ("too fast my friend"); //$scope.slider.monsize = oldSliderVal; - // return; + // return; } - + $scope.sliderChanging = true; - - var somethingReset = false; - - // this only changes items that are selected - for (var i=0; i< $scope.MontageMonitors.length; i++) - { - - var curVal = parseInt($scope.MontageMonitors[i].Monitor.gridScale); - curVal = curVal + (10 * dirn); - if (curVal < 10) curVal=10; - if (curVal >100) curVal = 100; - //console.log ("For Index: " + i + " From: " + $scope.MontageMonitors[i].Monitor.gridScale + " To: " + curVal); - - if ($scope.isDragabillyOn) - { + + var somethingReset = false; + + // this only changes items that are selected + for (var i = 0; i < $scope.MontageMonitors.length; i++) { + + var curVal = parseInt($scope.MontageMonitors[i].Monitor.gridScale); + curVal = curVal + (10 * dirn); + if (curVal < 10) curVal = 10; + if (curVal > 100) curVal = 100; + //console.log ("For Index: " + i + " From: " + $scope.MontageMonitors[i].Monitor.gridScale + " To: " + curVal); + + if ($scope.isDragabillyOn) { // only do this for selected monitors - if ($scope.MontageMonitors[i].Monitor.selectStyle=="dragborder-selected") - { - - $scope.MontageMonitors[i].Monitor.gridScale= curVal; + if ($scope.MontageMonitors[i].Monitor.selectStyle == "dragborder-selected") { + + $scope.MontageMonitors[i].Monitor.gridScale = curVal; somethingReset = true; } - } - else - { - $scope.MontageMonitors[i].Monitor.gridScale= curVal; - //somethingReset = true; - - } - - } - - // this changes all items if none were selected - if (!somethingReset && $scope.isDragabillyOn) // nothing was selected - { - for (i=0; i< $scope.MontageMonitors.length; i++) - { - var cv = parseInt($scope.MontageMonitors[i].Monitor.gridScale); - cv = cv + (10 * dirn); - if (cv < 10) cv=10; - if (cv >100) cv = 100; - $scope.MontageMonitors[i].Monitor.gridScale= cv; - } + } else { + $scope.MontageMonitors[i].Monitor.gridScale = curVal; + //somethingReset = true; + } - - - //pckry.reloadItems(); - - pckry.once( 'layoutComplete', function() { - $timeout(function () { - var positions = pckry.getShiftPositions('data-item-id'); - console.log ("POSITIONS MAP " + JSON.stringify(positions)); - var ld = ZMDataModel.getLogin(); - ld.packeryPositions = JSON.stringify(positions); - ZMDataModel.setLogin(ld); - $ionicLoading.hide(); - $scope.sliderChanging = false; - },zm.packeryTimer); - }); - - - - if (!somethingReset) - { - console.log (">>>SOMETHING NOT RESET"); - $timeout(function() {pckry.layout();},zm.packeryTimer); - } - else - { - - console.log (">>>SOMETHING RESET"); - $timeout(function() {layout(pckry);},zm.packeryTimer); - } - - - - + + } + + // this changes all items if none were selected + if (!somethingReset && $scope.isDragabillyOn) // nothing was selected + { + for (i = 0; i < $scope.MontageMonitors.length; i++) { + var cv = parseInt($scope.MontageMonitors[i].Monitor.gridScale); + cv = cv + (10 * dirn); + if (cv < 10) cv = 10; + if (cv > 100) cv = 100; + $scope.MontageMonitors[i].Monitor.gridScale = cv; + } + } + + + //pckry.reloadItems(); + + pckry.once('layoutComplete', function () { + $timeout(function () { + var positions = pckry.getShiftPositions('data-item-id'); + //console.log ("POSITIONS MAP " + JSON.stringify(positions)); + var ld = ZMDataModel.getLogin(); + ld.packeryPositions = JSON.stringify(positions); + ZMDataModel.setLogin(ld); + $ionicLoading.hide(); + $scope.sliderChanging = false; + }, zm.packeryTimer); + }); + + + + if (!somethingReset) { + //console.log (">>>SOMETHING NOT RESET"); + $timeout(function () { + pckry.layout(); + }, zm.packeryTimer); + } else { + + //console.log (">>>SOMETHING RESET"); + $timeout(function () { + layout(pckry); + }, zm.packeryTimer); + } + + + + }; - - + + $scope.$on('$ionicView.afterEnter', function () { // This rand is really used to reload the monitor image in img-src so it is not cached @@ -1141,7 +1102,7 @@ $scope.$on('$ionicView.afterEnter', function () { $scope.doRefresh = function () { - // console.log("***Pull to Refresh, recomputing Rand"); + // console.log("***Pull to Refresh, recomputing Rand"); ZMDataModel.zmLog("Reloading view for montage view, recomputing rand"); $rootScope.rand = Math.floor((Math.random() * 100000) + 1); $scope.monitors = []; @@ -1156,4 +1117,4 @@ $scope.$on('$ionicView.afterEnter', function () { }; -}]); +}]);
\ No newline at end of file diff --git a/www/js/MontageHistoryCtrl.js b/www/js/MontageHistoryCtrl.js index ad5d6af1..71a37c63 100644 --- a/www/js/MontageHistoryCtrl.js +++ b/www/js/MontageHistoryCtrl.js @@ -9,12 +9,12 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$scope', '$rootScope', 'ZMDataModel', 'message', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$ionicPopup', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$ionicPlatform', 'zm', '$ionicPopover', '$controller', 'imageLoadingDataShare', '$window', '$translate', function ($scope, $rootScope, ZMDataModel, message, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $ionicPopup, $stateParams, $ionicHistory, $ionicScrollDelegate, $ionicPlatform, zm, $ionicPopover, $controller, imageLoadingDataShare, $window, $translate) { - //-------------------------------------- + //-------------------------------------- // formats events dates in a nice way //--------------------------------------- $scope.prettifyDate = function (str) { - return moment(str).format('MMM Do, YYYY '+ZMDataModel.getTimeFormat()); + return moment(str).format('MMM Do, YYYY ' + ZMDataModel.getTimeFormat()); }; function prettifyDate(str) { @@ -28,451 +28,410 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc $scope.prettify = function (str) { - return moment(str).format(ZMDataModel.getTimeFormat()+' on MMMM Do YYYY'); + return moment(str).format(ZMDataModel.getTimeFormat() + ' on MMMM Do YYYY'); }; - - - - //-------------------------------------- + + + + //-------------------------------------- // pause/unpause nph-zms //--------------------------------------- - $scope.togglePause = function (mid) - { + $scope.togglePause = function (mid) { //console.log ("TOGGLE PAUSE " + mid); var m = -1; - for (var i=0; i < $scope.MontageMonitors.length; i++) - { - - if ($scope.MontageMonitors[i].Monitor.Id == mid) - { + for (var i = 0; i < $scope.MontageMonitors.length; i++) { + + if ($scope.MontageMonitors[i].Monitor.Id == mid) { m = i; break; } } - if (m != -1) - { + if (m != -1) { $scope.MontageMonitors[m].Monitor.isPaused = !$scope.MontageMonitors[m].Monitor.isPaused; - - var cmd = $scope.MontageMonitors[m].Monitor.isPaused? 1:2; - - ZMDataModel.zmDebug ("Sending CMD:"+cmd+" for monitor "+$scope.MontageMonitors[m].Monitor.Name); - controlEventStream(cmd,"",$scope.MontageMonitors[m].Monitor.connKey,-1); + + var cmd = $scope.MontageMonitors[m].Monitor.isPaused ? 1 : 2; + + ZMDataModel.zmDebug("Sending CMD:" + cmd + " for monitor " + $scope.MontageMonitors[m].Monitor.Name); + controlEventStream(cmd, "", $scope.MontageMonitors[m].Monitor.connKey, -1); } }; - - - + + + //-------------------------------------- // Called when ion-footer collapses // note that on init it is also called //--------------------------------------- - - $scope.footerExpand = function() - { - // console.log ("**************** EXPAND CALLED ***************"); + + $scope.footerExpand = function () { + // console.log ("**************** EXPAND CALLED ***************"); $ionicSideMenuDelegate.canDragContent(false); }; - - $scope.footerCollapse = function() - { - - + + $scope.footerCollapse = function () { + + footerCollapse(); - - + + }; - - + + /* Note this is also called when the view is first loaded */ - function footerCollapse() - { - // console.log ("**************** COLLAPSE CALLED ***************"); - if (readyToRun == false) - { - ZMDataModel.zmDebug ("fake call to footerCollapse - ignoring"); + function footerCollapse() { + // console.log ("**************** COLLAPSE CALLED ***************"); + if (readyToRun == false) { + ZMDataModel.zmDebug("fake call to footerCollapse - ignoring"); return; } - + $ionicSideMenuDelegate.canDragContent(true); - - ZMDataModel.stopNetwork("MontageHistory-footerCollapse"); + + ZMDataModel.stopNetwork("MontageHistory-footerCollapse"); var ld = ZMDataModel.getLogin(); - - $scope.sliderVal.realRate = $scope.sliderVal.rate *100; + + $scope.sliderVal.realRate = $scope.sliderVal.rate * 100; //ZMDataModel.zmDebug ("Playback rate is:" + $scope.sliderVal.realRate); - + var TimeObjectFrom = moment($scope.datetimeValueFrom.value).format("YYYY-MM-DD HH:mm"); var TimeObjectTo = moment($scope.datetimeValueTo.value).format('YYYY-MM-DD HH:mm'); - - // console.log ("TIME START: " + TimeObjectFrom + " " + TimeObjectTo); + + // console.log ("TIME START: " + TimeObjectFrom + " " + TimeObjectTo); //console.log ("TIME START: " + TimeObjectFrom + " " + TimeObjectTo); - - - var apiurl; - + + + var apiurl; + // release all active streams - for (var i=0; i< $scope.MontageMonitors.length; i++) - { + for (var i = 0; i < $scope.MontageMonitors.length; i++) { // generate new connKeys if timeline changes - if ($scope.MontageMonitors[i].Monitor.eventUrl !='img/noevent.png') - { - ZMDataModel.zmLog ("footerCollapse: Calling kill with " + $scope.MontageMonitors[i].Monitor.connKey + " because url is " +$scope.MontageMonitors[i].Monitor.eventUrl ) ; + if ($scope.MontageMonitors[i].Monitor.eventUrl != 'img/noevent.png') { + ZMDataModel.zmLog("footerCollapse: Calling kill with " + $scope.MontageMonitors[i].Monitor.connKey + " because url is " + $scope.MontageMonitors[i].Monitor.eventUrl); var tmpCK = angular.copy($scope.MontageMonitors[i].Monitor.connKey); - timedControlEventStream(2500,17,"",tmpCK,-1); - $scope.MontageMonitors[i].Monitor.eventUrl = "img/noevent.png"; - $scope.MontageMonitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); + timedControlEventStream(2500, 17, "", tmpCK, -1); + $scope.MontageMonitors[i].Monitor.eventUrl = "img/noevent.png"; + $scope.MontageMonitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); //console.log ("Generating connkey: " +$scope.MontageMonitors[i].Monitor.connKey); - } - - else - { + } else { //console.log ("footerCollapse: Skipped kill: connkey:"+$scope.MontageMonitors[i].Monitor.connKey + " function " + $scope.MontageMonitors[i].Monitor.Function + " listDisplay " + $scope.MontageMonitors[i].Monitor.lisDisplay + " enabled " + $scope.MontageMonitors[i].Monitor.Enabled + " eventURL " + $scope.MontageMonitors[i].Monitor.eventUrl); } - - - - + + + + } - // grab events that start on or before the time and end on or after the time - // this should only bring up events that span that time - apiurl= ld.apiurl + "/events/index/StartTime >=:"+TimeObjectFrom+"/EndTime <=:"+TimeObjectTo+".json"; - - ZMDataModel.zmLog ("Event timeline API is " + apiurl); - - $http.get(apiurl) - .success( function(data) { - + // grab events that start on or before the time and end on or after the time + // this should only bring up events that span that time + apiurl = ld.apiurl + "/events/index/StartTime >=:" + TimeObjectFrom + "/EndTime <=:" + TimeObjectTo + ".json"; + + ZMDataModel.zmLog("Event timeline API is " + apiurl); + + $http.get(apiurl) + .success(function (data) { + var ld = ZMDataModel.getLogin(); - ZMDataModel.zmDebug ("Got "+data.events.length+"new history events..."); + ZMDataModel.zmDebug("Got " + data.events.length + "new history events..."); var eid, mid, stime; - for (i=0; i<data.events.length; i++) - { + for (i = 0; i < data.events.length; i++) { mid = data.events[i].Event.MonitorId; eid = data.events[i].Event.Id; stime = data.events[i].Event.StartTime; - - // only take the first one for each monitor - for (var j=0; j < $scope.MontageMonitors.length; j++) - { - // that's the earliest match and play gapless from there - if ($scope.MontageMonitors[j].Monitor.Id == mid) - { - - if ($scope.MontageMonitors[j].Monitor.eventUrl == 'img/noevent.png') - { - - // console.log ("Old value of event url " + $scope.MontageMonitors[j].eventUrl); - //console.log ("ldurl is " + ld.streamingurl); - $scope.MontageMonitors[j].Monitor.eventUrl=ld.streamingurl+"/nph-zms?source=event&mode=jpeg&event="+eid+"&frame=1&replay=gapless&rate="+$scope.sliderVal.realRate+"&connkey="+$scope.MontageMonitors[j].Monitor.connKey+"&scale="+ld.montageHistoryQuality+"&rand="+$rootScope.rand; - //console.log ("Setting event URL to " +$scope.MontageMonitors[j].Monitor.eventUrl); - - // console.log ("SWITCHING TO " + $scope.MontageMonitors[j].eventUrl); - - - $scope.MontageMonitors[j].Monitor.eventUrlTime = stime; - } - } + + // only take the first one for each monitor + for (var j = 0; j < $scope.MontageMonitors.length; j++) { + // that's the earliest match and play gapless from there + if ($scope.MontageMonitors[j].Monitor.Id == mid) { + + if ($scope.MontageMonitors[j].Monitor.eventUrl == 'img/noevent.png') { + + // console.log ("Old value of event url " + $scope.MontageMonitors[j].eventUrl); + //console.log ("ldurl is " + ld.streamingurl); + $scope.MontageMonitors[j].Monitor.eventUrl = ld.streamingurl + "/nph-zms?source=event&mode=jpeg&event=" + eid + "&frame=1&replay=gapless&rate=" + $scope.sliderVal.realRate + "&connkey=" + $scope.MontageMonitors[j].Monitor.connKey + "&scale=" + ld.montageHistoryQuality + "&rand=" + $rootScope.rand; + //console.log ("Setting event URL to " +$scope.MontageMonitors[j].Monitor.eventUrl); + + // console.log ("SWITCHING TO " + $scope.MontageMonitors[j].eventUrl); + + + $scope.MontageMonitors[j].Monitor.eventUrlTime = stime; + } + } } } - + // make sure we do our best to get that duration for all monitors // in the above call, is possible some did not make the cut in the first page - - ZMDataModel.zmLog ("Making sure all monitors have a fair chance..."); - for (i=0; i<$scope.MontageMonitors.length; i++) - { - if ($scope.MontageMonitors[i].Monitor.eventUrl=='img/noevent.png') - { + ZMDataModel.zmLog("Making sure all monitors have a fair chance..."); + for (i = 0; i < $scope.MontageMonitors.length; i++) { + if ($scope.MontageMonitors[i].Monitor.eventUrl == 'img/noevent.png') { - var indivGrab = ld.apiurl + "/events/index/MonitorId:"+$scope.MontageMonitors[i].Monitor.Id+"/StartTime >=:"+TimeObjectFrom+"/EndTime <=:"+TimeObjectTo+".json"; - ZMDataModel.zmDebug("Monitor " + $scope.MontageMonitors[i].Monitor.Id+":"+$scope.MontageMonitors[i].Monitor.Name + " does not have events, trying "+indivGrab); + var indivGrab = ld.apiurl + "/events/index/MonitorId:" + $scope.MontageMonitors[i].Monitor.Id + "/StartTime >=:" + TimeObjectFrom + "/EndTime <=:" + TimeObjectTo + ".json"; - getExpandedEvents(i,indivGrab); + ZMDataModel.zmDebug("Monitor " + $scope.MontageMonitors[i].Monitor.Id + ":" + $scope.MontageMonitors[i].Monitor.Name + " does not have events, trying " + indivGrab); + + getExpandedEvents(i, indivGrab); - } } - - - - + } + + + + }) - .error (function (data) { - ZMDataModel.zmDebug ("history ERROR:"+ JSON.stringify(data)); - + .error(function (data) { + ZMDataModel.zmDebug("history ERROR:" + JSON.stringify(data)); + }); - - - function getExpandedEvents(i,indivGrab) - { + + + function getExpandedEvents(i, indivGrab) { var ld = ZMDataModel.getLogin(); - // console.log ("EXPANDED EVENT " + i + " " + indivGrab); + // console.log ("EXPANDED EVENT " + i + " " + indivGrab); $http.get(indivGrab) - .success(function(data) - { - // console.log ("EXPANDED DATA FOR MONITOR " + i + JSON.stringify(data)); - if (data.events.length > 0 ) - { - - if (!ZMDataModel.isBackground()) - { - - $scope.MontageMonitors[i].Monitor.eventUrl=ld.streamingurl+"/nph-zms?source=event&mode=jpeg&event="+data.events[0].Event.Id+"&frame=1&replay=gapless&rate="+$scope.sliderVal.realRate+"&connkey="+$scope.MontageMonitors[i].Monitor.connKey+"&scale="+ld.montageHistoryQuality+"&rand="+$rootScope.rand; - - - - //console.log ("SWITCHING TO " + $scope.MontageMonitors[i].eventUrl); - - $scope.MontageMonitors[i].Monitor.eventUrlTime = data.events[0].Event.StartTime; - - ZMDataModel.zmLog ("Found expanded event "+data.events[0].Event.Id+" for monitor " + $scope.MontageMonitors[i].Monitor.Id); - } - else - { - // $scope.MontageMonitors[i].eventUrl="img/noevent.png"; - // $scope.MontageMonitors[i].eventUrlTime = ""; - // ZMDataModel.zmLog ("Setting img src to null as data received in background"); + .success(function (data) { + // console.log ("EXPANDED DATA FOR MONITOR " + i + JSON.stringify(data)); + if (data.events.length > 0) { + + if (!ZMDataModel.isBackground()) { + + $scope.MontageMonitors[i].Monitor.eventUrl = ld.streamingurl + "/nph-zms?source=event&mode=jpeg&event=" + data.events[0].Event.Id + "&frame=1&replay=gapless&rate=" + $scope.sliderVal.realRate + "&connkey=" + $scope.MontageMonitors[i].Monitor.connKey + "&scale=" + ld.montageHistoryQuality + "&rand=" + $rootScope.rand; + + + + //console.log ("SWITCHING TO " + $scope.MontageMonitors[i].eventUrl); + + $scope.MontageMonitors[i].Monitor.eventUrlTime = data.events[0].Event.StartTime; + + ZMDataModel.zmLog("Found expanded event " + data.events[0].Event.Id + " for monitor " + $scope.MontageMonitors[i].Monitor.Id); + } else { + // $scope.MontageMonitors[i].eventUrl="img/noevent.png"; + // $scope.MontageMonitors[i].eventUrlTime = ""; + // ZMDataModel.zmLog ("Setting img src to null as data received in background"); + } } - } - - }) - .error (function(data) - { - }); + + }) + .error(function (data) {}); } } - + //--------------------------------------------------------- // This is periodically called to get the current playing // event by zms. I use this to display a timestamp // Its a 2 step process - get event Id then go a Event // API call to get time stamp. Sucks //--------------------------------------------------------- - - function checkAllEvents() - { - + + function checkAllEvents() { + //console.log ("Events are checked...."); - - for (var i=0; i<$scope.MontageMonitors.length; i++) - { + + for (var i = 0; i < $scope.MontageMonitors.length; i++) { // don't check for monitors that are not shown // because nph connkey won't exist and the response // will fail - if ($scope.MontageMonitors[i].Monitor.eventUrl !="" && $scope.MontageMonitors[i].Monitor.eventUrl !='img/noevent.png' && $scope.MontageMonitors[i].Monitor.connKey !='' && - $scope.MontageMonitors[i].Monitor.Function !='None' && - $scope.MontageMonitors[i].Monitor.listDisplay!='noshow' && - $scope.MontageMonitors[i].Monitor.Enabled !='0') - { - ZMDataModel.zmDebug ("Checking event status for " + $scope.MontageMonitors[i].Monitor.Name + ":"+$scope.MontageMonitors[i].Monitor.eventUrl+":"+$scope.MontageMonitors[i].Monitor.Function+":"+$scope.MontageMonitors[i].Monitor.listDisplay); - controlEventStream('99','',$scope.MontageMonitors[i].Monitor.connKey, i); - + if ($scope.MontageMonitors[i].Monitor.eventUrl != "" && $scope.MontageMonitors[i].Monitor.eventUrl != 'img/noevent.png' && $scope.MontageMonitors[i].Monitor.connKey != '' && + $scope.MontageMonitors[i].Monitor.Function != 'None' && + $scope.MontageMonitors[i].Monitor.listDisplay != 'noshow' && + $scope.MontageMonitors[i].Monitor.Enabled != '0') { + ZMDataModel.zmDebug("Checking event status for " + $scope.MontageMonitors[i].Monitor.Name + ":" + $scope.MontageMonitors[i].Monitor.eventUrl + ":" + $scope.MontageMonitors[i].Monitor.Function + ":" + $scope.MontageMonitors[i].Monitor.listDisplay); + controlEventStream('99', '', $scope.MontageMonitors[i].Monitor.connKey, i); + } } } - - - $scope.dateChanged = function() - { - // window.stop(); - // console.log (">>>>>>>>>>>>>>>>>>>>>>>>>>>>> BAD BAD"); + + + $scope.dateChanged = function () { + // window.stop(); + // console.log (">>>>>>>>>>>>>>>>>>>>>>>>>>>>> BAD BAD"); footerCollapse(); }; - + //-------------------------------------------------------------- // Used to control zms for a connkey. If ndx is not -1, // then it also calls an event API for the returned eid // and stores its time in the montage monitors array //-------------------------------------------------------------- - $scope.controlEventStream = function (cmd,disp,connkey,ndx) - { - controlEventStream(cmd,disp,connkey,ndx); + $scope.controlEventStream = function (cmd, disp, connkey, ndx) { + controlEventStream(cmd, disp, connkey, ndx); }; - - function timedControlEventStream (mTime, cmd, disp, connkey, ndx) - { + + function timedControlEventStream(mTime, cmd, disp, connkey, ndx) { var mMtime = mTime || 2000; - ZMDataModel.zmDebug ("Deferring control " + cmd + " by " + mMtime); - $timeout ( function() - { - subControlStream(cmd,connkey); - - },mMtime); + ZMDataModel.zmDebug("Deferring control " + cmd + " by " + mMtime); + $timeout(function () { + subControlStream(cmd, connkey); + + }, mMtime); } - - function subControlStream(cmd,connkey) - { + + function subControlStream(cmd, connkey) { var loginData = ZMDataModel.getLogin(); - var myauthtoken = $rootScope.authSession.replace("&auth=",""); + var myauthtoken = $rootScope.authSession.replace("&auth=", ""); //&auth= - var req = $http({ - method: 'POST', - /*timeout: 15000,*/ - url: loginData.url + '/index.php', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - //'Accept': '*/*', - }, - transformRequest: function (obj) { - var str = []; - for (var p in obj) - str.push(encodeURIComponent(p) + "=" + - encodeURIComponent(obj[p])); - var foo = str.join("&"); - //console.log("****SUB RETURNING " + foo); - return foo; - }, - - data: { - view: "request", - request: "stream", - connkey: connkey, - command: cmd, - auth: myauthtoken, - // user: loginData.username, - // pass: loginData.password - } - }); - - req.success (function (resp) { - ZMDataModel.zmDebug ("subControl success:"+JSON.stringify(resp)); - }); - - - req.error (function (resp) { - ZMDataModel.zmDebug ("subControl error:"+JSON.stringify(resp)); - }); + var req = $http({ + method: 'POST', + /*timeout: 15000,*/ + url: loginData.url + '/index.php', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + //'Accept': '*/*', + }, + transformRequest: function (obj) { + var str = []; + for (var p in obj) + str.push(encodeURIComponent(p) + "=" + + encodeURIComponent(obj[p])); + var foo = str.join("&"); + //console.log("****SUB RETURNING " + foo); + return foo; + }, + + data: { + view: "request", + request: "stream", + connkey: connkey, + command: cmd, + auth: myauthtoken, + // user: loginData.username, + // pass: loginData.password + } + }); + + req.success(function (resp) { + ZMDataModel.zmDebug("subControl success:" + JSON.stringify(resp)); + }); + + + req.error(function (resp) { + ZMDataModel.zmDebug("subControl error:" + JSON.stringify(resp)); + }); } - - + + function controlEventStream(cmd, disp, connkey, ndx) { - // console.log("Command value " + cmd); - - if (disp) { - $ionicLoading.hide(); - $ionicLoading.show({ - template: $translate.instant('kPleaseWait')+"...", - noBackdrop: true, - duration: zm.loadingTimeout, - }); - } - var loginData = ZMDataModel.getLogin(); - - /* - var CMD_NONE = 0; - var CMD_PAUSE = 1; - var CMD_PLAY = 2; - var CMD_STOP = 3; - var CMD_FASTFWD = 4; - var CMD_SLOWFWD = 5; - var CMD_SLOWREV = 6; - var CMD_FASTREV = 7; - var CMD_ZOOMIN = 8; - var CMD_ZOOMOUT = 9; - var CMD_PAN = 10; - var CMD_SCALE = 11; - var CMD_PREV = 12; - var CMD_NEXT = 13; - var CMD_SEEK = 14; - var CMD_QUERY = 99; - */ - - - - // You need to POST commands to control zms - // Note that I am url encoding the parameters into the URL - // If I leave it as JSON, it gets converted to OPTONS due - // to CORS behaviour and ZM/Apache don't seem to handle it - - //console.log("POST: " + loginData.url + '/index.php'); - - //console.log ("AUTH IS " + $rootScope.authSession); - - var myauthtoken = $rootScope.authSession.replace("&auth=",""); - //&auth= - var req = $http({ - method: 'POST', - /*timeout: 15000,*/ - url: loginData.url + '/index.php', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - //'Accept': '*/*', - }, - transformRequest: function (obj) { - var str = []; - for (var p in obj) - str.push(encodeURIComponent(p) + "=" + - encodeURIComponent(obj[p])); - var foo = str.join("&"); - // console.log("****RETURNING " + foo); - return foo; - }, - - data: { - view: "request", - request: "stream", - connkey: connkey, - command: cmd, - auth: myauthtoken, - // user: loginData.username, - // pass: loginData.password - } + // console.log("Command value " + cmd); + + if (disp) { + $ionicLoading.hide(); + $ionicLoading.show({ + template: $translate.instant('kPleaseWait') + "...", + noBackdrop: true, + duration: zm.loadingTimeout, }); - req.success(function (resp) { - - // console.log("SUCCESS FOR: " + JSON.stringify(resp)); - - if (resp.result=="Ok" && ndx != -1) - { - var ld = ZMDataModel.getLogin(); - var apiurl= ld.apiurl + "/events/"+resp.status.event+".json"; - //console.log ("API " + apiurl); - $http.get (apiurl) - .success (function (data) - { + } + var loginData = ZMDataModel.getLogin(); + + /* + var CMD_NONE = 0; + var CMD_PAUSE = 1; + var CMD_PLAY = 2; + var CMD_STOP = 3; + var CMD_FASTFWD = 4; + var CMD_SLOWFWD = 5; + var CMD_SLOWREV = 6; + var CMD_FASTREV = 7; + var CMD_ZOOMIN = 8; + var CMD_ZOOMOUT = 9; + var CMD_PAN = 10; + var CMD_SCALE = 11; + var CMD_PREV = 12; + var CMD_NEXT = 13; + var CMD_SEEK = 14; + var CMD_QUERY = 99; + */ + + + + // You need to POST commands to control zms + // Note that I am url encoding the parameters into the URL + // If I leave it as JSON, it gets converted to OPTONS due + // to CORS behaviour and ZM/Apache don't seem to handle it + + //console.log("POST: " + loginData.url + '/index.php'); + + //console.log ("AUTH IS " + $rootScope.authSession); + + var myauthtoken = $rootScope.authSession.replace("&auth=", ""); + //&auth= + var req = $http({ + method: 'POST', + /*timeout: 15000,*/ + url: loginData.url + '/index.php', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + //'Accept': '*/*', + }, + transformRequest: function (obj) { + var str = []; + for (var p in obj) + str.push(encodeURIComponent(p) + "=" + + encodeURIComponent(obj[p])); + var foo = str.join("&"); + // console.log("****RETURNING " + foo); + return foo; + }, + + data: { + view: "request", + request: "stream", + connkey: connkey, + command: cmd, + auth: myauthtoken, + // user: loginData.username, + // pass: loginData.password + } + }); + req.success(function (resp) { + + // console.log("SUCCESS FOR: " + JSON.stringify(resp)); + + if (resp.result == "Ok" && ndx != -1) { + var ld = ZMDataModel.getLogin(); + var apiurl = ld.apiurl + "/events/" + resp.status.event + ".json"; + //console.log ("API " + apiurl); + $http.get(apiurl) + .success(function (data) { var currentEventTime = moment(data.event.Event.StartTime); var maxTime = moment($scope.datetimeValueTo.value); //ZMDataModel.zmDebug ("Monitor: " + $scope.MontageMonitors[ndx].Monitor.Id + " max time="+maxTime + "("+$scope.datetimeValueTo.value+")"+ " current="+currentEventTime + "("+data.event.Event.StartTime+")"); - if ($scope.MontageMonitors[ndx].Monitor.eventUrlTime!=data.event.Event.StartTime && currentEventTime.diff(maxTime) <= 0 ) - { - + if ($scope.MontageMonitors[ndx].Monitor.eventUrlTime != data.event.Event.StartTime && currentEventTime.diff(maxTime) <= 0) { + var ld = ZMDataModel.getLogin(); - var element = angular.element(document.getElementById($scope.MontageMonitors[ndx].Monitor.Id+"-timeline")); - element.removeClass ('animated flipInX'); - element.addClass('animated flipOutX'); - $timeout (function() { - element.removeClass ('animated flipOutX'); - element.addClass('animated flipInX'); - $scope.MontageMonitors[ndx].Monitor.eventUrlTime=data.event.Event.StartTime; - - $scope.MontageMonitors[ndx].Monitor.eventUrl=ld.streamingurl+"/nph-zms?source=event&mode=jpeg&event="+data.event.Event.Id+"&frame=1&replay=gapless&rate="+$scope.sliderVal.realRate+"&connkey="+$scope.MontageMonitors[ndx].Monitor.connKey+"&scale="+ld.montageHistoryQuality+"&rand="+$rootScope.rand; - },700); - - } - else if ( currentEventTime.diff(maxTime)>0) - { - ZMDataModel.zmDebug (">>>>>>>>Monitor " + $scope.MontageMonitors[ndx].Monitor.Id + " event time of " + data.event.Event.StartTime + " exceeds " + $scope.datetimeValueTo.value +" stopping..."); - subControlStream(17,connkey); - - + var element = angular.element(document.getElementById($scope.MontageMonitors[ndx].Monitor.Id + "-timeline")); + element.removeClass('animated flipInX'); + element.addClass('animated flipOutX'); + $timeout(function () { + element.removeClass('animated flipOutX'); + element.addClass('animated flipInX'); + $scope.MontageMonitors[ndx].Monitor.eventUrlTime = data.event.Event.StartTime; + + $scope.MontageMonitors[ndx].Monitor.eventUrl = ld.streamingurl + "/nph-zms?source=event&mode=jpeg&event=" + data.event.Event.Id + "&frame=1&replay=gapless&rate=" + $scope.sliderVal.realRate + "&connkey=" + $scope.MontageMonitors[ndx].Monitor.connKey + "&scale=" + ld.montageHistoryQuality + "&rand=" + $rootScope.rand; + }, 700); + + } else if (currentEventTime.diff(maxTime) > 0) { + ZMDataModel.zmDebug(">>>>>>>>Monitor " + $scope.MontageMonitors[ndx].Monitor.Id + " event time of " + data.event.Event.StartTime + " exceeds " + $scope.datetimeValueTo.value + " stopping..."); + subControlStream(17, connkey); + + } - + }) - .error (function (data) - { - $scope.MontageMonitors[ndx].Monitor.eventUrlTime="-"; + .error(function (data) { + $scope.MontageMonitors[ndx].Monitor.eventUrlTime = "-"; }); - - } - }); - req.error(function (resp) { - //console.log("ERROR: " + JSON.stringify(resp)); - ZMDataModel.zmLog("Error sending event command " + JSON.stringify(resp), "error"); - }); - } + } + }); + + req.error(function (resp) { + //console.log("ERROR: " + JSON.stringify(resp)); + ZMDataModel.zmLog("Error sending event command " + JSON.stringify(resp), "error"); + }); + } //--------------------------------------------------------------------- // Controller main @@ -480,104 +439,107 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc document.addEventListener("pause", onPause, false); document.addEventListener("resume", onResume, false); - - $scope.timeFormat = "yyyy-MM-dd "+ZMDataModel.getTimeFormat(); + + $scope.timeFormat = "yyyy-MM-dd " + ZMDataModel.getTimeFormat(); $scope.displayDateTimeSliders = true; $scope.showtimers = true; $scope.loginData = ZMDataModel.getLogin(); - - + + var curYear = new Date().getFullYear(); - + var readyToRun = false; var i; - + $scope.sliderVal = { - - rate:1, - realRate:100, - hideNoEvents:false, - enableGapless:true, - exactMatch:false, - showTimeline:true - + + rate: 1, + realRate: 100, + hideNoEvents: false, + enableGapless: true, + exactMatch: false, + showTimeline: true + }; - - - + + + // default = start of day var timeto = moment(); var timefrom = moment().startOf('day'); - + $scope.sliderVal.rate = 1; - $scope.sliderVal.realRate = $scope.sliderVal.rate *100; - - - + $scope.sliderVal.realRate = $scope.sliderVal.rate * 100; + + + //var tdatetimeValueFrom = new Date(); //tdatetimeValueFrom.setDate(tdatetimeValueFrom.getDate()-1); - - $scope.datetimeValueFrom = {value:""}; - $scope.datetimeValueTo = {value:""}; - - $scope.datetimeValueFrom.value = timefrom.toDate(); - $scope.datetimeValueTo.value = timeto.toDate(); - - $rootScope.eventQueryInterval=""; - - - var commonCss = - { - - background: { - "background-color": "silver" - }, - before: { - "background-color": "purple" - }, - default: { - "background-color": "white" - }, // default value: 1px - after: { - "background-color": "green" - }, // zone after default value - pointer: { - "background-color": "red" - }, // circle pointer - range: { - "background-color": "red" - } // use it if double value - }; - - - $scope.slider_modal_options_rate = { - from: 1, - to: 10, - realtime: true, - step: 1, - className: "mySliderClass", - //modelLabels:function(val) {return "";}, - smooth: false, - css: commonCss, - dimension:'X' - - }; - - - + + $scope.datetimeValueFrom = { + value: "" + }; + $scope.datetimeValueTo = { + value: "" + }; + + $scope.datetimeValueFrom.value = timefrom.toDate(); + $scope.datetimeValueTo.value = timeto.toDate(); + + $rootScope.eventQueryInterval = ""; + + + var commonCss = { + + background: { + "background-color": "silver" + }, + before: { + "background-color": "purple" + }, + default: { + "background-color": "white" + }, // default value: 1px + after: { + "background-color": "green" + }, // zone after default value + pointer: { + "background-color": "red" + }, // circle pointer + range: { + "background-color": "red" + } // use it if double value + }; + + + $scope.slider_modal_options_rate = { + from: 1, + to: 10, + realtime: true, + step: 1, + className: "mySliderClass", + //modelLabels:function(val) {return "";}, + smooth: false, + css: commonCss, + dimension: 'X' + + }; + + + var isLongPressActive = false; $scope.isReorder = false; var intervalHandleMontage; // will hold image resize timer on long press var montageIndex = 0; // will hold monitor ID to scale in timer - + var gridcontainer; $scope.monitorSize = []; // array with montage sizes per monitor $scope.scaleDirection = []; // 1 = increase -1 = decrease $scope.slider = {}; - + //console.log ("************ HISTORY " + ZMDataModel.getMontageSize()); $scope.slider.monsize = ZMDataModel.getMontageSize(); $scope.revMonSize = 11 - parseInt($scope.slider.monsize); @@ -595,86 +557,78 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc var montageOrder = []; // This array will keep the ordering in montage view var hiddenOrder = []; // 1 = hide, 0 = don't hide - + var tempMonitors = message; - if (tempMonitors.length == 0) - { - $rootScope.zmPopup= $ionicPopup.alert({ - title: $translate.instant('kNoMonitors'), - template:$translate.instant('kPleaseCheckCredentials') + if (tempMonitors.length == 0) { + $rootScope.zmPopup = $ionicPopup.alert({ + title: $translate.instant('kNoMonitors'), + template: $translate.instant('kPleaseCheckCredentials') }); $ionicHistory.nextViewOptions({ - disableBack: true + disableBack: true }); $state.go("login"); return; } - - // console.log ("TEMP MONITORS IS " + JSON.stringify(tempMonitors)); + + // console.log ("TEMP MONITORS IS " + JSON.stringify(tempMonitors)); var tempResponse = ZMDataModel.applyMontageMonitorPrefs(message, 0); $scope.monitors = tempResponse[0]; montageOrder = tempResponse[1]; hiddenOrder = tempResponse[2]; - + ZMDataModel.zmLog("Inside MontageHistoryCtrl:We found " + $scope.monitors.length + " monitors"); - $scope.MontageMonitors = ZMDataModel.applyMontageMonitorPrefs (message, 1)[0]; - + $scope.MontageMonitors = ZMDataModel.applyMontageMonitorPrefs(message, 1)[0]; + var loginData = ZMDataModel.getLogin(); - + $scope.packMontage = loginData.packMontage; - - + + // init monitors ZMDataModel.zmDebug(">>Initializing connkeys and images..."); - for ( i=0; i< $scope.MontageMonitors.length; i++) - { - //$scope.MontageMonitors[i].Monitor.connKey=''; - - - - $scope.MontageMonitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); - $scope.MontageMonitors[i].Monitor.eventUrl ='img/noevent.png'; - $scope.MontageMonitors[i].Monitor.eventUrlTime=""; - $scope.MontageMonitors[i].Monitor.isPaused=false; - - - } + for (i = 0; i < $scope.MontageMonitors.length; i++) { + //$scope.MontageMonitors[i].Monitor.connKey=''; + + + + $scope.MontageMonitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); + $scope.MontageMonitors[i].Monitor.eventUrl = 'img/noevent.png'; + $scope.MontageMonitors[i].Monitor.eventUrlTime = ""; + $scope.MontageMonitors[i].Monitor.isPaused = false; + + + } readyToRun = true; - - - + + + // -------------------------------------------------------- // Handling of back button in case modal is open should // close the modal // -------------------------------------------------------- - + $ionicPlatform.registerBackButtonAction(function (e) { - e.preventDefault(); - if ($scope.modal && $scope.modal.isShown()) - { - // switch off awake, as liveview is finished - ZMDataModel.zmDebug("Modal is open, closing it"); - ZMDataModel.setAwake(false); - $scope.modal.remove(); - $scope.isModalActive = false; - } - else - { - ZMDataModel.zmDebug("Modal is closed, so toggling or exiting"); - if (!$ionicSideMenuDelegate.isOpenLeft()) - { - $ionicSideMenuDelegate.toggleLeft(); - - } - else - { - navigator.app.exitApp(); - } - + e.preventDefault(); + if ($scope.modal && $scope.modal.isShown()) { + // switch off awake, as liveview is finished + ZMDataModel.zmDebug("Modal is open, closing it"); + ZMDataModel.setAwake(false); + $scope.modal.remove(); + $scope.isModalActive = false; + } else { + ZMDataModel.zmDebug("Modal is closed, so toggling or exiting"); + if (!$ionicSideMenuDelegate.isOpenLeft()) { + $ionicSideMenuDelegate.toggleLeft(); + + } else { + navigator.app.exitApp(); } - - }, zm.eventHistoryTimer); + + } + + }, zm.eventHistoryTimer); @@ -688,22 +642,22 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc var timestamp = new Date().getUTCMilliseconds(); $scope.minimal = $stateParams.minimal; - $scope.zmMarginTop = $scope.minimal ? 0:15; + $scope.zmMarginTop = $scope.minimal ? 0 : 15; //console.log ("********* MARGIN IS " + $scope.zmMarginTop); - + $scope.isRefresh = $stateParams.isRefresh; var sizeInProgress = false; $scope.imageStyle = true; $ionicSideMenuDelegate.canDragContent(true); - + // Do we have a saved montage array size? No? - // if (window.localStorage.getItem("montageArraySize") == undefined) { + // if (window.localStorage.getItem("montageArraySize") == undefined) { if (loginData.montageArraySize == '0') { - for ( i = 0; i < $scope.monitors.length; i++) { + for (i = 0; i < $scope.monitors.length; i++) { $scope.monitorSize.push(ZMDataModel.getMontageSize()); $scope.scaleDirection.push(1); } @@ -728,13 +682,12 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc $scope.LoginData = ZMDataModel.getLogin(); $scope.monLimit = $scope.LoginData.maxMontage; - - if ($rootScope.platformOS!='ios') - { - ZMDataModel.zmLog ("Limiting montage to 5, thanks to Chrome's stupid connection limit"); + + if ($rootScope.platformOS != 'ios') { + ZMDataModel.zmLog("Limiting montage to 5, thanks to Chrome's stupid connection limit"); $scope.monLimit = 5; } - + //console.log("********* Inside MontageHistoryCtrl, MAX LIMIT=" + $scope.monLimit); @@ -750,7 +703,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc var ld = ZMDataModel.getLogin(); - + //console.log ("MONITORS " + JSON.stringify($scope.monitors)); $rootScope.validMonitorId = $scope.monitors[0].Monitor.Id; ZMDataModel.getAuthKey($rootScope.validMonitorId) @@ -801,10 +754,9 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc $scope.modal.remove(); }; - - - $scope.isBackground = function() - { + + + $scope.isBackground = function () { return ZMDataModel.isBackground(); }; @@ -812,44 +764,51 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc //---------------------------------------------------------------- // Alarm notification handling //---------------------------------------------------------------- - $scope.handleAlarms = function() - { - $rootScope.isAlarm=!$rootScope.isAlarm; - if (!$rootScope.isAlarm) - { - $rootScope.alarmCount="0"; - $ionicHistory.nextViewOptions({disableBack: true}); - $state.go("events", {"id": 0}, { reload: true }); + $scope.handleAlarms = function () { + $rootScope.isAlarm = !$rootScope.isAlarm; + if (!$rootScope.isAlarm) { + $rootScope.alarmCount = "0"; + $ionicHistory.nextViewOptions({ + disableBack: true + }); + $state.go("events", { + "id": 0 + }, { + reload: true + }); } }; - - $scope.handleAlarmsWhileMinimized = function() - { - $rootScope.isAlarm=!$rootScope.isAlarm; - - $scope.minimal = !$scope.minimal; + + $scope.handleAlarmsWhileMinimized = function () { + $rootScope.isAlarm = !$rootScope.isAlarm; + + $scope.minimal = !$scope.minimal; ZMDataModel.zmDebug("MontageHistoryCtrl: switch minimal is " + $scope.minimal); ionic.Platform.fullScreen($scope.minimal, !$scope.minimal); $interval.cancel(intervalHandle); $interval.cancel($rootScope.eventQueryInterval); - - if (!$rootScope.isAlarm) - { - $rootScope.alarmCount="0"; - $ionicHistory.nextViewOptions({disableBack: true}); - $state.go("events", {"id": 0}, { reload: true }); + + if (!$rootScope.isAlarm) { + $rootScope.alarmCount = "0"; + $ionicHistory.nextViewOptions({ + disableBack: true + }); + $state.go("events", { + "id": 0 + }, { + reload: true + }); } }; - - + + //------------------------------------------------------------- // this is checked to make sure we are not pulling images // when app is in background. This is a problem with Android, // for example //------------------------------------------------------------- - $scope.isBackground = function() - { + $scope.isBackground = function () { //console.log ("Is background called from Montage and returned " + //ZMDataModel.isBackground()); return ZMDataModel.isBackground(); @@ -873,7 +832,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc $scope.reloadReorder = function () { var refresh = ZMDataModel.getMonitors(1); - + refresh.then(function (data) { $scope.monitors = data; $scope.MontageMonitors = data; @@ -884,7 +843,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc montageOrder[i] = i; hiddenOrder[i] = 0; } - + loginData.montageOrder = montageOrder.toString(); loginData.montageHiddenOrder = hiddenOrder.toString(); ZMDataModel.setLogin(loginData); @@ -900,7 +859,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc loginData.montageHiddenOrder = hiddenOrder.toString(); ZMDataModel.setLogin(loginData); //window.localStorage.setItem("montageOrder", montageOrder.toString()); - // window.localStorage.setItem("montageHiddenOrder", + // window.localStorage.setItem("montageHiddenOrder", // hiddenOrder.toString()); //console.log("Saved " + montageOrder.toString()); ZMDataModel.zmLog("User press OK. Saved Monitor Order as: " + @@ -913,7 +872,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc // user tapped cancel var i, myhiddenorder; if (loginData.montageOrder == '') { - //if (window.localStorage.getItem("montageOrder") == undefined) { + //if (window.localStorage.getItem("montageOrder") == undefined) { for (i = 0; i < $scope.MontageMonitors.length; i++) { montageOrder[i] = i; hiddenOrder[i] = 0; @@ -924,7 +883,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc { var myorder = loginData.montageOrder; - if (loginData.montageHiddenOrder=='') { + if (loginData.montageHiddenOrder == '') { for (i = 0; i < $scope.MontageMonitors.length; i++) { hiddenOrder[i] = 0; } @@ -1082,7 +1041,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc }; $scope.callback = function () { - // console.log("dragging"); + // console.log("dragging"); }; @@ -1095,21 +1054,20 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc }; - + //--------------------------------------------------------------------- // changes order of montage display //--------------------------------------------------------------------- - - $scope.toggleMontageDisplayOrder = function() - { + + $scope.toggleMontageDisplayOrder = function () { $scope.packMontage = !$scope.packMontage; loginData.packMontage = $scope.packMontage; ZMDataModel.setLogin(loginData); //console.log ("Switching orientation"); }; - + //--------------------------------------------------------------------- // In Android, the app runs full steam while in background mode // while in iOS it gets suspended unless you ask for specific resources @@ -1121,7 +1079,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc ZMDataModel.zmDebug("MontageHistoryCtrl: onpause called"); $interval.cancel($rootScope.eventQueryInterval); $interval.cancel(intervalHandle); - + // $interval.cancel(modalIntervalHandle); // FIXME: Do I need to setAwake(false) here? @@ -1129,28 +1087,28 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc function onResume() { - + // FIXME: Do we need to resume timers? when you resume, you go to portal and then here - /* - if (!$scope.isModalActive) { - var ld = ZMDataModel.getLogin(); - - - ZMDataModel.zmDebug("MontageHistoryCtrl: onresume called"); - ZMDataModel.zmLog("Restarting eventQuery timer on resume"); - - console.log ("************** TIMER STARTED INSIDE RESUME ***************"); - - //$rootScope.rand = Math.floor((Math.random() * 100000) + 1); - $interval.cancel($rootScope.eventQueryInterval); - $rootScope.eventQueryInterval = $interval(function () { - checkAllEvents(); - // console.log ("Refreshing Image..."); - }.bind(this),zm.eventHistoryTimer); - } else // modal is active - { - // $rootScope.modalRand = Math.floor((Math.random() * 100000) + 1); - }*/ + /* + if (!$scope.isModalActive) { + var ld = ZMDataModel.getLogin(); + + + ZMDataModel.zmDebug("MontageHistoryCtrl: onresume called"); + ZMDataModel.zmLog("Restarting eventQuery timer on resume"); + + console.log ("************** TIMER STARTED INSIDE RESUME ***************"); + + //$rootScope.rand = Math.floor((Math.random() * 100000) + 1); + $interval.cancel($rootScope.eventQueryInterval); + $rootScope.eventQueryInterval = $interval(function () { + checkAllEvents(); + // console.log ("Refreshing Image..."); + }.bind(this),zm.eventHistoryTimer); + } else // modal is active + { + // $rootScope.modalRand = Math.floor((Math.random() * 100000) + 1); + }*/ @@ -1166,12 +1124,12 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc }; $scope.$on('$destroy', function () { - ZMDataModel.zmDebug("Cancelling eventQueryInterval"); + ZMDataModel.zmDebug("Cancelling eventQueryInterval"); $interval.cancel($rootScope.eventQueryInterval); - - - - + + + + }); @@ -1184,46 +1142,45 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc var ld = ZMDataModel.getLogin(); //console.log("Setting Awake to " + ZMDataModel.getKeepAwake()); ZMDataModel.setAwake(ZMDataModel.getKeepAwake()); - + $interval.cancel($rootScope.eventQueryInterval); //console.log ("****************** TIMER STARTED INSIDE ENTER"); $rootScope.eventQueryInterval = $interval(function () { checkAllEvents(); // console.log ("Refreshing Image..."); - }.bind(this), zm.eventHistoryTimer); - - - + }.bind(this), zm.eventHistoryTimer); + + + + - }); - + /*$scope.$on ('$ionicView.unloaded', function() { console.log ("******** HISTORY UNLOADED KILLING WINDOW ************"); window.stop(); });*/ - - $scope.$on('$ionicView.beforeEnter', function () { - - // ZMDataModel.zmLog ("Before Enter History: initing connkeys"); - - - - - - }); - + + $scope.$on('$ionicView.beforeEnter', function () { + + // ZMDataModel.zmLog ("Before Enter History: initing connkeys"); + + + + + + }); + $scope.$on('$ionicView.beforeLeave', function () { //console.log("**VIEW ** Event History Ctrl Left, force removing modal"); if ($scope.modal) $scope.modal.remove(); - - - ZMDataModel.zmLog ("BeforeLeave: Nullifying the streams..."); - - for (i=0; i< $scope.MontageMonitors.length; i++) - { - var element = document.getElementById("img-"+i); + + + ZMDataModel.zmLog("BeforeLeave: Nullifying the streams..."); + + for (i = 0; i < $scope.MontageMonitors.length; i++) { + var element = document.getElementById("img-" + i); /*if (element) { ZMDataModel.zmDebug("BeforeLeave: Nullifying " + element.src); @@ -1233,42 +1190,40 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc //$scope.$apply(nullify(element)); //element.src=""; }*/ - + } - - - + + + ZMDataModel.zmLog("Cancelling event query timer"); $interval.cancel($rootScope.eventQueryInterval); - - ZMDataModel.zmLog ("MontageHistory:Stopping network pull..."); + + ZMDataModel.zmLog("MontageHistory:Stopping network pull..."); // make sure this is applied in scope digest to stop network pull // thats why we are doing it beforeLeave - - for ( i=0; i<$scope.MontageMonitors.length; i++) - { - if ($scope.MontageMonitors[i].Monitor.connKey !='' && - $scope.MontageMonitors[i].Monitor.eventUrl !='img/noevent.png' && - $scope.MontageMonitors[i].Monitor.Function !='None' && - $scope.MontageMonitors[i].Monitor.lisDisplay!='noshow' && - $scope.MontageMonitors[i].Monitor.Enabled !='0') - { - ZMDataModel.zmLog ("Before leave: Calling kill with " + $scope.MontageMonitors[i].Monitor.connKey); + + for (i = 0; i < $scope.MontageMonitors.length; i++) { + if ($scope.MontageMonitors[i].Monitor.connKey != '' && + $scope.MontageMonitors[i].Monitor.eventUrl != 'img/noevent.png' && + $scope.MontageMonitors[i].Monitor.Function != 'None' && + $scope.MontageMonitors[i].Monitor.lisDisplay != 'noshow' && + $scope.MontageMonitors[i].Monitor.Enabled != '0') { + ZMDataModel.zmLog("Before leave: Calling kill with " + $scope.MontageMonitors[i].Monitor.connKey); var tmpCK = angular.copy($scope.MontageMonitors[i].Monitor.connKey); - timedControlEventStream(2500,17,"",tmpCK,-1); + timedControlEventStream(2500, 17, "", tmpCK, -1); } - } - - ZMDataModel.zmLog ("Forcing a window.stop() here"); + } + + ZMDataModel.zmLog("Forcing a window.stop() here"); ZMDataModel.stopNetwork("MontageHistory-beforeLeave"); - - - - + + + + }); $scope.$on('$ionicView.unloaded', function () { - + }); //--------------------------------------------------------- @@ -1283,7 +1238,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc //console.log('Size has changed'); ZMDataModel.setMontageSize(val); //console.log("ZMData Montage is " + ZMDataModel.getMontageSize() + - // " and slider montage is " + $scope.slider.monsize); + // " and slider montage is " + $scope.slider.monsize); // Now go ahead and reset sizes of entire monitor array var monsizestring = ""; var i; @@ -1301,10 +1256,10 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc //window.localStorage.setItem("montageArraySize", monsizestring); sizeInProgress = false; } - - - + + + $scope.$on('$ionicView.afterEnter', function () { // This rand is really used to reload the monitor image in img-src so it is not cached diff --git a/www/js/NewsCtrl.js b/www/js/NewsCtrl.js index b914b32a..294f0a98 100644 --- a/www/js/NewsCtrl.js +++ b/www/js/NewsCtrl.js @@ -2,28 +2,32 @@ /* jslint browser: true*/ /* global cordova,StatusBar,angular,console,moment*/ -angular.module('zmApp.controllers').controller('zmApp.NewsCtrl', ['$scope', '$rootScope', '$ionicModal', 'ZMDataModel','$ionicSideMenuDelegate', '$ionicHistory', '$state', '$http', 'zm', function ($scope, $rootScope, $ionicModal, ZMDataModel,$ionicSideMenuDelegate, $ionicHistory, $state, $http, zm) { -$scope.openMenu = function () { - $ionicSideMenuDelegate.toggleLeft(); - }; +angular.module('zmApp.controllers').controller('zmApp.NewsCtrl', ['$scope', '$rootScope', '$ionicModal', 'ZMDataModel', '$ionicSideMenuDelegate', '$ionicHistory', '$state', '$http', 'zm', function ($scope, $rootScope, $ionicModal, ZMDataModel, $ionicSideMenuDelegate, $ionicHistory, $state, $http, zm) { + $scope.openMenu = function () { + $ionicSideMenuDelegate.toggleLeft(); + }; //---------------------------------------------------------------- // Alarm notification handling //---------------------------------------------------------------- - $scope.handleAlarms = function() - { - $rootScope.isAlarm=!$rootScope.isAlarm; - if (!$rootScope.isAlarm) - { - $rootScope.alarmCount="0"; - $ionicHistory.nextViewOptions({disableBack: true}); - $state.go("events", {"id": 0}, { reload: true }); + $scope.handleAlarms = function () { + $rootScope.isAlarm = !$rootScope.isAlarm; + if (!$rootScope.isAlarm) { + $rootScope.alarmCount = "0"; + $ionicHistory.nextViewOptions({ + disableBack: true + }); + $state.go("events", { + "id": 0 + }, { + reload: true + }); } }; - //------------------------------------------------------------------------- + //------------------------------------------------------------------------- // Lets make sure we set screen dim properly as we enter // The problem is we enter other states before we leave previous states // from a callback perspective in ionic, so we really can't predictably @@ -31,14 +35,13 @@ $scope.openMenu = function () { // state, that effectively overwrites current view power management needs //------------------------------------------------------------------------ $scope.$on('$ionicView.enter', function () { - // console.log("**VIEW ** News Ctrl Entered"); + // console.log("**VIEW ** News Ctrl Entered"); ZMDataModel.setAwake(false); - - + + }); - - $scope.isUnread = function(itemdate) - { + + $scope.isUnread = function (itemdate) { var lastDate = ZMDataModel.getLatestBlogPostChecked(); //get("latestBlogPostChecked"); if (!lastDate) return true; @@ -46,61 +49,56 @@ $scope.openMenu = function () { var mItemDate = moment(itemdate); //var unread = mItemDate.diff(mLastDate) >0) ? true:false; //console.log (unread); - return (mItemDate.diff(mLastDate) >0) ? true:false; - - + return (mItemDate.diff(mLastDate) > 0) ? true : false; + + }; - - $scope.loadPost = function (item, itemdate) - { + + $scope.loadPost = function (item, itemdate) { var lastDate = - ZMDataModel.getLatestBlogPostChecked(); //zmStorageService.get("latestBlogPostChecked"); - - - if (!lastDate) - { - ZMDataModel.zmDebug ("First time checking blog posts, I see"); + ZMDataModel.getLatestBlogPostChecked(); //zmStorageService.get("latestBlogPostChecked"); + + + if (!lastDate) { + ZMDataModel.zmDebug("First time checking blog posts, I see"); ZMDataModel.setLatestBlogPostChecked(itemdate); //zmStorageService.set("latestBlogPostChecked", itemdate); - } - - else - { - ZMDataModel.zmDebug ("last post checked is " + lastDate); - ZMDataModel.zmDebug ("current post dated is " + itemdate); - + } else { + ZMDataModel.zmDebug("last post checked is " + lastDate); + ZMDataModel.zmDebug("current post dated is " + itemdate); + var mLastDate = moment(lastDate); var mItemDate = moment(itemdate); - if (mItemDate.diff(mLastDate) >0) - { - ZMDataModel.zmDebug ("Updating lastDate to this post"); - - ZMDataModel.setLatestBlogPostChecked(itemdate); //zmStorageService.set("latestBlogPostChecked", itemdate); - - if (itemdate == $scope.newsItems[0].date) - { + if (mItemDate.diff(mLastDate) > 0) { + ZMDataModel.zmDebug("Updating lastDate to this post"); + + ZMDataModel.setLatestBlogPostChecked(itemdate); //zmStorageService.set("latestBlogPostChecked", itemdate); + + if (itemdate == $scope.newsItems[0].date) { // we are reading the latest post - $rootScope.newBlogPost=""; + $rootScope.newBlogPost = ""; } } - + } - window.open(item, '_blank', 'location=yes'); + window.open(item, '_blank', 'location=yes'); return false; }; - - $scope.newsItems=[]; - - $http.get (zm.blogUrl) - .success (function(data) - { + + $scope.newsItems = []; + + $http.get(zm.blogUrl) + .success(function (data) { //console.log ("Here2"); - // console.log (JSON.stringify(data)); - for (var i=0; i<data.length; i++) - { - $scope.newsItems.push({title:data[i].title, url:data[i].url, date:data[i].date}); + // console.log (JSON.stringify(data)); + for (var i = 0; i < data.length; i++) { + $scope.newsItems.push({ + title: data[i].title, + url: data[i].url, + date: data[i].date + }); } - + }); -}]); +}]);
\ No newline at end of file diff --git a/www/js/PortalLoginCtrl.js b/www/js/PortalLoginCtrl.js index da122d0c..c8e92be6 100644 --- a/www/js/PortalLoginCtrl.js +++ b/www/js/PortalLoginCtrl.js @@ -3,12 +3,11 @@ /*This is for the loop closure I am using in line 143 */ /* jslint browser: true*/ /* global vis,cordova,StatusBar,angular,console,moment */ -angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionicPlatform', '$scope', 'zm', 'ZMDataModel', '$ionicSideMenuDelegate', '$rootScope', '$http', '$q', '$state', '$ionicLoading', '$ionicPopover', '$ionicScrollDelegate', '$ionicModal', '$timeout', 'zmAutoLogin', '$ionicHistory', '$cordovaTouchID', 'EventServer', '$translate',function ($ionicPlatform, $scope, zm, ZMDataModel, $ionicSideMenuDelegate, $rootScope, $http, $q, $state, $ionicLoading, $ionicPopover, $ionicScrollDelegate, $ionicModal, $timeout, zmAutoLogin, $ionicHistory, $cordovaTouchID, EventServer, $translate) { +angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionicPlatform', '$scope', 'zm', 'ZMDataModel', '$ionicSideMenuDelegate', '$rootScope', '$http', '$q', '$state', '$ionicLoading', '$ionicPopover', '$ionicScrollDelegate', '$ionicModal', '$timeout', 'zmAutoLogin', '$ionicHistory', '$cordovaTouchID', 'EventServer', '$translate', function ($ionicPlatform, $scope, zm, ZMDataModel, $ionicSideMenuDelegate, $rootScope, $http, $q, $state, $ionicLoading, $ionicPopover, $ionicScrollDelegate, $ionicModal, $timeout, zmAutoLogin, $ionicHistory, $cordovaTouchID, EventServer, $translate) { $scope.$on('$ionicView.enter', - function () - { + function () { ZMDataModel.zmDebug("Inside Portal login Enter handler"); loginData = ZMDataModel.getLogin(); @@ -16,7 +15,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic $ionicHistory.nextViewOptions({ disableBack: true }); - + $scope.pindata = {}; if ($ionicSideMenuDelegate.isOpen()) { @@ -29,8 +28,8 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic if (ZMDataModel.isLoggedIn()) { ZMDataModel.zmLog("User credentials are provided"); - - + + // You can login either via touch ID or typing in your code if ($ionicPlatform.is('ios') && loginData.usePin) { @@ -50,8 +49,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic }, function (error) { ZMDataModel.zmLog("TouchID not supported"); }); - } - else // touch was not used + } else // touch was not used { ZMDataModel.zmLog("not checking for touchID"); } @@ -61,38 +59,32 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic $scope.pinPrompt = true; // dont call unlock, let the user type in code - } - else // no PIN Code so go directly to auth + } else // no PIN Code so go directly to auth { - + unlock(true); } - } - else // login creds are not present + } else // login creds are not present { ZMDataModel.zmDebug("PortalLogin: Not logged in, so going to login"); - if (ZMDataModel.isFirstUse()) - { - ZMDataModel.zmDebug ("First use, showing warm and fuzzy..."); + if (ZMDataModel.isFirstUse()) { + ZMDataModel.zmDebug("First use, showing warm and fuzzy..."); $ionicHistory.nextViewOptions({ disableAnimate: true, disableBack: true }); $state.go('first-use'); - } - else - { - if (!$rootScope.userCancelledAuth) - { - $ionicHistory.nextViewOptions({ - disableAnimate: true, + } else { + if (!$rootScope.userCancelledAuth) { + $ionicHistory.nextViewOptions({ + disableAnimate: true, disableBack: true - }); - $state.go("login" ,{"wizard": false}); - } - else - { + }); + $state.go("login", { + "wizard": false + }); + } else { // do this only once - rest for next time $rootScope.userCancelledAuth = false; } @@ -118,70 +110,72 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic // call with false meaning check for pin unlock(false); }; - - + + //------------------------------------------------------------------------ // Aaron Lager hack - can't figure out why he gets a 401 after // successful login and then it works after resaving //------------------------------------------------------------------------ - function tryLoggingSecondTimeHack() - { + function tryLoggingSecondTimeHack() { var d = $q.defer(); - - zmAutoLogin.doLogin("<button class='button button-clear' style='line-height: normal; min-height: 0; min-width: 0;color:#fff;' ng-click='$root.cancelAuth()'><i class='ion-close-circled'></i> "+$translate.instant('kAuthenticating')+"...</button>") - .then(function (data) // success + + zmAutoLogin.doLogin("<button class='button button-clear' style='line-height: normal; min-height: 0; min-width: 0;color:#fff;' ng-click='$root.cancelAuth()'><i class='ion-close-circled'></i> " + $translate.instant('kAuthenticating') + "...</button>") + .then(function (data) // success { - ZMDataModel.zmDebug ("2nd auth login worked"); + ZMDataModel.zmDebug("2nd auth login worked"); ZMDataModel.getAPIversion() - .then (function (data) { - ZMDataModel.getKeyConfigParams(1); - ZMDataModel.zmLog("2nd auth:Got API version: " + data); - $rootScope.apiVersion = data; - var ld = ZMDataModel.getLogin(); - if (ZMDataModel.versionCompare(data,zm.minAppVersion)==-1 && data !="0.0.0") - { + .then(function (data) { + ZMDataModel.getKeyConfigParams(1); + ZMDataModel.zmLog("2nd auth:Got API version: " + data); + $rootScope.apiVersion = data; + var ld = ZMDataModel.getLogin(); + if (ZMDataModel.versionCompare(data, zm.minAppVersion) == -1 && data != "0.0.0") { + + $state.go('lowversion', { + "ver": data + }); + } - $state.go('lowversion', {"ver":data}); - } + if (ZMDataModel.versionCompare(data, zm.recommendedAppVersion) == -1 && data != "0.0.0") { - if (ZMDataModel.versionCompare(data,zm.recommendedAppVersion)==-1 && data !="0.0.0") - { + $state.go('importantmessage', { + "ver": data + }); + } + + if (data == "0.0.0") { + + ZMDataModel.zmLog("2nd Auth:API getVersion succeeded but returned 0.0.0 " + JSON.stringify(data)); + ZMDataModel.displayBanner('error', ['ZoneMinder authentication failed']); + $state.go("login", { + "wizard": false + }); + + } + // coming here means continue + EventServer.refresh(); + var statetoGo = $rootScope.lastState ? $rootScope.lastState : 'montage'; + //ZMDataModel.zmDebug ("logging state transition"); + ZMDataModel.zmDebug("2nd Auth: Transitioning state to: " + + statetoGo + " with param " + JSON.stringify($rootScope.lastStateParam)); + $state.go(statetoGo, $rootScope.lastStateParam); + + }, + function (error) { + ZMDataModel.zmDebug("2nd auth API failed, going to login"); + d.reject("failed 2nd auth"); + return (d.promise); + + }); + + + }, + function (error) { + ZMDataModel.zmDebug("2nd auth hack failed, going to login"); + d.reject("failed 2nd auth"); + return (d.promise); + }); - $state.go('importantmessage', {"ver":data}); - } - - if (data == "0.0.0") - { - - ZMDataModel.zmLog ("2nd Auth:API getVersion succeeded but returned 0.0.0 " + JSON.stringify(data)); - ZMDataModel.displayBanner('error', ['ZoneMinder authentication failed']); - $state.go("login" ,{"wizard": false}); - - } - // coming here means continue - EventServer.refresh(); - var statetoGo = $rootScope.lastState ? $rootScope.lastState : 'montage'; - //ZMDataModel.zmDebug ("logging state transition"); - ZMDataModel.zmDebug("2nd Auth: Transitioning state to: " + - statetoGo + " with param " +JSON.stringify($rootScope.lastStateParam) ); - $state.go(statetoGo, $rootScope.lastStateParam); - - }, - function (error) { - ZMDataModel.zmDebug ("2nd auth API failed, going to login"); - d.reject("failed 2nd auth"); - return (d.promise); - - }); - - - }, - function (error) { - ZMDataModel.zmDebug ("2nd auth hack failed, going to login"); - d.reject("failed 2nd auth"); - return (d.promise); - }); - return (d.promise); } @@ -190,133 +184,141 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic idVerified == true means no pin check needed == false means check PIN */ - - ZMDataModel.zmDebug("unlock called with check PIN="+idVerified); - if (idVerified || ($scope.pindata.pin == loginData.pinCode)) - { + + ZMDataModel.zmDebug("unlock called with check PIN=" + idVerified); + if (idVerified || ($scope.pindata.pin == loginData.pinCode)) { ZMDataModel.zmDebug("PIN code entered is correct, or there is no PIN set"); $rootScope.rand = Math.floor((Math.random() * 100000) + 1); zmAutoLogin.stop(); //safety zmAutoLogin.start(); - + // PIN is fine, or not set so lets login - zmAutoLogin.doLogin("<button class='button button-clear' style='line-height: normal; min-height: 0; min-width: 0;color:#fff;' ng-click='$root.cancelAuth()'><i class='ion-close-circled'></i> "+$translate.instant('kAuthenticating')+"...</button>") + zmAutoLogin.doLogin("<button class='button button-clear' style='line-height: normal; min-height: 0; min-width: 0;color:#fff;' ng-click='$root.cancelAuth()'><i class='ion-close-circled'></i> " + $translate.instant('kAuthenticating') + "...</button>") .then(function (data) // success - { - ZMDataModel.zmDebug("PortalLogin: auth success"); - ZMDataModel.getKeyConfigParams(1); - // $state.go("login" ,{"wizard": false}); - //login was ok, so get API details - ZMDataModel.getAPIversion() - .then (function(data) { - ZMDataModel.zmLog("Got API version: " + data); - $rootScope.apiVersion = data; - var ld = ZMDataModel.getLogin(); - if (ZMDataModel.versionCompare(data,zm.minAppVersion)==-1 && data !="0.0.0") - { - - $state.go('lowversion', {"ver":data}); - } - - if (ZMDataModel.versionCompare(data,zm.recommendedAppVersion)==-1 && data !="0.0.0") - { + { + ZMDataModel.zmDebug("PortalLogin: auth success"); + ZMDataModel.getKeyConfigParams(1); + // $state.go("login" ,{"wizard": false}); + //login was ok, so get API details + ZMDataModel.getAPIversion() + .then(function (data) { + ZMDataModel.zmLog("Got API version: " + data); + $rootScope.apiVersion = data; + var ld = ZMDataModel.getLogin(); + if (ZMDataModel.versionCompare(data, zm.minAppVersion) == -1 && data != "0.0.0") { + + $state.go('lowversion', { + "ver": data + }); + } + + if (ZMDataModel.versionCompare(data, zm.recommendedAppVersion) == -1 && data != "0.0.0") { + + $state.go('importantmessage', { + "ver": data + }); + } + + if (data == "0.0.0") { + + ZMDataModel.zmLog("API getVersion succeeded but returned 0.0.0 " + JSON.stringify(data)); + ZMDataModel.displayBanner('error', ['ZoneMinder authentication failed']); + $state.go("login", { + "wizard": false + }); + + } + // coming here means continue + EventServer.refresh(); + var statetoGo = $rootScope.lastState ? $rootScope.lastState : 'montage'; + ZMDataModel.zmDebug("logging state transition"); + ZMDataModel.zmDebug("Transitioning state to: " + + statetoGo + " with param " + JSON.stringify($rootScope.lastStateParam)); + $state.go(statetoGo, $rootScope.lastStateParam); + + }, + function (error) { // API Error + ZMDataModel.zmLog("API Error handler: going to login getAPI returned error: " + JSON.stringify(error)); + //ZMDataModel.displayBanner('error', ['ZoneMinder authentication failed']); + + ZMDataModel.zmDebug("Doing the Aaron Hack after 1 sec...."); + $timeout(function () { + tryLoggingSecondTimeHack() + .then(function success(s) { + ZMDataModel.zmLog("2nd time login hack worked!, nothing to do"); + }, + function error(e) { + $state.go("login", { + "wizard": false + }); + }); + + }, 1000); + + }); + + + if ($rootScope.tappedNotification) { + + + var ld = ZMDataModel.getLogin(); + ZMDataModel.zmLog("Came via push tap. onTapScreen=" + ld.onTapScreen); + //console.log ("***** NOTIFICATION TAPPED "); + $rootScope.tappedNotification = 0; + $ionicHistory.nextViewOptions({ + disableBack: true + }); - $state.go('importantmessage', {"ver":data}); - } - - if (data == "0.0.0") - { - - ZMDataModel.zmLog ("API getVersion succeeded but returned 0.0.0 " + JSON.stringify(data)); - ZMDataModel.displayBanner('error', ['ZoneMinder authentication failed']); - $state.go("login" ,{"wizard": false}); - + if (ld.onTapScreen == $translate.instant('kTapMontage')) { + ZMDataModel.zmDebug("Going to montage"); + $state.go("montage", {}, { + reload: true + }); + + return; + } else if (ld.onTapScreen == $translate.instant('kTapEvents')) { + ZMDataModel.zmDebug("Going to events"); + $state.go("events", { + "id": 0 + }, { + reload: true + }); + return; + } else // we go to live + { + ZMDataModel.zmDebug("Going to live view "); + $state.go("monitors", {}, { + reload: true + }); + return; + } } - // coming here means continue - EventServer.refresh(); - var statetoGo = $rootScope.lastState ? $rootScope.lastState : 'montage'; - ZMDataModel.zmDebug ("logging state transition"); - ZMDataModel.zmDebug("Transitioning state to: " + - statetoGo + " with param " +JSON.stringify($rootScope.lastStateParam) ); - $state.go(statetoGo, $rootScope.lastStateParam); - - }, - function (error) { // API Error - ZMDataModel.zmLog ("API Error handler: going to login getAPI returned error: " + JSON.stringify(error)); - //ZMDataModel.displayBanner('error', ['ZoneMinder authentication failed']); - - ZMDataModel.zmDebug ("Doing the Aaron Hack after 1 sec...."); - $timeout ( function () { - tryLoggingSecondTimeHack() - .then (function success(s) { - ZMDataModel.zmLog ("2nd time login hack worked!, nothing to do"); - }, - function error(e) { - $state.go("login" ,{"wizard": false}); - }); - - },1000); - }); - - if ($rootScope.tappedNotification) - { - - - var ld = ZMDataModel.getLogin(); - ZMDataModel.zmLog ("Came via push tap. onTapScreen="+ld.onTapScreen); - //console.log ("***** NOTIFICATION TAPPED "); - $rootScope.tappedNotification = 0; - $ionicHistory.nextViewOptions({disableBack: true}); - - if (ld.onTapScreen == $translate.instant('kTapMontage') ) - { - ZMDataModel.zmDebug("Going to montage"); - $state.go("montage", {}, { reload: true }); - - return; - } - else if (ld.onTapScreen == $translate.instant ('kTapEvents')) - { - ZMDataModel.zmDebug("Going to events"); - $state.go("events", {"id": 0}, { reload: true }); - return; - } - else // we go to live - { - ZMDataModel.zmDebug("Going to live view "); - $state.go("monitors", {}, { reload: true }); - return; - } - } - - - }, + }, // coming here means auth error // so go back to login - function (error) { - ZMDataModel.zmDebug("PortalLogin: error authenticating " + - JSON.stringify(error)); - if (!$rootScope.userCancelledAuth) - { + function (error) { + ZMDataModel.zmDebug("PortalLogin: error authenticating " + + JSON.stringify(error)); + if (!$rootScope.userCancelledAuth) { ZMDataModel.displayBanner('error', ['ZoneMinder authentication failed', 'Please check API settings']); $ionicHistory.nextViewOptions({ disableAnimate: true, - disableBack: true + disableBack: true }); - $state.go("login" ,{"wizard": false}); - } - else - { - // if user cancelled auth I guess we go to login - $rootScope.userCancelledAuth = false; - $state.go("login" ,{"wizard": false}); - } - }); - } - else - { + $state.go("login", { + "wizard": false + }); + } else { + // if user cancelled auth I guess we go to login + $rootScope.userCancelledAuth = false; + $state.go("login", { + "wizard": false + }); + } + }); + } else { $scope.pindata.status = "Invalid PIN"; // wobble the input box on error @@ -333,11 +335,11 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic //------------------------------------------------------------------------------- // Controller Main //------------------------------------------------------------------------------- - // console.log("************* ENTERING PORTAL MAIN "); - ZMDataModel.zmLog ("Entering Portal Main"); + // console.log("************* ENTERING PORTAL MAIN "); + ZMDataModel.zmLog("Entering Portal Main"); var loginData; - $ionicSideMenuDelegate.canDragContent(true); + $ionicSideMenuDelegate.canDragContent(true); + - }]);
\ No newline at end of file diff --git a/www/js/StateCtrl.js b/www/js/StateCtrl.js index c3f2e860..27a7fcc8 100644 --- a/www/js/StateCtrl.js +++ b/www/js/StateCtrl.js @@ -5,7 +5,7 @@ // controller for State View angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup', '$scope', 'zm', 'ZMDataModel', '$ionicSideMenuDelegate', '$ionicLoading', '$ionicModal', '$state', '$http', '$rootScope', '$timeout', '$ionicHistory', '$translate', function ( - $ionicPopup, $scope, zm, ZMDataModel, $ionicSideMenuDelegate, $ionicLoading, $ionicModal, $state, $http, $rootScope, $timeout,$ionicHistory, $translate) { + $ionicPopup, $scope, zm, ZMDataModel, $ionicSideMenuDelegate, $ionicLoading, $ionicModal, $state, $http, $rootScope, $timeout, $ionicHistory, $translate) { //---------------------------------------------------------------------- // Controller main @@ -19,10 +19,10 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup' $scope.dangerButtonColor = ["button-positive", "button-assertive"]; $scope.customState = ""; $scope.allStateNames = []; - + $rootScope.zmPopup = ""; - - + + var loginData = ZMDataModel.getLogin(); @@ -43,12 +43,12 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup' ZMDataModel.zmDebug("invoking LoadStatus..."); getLoadStatus(); }, 2000); - + $timeout(function () { ZMDataModel.zmDebug("invoking CurrentState..."); getCurrentState(); }, 4000); - + /* $timeout(function () { ZMDataModel.zmDebug("invoking DiskStatus..."); @@ -63,7 +63,7 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup' // state, that effectively overwrites current view power management needs //------------------------------------------------------------------------ $scope.$on('$ionicView.enter', function () { - // console.log("**VIEW ** Montage Ctrl Entered"); + // console.log("**VIEW ** Montage Ctrl Entered"); ZMDataModel.setAwake(false); }); @@ -99,21 +99,25 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup' ); } - - + + //---------------------------------------------------------------- // Alarm notification handling //---------------------------------------------------------------- - $scope.handleAlarms = function() - { - $rootScope.isAlarm=!$rootScope.isAlarm; - if (!$rootScope.isAlarm) - { - $rootScope.alarmCount="0"; - $ionicHistory.nextViewOptions({disableBack: true}); - $state.go("events", {"id": 0}, { reload: true }); + $scope.handleAlarms = function () { + $rootScope.isAlarm = !$rootScope.isAlarm; + if (!$rootScope.isAlarm) { + $rootScope.alarmCount = "0"; + $ionicHistory.nextViewOptions({ + disableBack: true + }); + $state.go("events", { + "id": 0 + }, { + reload: true + }); } - }; + }; //--------------------------------------------------------- // Allows the user to select a custom run state @@ -130,7 +134,7 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup' title: $translate.instant('kSelectRunState'), - subTitle: $translate.instant('kCurrentState') + $scope.customState ? ($translate.instant('kCurrentState')+": " + $scope.customState) : "", + subTitle: $translate.instant('kCurrentState') + $scope.customState ? ($translate.instant('kCurrentState') + ": " + $scope.customState) : "", buttons: [ { text: $translate.instant('kButtonCancel'), @@ -140,7 +144,7 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup' }, { - text: $translate.instant('kButtonOk'), + text: $translate.instant('kButtonOk'), onTap: function (e) { return "OK"; @@ -152,7 +156,7 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup' // It seems invoking a popup within a popup handler // causes issues. Doing this outside due to that reason $rootScope.zmPopup.then(function (res) { - // console.log("GOT : " + JSON.stringify(res)); + // console.log("GOT : " + JSON.stringify(res)); if (res == "OK") { if ($scope.myopt.selectedState != "") controlZM($scope.myopt.selectedState); @@ -178,11 +182,11 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup' $scope.zmDisk = "unknown"; ZMDataModel.zmLog("Error retrieving disk space, API returned null for obj.Total.space"); } - + }, function (error) { $scope.zmDisk = "unknown"; - // console.log("ERROR:" + JSON.stringify(error)); + // console.log("ERROR:" + JSON.stringify(error)); ZMDataModel.zmLog("Error retrieving DiskStatus: " + JSON.stringify(error), "error"); } ); @@ -307,7 +311,7 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup' ZMDataModel.zmDebug("StateCtrl/controlZM: operation in progress"); $ionicPopup.alert({ title: $translate.instant('kOperationInProgressTitle'), - template: $translate.instant('kOperationInProgressBody')+'...' + template: $translate.instant('kOperationInProgressBody') + '...' }); return; } @@ -364,8 +368,8 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup' console.log("***Pull to Refresh"); ZMDataModel.zmDebug("StateCtrl/refresh: calling getRun/Load/Disk/CurrentState"); getRunStatus(); - $timeout (getLoadStatus,2000); - $timeout (getCurrentState,4000); + $timeout(getLoadStatus, 2000); + $timeout(getCurrentState, 4000); //$timeout (getDiskStatus,6000); $scope.$broadcast('scroll.refreshComplete'); diff --git a/www/js/TimelineCtrl.js b/www/js/TimelineCtrl.js index 3e178bfe..9362a7d1 100644 --- a/www/js/TimelineCtrl.js +++ b/www/js/TimelineCtrl.js @@ -49,7 +49,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla // Used to display date range for timeline //----------------------------------------------------------- $scope.prettify = function (str) { - return moment(str).format('MMMM Do YYYY, '+ZMDataModel.getTimeFormat()); + return moment(str).format('MMMM Do YYYY, ' + ZMDataModel.getTimeFormat()); }; //----------------------------------------------------------- @@ -66,11 +66,11 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla $scope.toggleMinAlarmFrameCount = function () { - // console.log("Toggling"); + // console.log("Toggling"); var ld = ZMDataModel.getLogin(); ld.enableAlarmCount = !ld.enableAlarmCount; - + ZMDataModel.setLogin(ld); @@ -114,44 +114,42 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla //----------------------------------------- // Move by X days //----------------------------------------- - $scope.moveDays = function (d) - { + $scope.moveDays = function (d) { var range = timeline.getWindow(); var ds = moment(range.start); - if (d>0) - ds.add(d, 'days'); + if (d > 0) + ds.add(d, 'days'); else ds.subtract(Math.abs(d), 'days'); var es = moment(ds); // clone it! - es.add (1, 'day'); - + es.add(1, 'day'); + fromDate = ds.format("YYYY-MM-DD HH:mm:ss"); toDate = es.format("YYYY-MM-DD HH:mm:ss"); $scope.fromDate = fromDate; $scope.toDate = toDate; $rootScope.customTimelineRange = false; - ZMDataModel.zmLog ("moving by " + d + " day to " + fromDate + " upto " + toDate); + ZMDataModel.zmLog("moving by " + d + " day to " + fromDate + " upto " + toDate); drawGraph(fromDate, toDate, maxItems); - + }; - - function eventDetails(ev) - { + + function eventDetails(ev) { $scope.event = ev; - $ionicModal.fromTemplateUrl('templates/timeline-modal.html', { + $ionicModal.fromTemplateUrl('templates/timeline-modal.html', { scope: $scope, // give ModalCtrl access to this scope animation: 'slide-in-up', - id:'analyze', - + id: 'analyze', + }) .then(function (modal) { $scope.modal = modal; - - + + $scope.modal.show(); @@ -165,20 +163,19 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla // FIXME : code repeat from Events //-------------------------------------------------------- function openModal(event) { - - if ($scope.modalFromTimelineIsOpen == true) - { + + if ($scope.modalFromTimelineIsOpen == true) { // don't know why but some conflict from angular to timeline lib // results in double modals at times - ZMDataModel.zmLog (">>-- duplicate modal detected, preventing"); + ZMDataModel.zmLog(">>-- duplicate modal detected, preventing"); } - + $scope.modalFromTimelineIsOpen = true; ZMDataModel.setAwake(ZMDataModel.getKeepAwake()); // pass this event to ModalCtrl $scope.currentEvent = event; - + $scope.event = event; // in Timeline view, make sure events stick to same monitor $scope.followSameMonitor = "1"; @@ -188,16 +185,16 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla $ionicModal.fromTemplateUrl('templates/events-modal.html', { scope: $scope, // give ModalCtrl access to this scope animation: 'slide-in-up', - id:'footage' + id: 'footage' }) .then(function (modal) { $scope.modal = modal; $ionicLoading.show({ - template: $translate.instant('kPleaseWait')+"...", + template: $translate.instant('kPleaseWait') + "...", noBackdrop: true, duration: 10000, - + }); $scope.modal.show(); @@ -241,7 +238,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla //------------------------------------------------------------------------- function onPause() { ZMDataModel.zmDebug("TimelineCtrl:onpause called"); - // console.log("*** Moving to Background ***"); // Handle the pause event + // console.log("*** Moving to Background ***"); // Handle the pause event if ($scope.popover) $scope.popover.remove(); @@ -257,8 +254,9 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla // in context of angular - $timeout ( function () { - openModal(event);}); + $timeout(function () { + openModal(event); + }); } @@ -275,27 +273,27 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla //console.log("**Destroying Timeline"); //timeline.destroy(); }); - - - $scope.$on('$ionicView.enter', function () { - - - - // Make sure sliding for menu is disabled so it - // does not interfere with graph panning - $ionicSideMenuDelegate.canDragContent(false); - var ld = ZMDataModel.getLogin(); - maxItemsConf = ($rootScope.platformOS == 'desktop') ? zm.graphDesktopItemMax: zm.graphItemMax; - maxItems = ld.graphSize || maxItemsConf; - ZMDataModel.zmLog("Graph items to draw is " + maxItems); + + + $scope.$on('$ionicView.enter', function () { + + + + // Make sure sliding for menu is disabled so it + // does not interfere with graph panning + $ionicSideMenuDelegate.canDragContent(false); + var ld = ZMDataModel.getLogin(); + maxItemsConf = ($rootScope.platformOS == 'desktop') ? zm.graphDesktopItemMax : zm.graphItemMax; + maxItems = ld.graphSize || maxItemsConf; + ZMDataModel.zmLog("Graph items to draw is " + maxItems); $scope.maxItems = maxItems; $scope.translationData = { maxItemsVal: maxItems }; - + $scope.graphLoaded = false; ZMDataModel.zmDebug("TimelineCtrl/drawGraph: graphLoaded is " + $scope.graphLoaded); - }); + }); //------------------------------------------------- // FIXME: shitty hackery -- Im using a rootScope @@ -307,7 +305,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla // graph range //------------------------------------------------- $scope.$on('$ionicView.afterEnter', function () { - // console.log("***AFTER ENTER"); + // console.log("***AFTER ENTER"); $scope.modalFromTimelineIsOpen = false; var tempMon = message; @@ -322,17 +320,17 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla } else $scope.monitors = message; if ($rootScope.customTimelineRange) { - // console.log("***** CUSTOM RANGE"); + // console.log("***** CUSTOM RANGE"); if (moment($rootScope.fromString).isValid() && moment($rootScope.toString).isValid()) { - // console.log("FROM & TO IS CUSTOM"); + // console.log("FROM & TO IS CUSTOM"); fromDate = $rootScope.fromString; toDate = $rootScope.toString; $scope.fromDate = fromDate; $scope.toDate = toDate; drawGraph(fromDate, toDate, maxItems); } else { - // console.log("FROM & TO IS CUSTOM INVALID"); + // console.log("FROM & TO IS CUSTOM INVALID"); } } else { drawGraph(fromDate, toDate, maxItems); @@ -343,37 +341,31 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla }).then(function (popover) { $scope.popover = popover; }); - - + + // -------------------------------------------------------- - // Handling of back button in case modal is open should - // close the modal - // -------------------------------------------------------- - - $ionicPlatform.registerBackButtonAction(function (e) { + // Handling of back button in case modal is open should + // close the modal + // -------------------------------------------------------- + + $ionicPlatform.registerBackButtonAction(function (e) { e.preventDefault(); - if ($scope.modal !=undefined && $scope.modal.isShown()) - { + if ($scope.modal != undefined && $scope.modal.isShown()) { // switch off awake, as liveview is finished ZMDataModel.zmDebug("Modal is open, closing it"); ZMDataModel.setAwake(false); $scope.modal.remove(); - } - else - { + } else { ZMDataModel.zmDebug("Modal is closed, so toggling or exiting"); - if (!$ionicSideMenuDelegate.isOpenLeft()) - { + if (!$ionicSideMenuDelegate.isOpenLeft()) { $ionicSideMenuDelegate.toggleLeft(); - - } - else - { + + } else { navigator.app.exitApp(); } - + } - + }, 1000); @@ -389,7 +381,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla $scope.ionRange = { index: 1 }; - + var curFromDate, curToDate, curCount; @@ -415,12 +407,12 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla // maxItems will be ignored during timeline draw if its desktop - var maxItemsConf; - + var maxItemsConf; + var ld = ZMDataModel.getLogin(); var maxItems; - + //flat colors for graph - https://flatuicolors.com http://www.flatuicolorpicker.com var colors = ['#3498db', '#E57373', '#EB974E', '#95A5A6', '#e74c3c', '#03C9A9', ]; @@ -537,7 +529,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla curCount = count; $ionicLoading.show({ - template: $translate.instant('kLoadingGraph')+"...", + template: $translate.instant('kLoadingGraph') + "...", animation: 'fade-in', showBackdrop: true, maxWidth: 200, @@ -581,7 +573,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla second: 's', }, majorLabels: { - second: "D MMM "+ZMDataModel.getTimeFormat(), + second: "D MMM " + ZMDataModel.getTimeFormat(), } }, @@ -658,34 +650,33 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla } } } - + myevents[i].Event.MonitorName = ZMDataModel.getMonitorName(myevents[i].Event.MonitorId); - // now construct base path - - myevents[i].Event.streamingURL = ZMDataModel.getStreamingURL (myevents[i].Event.MonitorId); - myevents[i].Event.baseURL = ZMDataModel.getBaseURL (myevents[i].Event.MonitorId); - myevents[i].Event.imageMode = ZMDataModel.getImageMode (myevents[i].Event.MonitorId); - if (ZMDataModel.getLogin().url != myevents[i].Event.baseURL) - { - //ZMDataModel.zmDebug ("Multi server, changing base"); - myevents[i].Event.baseURL = ZMDataModel.getLogin().url; - - } - // console.log ("***** MULTISERVER STREAMING URL FOR EVENTS " + myevents[i].Event.streamingURL); + // now construct base path + + myevents[i].Event.streamingURL = ZMDataModel.getStreamingURL(myevents[i].Event.MonitorId); + myevents[i].Event.baseURL = ZMDataModel.getBaseURL(myevents[i].Event.MonitorId); + myevents[i].Event.imageMode = ZMDataModel.getImageMode(myevents[i].Event.MonitorId); + if (ZMDataModel.getLogin().url != myevents[i].Event.baseURL) { + //ZMDataModel.zmDebug ("Multi server, changing base"); + myevents[i].Event.baseURL = ZMDataModel.getLogin().url; + + } + // 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.baseURL); - - - if (idfound) { if (typeof myevents[i].Event.DefaultVideo === 'undefined') - // console.log (JSON.stringify(myevents[i])); + // console.log (JSON.stringify(myevents[i])); myevents[i].Event.DefaultVideo = ""; graphData.add({ id: graphIndex, - content: "<span class='my-vis-font'>" + "( <i class='ion-android-notifications'></i>"+myevents[i].Event.AlarmFrames+") "+myevents[i].Event.Notes + "</span>", + content: "<span class='my-vis-font'>" + "( <i class='ion-android-notifications'></i>" + myevents[i].Event.AlarmFrames + ") " + myevents[i].Event.Notes + "</span>", start: myevents[i].Event.StartTime, end: myevents[i].Event.EndTime, group: myevents[i].Event.MonitorId, @@ -729,24 +720,25 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla ZMDataModel.zmDebug("graph loaded: " + $scope.graphLoaded); $scope.navControls = false; var dblclick = false; - - - + + + timeline.on('click', function (prop) { - - - $timeout (function() { - if (dblclick) - { - console.log ("IGNORING CLICK AS DBL CLICK"); - $timeout (function(){dblclick = false;},400); + + + $timeout(function () { + if (dblclick) { + //console.log ("IGNORING CLICK AS DBL CLICK"); + $timeout(function () { + dblclick = false; + }, 400); return; } - console.log ("CLICK"); + //console.log ("CLICK"); //console.log ("I GOT " + JSON.stringify(prop)); - // console.log ("EVENT IS " + JSON.stringify(properties.event)); + // console.log ("EVENT IS " + JSON.stringify(properties.event)); //var properties = timeline.getEventProperties(prop); - // console.log ( "I GOT " + properties); + // console.log ( "I GOT " + properties); var itm = prop.item; //console.log ("ITEM CLICKED " + itm); if (itm && !isNaN(itm)) { @@ -757,43 +749,35 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla } else { - ZMDataModel.zmDebug ("exact match not found, guessing item with co-ordinates X="+prop.x+" group="+prop.group); - if (prop.group) - { + ZMDataModel.zmDebug("exact match not found, guessing item with co-ordinates X=" + prop.x + " group=" + prop.group); + if (prop.group) { var visible = timeline.getVisibleItems(); - ZMDataModel.zmDebug ("Visible items="+JSON.stringify(visible)); - var closestItem=null; - var minDist =99999; + ZMDataModel.zmDebug("Visible items=" + JSON.stringify(visible)); + var closestItem = null; + var minDist = 99999; var _item; - for (var x = 0; x < visible.length; x++) - { + for (var x = 0; x < visible.length; x++) { _item = timeline.itemSet.items[x]; - if (_item.data.group == prop.group) - { - if (Math.abs(_item.left - prop.x) < minDist) - { - closestItem = _item; - minDist = Math.abs(_item.left - prop.x); - ZMDataModel.zmDebug ("Temporary closest "+_item.left); - //console.log (_item); - } - } + if (_item.data.group == prop.group) { + if (Math.abs(_item.left - prop.x) < minDist) { + closestItem = _item; + minDist = Math.abs(_item.left - prop.x); + ZMDataModel.zmDebug("Temporary closest " + _item.left); + //console.log (_item); + } + } } - - if (closestItem!=null) - { - ZMDataModel.zmLog ("Closest item " +closestItem.left+ " group: " + closestItem.data.group); + + if (closestItem != null) { + ZMDataModel.zmLog("Closest item " + closestItem.left + " group: " + closestItem.data.group); showEvent(closestItem.data.myevent); + } else { + ZMDataModel.zmLog("Did not find a visible item match"); } - else - { - ZMDataModel.zmLog ("Did not find a visible item match"); - } - } - else // no group row tapped, do nothing + } else // no group row tapped, do nothing { - + /*$ionicLoading.show({ template: "", animation: 'fade-in', @@ -803,64 +787,57 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla duration: 1500, });*/ } - // console.log("Zoomed out too far to playback events"); + // console.log("Zoomed out too far to playback events"); } - },400); + }, 400); }); - - timeline.on ('doubleClick', function (prop) { - console.log ("DOUBLE"); - dblclick = true; - var itm = prop.item; - //console.log ("ITEM CLICKED " + itm); - if (itm && !isNaN(itm)) { - ZMDataModel.zmDebug("TimelineCtrl/drawGraph:You clicked on item " + itm); - var item = graphData.get(itm); - ZMDataModel.zmDebug("TimelineCtrl/drawGraph: clicked item details:" + JSON.stringify(item)); - eventDetails(item.myevent); - - } else { - - ZMDataModel.zmDebug ("exact match not found, guessing item with co-ordinates X="+prop.x+" group="+prop.group); - if (prop.group) - { - var visible = timeline.getVisibleItems(); - ZMDataModel.zmDebug ("Visible items="+JSON.stringify(visible)); - var closestItem=null; - var minDist =99999; - var _item; - for (var x = 0; x < visible.length; x++) - { - _item = timeline.itemSet.items[x]; - if (_item.data.group == prop.group) - { - if (Math.abs(_item.left - prop.x) < minDist) - { - closestItem = _item; - minDist = Math.abs(_item.left - prop.x); - ZMDataModel.zmDebug ("Temporary closest "+_item.left); - //console.log (_item); - } - } - - } - ZMDataModel.zmLog ("Closest item " +closestItem.left+ " group: " + closestItem.data.group); - if (closestItem!=null) - { - ZMDataModel.zmLog ("Closest item " +closestItem.left+ " group: " + closestItem.data.group); - showEvent(closestItem.data.myevent); - } - else - { - ZMDataModel.zmLog ("Did not find a visible item match"); + timeline.on('doubleClick', function (prop) { + //console.log ("DOUBLE"); + dblclick = true; + var itm = prop.item; + //console.log ("ITEM CLICKED " + itm); + if (itm && !isNaN(itm)) { + ZMDataModel.zmDebug("TimelineCtrl/drawGraph:You clicked on item " + itm); + var item = graphData.get(itm); + ZMDataModel.zmDebug("TimelineCtrl/drawGraph: clicked item details:" + JSON.stringify(item)); + eventDetails(item.myevent); + + + } else { + + ZMDataModel.zmDebug("exact match not found, guessing item with co-ordinates X=" + prop.x + " group=" + prop.group); + if (prop.group) { + var visible = timeline.getVisibleItems(); + ZMDataModel.zmDebug("Visible items=" + JSON.stringify(visible)); + var closestItem = null; + var minDist = 99999; + var _item; + for (var x = 0; x < visible.length; x++) { + _item = timeline.itemSet.items[x]; + if (_item.data.group == prop.group) { + if (Math.abs(_item.left - prop.x) < minDist) { + closestItem = _item; + minDist = Math.abs(_item.left - prop.x); + ZMDataModel.zmDebug("Temporary closest " + _item.left); + //console.log (_item); + } } + + } + ZMDataModel.zmLog("Closest item " + closestItem.left + " group: " + closestItem.data.group); + if (closestItem != null) { + ZMDataModel.zmLog("Closest item " + closestItem.left + " group: " + closestItem.data.group); + showEvent(closestItem.data.myevent); + } else { + ZMDataModel.zmLog("Did not find a visible item match"); } - - // console.log("Zoomed out too far to playback events"); } - + + // console.log("Zoomed out too far to playback events"); + } + }); }, function (error) { @@ -884,7 +861,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla cssClass: 'fa fa-compress fa-2x', size: 'small', onclick: function () { - console.log("fitting"); + //console.log("fitting"); timeline.fit(); } }, @@ -913,7 +890,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla empty: false, onclick: function () { - + move(0.2); } @@ -923,7 +900,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla empty: true, onclick: function () { - console.log('About'); + // console.log('About'); } }, @@ -959,7 +936,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla content: 'H', empty: true, onclick: function () { - console.log('About'); + // console.log('About'); } }, @@ -986,7 +963,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla content: 'K', empty: true, onclick: function () { - console.log('About'); + //console.log('About'); } }, ] diff --git a/www/js/TimelineModalCtrl.js b/www/js/TimelineModalCtrl.js index 35d93ea9..68b37925 100644 --- a/www/js/TimelineModalCtrl.js +++ b/www/js/TimelineModalCtrl.js @@ -8,14 +8,14 @@ angular.module('zmApp.controllers').controller('TimelineModalCtrl', ['$scope', '$rootScope', 'zm', 'ZMDataModel', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$q', '$sce', 'carouselUtils', '$ionicPopup', '$translate', function ($scope, $rootScope, zm, ZMDataModel, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $q, $sce, carouselUtils, $ionicPopup, $translate) { - - + + var Graph2d; var tcGraph; var items; var groups; - var eventImageDigits=5; + var eventImageDigits = 5; var cv; var ctx; var options; @@ -24,88 +24,82 @@ angular.module('zmApp.controllers').controller('TimelineModalCtrl', ['$scope', ' var current_data; var current_options; var btype; - + $scope.graphType = ZMDataModel.getLogin().timelineModalGraphType; //$scope.graphType = "all"; - $scope.errorDetails=""; - - - + $scope.errorDetails = ""; + + + //---------------------------------------------------------------- - // Alarm notification handling - //---------------------------------------------------------------- - $scope.handleAlarms = function () { - $rootScope.isAlarm = !$rootScope.isAlarm; - if (!$rootScope.isAlarm) { - $rootScope.alarmCount = "0"; - $ionicHistory.nextViewOptions({ - disableBack: true - }); - $state.go("events", { - "id": 0 - }, { - reload: true - }); - } - }; - + // Alarm notification handling + //---------------------------------------------------------------- + $scope.handleAlarms = function () { + $rootScope.isAlarm = !$rootScope.isAlarm; + if (!$rootScope.isAlarm) { + $rootScope.alarmCount = "0"; + $ionicHistory.nextViewOptions({ + disableBack: true + }); + $state.go("events", { + "id": 0 + }, { + reload: true + }); + } + }; + + - //------------------------------------------------------- // we use this to reload the connkey if authkey changed //------------------------------------------------------ - - - $rootScope.$on("auth-success", function () { - ZMDataModel.zmDebug("EventModalCtrl: Re-login detected, resetting everything & re-generating connkey"); - - + + $rootScope.$on("auth-success", function () { + + ZMDataModel.zmDebug("EventModalCtrl: Re-login detected, resetting everything & re-generating connkey"); + + }); - - - $scope.scrollUp = function() - { + + + $scope.scrollUp = function () { //console.log ("SWIPE UP"); $ionicScrollDelegate.$getByHandle("timeline-modal-delegate").scrollTop(true); }; - - $scope.scrollDown = function() - { + + $scope.scrollDown = function () { //console.log ("SWIPE DOWN"); $ionicScrollDelegate.$getByHandle("timeline-modal-delegate").scrollBottom(true); }; - - - $scope.switchType = function() - { - - if ($scope.graphType == $translate.instant('kGraphAll')) - { + + + $scope.switchType = function () { + + if ($scope.graphType == $translate.instant('kGraphAll')) { current_data = onlyalarm_data; $scope.graphType = $translate.instant('kGraphAlarmed'); - ZMDataModel.zmDebug ("Alarm array has " + onlyalarm_data.labels.length+ " frames"); - btype='bar'; + ZMDataModel.zmDebug("Alarm array has " + onlyalarm_data.labels.length + " frames"); + btype = 'bar'; //console.log (JSON.stringify(onlyalarm_data)); - - } - else - { + + } else { current_data = data; - // tcGraph.data = + // tcGraph.data = $scope.graphType = $translate.instant('kGraphAll'); - btype='line'; + btype = 'line'; } - - ZMDataModel.zmLog ("Switching graph type to "+$scope.graphType); - + + ZMDataModel.zmLog("Switching graph type to " + $scope.graphType); + var ld = ZMDataModel.getLogin(); ld.timelineModalGraphType = $scope.graphType; ZMDataModel.setLogin(ld); - - - $timeout (function() { - + + + $timeout(function () { + /* if ($scope.graphType == 'alarmed') tcGraph.data = data; @@ -113,40 +107,46 @@ angular.module('zmApp.controllers').controller('TimelineModalCtrl', ['$scope', ' tcGraph.data = onlyalarm_data; tcGraph.update();*/ tcGraph.destroy(); - console.log ("GRAPH TYPE IS " + btype); - tcGraph = new Chart(ctx,{type:btype, data: current_data, options:options}); - }); - - - + console.log("GRAPH TYPE IS " + btype); + tcGraph = new Chart(ctx, { + type: btype, + data: current_data, + options: options + }); + }); + + + }; - - + + //------------------------------------------------------- // Tapping on a frame shows this image //------------------------------------------------------ - - $scope.showImage = function (p,r,f, fid,e, imode, id) - { + + $scope.showImage = function (p, r, f, fid, e, imode, id) { var img; - console.log ("Image Mode " + imode); - if (imode=='path') - - img = "<img width='100%' ng-src='"+p+"/index.php?view=image&path="+r+f+"'>"; - else - { - img = "<img width='100%' ng-src='"+p+"/index.php?view=image&fid="+id+"'>"; - // console.log ("IS MULTISERVER SO IMAGE IS " + img); + console.log("Image Mode " + imode); + if (imode == 'path') + + img = "<img width='100%' ng-src='" + p + "/index.php?view=image&path=" + r + f + "'>"; + else { + img = "<img width='100%' ng-src='" + p + "/index.php?view=image&fid=" + id + "'>"; + // console.log ("IS MULTISERVER SO IMAGE IS " + img); } - $rootScope.zmPopup = $ionicPopup.alert({title: 'frame:'+fid+'/Event:'+e,template:img, cssClass:'popup80'}); + $rootScope.zmPopup = $ionicPopup.alert({ + title: 'frame:' + fid + '/Event:' + e, + template: img, + cssClass: 'popup80' + }); }; - - - - - $scope.$on('modal.removed', function (e,m) { - + + + + + $scope.$on('modal.removed', function (e, m) { + if (m.id != 'analyze') return; //Graph2d.destroy(); @@ -157,267 +157,237 @@ angular.module('zmApp.controllers').controller('TimelineModalCtrl', ['$scope', ' //------------------------------------------------------- // init drawing here //------------------------------------------------------ - - $scope.$on('modal.shown', function (e,m) { - - if (m.id != 'analyze') + + $scope.$on('modal.shown', function (e, m) { + + if (m.id != 'analyze') return; - - $scope.alarm_images=[]; - $scope.graphWidth=$rootScope.devWidth-30; - ZMDataModel.zmLog ("Setting init graph width to " + $scope.graphWidth); - $scope.dataReady = false; - - ZMDataModel.getKeyConfigParams(0) + + $scope.alarm_images = []; + $scope.graphWidth = $rootScope.devWidth - 30; + ZMDataModel.zmLog("Setting init graph width to " + $scope.graphWidth); + $scope.dataReady = false; + + ZMDataModel.getKeyConfigParams(0) .then(function (data) { //console.log ("***GETKEY: " + JSON.stringify(data)); eventImageDigits = parseInt(data); ZMDataModel.zmLog("Image padding digits reported as " + eventImageDigits); }); - $scope.eventdetails = $translate.instant('kLoading')+"..."; - processEvent(); - //$scope.eventdetails = JSON.stringify($scope.event); - }); - - + $scope.eventdetails = $translate.instant('kLoading') + "..."; + processEvent(); + //$scope.eventdetails = JSON.stringify($scope.event); + }); + + //------------------------------------------------------- // okay, really init drawing here //------------------------------------------------------ - - function processEvent() - { + + function processEvent() { var eid = $scope.event.Event.Id; //eid = 22302; var ld = ZMDataModel.getLogin(); - var apiurl = ld.apiurl + "/events/"+eid+".json"; - ZMDataModel.zmLog ("Getting " + apiurl); - $http.get (apiurl) - .then (function (success) - { + var apiurl = ld.apiurl + "/events/" + eid + ".json"; + ZMDataModel.zmLog("Getting " + apiurl); + $http.get(apiurl) + .then(function (success) { //$scope.eventdetails = JSON.stringify(success); drawGraphTC(success.data); - }, - function (error) - { + }, + function (error) { $scope.errorDetails = $translate.instant('kGraphError'); - ZMDataModel.zmLog ("Error in timeline frames " + JSON.stringify(error)); - }); + ZMDataModel.zmLog("Error in timeline frames " + JSON.stringify(error)); + }); } - - + + //------------------------------------------------------- // I was kidding, this is where it really is drawn // scout's promise //------------------------------------------------------ - - function drawGraphTC(event) - { - - $scope.eid = event.event.Event.Id; - - $scope.alarm_images=[]; - - /*data = { - labels: [], - datasets: [ - { - label: 'Score', - fill:true, - borderJoinStyle: 'miter', - pointBorderColor: "rgba(220,220,220,1)", - pointBackgroundColor: "#e74c3c", - backgroundColor: 'rgba(129, 207, 224, 1.0)', - pointHoverRadius: 5, - pointHoverBackgroundColor: "#40d47e", - pointHoverBorderWidth: 2, - tension: 0.1, - borderColor: 'rgba(129, 207, 224, 1.0)', - hoverBackgroundColor: 'rgba(248, 148, 6,1.0)', - hoverBorderColor: 'rgba(248, 148, 6,1.0)', - data: [], - frames: [] - }, - - ] - };*/ - - - data = { - labels: [], - datasets: [ - { - label: 'Score', - fill:true, - backgroundColor: 'rgba(89, 171, 227, 1.0)', - borderColor: 'rgba(52, 152, 219, 1.0)', - borderCapStyle: 'butt', - borderJoinStyle: 'miter', - pointBorderColor: "#e74c3c", - pointBackgroundColor: "#e74c3c", - - pointHoverRadius: 10, - pointHoverBackgroundColor: "rgba(249, 105, 14,1.0)", - pointHoverBorderWidth: 1, - tension: 0.1, - - data: [], - frames: [] + + function drawGraphTC(event) { + + $scope.eid = event.event.Event.Id; + + $scope.alarm_images = []; + + + data = { + labels: [], + datasets: [ + { + label: 'Score', + fill: true, + backgroundColor: 'rgba(89, 171, 227, 1.0)', + borderColor: 'rgba(52, 152, 219, 1.0)', + borderCapStyle: 'butt', + borderJoinStyle: 'miter', + pointBorderColor: "#e74c3c", + pointBackgroundColor: "#e74c3c", + + pointHoverRadius: 10, + pointHoverBackgroundColor: "rgba(249, 105, 14,1.0)", + pointHoverBorderWidth: 1, + tension: 0.1, + + data: [], + frames: [] }, - + ] - }; - - onlyalarm_data = { - labels: [], - datasets: [ - { - label: 'Score', - backgroundColor: 'rgba(52, 152, 219, 1.0)', - borderColor: 'rgba(52, 152, 219, 1.0)', - hoverBackgroundColor: 'rgba(249, 105, 14,1.0)', - hoverBorderColor: 'rgba(249, 105, 14,1.0)', - data: [], - frames: [] + }; + + onlyalarm_data = { + labels: [], + datasets: [ + { + label: 'Score', + backgroundColor: 'rgba(52, 152, 219, 1.0)', + borderColor: 'rgba(52, 152, 219, 1.0)', + hoverBackgroundColor: 'rgba(249, 105, 14,1.0)', + hoverBorderColor: 'rgba(249, 105, 14,1.0)', + data: [], + frames: [] }, - + ] - }; + }; - // Chart.js Options - options = { - legend:false, - scales: { - yAxes:[{ - ticks: { - // beginAtZero:true, - min:-1, - }, + // Chart.js Options + options = { + legend: false, + scales: { + yAxes: [{ + ticks: { + // beginAtZero:true, + min: -1, + }, }], - xAxes:[{ - display:false + xAxes: [{ + display: false }] - }, + }, - responsive: true, - scaleBeginAtZero : true, - scaleShowGridLines : true, - scaleGridLineColor : "rgba(0,0,0,.05)", - scaleGridLineWidth : 1, - - - hover: - { - mode:'single', - onHover:function(obj) - { - if (obj.length > 0) - tapOrHover(obj[0]._index); - } - }, + responsive: true, + scaleBeginAtZero: true, + scaleShowGridLines: true, + scaleGridLineColor: "rgba(0,0,0,.05)", + scaleGridLineWidth: 1, + + + hover: { + mode: 'single', + onHover: function (obj) { + if (obj.length > 0) + tapOrHover(obj[0]._index); + } + }, + + //String - A legend template + legendTemplate: '<ul class="tc-chart-js-legend"><% for (var i=0; i<datasets.length; i++){%><li><span style="background-color:<%=datasets[i].fillColor%>"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>' + }; - //String - A legend template - legendTemplate : '<ul class="tc-chart-js-legend"><% for (var i=0; i<datasets.length; i++){%><li><span style="background-color:<%=datasets[i].fillColor%>"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>' - }; - $scope.graphWidth = event.event.Frame.length * 10; if ($scope.graphWidth < $rootScope.devWidth) $scope.graphWidth = $rootScope.devWidth; - - // ZMDataModel.zmLog ("Changing graph width to " + $scope.graphWidth); - - for (var i=0; i< event.event.Frame.length; i++) - { - - + + // ZMDataModel.zmLog ("Changing graph width to " + $scope.graphWidth); + + for (var i = 0; i < event.event.Frame.length; i++) { + + data.labels.push(event.event.Frame[i].TimeStamp); //data.labels.push(' '); data.datasets[0].data.push(event.event.Frame[i].Score); - data.datasets[0].frames.push({x:event.event.Frame[i].TimeStamp, - y:event.event.Frame[i].Score, - eid: event.event.Event.Id, - 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", - - }); - - if (event.event.Frame[i].Type=="Alarm") - { - + data.datasets[0].frames.push({ + x: event.event.Frame[i].TimeStamp, + y: event.event.Frame[i].Score, + eid: event.event.Event.Id, + 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", + + }); + + if (event.event.Frame[i].Type == "Alarm") { + onlyalarm_data.labels.push(event.event.Frame[i].TimeStamp); //data.labels.push(' '); onlyalarm_data.datasets[0].data.push(event.event.Frame[i].Score); - onlyalarm_data.datasets[0].frames.push({x:event.event.Frame[i].TimeStamp, - y:event.event.Frame[i].Score, - 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, - - }); + onlyalarm_data.datasets[0].frames.push({ + x: event.event.Frame[i].TimeStamp, + y: event.event.Frame[i].Score, + 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, + + }); } - + } - + $scope.dataReady = true; - - cv = document.getElementById("tcchart"); - ctx = cv.getContext("2d"); - - if (ZMDataModel.getLogin().timelineModalGraphType == $translate.instant('kGraphAll')) - { + + cv = document.getElementById("tcchart"); + ctx = cv.getContext("2d"); + + if (ZMDataModel.getLogin().timelineModalGraphType == $translate.instant('kGraphAll')) { btype = 'line'; current_data = data; - } - else - { + } else { btype = 'bar'; current_data = onlyalarm_data; } - $timeout(function() { - tcGraph = new Chart(ctx,{type:btype, data: current_data, options:options});}); - - cv.onclick = function(e) - { - var b = tcGraph.getElementAtEvent(e); - if (b.length > 0) - { + $timeout(function () { + tcGraph = new Chart(ctx, { + type: btype, + data: current_data, + options: options + }); + }); + + cv.onclick = function (e) { + var b = tcGraph.getElementAtEvent(e); + if (b.length > 0) { tapOrHover(b[0]._index); } }; } - - function tapOrHover(ndx) - { - - $timeout (function() { - - - //console.log ("You tapped " + ndx); - $scope.alarm_images=[]; - $scope.playbackURL = $scope.event.Event.baseURL; - var items = current_data.datasets[0].frames[ndx]; - $scope.alarm_images.push({ - relativePath:items.relativePath, - fid:items.fid, - id: items.id, - fname:items.fname, - score:items.score, - time:moment(items.x).format("MMM D,"+ZMDataModel.getTimeFormatSec()), - eid:items.eid}); + + function tapOrHover(ndx) { + + $timeout(function () { + + + //console.log ("You tapped " + ndx); + $scope.alarm_images = []; + $scope.playbackURL = $scope.event.Event.baseURL; + var items = current_data.datasets[0].frames[ndx]; + $scope.alarm_images.push({ + relativePath: items.relativePath, + fid: items.fid, + id: items.id, + fname: items.fname, + score: items.score, + time: moment(items.x).format("MMM D," + ZMDataModel.getTimeFormatSec()), + eid: items.eid }); - + }); + } - - - + + + //-------------------------------------------------------- // utility function //-------------------------------------------------------- @@ -489,8 +459,6 @@ angular.module('zmApp.controllers').controller('TimelineModalCtrl', ['$scope', ' return number; } - - -}]); +}]);
\ No newline at end of file diff --git a/www/js/WizardCtrl.js b/www/js/WizardCtrl.js index 2d166e74..a06a86c2 100644 --- a/www/js/WizardCtrl.js +++ b/www/js/WizardCtrl.js @@ -50,7 +50,7 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$ d.resolve(true); return d.promise; } else { - console.log("************ERROR"); + //console.log("************ERROR"); $scope.wizard.portalValidText = $translate.instant('kPortalDetectionFailed'); $scope.wizard.portalColor = "#e74c3c"; d.reject(false); @@ -58,7 +58,7 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$ } }) .error(function (error) { - console.log("************ERROR"); + //console.log("************ERROR"); $scope.wizard.portalValidText = $translate.instant('kPortalDetectionFailed'); $scope.wizard.portalColor = "#e74c3c"; d.reject(false); @@ -79,7 +79,7 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$ var d = $q.defer(); $http.get($scope.wizard.apiURL + "/monitors.json") .then(function (success) { - // console.log("getfirst monitor success: " + JSON.stringify(success)); + // console.log("getfirst monitor success: " + JSON.stringify(success)); if (success.data.monitors.length > 0) { var foundMid = -1; for (var i = 0; i < success.data.monitors.length; i++) { @@ -107,7 +107,7 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$ } }, function (error) { - console.log("getfirst monitor error: " + JSON.stringify(error)); + //console.log("getfirst monitor error: " + JSON.stringify(error)); d.reject(false); return d.promise; }); @@ -260,7 +260,7 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$ }, function (error) { $ionicLoading.hide(); - console.log("No cgi-bin found: " + error); + //console.log("No cgi-bin found: " + error); $scope.wizard.streamingValidText = $translate.instant('kPortalCgiBinFailed'); $scope.wizard.streamingColor = "#e74c3c"; d.reject(false); @@ -321,7 +321,7 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$ return d.promise; }, function (error) { - console.log("No APIs found: " + error); + //console.log("No APIs found: " + error); $scope.wizard.apiValidText = $translate.instant('kPortalAPIFailed'); $scope.wizard.apiColor = "#e74c3c"; d.reject(false); @@ -362,11 +362,11 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$ }) .then(function (success) { $rootScope.zmCookie = ""; - console.log("ZMlogout success, cookie removed"); + //console.log("ZMlogout success, cookie removed"); d.resolve(true); return d.promise; }, function (error) { - console.log("ZMlogout success"); + //console.log("ZMlogout success"); d.resolve(true); return d.promise; }); @@ -454,7 +454,7 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$ .then(function (ans) { // login now $ionicLoading.hide(); - ZMDataModel.zmLog("zmWizard: logging in with " + u + " " + zmu ); + ZMDataModel.zmLog("zmWizard: logging in with " + u + " " + zmu); // The logic will be: // Login then do an api detect and cgi-detect together @@ -747,4 +747,4 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$ }); -}]); +}]);
\ No newline at end of file diff --git a/www/js/app.js b/www/js/app.js index 6aacd8c9..80930f50 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -80,7 +80,7 @@ angular.module('zmApp', [ packeryTimer: 500, dbName: 'zmninja', cipherKey: 'sdf#@#%FSXSA_AR' - + }) @@ -117,26 +117,7 @@ angular.module('zmApp', [ }) -.directive('dannyPackery', ['$rootScope', function ($rootScope) { - return { - restrict: 'A', - link: function (scope, element, attrs) { - console.log('Running dannyPackery linking function!'); - if ($rootScope.packery === undefined || $rootScope.packery === null) { - console.log('making packery!'); - $rootScope.packery = new Packery(element[0].parentElement, { - columnWidth: '.item' - }); - $rootScope.packery.bindResize(); - $rootScope.packery.appended(element[0]); - $rootScope.packery.items.splice(1, 1); // hack to fix a bug where the first element was added twice in two different positions - } else { - $rootScope.packery.appended(element[0]); - } - $rootScope.packery.layout(); - } - }; -}]) + // credit https://gist.github.com/Zren/beaafd64f395e23f4604 @@ -221,7 +202,7 @@ angular.module('zmApp', [ terminal: true, link: function (scope, element) { var repeatDirective = ($rootScope.platformOS == 'desktop') ? 'ng-repeat' : 'collection-repeat'; - console.log("*********** REPEAT SCROLL IS " + repeatDirective); + //console.log("*********** REPEAT SCROLL IS " + repeatDirective); element.attr(repeatDirective, element.attr('repeatsmart')); element.removeAttr('repeatsmart'); @@ -488,7 +469,7 @@ angular.module('zmApp', [ } else if ((config.url.indexOf("view=view_video") > -1) || config.url.indexOf(".mp4") > -1) { - console.log(">>> skipping timers for MP4"); + // console.log(">>> skipping timers for MP4"); } else { config.timeout = zm.httpTimeout; } @@ -558,7 +539,7 @@ angular.module('zmApp', [ .then(function (success) { ZMDataModel.setLastUpdateCheck(moment().toISOString()); - // $localstorage.set("lastUpdateCheck", moment().toISOString()); + // $localstorage.set("lastUpdateCheck", moment().toISOString()); //console.log ("FULL STRING " + success.data.tag_name); var res = success.data.tag_name.match("v(.*)"); zmUpdateVersion = res[1]; @@ -567,14 +548,14 @@ angular.module('zmApp', [ zmUpdateVersion = zmUpdateVersion + "D"; } //if (ZMDataModel.getAppVersion() != zmUpdateVersion) { - if (ZMDataModel.versionCompare(ZMDataModel.getAppVersion(),zmUpdateVersion) == -1) { + if (ZMDataModel.versionCompare(ZMDataModel.getAppVersion(), zmUpdateVersion) == -1) { $rootScope.newVersionAvailable = "v" + zmUpdateVersion + " available"; } else { $rootScope.newVersionAvailable = ""; } - ZMDataModel.zmDebug ("current version: " + currentVersion + " & available version " + zmUpdateVersion); - console.log ("Version compare returned: " + ZMDataModel.versionCompare(currentVersion, zmUpdateVersion)); - console.log ("Version compare returned: " + ZMDataModel.versionCompare(zmUpdateVersion, currentVersion)); + ZMDataModel.zmDebug("current version: " + currentVersion + " & available version " + zmUpdateVersion); + //console.log ("Version compare returned: " + ZMDataModel.versionCompare(currentVersion, //zmUpdateVersion)); + // console.log ("Version compare returned: " + ZMDataModel.versionCompare(zmUpdateVersion, currentVersion)); //console.log ("UPDATE " + zmVersion); }); @@ -588,7 +569,7 @@ angular.module('zmApp', [ } var lastDate = ZMDataModel.getLatestBlogPostChecked(); - console.log ("************ BLOG LAST DATE " + lastDate); + //console.log ("************ BLOG LAST DATE " + lastDate); if (!lastDate) { $rootScope.newBlogPost = "(new post)"; @@ -657,10 +638,10 @@ angular.module('zmApp', [ //------------------------------------------------------------------ $rootScope.$on("init-complete", function () { - ZMDataModel.zmLog (">>>>>>>>>>>>>>> All init over, going to portal login"); + ZMDataModel.zmLog(">>>>>>>>>>>>>>> All init over, going to portal login"); $state.go("zm-portal-login"); }); - + //------------------------------------------------------------------ // doLogin() emits this when our auth credentials work //------------------------------------------------------------------ @@ -1004,7 +985,7 @@ angular.module('zmApp', [ //console.log ("******** back called with isOpenLeft: " + $ionicSideMenuDelegate.isOpenLeft()); if (!$ionicSideMenuDelegate.isOpenLeft()) { $ionicSideMenuDelegate.toggleLeft(); - console.log("Status of SIDE MENU IS : " + $ionicSideMenuDelegate.isOpen()); + //console.log("Status of SIDE MENU IS : " + $ionicSideMenuDelegate.isOpen()); } else { navigator.app.exitApp(); } @@ -1039,7 +1020,7 @@ angular.module('zmApp', [ $rootScope.userCancelledAuth = true; window.stop(); - console.log ("inside cancelAuth , calling wizard"); + //console.log ("inside cancelAuth , calling wizard"); $state.go("login", { "wizard": false }); @@ -1053,7 +1034,7 @@ angular.module('zmApp', [ $rootScope.$on('$stateChangeStart', function (event, toState, toParams) { var requireLogin = toState.data.requireLogin; - if (ZMDataModel.isLoggedIn() || toState.data.requireLogin ==false ) { + if (ZMDataModel.isLoggedIn() || toState.data.requireLogin == false) { //console.log("State transition is authorized"); return; @@ -1061,7 +1042,7 @@ angular.module('zmApp', [ ZMDataModel.zmLog("In Auth State trans: Not logged in, requested to go to " + JSON.stringify(toState)); // event.preventDefault(); // - + $state.transitionTo('login'); @@ -1089,17 +1070,17 @@ angular.module('zmApp', [ //--------------------------------------------------------------------- $ionicPlatform.ready(function () { - - - - - + + + + + $rootScope.db = null; - + $rootScope.platformOS = "desktop"; ZMDataModel.zmLog("Device is ready"); - // var ld = ZMDataModel.getLogin(); + // var ld = ZMDataModel.getLogin(); if ($ionicPlatform.is('ios')) $rootScope.platformOS = "ios"; if ($ionicPlatform.is('android')) @@ -1110,141 +1091,128 @@ angular.module('zmApp', [ localforage.config({ name: zm.dbName - + }); - - var order=[]; - - if ($rootScope.platformOS == 'ios') - { - order = - [window.cordovaSQLiteDriver._driver, + + var order = []; + + if ($rootScope.platformOS == 'ios') { + order = [window.cordovaSQLiteDriver._driver, localforage.INDEXEDDB, localforage.WEBSQL, localforage.LOCALSTORAGE]; - } - - else - + } else + { - // don't do SQL for non IOS - seems to hang? - order = [ - + // don't do SQL for non IOS - seems to hang? + order = [ + localforage.INDEXEDDB, localforage.WEBSQL, - localforage.LOCALSTORAGE, + localforage.LOCALSTORAGE, ]; - + } - + localforage.defineDriver(window.cordovaSQLiteDriver).then(function () { return localforage.setDriver( - // Try setting cordovaSQLiteDriver if available, - order - - ); - }).then(function () { + // Try setting cordovaSQLiteDriver if available, + order + + ); + }).then(function () { // this should alert "cordovaSQLiteDriver" when in an emulator or a device ZMDataModel.zmLog("localforage driver for storage:" + localforage.driver()); - + // Now lets import old data if it exists: var defaultServerName = $localstorage.get("defaultServerName"); - + localforage.getItem("defaultServerName") - .then (function (val) - { - console.log (">>>> localforage reported defaultServerName as " + val); - // if neither, we are in first use, mates! - if (!val && !defaultServerName) - { - continueInitialInit(); - /* ZMDataModel.zmDebug ("Neither localstorage or forage - First use, showing warm and fuzzy..."); + .then(function (val) { + // console.log (">>>> localforage reported defaultServerName as " + val); + // if neither, we are in first use, mates! + if (!val && !defaultServerName) { + continueInitialInit(); + /* ZMDataModel.zmDebug ("Neither localstorage or forage - First use, showing warm and fuzzy..."); $ionicHistory.nextViewOptions({ disableAnimate: true, disableBack: true }); $state.go('first-use');*/ - } - - else if (!val && defaultServerName) - { - ZMDataModel.zmLog (">>>>Importing data from localstorage...."); - - - - var dsn = defaultServerName; - var dl = $localstorage.get('defaultLang') || 'en'; - var ifu = ($localstorage.get('isFirstUse')=='0' ? false:true); - var luc = $localstorage.get('lastUpdateCheck'); - var lbpc = $localstorage.get('latestBlogPostChecked'); - var sgl = $localstorage.getObject('serverGroupList'); - - ZMDataModel.zmLog (">>>Localstorage data found as below:"); - ZMDataModel.zmLog ("server name:"+dsn); - ZMDataModel.zmLog ("default lang :"+dl); - ZMDataModel.zmLog ("is first use:"+ifu); - ZMDataModel.zmLog ("last update check:"+luc); - ZMDataModel.zmLog ("latest blog post check:"+lbpc); - ZMDataModel.zmLog ("server group list:"+JSON.stringify(sgl)); - - localforage.setItem('defaultLang', dl) - .then (function() { - - ZMDataModel.zmLog (">>>>migrated defaultLang..."); - ZMDataModel.setFirstUse(ifu); - return localforage.setItem('isFirstUse', ifu); - }) - .then (function() { - ZMDataModel.zmLog (">>>>migrated isFirstUse..."); - return localforage.setItem('lastUpdateCheck', ifu); - }) - .then (function() { - ZMDataModel.zmLog (">>>>migrated lastUpdateCheck..."); - return localforage.setItem('latestBlogPostChecked', lbpc); - }) - .then (function() { - ZMDataModel.zmLog (">>>>migrated latestBlogPostChecked..."); - // lets encrypt serverGroupList - ZMDataModel.zmLog ("server group list is " + JSON.stringify(sgl)); - var ct = CryptoJS.AES.encrypt(JSON.stringify(sgl), zm.cipherKey); - ZMDataModel.zmLog ("encrypted server group list is " + ct); - ct = sgl; - return localforage.setItem('serverGroupList', ct); - }) - .then (function() { - ZMDataModel.zmLog (">>>>migrated serverGroupList..."); - return localforage.setItem('defaultServerName',dsn); - }) - .then (function() { - ZMDataModel.zmLog (">>>>migrated defaultServerName..."); - ZMDataModel.zmLog (">>>>Migrated all values, continuing..."); + } else if (!val && defaultServerName) { + ZMDataModel.zmLog(">>>>Importing data from localstorage...."); + + + + var dsn = defaultServerName; + var dl = $localstorage.get('defaultLang') || 'en'; + var ifu = ($localstorage.get('isFirstUse') == '0' ? false : true); + var luc = $localstorage.get('lastUpdateCheck'); + var lbpc = $localstorage.get('latestBlogPostChecked'); + var sgl = $localstorage.getObject('serverGroupList'); + + ZMDataModel.zmLog(">>>Localstorage data found as below:"); + ZMDataModel.zmLog("server name:" + dsn); + ZMDataModel.zmLog("default lang :" + dl); + ZMDataModel.zmLog("is first use:" + ifu); + ZMDataModel.zmLog("last update check:" + luc); + ZMDataModel.zmLog("latest blog post check:" + lbpc); + ZMDataModel.zmLog("server group list:" + JSON.stringify(sgl)); + + localforage.setItem('defaultLang', dl) + .then(function () { + + ZMDataModel.zmLog(">>>>migrated defaultLang..."); + ZMDataModel.setFirstUse(ifu); + return localforage.setItem('isFirstUse', ifu); + }) + .then(function () { + ZMDataModel.zmLog(">>>>migrated isFirstUse..."); + return localforage.setItem('lastUpdateCheck', ifu); + }) + .then(function () { + ZMDataModel.zmLog(">>>>migrated lastUpdateCheck..."); + return localforage.setItem('latestBlogPostChecked', lbpc); + }) + .then(function () { + ZMDataModel.zmLog(">>>>migrated latestBlogPostChecked..."); + // lets encrypt serverGroupList + ZMDataModel.zmLog("server group list is " + JSON.stringify(sgl)); + var ct = CryptoJS.AES.encrypt(JSON.stringify(sgl), zm.cipherKey); + ZMDataModel.zmLog("encrypted server group list is " + ct); + ct = sgl; + return localforage.setItem('serverGroupList', ct); + }) + .then(function () { + ZMDataModel.zmLog(">>>>migrated serverGroupList..."); + return localforage.setItem('defaultServerName', dsn); + }) + .then(function () { + ZMDataModel.zmLog(">>>>migrated defaultServerName..."); + ZMDataModel.zmLog(">>>>Migrated all values, continuing..."); + //ZMDataModel.migrationComplete(); + continueInitialInit(); + }) + .catch(function (err) { + ZMDataModel.zmLog("Migration error : " + JSON.stringify(err)); + continueInitialInit(); + }); + + } else { + ZMDataModel.zmLog(">>>>No data to import...."); //ZMDataModel.migrationComplete(); continueInitialInit(); - }) - .catch (function(err) - { - ZMDataModel.zmLog ("Migration error : " + JSON.stringify(err)); - continueInitialInit(); - }); - - } - else - { - ZMDataModel.zmLog (">>>>No data to import...."); - //ZMDataModel.migrationComplete(); - continueInitialInit(); - } - - - - }); - + } + + + + }); + }); - - - - function continueInitialInit() - { + + + + function continueInitialInit() { var pixelRatio = window.devicePixelRatio || 1; $rootScope.devWidth = ((window.innerWidth > 0) ? window.innerWidth : screen.width); $rootScope.devHeight = ((window.innerHeight > 0) ? window.innerHeight : screen.height); @@ -1291,63 +1259,56 @@ angular.module('zmApp', [ - if (ZMDataModel.getLogin().disableNative) - { - ZMDataModel.zmLog ("Disabling native transitions..."); + if (ZMDataModel.getLogin().disableNative) { + ZMDataModel.zmLog("Disabling native transitions..."); $ionicNativeTransitions.enable(false); - } - else - { - ZMDataModel.zmLog ("Enabling native transitions..."); + } else { + ZMDataModel.zmLog("Enabling native transitions..."); $ionicNativeTransitions.enable(true); } // At this stage, DataModel.init is not called yet // but I do need to know the language - - ZMDataModel.zmLog ("Retrieving language before init is called..."); + + ZMDataModel.zmLog("Retrieving language before init is called..."); localforage.getItem("defaultLang") - .then (function(val) { + .then(function (val) { - var lang = val; - //console.log (">>>>>>>>>>>>>> LANG IS " + val); + var lang = val; + //console.log (">>>>>>>>>>>>>> LANG IS " + val); - if (lang == undefined || lang == null) { - ZMDataModel.zmLog("No language set, switching to en"); - lang = "en"; + if (lang == undefined || lang == null) { + ZMDataModel.zmLog("No language set, switching to en"); + lang = "en"; - } else { - ZMDataModel.zmLog("Language stored as:" + lang); + } else { + ZMDataModel.zmLog("Language stored as:" + lang); - } + } - ZMDataModel.setDefaultLanguage(lang, false) - .then(function (success) { - ZMDataModel.zmLog(">>>>Language to be used:" + $translate.proposedLanguage()); - moment.locale($translate.proposedLanguage()); - - // Remember this is before data Init - // so I need to do a direct forage fetch - localforage.getItem("isFirstUse") - .then (function(val) - { - console.log ("isFirstUse is " + val); - if (val == null || val == true) - { - ZMDataModel.zmLog ("First time detected"); - $state.go("first-use"); - } - else - { - continueRestOfInit(); - } + ZMDataModel.setDefaultLanguage(lang, false) + .then(function (success) { + ZMDataModel.zmLog(">>>>Language to be used:" + $translate.proposedLanguage()); + moment.locale($translate.proposedLanguage()); - }); + // Remember this is before data Init + // so I need to do a direct forage fetch + localforage.getItem("isFirstUse") + .then(function (val) { + //console.log ("isFirstUse is " + val); + if (val == null || val == true) { + ZMDataModel.zmLog("First time detected"); + $state.go("first-use"); + } else { + continueRestOfInit(); + } + }); - }); - }); + + }); + }); } @@ -1363,16 +1324,15 @@ angular.module('zmApp', [ ZMDataModel.zmLog("Setting up POST LOGIN timer"); zmAutoLogin.start(); setupPauseAndResume(); - - - - + + + + } - - function setupPauseAndResume() - { - ZMDataModel.zmLog ("Setting up pause and resume handler AFTER language is loaded..."); + + function setupPauseAndResume() { + ZMDataModel.zmLog("Setting up pause and resume handler AFTER language is loaded..."); //--------------------------------------------------------------------------- // resume handler //---------------------------------------------------------------------------- @@ -1459,7 +1419,7 @@ angular.module('zmApp', [ - + @@ -1797,7 +1757,7 @@ angular.module('zmApp', [ }); -// We are NOT going to default route. Routing to a view will start on + // We are NOT going to default route. Routing to a view will start on // a broadcast of "init-complete" - + }); //config
\ No newline at end of file diff --git a/www/js/controllers.js b/www/js/controllers.js index 412f9831..5321384b 100644 --- a/www/js/controllers.js +++ b/www/js/controllers.js @@ -4,27 +4,26 @@ -angular.module('zmApp.controllers', ['ionic', 'ionic.utils', 'ngCordova', 'ng-mfb','angularCircularNavigation', 'jett.ionic.content.banner', 'ionic-pullup', 'ngWebsocket' ]) +angular.module('zmApp.controllers', ['ionic', 'ionic.utils', 'ngCordova', 'ng-mfb', 'angularCircularNavigation', 'jett.ionic.content.banner', 'ionic-pullup', 'ngWebsocket']) -.controller('zmApp.BaseController', function($scope, $ionicSideMenuDelegate, $ionicPlatform, $timeout, $rootScope) { - $scope.openMenu = function () { - $ionicSideMenuDelegate.toggleLeft(); - }; +.controller('zmApp.BaseController', function ($scope, $ionicSideMenuDelegate, $ionicPlatform, $timeout, $rootScope) { + $scope.openMenu = function () { + $ionicSideMenuDelegate.toggleLeft(); + }; - $ionicPlatform.registerBackButtonAction(function (event) { - - $ionicSideMenuDelegate.toggleLeft(); - $timeout (function() { + $ionicPlatform.registerBackButtonAction(function (event) { + + $ionicSideMenuDelegate.toggleLeft(); + $timeout(function () { $rootScope.stateofSlide = $ionicSideMenuDelegate.isOpen() + new Date(); - },500); + }, 500); - -}, 100); - // Added for electron build to stop title propagation - $scope.$on('$ionicView.afterEnter', function(ev, data) { - ev.stopPropagation(); - }); + }, 100); -}); + // Added for electron build to stop title propagation + $scope.$on('$ionicView.afterEnter', function (ev, data) { + ev.stopPropagation(); + }); +});
\ No newline at end of file |
