diff options
Diffstat (limited to 'www')
| -rw-r--r-- | www/js/BookmarkCtrl.js | 97 | ||||
| -rw-r--r-- | www/js/DataModel.js | 603 | ||||
| -rw-r--r-- | www/js/DevOptionsCtrl.js | 4 | ||||
| -rw-r--r-- | www/js/EventCtrl.js | 482 | ||||
| -rw-r--r-- | www/js/EventModalCtrl.js | 122 | ||||
| -rw-r--r-- | www/js/EventServer.js | 26 | ||||
| -rw-r--r-- | www/js/EventServerSettingsCtrl.js | 52 | ||||
| -rw-r--r-- | www/js/EventsGraphsCtrl.js | 24 | ||||
| -rw-r--r-- | www/js/FirstUseCtrl.js | 8 | ||||
| -rw-r--r-- | www/js/LogCtrl.js | 10 | ||||
| -rw-r--r-- | www/js/LoginCtrl.js | 298 | ||||
| -rw-r--r-- | www/js/MenuController.js | 314 | ||||
| -rw-r--r-- | www/js/MomentCtrl.js | 26 | ||||
| -rw-r--r-- | www/js/MonitorCtrl.js | 68 | ||||
| -rw-r--r-- | www/js/MonitorModalCtrl.js | 569 | ||||
| -rw-r--r-- | www/js/MontageCtrl.js | 83 | ||||
| -rw-r--r-- | www/js/NewsCtrl.js | 4 | ||||
| -rw-r--r-- | www/js/PortalLoginCtrl.js | 26 | ||||
| -rw-r--r-- | www/js/StateCtrl.js | 12 | ||||
| -rw-r--r-- | www/js/TimelineCtrl.js | 113 | ||||
| -rw-r--r-- | www/js/WizardCtrl.js | 52 | ||||
| -rwxr-xr-x | www/js/app.js | 506 | ||||
| -rw-r--r-- | www/js/ionicUtils.js | 2 |
23 files changed, 1754 insertions, 1747 deletions
diff --git a/www/js/BookmarkCtrl.js b/www/js/BookmarkCtrl.js index 9472f8d3..b84041c7 100644 --- a/www/js/BookmarkCtrl.js +++ b/www/js/BookmarkCtrl.js @@ -27,7 +27,7 @@ angular.module('zmApp.controllers').controller('zmApp.BookmarkCtrl', ['$scope', } }; - + //------------------------------------------------------------------------- // Lets make sure we set screen dim properly as we enter // The problem is we enter other states before we leave previous states @@ -41,54 +41,51 @@ angular.module('zmApp.controllers').controller('zmApp.BookmarkCtrl', ['$scope', $scope.bookmarks = []; - - - $scope.bookmarks.push( - { - text:"Change State", - state:"app.state", - params: { - shortcut: { - fn:"selectCustomState", - fnargs:null, - } - } - }, - { - text:"Stop ZM", - state:"app.state", - params: { - shortcut: { - fn:"controlZM", - fnargs:'stop', - } - }, - }, - { - text:"Start ZM", - state:"app.state", - params: { - shortcut: { - fn:"controlZM", - fnargs:'start', - } - }, - }, - { - text:"Restart ZM", - state:"app.state", - params: { - shortcut: { - fn:"controlZM", - fnargs:'restart', - } - }, - } - ); - - $scope.bookmarks.push({text:""}); - - + + + $scope.bookmarks.push({ + text: "Change State", + state: "app.state", + params: { + shortcut: { + fn: "selectCustomState", + fnargs: null, + } + } + }, { + text: "Stop ZM", + state: "app.state", + params: { + shortcut: { + fn: "controlZM", + fnargs: 'stop', + } + }, + }, { + text: "Start ZM", + state: "app.state", + params: { + shortcut: { + fn: "controlZM", + fnargs: 'start', + } + }, + }, { + text: "Restart ZM", + state: "app.state", + params: { + shortcut: { + fn: "controlZM", + fnargs: 'restart', + } + }, + }); + + $scope.bookmarks.push({ + text: "" + }); + + }); $scope.action = function (item) { @@ -98,7 +95,7 @@ angular.module('zmApp.controllers').controller('zmApp.BookmarkCtrl', ['$scope', disableAnimate: true, expire: 300 }); - console.log ("GOIN WITH "+ JSON.stringify(item.params)); + console.log("GOIN WITH " + JSON.stringify(item.params)); $state.go(item.state, item.params); }; diff --git a/www/js/DataModel.js b/www/js/DataModel.js index 95bce4b4..6dbd5958 100644 --- a/www/js/DataModel.js +++ b/www/js/DataModel.js @@ -28,7 +28,7 @@ angular.module('zmApp.controllers') var monitors = []; var multiservers = []; - + var migrationComplete = false; var tz = ""; @@ -205,9 +205,9 @@ angular.module('zmApp.controllers') * @returns */ function setCordovaHttpOptions() { - + if (loginData.isUseBasicAuth) { - debug ("Cordova HTTP: configuring basic auth"); + debug("Cordova HTTP: configuring basic auth"); cordova.plugin.http.useBasicAuth(loginData.basicAuthUser, loginData.basicAuthPassword); } @@ -215,9 +215,9 @@ angular.module('zmApp.controllers') //alert("Enabling insecure SSL"); log(">>>> Disabling strict SSL checking (turn off in Dev Options if you can't connect)"); - cordova.plugin.http.setSSLCertMode('nocheck', function() { - debug('--> SSL is permissive, will allow any certs. Use at your own risk.'); - }, function() { + cordova.plugin.http.setSSLCertMode('nocheck', function () { + debug('--> SSL is permissive, will allow any certs. Use at your own risk.'); + }, function () { console.log('-->Error setting SSL permissive'); }); @@ -321,30 +321,30 @@ angular.module('zmApp.controllers') var myurl = apiurl + '/configs/viewByName/ZM_MIN_STREAMING_PORT.json'; $http.get(myurl) .then(function (data) { - data = data.data; - //console.log ("GOT " + JSON.stringify(data)); + data = data.data; + //console.log ("GOT " + JSON.stringify(data)); - if (data.config && data.config.Value) { - configParams.ZM_MIN_STREAMING_PORT = data.config.Value; - setCurrentServerMultiPortSupported(true); - log("Got min streaming port value of: " + configParams.ZM_MIN_STREAMING_PORT); - } else { - setCurrentServerMultiPortSupported(false); - log("ZM_MIN_STREAMING_PORT not configure, disabling"); - configParams.ZM_MIN_STREAMING_PORT = 0; - } + if (data.config && data.config.Value) { + configParams.ZM_MIN_STREAMING_PORT = data.config.Value; + setCurrentServerMultiPortSupported(true); + log("Got min streaming port value of: " + configParams.ZM_MIN_STREAMING_PORT); + } else { + setCurrentServerMultiPortSupported(false); + log("ZM_MIN_STREAMING_PORT not configure, disabling"); + configParams.ZM_MIN_STREAMING_PORT = 0; + } - d.resolve(configParams.ZM_MIN_STREAMING_PORT); - return (d.promise); - }, - function (err) { - configParams.ZM_MIN_STREAMING_PORT = 0; - log("ZM_MIN_STREAMING_PORT not supported"); - setCurrentServerMultiPortSupported(false); - d.resolve(configParams.ZM_MIN_STREAMING_PORT); - return (d.promise); - }); + d.resolve(configParams.ZM_MIN_STREAMING_PORT); + return (d.promise); + }, + function (err) { + configParams.ZM_MIN_STREAMING_PORT = 0; + log("ZM_MIN_STREAMING_PORT not supported"); + setCurrentServerMultiPortSupported(false); + d.resolve(configParams.ZM_MIN_STREAMING_PORT); + return (d.promise); + }); } else { log("sending Cached ZM_MIN_STREAMING_PORT " + configParams.ZM_MIN_STREAMING_PORT); @@ -707,8 +707,8 @@ angular.module('zmApp.controllers') if ($rootScope.platformOS == 'desktop') $state.go(state, p1, p2); else - $state.go(state, p1, p2); - // $ionicNativeTransitions.stateGo(state, p1, p2); + $state.go(state, p1, p2); + // $ionicNativeTransitions.stateGo(state, p1, p2); }, // used when an empty server profile is created @@ -843,10 +843,10 @@ angular.module('zmApp.controllers') return d.promise; } - /* window.cordova.plugin.cloudsettings.enableDebug(function(){ - console.log("Debug mode enabled"); - });*/ - + /* window.cordova.plugin.cloudsettings.enableDebug(function(){ + console.log("Debug mode enabled"); + });*/ + log("CloudSync: Syncing with cloud if enabled..."); var sgl = ""; @@ -869,19 +869,18 @@ angular.module('zmApp.controllers') log("user profile encrypted, decoding..."); var bytes = CryptoJS.AES.decrypt(sgl.toString(), zm.cipherKey); decodedSgl = JSON.parse(bytes.toString(CryptoJS.enc.Utf8)); - - } - else { + + } else { decodedSgl = sgl; } - + var loadedData = decodedSgl[dsn]; - + if (!isEmpty(loadedData)) { - + if (!loadedData.saveToCloud) { - log ("Cloud sync is disabled, exiting..."); + log("Cloud sync is disabled, exiting..."); d.resolve(true); return d.promise; } @@ -898,7 +897,7 @@ angular.module('zmApp.controllers') return d.promise; }, function (err) { - log("error syncing cloud data..."+err); + log("error syncing cloud data..." + err); d.resolve(true); return d.promise; }, true); @@ -909,14 +908,14 @@ angular.module('zmApp.controllers') log("Did not find a valid local configuration, trying cloud..."); window.cordova.plugin.cloudsettings.exists(function (exists) { - + if (exists) { - log ("A cloud configuration has been found"); + log("A cloud configuration has been found"); window.cordova.plugin.cloudsettings.load(function (cloudData) { - console.log ("CLOUD DATA FOUND"+JSON.stringify(cloudData)); - debug ("Cloud data retrieved is:"+JSON.stringify(cloudData)); + console.log("CLOUD DATA FOUND" + JSON.stringify(cloudData)); + debug("Cloud data retrieved is:" + JSON.stringify(cloudData)); if (cloudData && cloudData.defaultServerName && cloudData.serverGroupList) { - log("retrieved a valid cloud config with a defaultServerName of:"+cloudData.defaultServerName); + log("retrieved a valid cloud config with a defaultServerName of:" + cloudData.defaultServerName); log("replacing local DB with cloud..."); localforage.setItem('isFirstUse', false) .then(function () { @@ -1216,7 +1215,7 @@ angular.module('zmApp.controllers') } - + if (typeof loginData.vibrateOnPush == 'undefined') { debug("vibrate on push not found, setting to true"); @@ -1352,7 +1351,7 @@ angular.module('zmApp.controllers') } - + if (typeof loginData.enableThumbs == 'undefined') { @@ -1430,7 +1429,7 @@ angular.module('zmApp.controllers') } - + if (typeof loginData.montageReviewCollapse == 'undefined') { @@ -1448,7 +1447,7 @@ angular.module('zmApp.controllers') log("defaultServer configuration NOT found. Keeping login at defaults"); } - + // from local forage if (window.cordova) setCordovaHttpOptions(); @@ -1714,17 +1713,17 @@ angular.module('zmApp.controllers') // returns API version or none //------------------------------------------------------- getAPIversion: function () { - + var d = $q.defer(); var apiurl = loginData.apiurl + '/host/getVersion.json'; - debug("getAPIversion called with "+apiurl); + debug("getAPIversion called with " + apiurl); $http.get(apiurl) .then(function (success) { if (success.data.version) { // console.log ("API VERSION RETURNED: " + JSON.stringify(success)); $rootScope.apiValid = true; setCurrentServerVersion(success.data.version); - debug("getAPI version succeded with "+success.data.version); + debug("getAPI version succeded with " + success.data.version); d.resolve(success.data.version); } else { debug("Setting APIValid to false as API version was not retrieved"); @@ -1840,7 +1839,7 @@ angular.module('zmApp.controllers') d.resolve(configParams.ZM_EVENT_IMAGE_DIGITS); return (d.promise); - },function (err) { + }, function (err) { log("Error retrieving ZM_EVENT_IMAGE_DIGITS" + JSON.stringify(err), "error"); log("Taking a guess, setting ZM_EVENT_IMAGE_DIGITS to 5"); // FIXME: take a plunge and keep it at 5? @@ -1872,17 +1871,17 @@ angular.module('zmApp.controllers') $http.get(myurl) .then(function (data) { - data = data.data; - //console.log (">>>> GOT: "+JSON.stringify(data)); - configParams.ZM_PATH_ZMS = data.config.Value; - d.resolve(configParams.ZM_PATH_ZMS); - return (d.promise); - }, - function (error) { - log("Can't retrieving ZM_PATH_ZMS: " + JSON.stringify(error)); - d.resolve(""); - return (d.promise); - }); + data = data.data; + //console.log (">>>> GOT: "+JSON.stringify(data)); + configParams.ZM_PATH_ZMS = data.config.Value; + d.resolve(configParams.ZM_PATH_ZMS); + return (d.promise); + }, + function (error) { + log("Can't retrieving ZM_PATH_ZMS: " + JSON.stringify(error)); + d.resolve(""); + return (d.promise); + }); return (d.promise); }, @@ -1922,7 +1921,7 @@ angular.module('zmApp.controllers') req = req + "&auth=" + myauthtoken; // req = req + "&command=17"; - debug("DataModel: Pausing live stream ck:" + ck+" for "+name + " url:"+url); + debug("DataModel: Pausing live stream ck:" + ck + " for " + name + " url:" + url); return $http.get(req + "&command=1") .then( function (s) { @@ -1946,7 +1945,7 @@ angular.module('zmApp.controllers') req = req + "&auth=" + myauthtoken; // req = req + "&command=17"; - debug("DataModel: Resuming live stream ck:" + ck+ " for "+name); + debug("DataModel: Resuming live stream ck:" + ck + " for " + name); return $http.get(req + "&command=2") .then( function (s) { @@ -2066,75 +2065,75 @@ angular.module('zmApp.controllers') debug("Monitor URL to fetch is:" + myurl); $http.get(myurl /*,{timeout:15000}*/ ) .then(function (data) { - // console.log("HTTP success got " + JSON.stringify(data.monitors)); - data = data.data; - monitors = data.monitors; + // console.log("HTTP success got " + JSON.stringify(data.monitors)); + data = data.data; + monitors = data.monitors; - if ($rootScope.authSession == 'undefined') { - log("Now that we have monitors, lets get AuthKey..."); - getAuthKey(monitors[0].Monitor.Id, (Math.floor((Math.random() * 999999) + 1)).toString()); - } - monitors.sort(function (a, b) { - return parseInt(a.Monitor.Sequence) - parseInt(b.Monitor.Sequence); - }); - //console.log("promise resolved inside HTTP success"); - monitorsLoaded = 1; - - reloadMonitorDisplayStatus(); - - debug("Inside getMonitors, will also regen connkeys"); - debug("Now trying to get multi-server data, if present"); - $http.get(apiurl + "/servers.json") - .then(function (data) { - data = data.data; - // We found a server list API, so lets make sure - // we get the hostname as it will be needed for playback - log("multi server list loaded" + JSON.stringify(data)); - multiservers = data.servers; - - var multiserver_scheme = "http://"; - //console.log ("PORTAL URL IS:"+loginData.url); - if (loginData.url && (loginData.url.toLowerCase().indexOf("https://") != -1)) { - debug ("Portal scheme is https, will use https for any multi-server"); - multiserver_scheme = "https://"; - } - debug ("multi-server protocol will be:"+multiserver_scheme); - - for (var i = 0; i < monitors.length; i++) { - - // make them all show for now - monitors[i].Monitor.listDisplay = 'show'; - monitors[i].Monitor.isAlarmed = false; - monitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); - monitors[i].Monitor.rndKey = (Math.floor((Math.random() * 999999) + 1)).toString(); - - var serverFound = false; - for (var j = 0; j < multiservers.length; j++) { - //console.log ("Comparing " + multiservers[j].Server.Id + " AND " + monitors[i].Monitor.ServerId); - if (multiservers[j].Server.Id == monitors[i].Monitor.ServerId) { - //console.log ("Found match"); - serverFound = true; - break; + if ($rootScope.authSession == 'undefined') { + log("Now that we have monitors, lets get AuthKey..."); + getAuthKey(monitors[0].Monitor.Id, (Math.floor((Math.random() * 999999) + 1)).toString()); + } + monitors.sort(function (a, b) { + return parseInt(a.Monitor.Sequence) - parseInt(b.Monitor.Sequence); + }); + //console.log("promise resolved inside HTTP success"); + monitorsLoaded = 1; + + reloadMonitorDisplayStatus(); + + debug("Inside getMonitors, will also regen connkeys"); + debug("Now trying to get multi-server data, if present"); + $http.get(apiurl + "/servers.json") + .then(function (data) { + data = data.data; + // We found a server list API, so lets make sure + // we get the hostname as it will be needed for playback + log("multi server list loaded" + JSON.stringify(data)); + multiservers = data.servers; + + var multiserver_scheme = "http://"; + //console.log ("PORTAL URL IS:"+loginData.url); + if (loginData.url && (loginData.url.toLowerCase().indexOf("https://") != -1)) { + debug("Portal scheme is https, will use https for any multi-server"); + multiserver_scheme = "https://"; } + debug("multi-server protocol will be:" + multiserver_scheme); - } - if (serverFound) { - if (!/^https?:\/\//i.test(multiservers[j].Server.Hostname)) { - multiservers[j].Server.Hostname = multiserver_scheme + multiservers[j].Server.Hostname; - } + for (var i = 0; i < monitors.length; i++) { - debug("Monitor " + monitors[i].Monitor.Id + " has a recording server hostname of " + multiservers[j].Server.Hostname); + // make them all show for now + monitors[i].Monitor.listDisplay = 'show'; + monitors[i].Monitor.isAlarmed = false; + monitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); + monitors[i].Monitor.rndKey = (Math.floor((Math.random() * 999999) + 1)).toString(); + + var serverFound = false; + for (var j = 0; j < multiservers.length; j++) { + //console.log ("Comparing " + multiservers[j].Server.Id + " AND " + monitors[i].Monitor.ServerId); + if (multiservers[j].Server.Id == monitors[i].Monitor.ServerId) { + //console.log ("Found match"); + serverFound = true; + break; + } + + } + if (serverFound) { + if (!/^https?:\/\//i.test(multiservers[j].Server.Hostname)) { + multiservers[j].Server.Hostname = multiserver_scheme + multiservers[j].Server.Hostname; + } + + debug("Monitor " + monitors[i].Monitor.Id + " has a recording server hostname of " + multiservers[j].Server.Hostname); - // Now here is the logic, I need to retrieve serverhostname, - // and slap on the host protocol and path. Meh. + // Now here is the logic, I need to retrieve serverhostname, + // and slap on the host protocol and path. Meh. - var p = URI.parse(loginData.streamingurl); - var s = URI.parse(multiservers[j].Server.Hostname); + var p = URI.parse(loginData.streamingurl); + var s = URI.parse(multiservers[j].Server.Hostname); - /* if (!p.port && !isNaN(p.path)) { + /* if (!p.port && !isNaN(p.path)) { debug ("Portal: port path reversed?"); var tp = p.port; p.port = p.path; @@ -2148,174 +2147,174 @@ angular.module('zmApp.controllers') s.path = tp; } */ - - debug("recording server parsed is " + JSON.stringify(s)); - debug("portal parsed is " + JSON.stringify(p)); - var st = ""; - var baseurl = ""; - var streamingurl = ""; + debug("recording server parsed is " + JSON.stringify(s)); + debug("portal parsed is " + JSON.stringify(p)); + var st = ""; + var baseurl = ""; + var streamingurl = ""; - st += (s.scheme ? s.scheme : p.scheme) + "://"; // server scheme overrides + st += (s.scheme ? s.scheme : p.scheme) + "://"; // server scheme overrides - // if server doesn't have a protocol, what we want is in path - if (!s.host) { - s.host = s.path; - s.path = undefined; - } - st += s.host; + // if server doesn't have a protocol, what we want is in path + if (!s.host) { + s.host = s.path; + s.path = undefined; + } - //console.log ("STEP 1: ST="+st); + st += s.host; - if (zmsPort <= 0 || loginData.disableSimulStreaming) { - if (p.port || s.port) { - st += (s.port ? ":" + s.port : ":" + p.port); - streamingurl = st; - //console.log ("STEP 2 no ZMS: ST="+st); + //console.log ("STEP 1: ST="+st); - } + if (zmsPort <= 0 || loginData.disableSimulStreaming) { + if (p.port || s.port) { + st += (s.port ? ":" + s.port : ":" + p.port); + streamingurl = st; + //console.log ("STEP 2 no ZMS: ST="+st); - } else { - var sport = parseInt(zmsPort) + parseInt(monitors[i].Monitor.Id); - streamingurl = st + ':' + sport; + } - if (p.port || s.port) - st += (s.port ? ":" + s.port : ":" + p.port); - //console.log ("STEP 2: ST="+st); + } else { + var sport = parseInt(zmsPort) + parseInt(monitors[i].Monitor.Id); + streamingurl = st + ':' + sport; - } + if (p.port || s.port) + st += (s.port ? ":" + s.port : ":" + p.port); + //console.log ("STEP 2: ST="+st); + } - baseurl = st; - controlURL = st; - st += (s.path ? s.path : p.path); - streamingurl += (s.path ? s.path : p.path); + baseurl = st; + controlURL = st; - //console.log ("STEP 3: ST="+st); + st += (s.path ? s.path : p.path); + streamingurl += (s.path ? s.path : p.path); + //console.log ("STEP 3: ST="+st); - //console.log ("----------STREAMING URL PARSED AS " + st); - monitors[i].Monitor.streamingURL = st; - monitors[i].Monitor.baseURL = baseurl; - monitors[i].Monitor.controlURL = controlURL; - //console.log ("** Streaming="+st+" **base="+baseurl); - // starting 1.30 we have fid=xxx mode to return images - monitors[i].Monitor.imageMode = (versionCompare($rootScope.apiVersion, "1.30") == -1) ? "path" : "fid"; - // debug("API " + $rootScope.apiVersion + ": Monitor " + monitors[i].Monitor.Id + " will use " + monitors[i].Monitor.imageMode + " for direct image access"); + //console.log ("----------STREAMING URL PARSED AS " + st); - //debug ("Streaming URL for Monitor " + monitors[i].Monitor.Id + " is " + monitors[i].Monitor.streamingURL ); - //debug ("Base URL for Monitor " + monitors[i].Monitor.Id + " is " + monitors[i].Monitor.baseURL ); + monitors[i].Monitor.streamingURL = st; + monitors[i].Monitor.baseURL = baseurl; + monitors[i].Monitor.controlURL = controlURL; + //console.log ("** Streaming="+st+" **base="+baseurl); + // starting 1.30 we have fid=xxx mode to return images + monitors[i].Monitor.imageMode = (versionCompare($rootScope.apiVersion, "1.30") == -1) ? "path" : "fid"; + // debug("API " + $rootScope.apiVersion + ": Monitor " + monitors[i].Monitor.Id + " will use " + monitors[i].Monitor.imageMode + " for direct image access"); - } else { - //monitors[i].Monitor.listDisplay = 'show'; - monitors[i].Monitor.isAlarmed = false; - monitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); - monitors[i].Monitor.rndKey = (Math.floor((Math.random() * 999999) + 1)).toString(); + //debug ("Streaming URL for Monitor " + monitors[i].Monitor.Id + " is " + monitors[i].Monitor.streamingURL ); + //debug ("Base URL for Monitor " + monitors[i].Monitor.Id + " is " + monitors[i].Monitor.baseURL ); - var st2 = loginData.streamingurl; + } else { + //monitors[i].Monitor.listDisplay = 'show'; + monitors[i].Monitor.isAlarmed = false; + monitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); + monitors[i].Monitor.rndKey = (Math.floor((Math.random() * 999999) + 1)).toString(); - if (zmsPort > 0 && !loginData.disableSimulStreaming) { - // we need to insert minport - st2 = ""; - var p2 = URI.parse(loginData.streamingurl); - var p3 = URI.parse(loginData.url); - st2 += p2.scheme + "://"; - if (!p2.host) { - p2.host = p2.path; - p2.path = undefined; - } - st2 += p2.host; - var sport2 = parseInt(zmsPort) + parseInt(monitors[i].Monitor.Id); - st2 = st2 + ':' + sport2; + var st2 = loginData.streamingurl; - controlURL = st2; + if (zmsPort > 0 && !loginData.disableSimulStreaming) { + // we need to insert minport + st2 = ""; + var p2 = URI.parse(loginData.streamingurl); + var p3 = URI.parse(loginData.url); + st2 += p2.scheme + "://"; + if (!p2.host) { + p2.host = p2.path; + p2.path = undefined; + } + st2 += p2.host; + var sport2 = parseInt(zmsPort) + parseInt(monitors[i].Monitor.Id); + st2 = st2 + ':' + sport2; - if (p2.path) st2 += p2.path; - if (p3.path) controlURL += p3.path; - } + controlURL = st2; - monitors[i].Monitor.streamingURL = st2; - monitors[i].Monitor.controlURL = controlURL; - //debug ("Streaming URL for Monitor " + monitors[i].Monitor.Id + " is " + monitors[i].Monitor.streamingURL ); - //console.log ("NO SERVER MATCH CONSTRUCTED STREAMING PATH="+st2); - monitors[i].Monitor.baseURL = loginData.url; - monitors[i].Monitor.imageMode = (versionCompare($rootScope.apiVersion, "1.30") == -1) ? "path" : "fid"; - - // but now check if forced path - if (loginData.forceImageModePath) { - debug("Overriding, setting image mode to true as you have requested force enable"); - monitors[i].Monitor.imageMode = 'path'; - } + if (p2.path) st2 += p2.path; + if (p3.path) controlURL += p3.path; + } - // debug("API " + $rootScope.apiVersion + ": Monitor " + monitors[i].Monitor.Id + " will use " + monitors[i].Monitor.imageMode + " for direct image access"); - } - } - // now get packery hide if applicable - reloadMonitorDisplayStatus(); - d.resolve(monitors); - }, - function (err) { - log("multi server list loading error"); - multiservers = []; - - for (var i = 0; i < monitors.length; i++) { - //monitors[i].Monitor.listDisplay = 'show'; - monitors[i].Monitor.isAlarmed = false; - monitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); - monitors[i].Monitor.rndKey = (Math.floor((Math.random() * 999999) + 1)).toString(); - var st = loginData.streamingurl; - if (zmsPort > 0) { - // we need to insert minport - st = ""; - var p = URI.parse(loginData.streamingurl); - st += p.scheme + "://"; - if (!p.host) { - p.host = p.path; - p.path = undefined; - } - st += p.host; - var sport = parseInt(zmsPort) + parseInt(monitors[i].Monitor.Id); - st = st + ':' + sport; - if (p.path) st += p.path; + monitors[i].Monitor.streamingURL = st2; + monitors[i].Monitor.controlURL = controlURL; + //debug ("Streaming URL for Monitor " + monitors[i].Monitor.Id + " is " + monitors[i].Monitor.streamingURL ); + //console.log ("NO SERVER MATCH CONSTRUCTED STREAMING PATH="+st2); + monitors[i].Monitor.baseURL = loginData.url; + monitors[i].Monitor.imageMode = (versionCompare($rootScope.apiVersion, "1.30") == -1) ? "path" : "fid"; + // but now check if forced path + if (loginData.forceImageModePath) { + debug("Overriding, setting image mode to true as you have requested force enable"); + monitors[i].Monitor.imageMode = 'path'; + } + // debug("API " + $rootScope.apiVersion + ": Monitor " + monitors[i].Monitor.Id + " will use " + monitors[i].Monitor.imageMode + " for direct image access"); + } + } + // now get packery hide if applicable + reloadMonitorDisplayStatus(); + d.resolve(monitors); + }, + function (err) { + log("multi server list loading error"); + multiservers = []; + + for (var i = 0; i < monitors.length; i++) { + //monitors[i].Monitor.listDisplay = 'show'; + monitors[i].Monitor.isAlarmed = false; + monitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); + monitors[i].Monitor.rndKey = (Math.floor((Math.random() * 999999) + 1)).toString(); + var st = loginData.streamingurl; + if (zmsPort > 0) { + // we need to insert minport + st = ""; + var p = URI.parse(loginData.streamingurl); + st += p.scheme + "://"; + if (!p.host) { + p.host = p.path; + p.path = undefined; + } + st += p.host; + var sport = parseInt(zmsPort) + parseInt(monitors[i].Monitor.Id); + st = st + ':' + sport; + if (p.path) st += p.path; - } - monitors[i].Monitor.streamingURL = st; - // console.log ("CONSTRUCTED STREAMING PATH="+st); - monitors[i].Monitor.baseURL = loginData.url; - monitors[i].Monitor.imageMode = (versionCompare($rootScope.apiVersion, "1.30") == -1) ? "path" : "fid"; - //debug("API " + $rootScope.apiVersion + ": Monitor " + monitors[i].Monitor.Id + " will use " + monitors[i].Monitor.imageMode + " for direct image access"); + } - } - d.resolve(monitors); + monitors[i].Monitor.streamingURL = st; + // console.log ("CONSTRUCTED STREAMING PATH="+st); + monitors[i].Monitor.baseURL = loginData.url; - }); + monitors[i].Monitor.imageMode = (versionCompare($rootScope.apiVersion, "1.30") == -1) ? "path" : "fid"; + //debug("API " + $rootScope.apiVersion + ": Monitor " + monitors[i].Monitor.Id + " will use " + monitors[i].Monitor.imageMode + " for direct image access"); - $ionicLoading.hide(); - log("Monitor load was successful, loaded " + monitors.length + " monitors"); + } + d.resolve(monitors); - }, - function (err) { - //console.log("HTTP Error " + err); - log("Monitor load failed " + JSON.stringify(err), "error"); - // To keep it simple for now, I'm translating an error - // to imply no monitors could be loaded. FIXME: conver to proper error - monitors = []; - //console.log("promise resolved inside HTTP fail"); - displayBanner('error', ['error retrieving monitor list', 'please try again']); - d.resolve(monitors); - $ionicLoading.hide(); - monitorsLoaded = 0; - }); + }); + + $ionicLoading.hide(); + log("Monitor load was successful, loaded " + monitors.length + " monitors"); + + }, + function (err) { + //console.log("HTTP Error " + err); + log("Monitor load failed " + JSON.stringify(err), "error"); + // To keep it simple for now, I'm translating an error + // to imply no monitors could be loaded. FIXME: conver to proper error + monitors = []; + //console.log("promise resolved inside HTTP fail"); + displayBanner('error', ['error retrieving monitor list', 'please try again']); + d.resolve(monitors); + $ionicLoading.hide(); + monitorsLoaded = 0; + }); }); return d.promise; @@ -2341,7 +2340,7 @@ angular.module('zmApp.controllers') url: myurl, method: 'GET', transformResponse: undefined, - responseType:'text', + responseType: 'text', }) // $http.get(myurl) .then(function (textsucc) { @@ -2543,25 +2542,25 @@ angular.module('zmApp.controllers') }); //var myurl = (monitorId == 0) ? apiurl + "/events.json?page=1" : apiurl + "/events/index/MonitorId:" + monitorId + ".json?page=1"; - + $http.get(myurl) .then(function (data) { - data = data.data; - $ionicLoading.hide(); - //console.log ("**** EVENTS PAGES I GOT "+JSON.stringify(data)); - //console.log("**** PAGE COUNT IS " + data.pagination.pageCount); - d.resolve(data.pagination); - return d.promise; - }, - function (error) { - $ionicLoading.hide(); - // console.log("*** ERROR GETTING TOTAL PAGES ***"); - log("Error retrieving page count of events " + JSON.stringify(error), "error"); - displayBanner('error', ['error retrieving event page count', 'please try again']); + data = data.data; + $ionicLoading.hide(); + //console.log ("**** EVENTS PAGES I GOT "+JSON.stringify(data)); + //console.log("**** PAGE COUNT IS " + data.pagination.pageCount); + d.resolve(data.pagination); + return d.promise; + }, + function (error) { + $ionicLoading.hide(); + // console.log("*** ERROR GETTING TOTAL PAGES ***"); + log("Error retrieving page count of events " + JSON.stringify(error), "error"); + displayBanner('error', ['error retrieving event page count', 'please try again']); - d.reject(error); - return d.promise; - }); + d.reject(error); + return d.promise; + }); return d.promise; }, @@ -2613,10 +2612,10 @@ angular.module('zmApp.controllers') myurl = myurl + "/AlarmFrames >=:" + (loginData.enableAlarmCount ? loginData.minAlarmCount : 0); - myurl = myurl + ".json?&sort=StartTime&direction=desc&page="+pageId; + myurl = myurl + ".json?&sort=StartTime&direction=desc&page=" + pageId; - - debug ("getEvents:"+myurl); + + debug("getEvents:" + myurl); // Simulated data // myurl = "https://api.myjson.com/bins/4jx44.json"; @@ -2625,31 +2624,31 @@ angular.module('zmApp.controllers') $http.get(myurl /*,{timeout:15000}*/ ) .then(function (data) { - data = data.data; - if (loadingStr != 'none') $ionicLoading.hide(); - //myevents = data.events; - myevents = data; + data = data.data; + if (loadingStr != 'none') $ionicLoading.hide(); + //myevents = data.events; + myevents = data; - - d.resolve(myevents); - return d.promise; - }, - function (err) { - if (loadingStr != 'none') $ionicLoading.hide(); - displayBanner('error', ['error retrieving event list', 'please try again']); - //console.log("HTTP Events error " + err); - log("Error fetching events for page " + pageId + " Err: " + JSON.stringify(err), "error"); - // I need to reject this as I have infinite scrolling - // implemented in EventCtrl.js --> and if it does not know - // it got an error going to the next page, it will get into - // an infinite loop as we are at the bottom of the list always - - d.reject(myevents); - - - return d.promise; - }); + d.resolve(myevents); + return d.promise; + + }, + function (err) { + if (loadingStr != 'none') $ionicLoading.hide(); + displayBanner('error', ['error retrieving event list', 'please try again']); + //console.log("HTTP Events error " + err); + log("Error fetching events for page " + pageId + " Err: " + JSON.stringify(err), "error"); + // I need to reject this as I have infinite scrolling + // implemented in EventCtrl.js --> and if it does not know + // it got an error going to the next page, it will get into + // an infinite loop as we are at the bottom of the list always + + d.reject(myevents); + + + return d.promise; + }); return d.promise; }, @@ -2885,7 +2884,7 @@ angular.module('zmApp.controllers') $http.get(loginData.apiurl + '/host/logout.json', { timeout: 7000, transformResponse: undefined, - // responseType:'text', + // responseType:'text', }) .then(function (s) { debug("Logout returned... "); @@ -2930,7 +2929,7 @@ angular.module('zmApp.controllers') } }) .then(function (succ) { - $ionicLoading.hide(); + $ionicLoading.hide(); d.resolve(true); return d.promise; }, diff --git a/www/js/DevOptionsCtrl.js b/www/js/DevOptionsCtrl.js index 7d50aa4e..dab4570b 100644 --- a/www/js/DevOptionsCtrl.js +++ b/www/js/DevOptionsCtrl.js @@ -103,12 +103,12 @@ angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope' if ($scope.loginData.montageResizeSteps < 1) { $scope.loginData.montageResizeSteps = 1; - } + } if ($scope.loginData.montageResizeSteps > 50) { $scope.loginData.montageResizeSteps = 50; - } + } if ((parseInt($scope.loginData.montageQuality) < zm.safeMontageLimit) || (parseInt($scope.loginData.montageQuality) > 100)) { diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js index 32367682..90b615a2 100644 --- a/www/js/EventCtrl.js +++ b/www/js/EventCtrl.js @@ -169,7 +169,7 @@ angular.module('zmApp.controllers') $scope.id = parseInt($stateParams.id, 10); if (isNaN($scope.id)) $scope.id = 0; - + $scope.showEvent = $stateParams.playEvent || false; $scope.monitors = NVRDataModel.getMonitorsNow(); @@ -237,7 +237,7 @@ angular.module('zmApp.controllers') }); $scope.showSearch = false; - + moreEvents = true; $scope.viewTitle = { title: "" @@ -259,7 +259,7 @@ angular.module('zmApp.controllers') $http.get(apiurl) .then(function (data) {}, - function (err) {}); + function (err) {}); } @@ -378,126 +378,126 @@ angular.module('zmApp.controllers') //NVRDataModel.debug ("GETTING EVENTS USING "+$scope.id+" "+nolangFrom+" "+ nolangTo); - - NVRDataModel.debug("EventCtrl: grabbing events for: id=" + $scope.id + " Date/Time:" + $rootScope.fromString + - "-" + $rootScope.toString); - nolangFrom = ""; - nolangTo = ""; - if ($rootScope.fromString) - nolangFrom = moment($rootScope.fromString).locale('en').format("YYYY-MM-DD HH:mm:ss"); - if ($rootScope.toString) - nolangTo = moment($rootScope.toString).locale('en').format("YYYY-MM-DD HH:mm:ss"); - - NVRDataModel.getEvents($scope.id, currEventsPage, "", nolangFrom, nolangTo) - .then(function (data) { - pageLoaded = true; - //$scope.viewTitle.title = data.pagination.count; + NVRDataModel.debug("EventCtrl: grabbing events for: id=" + $scope.id + " Date/Time:" + $rootScope.fromString + + "-" + $rootScope.toString); + nolangFrom = ""; + nolangTo = ""; + if ($rootScope.fromString) + nolangFrom = moment($rootScope.fromString).locale('en').format("YYYY-MM-DD HH:mm:ss"); + if ($rootScope.toString) + nolangTo = moment($rootScope.toString).locale('en').format("YYYY-MM-DD HH:mm:ss"); + + NVRDataModel.getEvents($scope.id, currEventsPage, "", nolangFrom, nolangTo) + .then(function (data) { - console.log (JSON.stringify(data.pagination)); - if (data.pagination && data.pagination.pageCount) - maxEventsPage = data.pagination.pageCount; - - NVRDataModel.debug ("We have a total of "+maxEventsPage+" and are at page="+currEventsPage); + pageLoaded = true; + //$scope.viewTitle.title = data.pagination.count; - // console.log ("WE GOT EVENTS="+JSON.stringify(data)); - var myevents = data.events; + console.log(JSON.stringify(data.pagination)); + if (data.pagination && data.pagination.pageCount) + maxEventsPage = data.pagination.pageCount; - NVRDataModel.debug("EventCtrl: success, got " + myevents.length + " events"); - var loginData = NVRDataModel.getLogin(); + NVRDataModel.debug("We have a total of " + maxEventsPage + " and are at page=" + currEventsPage); - //console.log ("-------->MON LEN"+$scope.monitors.length); + // console.log ("WE GOT EVENTS="+JSON.stringify(data)); + var myevents = data.events; - for (var i = 0; i < myevents.length; i++) { + NVRDataModel.debug("EventCtrl: success, got " + myevents.length + " events"); + var loginData = NVRDataModel.getLogin(); - 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 && (NVRDataModel.isNotHidden(myevents[i].Event.MonitorId) || showHiddenMonitors)) { - // console.log ("FOUND IT"); + //console.log ("-------->MON LEN"+$scope.monitors.length); - idfound = true; - break; - } - } + 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 && (NVRDataModel.isNotHidden(myevents[i].Event.MonitorId) || showHiddenMonitors)) { + // console.log ("FOUND IT"); + + idfound = true; + break; } + } + } - //console.log ("IDFOUND="+idfound + " AND MON LEN="+$scope.monitors.length); + //console.log ("IDFOUND="+idfound + " AND MON LEN="+$scope.monitors.length); - myevents[i].Event.humanizeTime = humanizeTime(myevents[i].Event.StartTime); - myevents[i].Event.streamingURL = NVRDataModel.getStreamingURL(myevents[i].Event.MonitorId); - myevents[i].Event.baseURL = NVRDataModel.getBaseURL(myevents[i].Event.MonitorId); - myevents[i].Event.imageMode = NVRDataModel.getImageMode(myevents[i].Event.MonitorId); + myevents[i].Event.humanizeTime = humanizeTime(myevents[i].Event.StartTime); + myevents[i].Event.streamingURL = NVRDataModel.getStreamingURL(myevents[i].Event.MonitorId); + myevents[i].Event.baseURL = NVRDataModel.getBaseURL(myevents[i].Event.MonitorId); + myevents[i].Event.imageMode = NVRDataModel.getImageMode(myevents[i].Event.MonitorId); - //console.log ("***** MULTISERVER STREAMING URL FOR EVENTS " + myevents[i].Event.streamingURL); + //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); - myevents[i].Event.MonitorName = NVRDataModel.getMonitorName(myevents[i].Event.MonitorId); - myevents[i].Event.ShowScrub = false; - myevents[i].Event.height = eventsListDetailsHeight; - // now construct base path - myevents[i].Event.BasePath = computeBasePath(myevents[i]); - myevents[i].Event.relativePath = computeRelativePath(myevents[i]); + myevents[i].Event.MonitorName = NVRDataModel.getMonitorName(myevents[i].Event.MonitorId); + myevents[i].Event.ShowScrub = false; + myevents[i].Event.height = eventsListDetailsHeight; + // now construct base path + myevents[i].Event.BasePath = computeBasePath(myevents[i]); + myevents[i].Event.relativePath = computeRelativePath(myevents[i]); - // get thumbW/H + // get thumbW/H - var tempMon = NVRDataModel.getMonitorObject(myevents[i].Event.MonitorId); - if (tempMon != undefined) { + var tempMon = NVRDataModel.getMonitorObject(myevents[i].Event.MonitorId); + if (tempMon != undefined) { - var mw = parseInt(tempMon.Monitor.Width); - var mh = parseInt(tempMon.Monitor.Height); - var mo = parseInt(tempMon.Monitor.Orientation); - myevents[i].Event.Rotation = ''; + var mw = parseInt(tempMon.Monitor.Width); + var mh = parseInt(tempMon.Monitor.Height); + var mo = parseInt(tempMon.Monitor.Orientation); + myevents[i].Event.Rotation = ''; - var th = computeThumbnailSize(mw, mh, mo); - myevents[i].Event.thumbWidth = th.w; - myevents[i].Event.thumbHeight = th.h; - } + var th = computeThumbnailSize(mw, mh, mo); + myevents[i].Event.thumbWidth = th.w; + myevents[i].Event.thumbHeight = th.h; + } - // in multiserver BasePath is login url for frames - // http://login.url/index.php?view=frame&eid=19696772&fid=21 + // in multiserver BasePath is login url for frames + // http://login.url/index.php?view=frame&eid=19696772&fid=21 - // console.log ("COMPARING "+NVRDataModel.getLogin().url+ " TO " +myevents[i].Event.baseURL); - if (NVRDataModel.getLogin().url != myevents[i].Event.baseURL) { - //NVRDataModel.debug ("Multi server, changing base"); - myevents[i].Event.baseURL = NVRDataModel.getLogin().url; + // console.log ("COMPARING "+NVRDataModel.getLogin().url+ " TO " +myevents[i].Event.baseURL); + if (NVRDataModel.getLogin().url != myevents[i].Event.baseURL) { + //NVRDataModel.debug ("Multi server, changing base"); + myevents[i].Event.baseURL = NVRDataModel.getLogin().url; - } + } - if (myevents[i].Event.imageMode == 'path') - //if (1) - myevents[i].Event.videoPath = myevents[i].Event.baseURL + "/events/" + myevents[i].Event.relativePath + myevents[i].Event.DefaultVideo; - else - myevents[i].Event.videoPath = myevents[i].Event.baseURL + "/index.php?view=view_video&eid=" + myevents[i].Event.Id; + if (myevents[i].Event.imageMode == 'path') + //if (1) + myevents[i].Event.videoPath = myevents[i].Event.baseURL + "/events/" + myevents[i].Event.relativePath + myevents[i].Event.DefaultVideo; + else + myevents[i].Event.videoPath = myevents[i].Event.baseURL + "/index.php?view=view_video&eid=" + myevents[i].Event.Id; - // if (idfound) - if (idfound) { + // if (idfound) + if (idfound) { - //NVRDataModel.debug ("PUSHING "+JSON.stringify(myevents[i])); - $scope.events.push(myevents[i]); - //console.log ("SCOPE EVENTS LEN="+$scope.events.length); - } else { - //NVRDataModel.debug ("Skipping Event MID = " + myevents[i].Event.MonitorId); - } + //NVRDataModel.debug ("PUSHING "+JSON.stringify(myevents[i])); + $scope.events.push(myevents[i]); + //console.log ("SCOPE EVENTS LEN="+$scope.events.length); + } else { + //NVRDataModel.debug ("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) { - //console.log ("EVENTS LOADED="+JSON.stringify($scope.events)); - NVRDataModel.debug("EventCtrl:loading one more page just in case we don't have enough to display"); - loadMore(); - } - }); + } //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) { + //console.log ("EVENTS LOADED="+JSON.stringify($scope.events)); + NVRDataModel.debug("EventCtrl:loading one more page just in case we don't have enough to display"); + loadMore(); + } + }); } @@ -547,14 +547,14 @@ angular.module('zmApp.controllers') cordova.plugins.photoLibrary.requestAuthorization( function () { //url = "https://picsum.photos/200/300/?random"; - + var fileTransfer = new FileTransfer(); var urle = encodeURI(url); - - + + fileTransfer.onprogress = function (progressEvent) { if (progressEvent.lengthComputable) { - + $timeout(function () { var perc = Math.floor(progressEvent.loaded / progressEvent.total * 100); $ionicLoading.show({ @@ -563,18 +563,18 @@ angular.module('zmApp.controllers') //duration: zm.httpTimeout }); }); - - + + } }; - + fileTransfer.download(urle, cordova.file.dataDirectory + fname, function (entry) { NVRDataModel.debug("local download complete: " + entry.toURL()); NVRDataModel.debug("Now trying to move it to album"); var pluginName = (fname == "zmNinja.mp4" ? "saveVideo" : "saveImage"); - - + + cordova.plugins.photoLibrary[pluginName](entry.toURL(), album, function (cameraRollAssetId) { SaveSuccess(); @@ -587,27 +587,27 @@ angular.module('zmApp.controllers') NVRDataModel.debug("could not delete temp file: " + JSON.stringify(e)); } ); - - + + }, function (err) { NVRDataModel.debug("Saving error:" + JSON.stringify(err)); SaveError(); - + }); - - - - + + + + }, function (err) { NVRDataModel.log("error downloading:" + JSON.stringify(err)); SaveError(); }, !loginData.enableStrictSSL, {}); - - - - + + + + // User gave us permission to his library, retry reading it! }, function (err) { @@ -615,30 +615,30 @@ angular.module('zmApp.controllers') NVRDataModel.debug("Permission not granted"); SaveError(); }, // if options not provided, defaults to {read: true}. - + { read: true, write: true } ); - + } else { //desktop - + $ionicLoading.hide(); - - $rootScope.zmPopup = SecuredPopups.show('alert', { + + $rootScope.zmPopup = SecuredPopups.show('alert', { title: $translate.instant('kNote'), - template: $translate.instant('kDownloadVideoImage')+"<br/><br/><center><a href='" + url + "' class='button button-assertive icon ion-android-download' download>"+" "+$translate.instant('kDownload')+"</a></center>", + template: $translate.instant('kDownloadVideoImage') + "<br/><br/><center><a href='" + url + "' class='button button-assertive icon ion-android-download' download>" + " " + $translate.instant('kDownload') + "</a></center>", okText: $translate.instant('kDismiss'), - okType:'button-stable' + okType: 'button-stable' }); - - - + + + } - + } @@ -1720,42 +1720,42 @@ angular.module('zmApp.controllers') return $http.delete(apiDelete) .then(function (data) { - data = data.data; - $ionicLoading.hide(); - NVRDataModel.debug("delete output: " + JSON.stringify(data)); + data = data.data; + $ionicLoading.hide(); + NVRDataModel.debug("delete output: " + JSON.stringify(data)); - if (data.message == 'Error') { - $ionicLoading.show({ - template: "{{'kError' | translate}}...", - noBackdrop: true, - duration: 1500 - }); + if (data.message == 'Error') { + $ionicLoading.show({ + template: "{{'kError' | translate}}...", + noBackdrop: true, + duration: 1500 + }); - } else { + } else { - $ionicLoading.hide(); - $ionicLoading.show({ - template: "{{'kSuccess' | translate}}...", - noBackdrop: true, - duration: 1000 - }); - if (itemid >= 0) $scope.events.splice(itemid, 1); + $ionicLoading.hide(); + $ionicLoading.show({ + template: "{{'kSuccess' | translate}}...", + noBackdrop: true, + duration: 1000 + }); + if (itemid >= 0) $scope.events.splice(itemid, 1); - } + } - // NVRDataModel.displayBanner('info', [$translate.instant('kDeleteEventSuccess')], 2000, 2000); + // NVRDataModel.displayBanner('info', [$translate.instant('kDeleteEventSuccess')], 2000, 2000); - //doRefresh(); + //doRefresh(); - }, - function (data) { - $ionicLoading.hide(); - NVRDataModel.debug("delete error: " + JSON.stringify(data)); - NVRDataModel.displayBanner('error', [$translate.instant('kDeleteEventError1'), $translate.instant('kDeleteEventError2')]); - }); + }, + function (data) { + $ionicLoading.hide(); + NVRDataModel.debug("delete error: " + JSON.stringify(data)); + NVRDataModel.displayBanner('error', [$translate.instant('kDeleteEventError1'), $translate.instant('kDeleteEventError2')]); + }); } //------------------------------------------------ @@ -2105,46 +2105,46 @@ angular.module('zmApp.controllers') NVRDataModel.log("API for event details" + myurl); $http.get(myurl) .then(function (data) { - data = data.data; - $scope.FrameArray = data.event.Frame; - // $scope.slider_options.scale=[]; + data = data.data; + $scope.FrameArray = data.event.Frame; + // $scope.slider_options.scale=[]; - //$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") { + 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) { + //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'); + 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", + aname: padToN(data.event.Frame[i].FrameId, eventImageDigits) + "-analyse.jpg", + time: data.event.Frame[i].TimeStamp + }); + timestamp = data.event.Frame[i].TimeStamp; } - $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", - aname: padToN(data.event.Frame[i].FrameId, eventImageDigits) + "-analyse.jpg", - time: data.event.Frame[i].TimeStamp - }); - timestamp = data.event.Frame[i].TimeStamp; - } - } - oldEvent = event; + } + oldEvent = event; - //console.log (JSON.stringify(data)); - }, - function (err) { - NVRDataModel.log("Error retrieving detailed frame API " + JSON.stringify(err)); - NVRDataModel.displayBanner('error', ['could not retrieve frame details', 'please try again']); - }); + //console.log (JSON.stringify(data)); + }, + function (err) { + NVRDataModel.log("Error retrieving detailed frame API " + JSON.stringify(err)); + NVRDataModel.displayBanner('error', ['could not retrieve frame details', 'please try again']); + }); } // end of groupType == alarms else // groupType == scrub @@ -2218,30 +2218,30 @@ angular.module('zmApp.controllers') NVRDataModel.log("API for event details" + myurl_frames); $http.get(myurl_frames) .then(function (data) { - data = data.data; - $scope.FrameArray = data.event.Frame; - // $scope.slider_options.scale=[]; + data = data.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++) { + 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, + //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, - }); + }); - } + } - //console.log (JSON.stringify(data)); - }, - function (err) { - NVRDataModel.log("Error retrieving detailed frame API " + JSON.stringify(err)); - NVRDataModel.displayBanner('error', [$translate.instant('kErrorFrameBanner'), $translate.instant('kErrorPleaseTryAgain')]); - }); + //console.log (JSON.stringify(data)); + }, + function (err) { + NVRDataModel.log("Error retrieving detailed frame API " + JSON.stringify(err)); + NVRDataModel.displayBanner('error', [$translate.instant('kErrorFrameBanner'), $translate.instant('kErrorPleaseTryAgain')]); + }); } @@ -2280,32 +2280,32 @@ angular.module('zmApp.controllers') NVRDataModel.log("API for event details" + myurl2); $http.get(myurl2) .then(function (data) { - data = data.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(' '); - } + data = data.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 (JSON.stringify(data)); - }, - function (err) { - NVRDataModel.log("Error retrieving detailed frame API " + JSON.stringify(err)); - NVRDataModel.displayBanner('error', [$translate.instant('kErrorFrameBanner'), $translate.instant('kErrorPleaseTryAgain')]); - }); + //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 (JSON.stringify(data)); + }, + function (err) { + NVRDataModel.log("Error retrieving detailed frame API " + JSON.stringify(err)); + NVRDataModel.displayBanner('error', [$translate.instant('kErrorFrameBanner'), $translate.instant('kErrorPleaseTryAgain')]); + }); oldEvent = event; $rootScope.rand = Math.floor(Math.random() * (999999 - 111111 + 1)) + 111111; @@ -2739,12 +2739,12 @@ angular.module('zmApp.controllers') // except greater page limits than reported console.log("***** LOADING MORE INFINITE SCROLL ****"); - + if ((currEventsPage >= maxEventsPage) && (pageLoaded)) { moreEvents = false; - NVRDataModel.debug ("No more - We have a total of "+maxEventsPage+" and are at page="+currEventsPage); + NVRDataModel.debug("No more - We have a total of " + maxEventsPage + " and are at page=" + currEventsPage); - console.log("*** At Page " + currEventsPage + " of "+maxEventsPage+", not proceeding"); + console.log("*** At Page " + currEventsPage + " of " + maxEventsPage + ", not proceeding"); return; } @@ -2781,7 +2781,7 @@ angular.module('zmApp.controllers') var loginData = NVRDataModel.getLogin(); // console.log("Got new page of events with Page=" + eventsPage); var myevents = data.events; - + for (var i = 0; i < myevents.length; i++) { @@ -2864,11 +2864,11 @@ angular.module('zmApp.controllers') }; - + function recomputeThumbSize() { - NVRDataModel.debug ("EventCtrl: recompute thumbnails"); + NVRDataModel.debug("EventCtrl: recompute thumbnails"); - for (var i=0; i < $scope.events.length; i++) { + for (var i = 0; i < $scope.events.length; i++) { var tempMon = NVRDataModel.getMonitorObject($scope.events[i].Event.MonitorId); if (tempMon != undefined) { @@ -2889,9 +2889,9 @@ angular.module('zmApp.controllers') } function computeThumbnailSize(mw, mh, mo) { - - - tw = Math.min(Math.round(0.35 * $rootScope.devWidth),200); + + + tw = Math.min(Math.round(0.35 * $rootScope.devWidth), 200); th = 150; var ratio = mw / mh; @@ -2931,7 +2931,7 @@ angular.module('zmApp.controllers') $scope.constructThumbnail = function (event) { var stream = ""; stream = event.Event.baseURL + - "/index.php?view=image&show=capture&fid=" + + "/index.php?view=image&show=capture&fid=" + (event.Event.MaxScoreFrameId ? event.Event.MaxScoreFrameId : "1&eid=" + event.Event.Id) + "&width=" + event.Event.thumbWidth * 2 + "&height=" + event.Event.thumbHeight * 2; diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js index 0e6d6be7..b992017c 100644 --- a/www/js/EventModalCtrl.js +++ b/www/js/EventModalCtrl.js @@ -403,49 +403,49 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro } }) .then(function (resp) { - //NVRDataModel.debug ("processEvent success:"+JSON.stringify(resp)); + //NVRDataModel.debug ("processEvent success:"+JSON.stringify(resp)); - resp = resp.data; - if (resp.result == "Ok") { + resp = resp.data; + if (resp.result == "Ok") { - if (resp.status) $scope.currentProgress.progress = resp.status.progress; - if (resp.status && resp.status.event) $scope.eventId = resp.status.event; - $scope.d_eventId = $scope.eventId; - if (resp.status) $scope.currentRate = resp.status.rate; - - if ($scope.currentProgress.progress > $scope.currentEventDuration) $scope.currentProgress.progress = $scope.currentEventDuration; - $scope.progressText = "At " + $scope.currentProgress.progress + "s of " + $scope.currentEventDuration + "s"; + if (resp.status) $scope.currentProgress.progress = resp.status.progress; + if (resp.status && resp.status.event) $scope.eventId = resp.status.event; + $scope.d_eventId = $scope.eventId; + if (resp.status) $scope.currentRate = resp.status.rate; - $scope.sliderProgress.progress = $scope.currentProgress.progress; + if ($scope.currentProgress.progress > $scope.currentEventDuration) $scope.currentProgress.progress = $scope.currentEventDuration; + $scope.progressText = "At " + $scope.currentProgress.progress + "s of " + $scope.currentEventDuration + "s"; - // lets not do this and use zms to move forward or back - // as this code conflicts with fast rev etc - //if (Math.floor(resp.status.progress) >=$scope.currentEventDuration) + $scope.sliderProgress.progress = $scope.currentProgress.progress; - //$timeout (checkEvent(), zm.eventPlaybackQuery); - //eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery); + // lets not do this and use zms to move forward or back + // as this code conflicts with fast rev etc + //if (Math.floor(resp.status.progress) >=$scope.currentEventDuration) - } else // resp.result was messed up + //$timeout (checkEvent(), zm.eventPlaybackQuery); + //eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery); - { - NVRDataModel.debug("Hmm I found an error " + JSON.stringify(resp)); - //window.stop(); - // $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); + } else // resp.result was messed up - // console.log (JSON.stringify(resp)); - /*$timeout(function() { - sendCommand('14', $scope.connKey, '&offset=' + $scope.currentProgress.progress); - }, 500); - NVRDataModel.debug("so I'm regenerating Connkey to " + $scope.connKey);*/ + NVRDataModel.debug("Hmm I found an error " + JSON.stringify(resp)); + //window.stop(); + // $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); + + // console.log (JSON.stringify(resp)); + /*$timeout(function() + { + sendCommand('14', $scope.connKey, '&offset=' + $scope.currentProgress.progress); + }, 500); + NVRDataModel.debug("so I'm regenerating Connkey to " + $scope.connKey);*/ - } - }, - function (resp) { - NVRDataModel.debug("processEvent error:" + JSON.stringify(resp)); - //eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery); + } + }, + function (resp) { + NVRDataModel.debug("processEvent error:" + JSON.stringify(resp)); + //eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery); - }); + }); } @@ -1038,12 +1038,12 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro //desktop $ionicLoading.hide(); - - $rootScope.zmPopup = SecuredPopups.show('alert', { + + $rootScope.zmPopup = SecuredPopups.show('alert', { title: $translate.instant('kNote'), - template: $translate.instant('kDownloadVideoImage')+"<br/><br/><center><a href='" + url + "' class='button button-assertive icon ion-android-download' download>"+" "+$translate.instant('kDownload')+"</a></center>", + template: $translate.instant('kDownloadVideoImage') + "<br/><br/><center><a href='" + url + "' class='button button-assertive icon ion-android-download' download>" + " " + $translate.instant('kDownload') + "</a></center>", okText: $translate.instant('kDismiss'), - okType:'button-stable' + okType: 'button-stable' }); @@ -1551,42 +1551,42 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro return $http.delete(apiDelete) .then(function (data) { - data = data.data; - $ionicLoading.hide(); - // NVRDataModel.debug("delete output: " + JSON.stringify(data)); + data = data.data; + $ionicLoading.hide(); + // NVRDataModel.debug("delete output: " + JSON.stringify(data)); - if (data.message == 'Error') { - $ionicLoading.show({ - template: "{{'kError' | translate}}...", - noBackdrop: true, - duration: 1500 - }); + if (data.message == 'Error') { + $ionicLoading.show({ + template: "{{'kError' | translate}}...", + noBackdrop: true, + duration: 1500 + }); - } else { + } else { - $ionicLoading.hide(); - $ionicLoading.show({ - template: "{{'kSuccess' | translate}}...", - noBackdrop: true, - duration: 1000 - }); + $ionicLoading.hide(); + $ionicLoading.show({ + template: "{{'kSuccess' | translate}}...", + noBackdrop: true, + duration: 1000 + }); - } + } - // NVRDataModel.displayBanner('info', [$translate.instant('kDeleteEventSuccess')], 2000, 2000); + // NVRDataModel.displayBanner('info', [$translate.instant('kDeleteEventSuccess')], 2000, 2000); - //doRefresh(); + //doRefresh(); - }, - function (data) { - $ionicLoading.hide(); - NVRDataModel.debug("delete error: " + JSON.stringify(data)); - NVRDataModel.displayBanner('error', [$translate.instant('kDeleteEventError1'), $translate.instant('kDeleteEventError2')]); - }); + }, + function (data) { + $ionicLoading.hide(); + NVRDataModel.debug("delete error: " + JSON.stringify(data)); + NVRDataModel.displayBanner('error', [$translate.instant('kDeleteEventError1'), $translate.instant('kDeleteEventError2')]); + }); } //-------------------------------------------------------- //Navigate to next/prev event in full screen mode diff --git a/www/js/EventServer.js b/www/js/EventServer.js index 32f6cbac..1340b88d 100644 --- a/www/js/EventServer.js +++ b/www/js/EventServer.js @@ -319,24 +319,23 @@ angular.module('zmApp.controllers') NVRDataModel.log("Clearing error/close cbk, disconnecting and deleting Event Server socket..."); - if ($rootScope.platforOS == 'desktop'){ + if ($rootScope.platforOS == 'desktop') { if (typeof ws === 'undefined') { NVRDataModel.log("Event server socket is empty, nothing to disconnect"); return; } - - + + ws.onmessage = null; ws.close(); ws = undefined; - } - else { + } else { if (nativeWebSocketId != -1) //native; - CordovaWebsocketPlugin.wsClose(nativeWebSocketId, 1000, "Connection closed"); - nativeWebSocketId = -1; + CordovaWebsocketPlugin.wsClose(nativeWebSocketId, 1000, "Connection closed"); + nativeWebSocketId = -1; } - + } @@ -371,13 +370,12 @@ angular.module('zmApp.controllers') NVRDataModel.debug("~~~~ sendMessage: Sending->" + jmsg); if ($rootScope.platformOS == 'desktop') { - ws.send(jmsg); - } - else { + ws.send(jmsg); + } else { if (nativeWebSocketId != -1) - CordovaWebsocketPlugin.wsSend(nativeWebSocketId, jmsg); - else - NVRDataModel.debug ("ERROR:native websocket not initialized, can't send "+jmsg); + CordovaWebsocketPlugin.wsSend(nativeWebSocketId, jmsg); + else + NVRDataModel.debug("ERROR:native websocket not initialized, can't send " + jmsg); } diff --git a/www/js/EventServerSettingsCtrl.js b/www/js/EventServerSettingsCtrl.js index c5857369..6b04eefa 100644 --- a/www/js/EventServerSettingsCtrl.js +++ b/www/js/EventServerSettingsCtrl.js @@ -207,36 +207,36 @@ EventServer.disconnect(); EventServer.init() .then(function (data) { - // console.log("Sending control filter"); - NVRDataModel.debug("Sending Control message 'filter' with monlist=" + monstring + " and interval=" + intervalstring); - EventServer.sendMessage("control", { - type: 'filter', - monlist: monstring, - intlist: intervalstring, - token: $rootScope.apnsToken - }, 1); - - if ($rootScope.apnsToken != "") - // if its defined then this is post init work - // so lets transmit state here - - { - // we need to disable the token - NVRDataModel.debug("Sending token state " + pushstate); - EventServer.sendMessage('push', { - type: 'token', - platform: plat, - token: $rootScope.apnsToken, - state: pushstate + // console.log("Sending control filter"); + NVRDataModel.debug("Sending Control message 'filter' with monlist=" + monstring + " and interval=" + intervalstring); + EventServer.sendMessage("control", { + type: 'filter', + monlist: monstring, + intlist: intervalstring, + token: $rootScope.apnsToken }, 1); + if ($rootScope.apnsToken != "") + // if its defined then this is post init work + // so lets transmit state here + + { + // we need to disable the token + NVRDataModel.debug("Sending token state " + pushstate); + EventServer.sendMessage('push', { + type: 'token', + platform: plat, + token: $rootScope.apnsToken, + state: pushstate + }, 1); + + } + + }, + function (err) { + NVRDataModel.debug("Event Server init failed"); } - }, - function (err) { - NVRDataModel.debug("Event Server init failed"); - } - ); } // no event server configured/enabled diff --git a/www/js/EventsGraphsCtrl.js b/www/js/EventsGraphsCtrl.js index cad2cc0b..8174f7e0 100644 --- a/www/js/EventsGraphsCtrl.js +++ b/www/js/EventsGraphsCtrl.js @@ -191,18 +191,18 @@ angular.module('zmApp.controllers').controller('zmApp.EventsGraphsCtrl', ['$ioni NVRDataModel.log("EventGraph: composed url is " + url); $http.get(url /*,{timeout:15000}*/ ) .then(function (data) { - data = data.data; - NVRDataModel.debug("Event count for monitor" + - monitors[j].Monitor.Id + " is " + data.pagination.count); - $scope.chart.data.datasets[0].data[j] = data.pagination.count; - }, - function (data) { - // ideally I should be treating it as an error - // but what I am really doing now is treating it like no events - // works but TBD: make this into a proper error handler - $scope.chart.data.datasets[0].data[j] = 0; - NVRDataModel.log("Error retrieving events for graph " + JSON.stringify(data), "error"); - }); + data = data.data; + NVRDataModel.debug("Event count for monitor" + + monitors[j].Monitor.Id + " is " + data.pagination.count); + $scope.chart.data.datasets[0].data[j] = data.pagination.count; + }, + function (data) { + // ideally I should be treating it as an error + // but what I am really doing now is treating it like no events + // works but TBD: make this into a proper error handler + $scope.chart.data.datasets[0].data[j] = 0; + NVRDataModel.log("Error retrieving events for graph " + JSON.stringify(data), "error"); + }); })(i); // j } //for }); diff --git a/www/js/FirstUseCtrl.js b/www/js/FirstUseCtrl.js index 1ad42e9c..ca8ff14b 100644 --- a/www/js/FirstUseCtrl.js +++ b/www/js/FirstUseCtrl.js @@ -18,11 +18,11 @@ angular.module('zmApp.controllers').controller('zmApp.FirstUseCtrl', ['$scope', // if (window.cordova) { - cordova.plugin.http.setSSLCertMode('nocheck', function() { + cordova.plugin.http.setSSLCertMode('nocheck', function () { NVRDataModel.debug('--> First use -> SSL is permissive, will allow any certs for now. You can change it later.'); - }, function() { - console.log('-->First Use -> Error setting SSL permissive'); - }); + }, function () { + console.log('-->First Use -> Error setting SSL permissive'); + }); } diff --git a/www/js/LogCtrl.js b/www/js/LogCtrl.js index 920cc499..78a02992 100644 --- a/www/js/LogCtrl.js +++ b/www/js/LogCtrl.js @@ -261,12 +261,12 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo //console.log("**VIEW ** Log Ctrl Entered"); - /*n $scope.cloudString = "loading..."; - window.cordova.plugin.cloudsettings.load( - function (succ) {$scope.cloudString = JSON.stringify(succ);}, - function (err) {$scope.cloudString = JSON.stringify(err);} + /*n $scope.cloudString = "loading..."; + window.cordova.plugin.cloudsettings.load( + function (succ) {$scope.cloudString = JSON.stringify(succ);}, + function (err) {$scope.cloudString = JSON.stringify(err);} - );*/ + );*/ $ionicSideMenuDelegate.canDragContent(false); $scope.selectOn = false; diff --git a/www/js/LoginCtrl.js b/www/js/LoginCtrl.js index d2dfe899..ca6b9df9 100644 --- a/www/js/LoginCtrl.js +++ b/www/js/LoginCtrl.js @@ -456,13 +456,13 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r //console.log ("*********** SAVE ITEMS CALLED "); //console.log('Saving login'); - - NVRDataModel.debug ("Inside save Items"); + + NVRDataModel.debug("Inside save Items"); $rootScope.alarmCount = 0; $rootScope.isAlarm = false; - - + + NVRDataModel.setFirstUse(false); NVRDataModel.setCurrentServerVersion(''); NVRDataModel.setCurrentServerMultiPortSupported(false); @@ -583,7 +583,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r if ($rootScope.platformOS != 'desktop') { if ($scope.loginData.isUseBasicAuth) { - NVRDataModel.debug ("Cordova HTTP: configuring basic auth"); + NVRDataModel.debug("Cordova HTTP: configuring basic auth"); cordova.plugin.http.useBasicAuth($scope.loginData.basicAuthUser, $scope.loginData.basicAuthPassword); } @@ -591,9 +591,9 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r //alert("Enabling insecure SSL"); NVRDataModel.log(">>>> Disabling strict SSL checking (turn off in Dev Options if you can't connect)"); - cordova.plugin.http.setSSLCertMode('nocheck', function() { - NVRDataModel.debug('--> SSL is permissive, will allow any certs. Use at your own risk.'); - }, function() { + cordova.plugin.http.setSSLCertMode('nocheck', function () { + NVRDataModel.debug('--> SSL is permissive, will allow any certs. Use at your own risk.'); + }, function () { console.log('-->Error setting SSL permissive'); }); @@ -604,40 +604,38 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r } if ($scope.loginData.saveToCloud) { - NVRDataModel.debug ("writing data to cloud"); - + NVRDataModel.debug("writing data to cloud"); + var serverGroupList = NVRDataModel.getServerGroups(); serverGroupList[$scope.loginData.serverName] = angular.copy($scope.loginData); var ct = CryptoJS.AES.encrypt(JSON.stringify(serverGroupList), zm.cipherKey).toString(); window.cordova.plugin.cloudsettings.save({ - 'serverGroupList': ct, - 'defaultServerName': $scope.loginData.serverName - }, - function () { - NVRDataModel.debug("local data synced with cloud..."); - - - }, - function (err) { - NVRDataModel.debug("error syncing cloud data..."+JSON.stringify(err)); - - }, true); - - } - else { - NVRDataModel.debug ("Clearing cloud settings..."); - window.cordova.plugin.cloudsettings.save({ - }, - function () { - NVRDataModel.debug("cloud data cleared"); - - }, - function (err) { - NVRDataModel.debug("error clearing cloud data: " + err); - - }, true); + 'serverGroupList': ct, + 'defaultServerName': $scope.loginData.serverName + }, + function () { + NVRDataModel.debug("local data synced with cloud..."); + + + }, + function (err) { + NVRDataModel.debug("error syncing cloud data..." + JSON.stringify(err)); + + }, true); + + } else { + NVRDataModel.debug("Clearing cloud settings..."); + window.cordova.plugin.cloudsettings.save({}, + function () { + NVRDataModel.debug("cloud data cleared"); + + }, + function (err) { + NVRDataModel.debug("error clearing cloud data: " + err); + + }, true); } @@ -650,27 +648,27 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r if ($scope.loginData.isUseEventServer) { EventServer.init() - .then (function (succ) { - if ($rootScope.apnsToken && $scope.loginData.disablePush != true) { - NVRDataModel.log("Making sure we get push notifications"); - EventServer.sendMessage('push', { - type: 'token', - platform: $rootScope.platformOS, - token: $rootScope.apnsToken, - state: "enabled" - }, 1); - } - EventServer.sendMessage("control", { - type: 'filter', - monlist: $scope.loginData.eventServerMonitors, - intlist: $scope.loginData.eventServerInterval, - token: $rootScope.apnsToken - }); - }, - function (err) { - NVRDataModel.log ("Event server init failed"); - }); - + .then(function (succ) { + if ($rootScope.apnsToken && $scope.loginData.disablePush != true) { + NVRDataModel.log("Making sure we get push notifications"); + EventServer.sendMessage('push', { + type: 'token', + platform: $rootScope.platformOS, + token: $rootScope.apnsToken, + state: "enabled" + }, 1); + } + EventServer.sendMessage("control", { + type: 'filter', + monlist: $scope.loginData.eventServerMonitors, + intlist: $scope.loginData.eventServerInterval, + token: $rootScope.apnsToken + }); + }, + function (err) { + NVRDataModel.log("Event server init failed"); + }); + } @@ -702,103 +700,103 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r $http.get(apiurl) .then(function (data) { - data = data.data; - NVRDataModel.getTimeZone(true); - var loginStatus = $translate.instant('kExploreEnjoy') + " " + $rootScope.appName + "!"; - EventServer.refresh(); - - // now grab and report PATH_ZMS - NVRDataModel.getPathZms() - .then(function (data) { - var ld = NVRDataModel.getLogin(); - var zm_cgi = data.toLowerCase(); - - var user_cgi = (ld.streamingurl).toLowerCase(); - NVRDataModel.log("ZM relative cgi-path: " + zm_cgi + ", you entered: " + user_cgi); - - $http.get(ld.streamingurl + "/zms") - .then(function (data) { - data = data.data; - NVRDataModel.debug("Urk! cgi-path returned success, but it should not have come here"); - loginStatus = $translate.instant('kLoginStatusNoCgi'); - - NVRDataModel.debug("refreshing API version..."); - NVRDataModel.getAPIversion() - .then(function (data) { - var refresh = NVRDataModel.getMonitors(1); - $rootScope.apiVersion = data; - }, - function (error) { - var refresh = NVRDataModel.getMonitors(1); - $rootScope.apiVersion = "0.0.0"; - NVRDataModel.debug("Error, failed API version, setting to " + $rootScope.apiVersion); - }); - - if (showalert) { - $rootScope.zmPopup = SecuredPopups.show('alert', { - title: $translate.instant('kLoginValidatedTitle'), - template: loginStatus, - okText: $translate.instant('kButtonOk'), - cancelText: $translate.instant('kButtonCancel'), - }).then(function (res) { - - $ionicSideMenuDelegate.toggleLeft(); - NVRDataModel.debug("Force reloading monitors..."); + data = data.data; + NVRDataModel.getTimeZone(true); + var loginStatus = $translate.instant('kExploreEnjoy') + " " + $rootScope.appName + "!"; + EventServer.refresh(); + + // now grab and report PATH_ZMS + NVRDataModel.getPathZms() + .then(function (data) { + var ld = NVRDataModel.getLogin(); + var zm_cgi = data.toLowerCase(); + + var user_cgi = (ld.streamingurl).toLowerCase(); + NVRDataModel.log("ZM relative cgi-path: " + zm_cgi + ", you entered: " + user_cgi); + + $http.get(ld.streamingurl + "/zms") + .then(function (data) { + data = data.data; + NVRDataModel.debug("Urk! cgi-path returned success, but it should not have come here"); + loginStatus = $translate.instant('kLoginStatusNoCgi'); + + NVRDataModel.debug("refreshing API version..."); + NVRDataModel.getAPIversion() + .then(function (data) { + var refresh = NVRDataModel.getMonitors(1); + $rootScope.apiVersion = data; + }, + function (error) { + var refresh = NVRDataModel.getMonitors(1); + $rootScope.apiVersion = "0.0.0"; + NVRDataModel.debug("Error, failed API version, setting to " + $rootScope.apiVersion); + }); + + if (showalert) { + $rootScope.zmPopup = SecuredPopups.show('alert', { + title: $translate.instant('kLoginValidatedTitle'), + template: loginStatus, + okText: $translate.instant('kButtonOk'), + cancelText: $translate.instant('kButtonCancel'), + }).then(function (res) { + + $ionicSideMenuDelegate.toggleLeft(); + NVRDataModel.debug("Force reloading monitors..."); + + }); + } + }, + function (error, status) { + // If its 5xx, then the cgi-bin path is valid + // if its 4xx then the cgi-bin path is not valid + + if (status < 500) { + loginStatus = $translate.instant('kLoginStatusNoCgiAlt'); + } + + if (showalert) { + $rootScope.zmPopup = SecuredPopups.show('alert', { + title: $translate.instant('kLoginValidatedTitle'), + template: loginStatus, + okText: $translate.instant('kButtonOk'), + cancelText: $translate.instant('kButtonCancel'), + }).then(function (res) { + + $ionicSideMenuDelegate.toggleLeft(); + NVRDataModel.debug("Force reloading monitors..."); + + }); + } else // make sure CGI error is always shown + { + NVRDataModel.displayBanner((status < 500) ? 'error' : 'info', [loginStatus]); + } + NVRDataModel.debug("refreshing API version..."); + NVRDataModel.getAPIversion() + .then(function (data) { + var refresh = NVRDataModel.getMonitors(1); + $rootScope.apiVersion = data; + }, + function (error) { + var refresh = NVRDataModel.getMonitors(1); + $rootScope.apiVersion = "0.0.0"; + NVRDataModel.debug("Error, failed API version, setting to " + $rootScope.apiVersion); + }); }); - } - }, - function (error, status) { - // If its 5xx, then the cgi-bin path is valid - // if its 4xx then the cgi-bin path is not valid - - if (status < 500) { - loginStatus = $translate.instant('kLoginStatusNoCgiAlt'); - } - - if (showalert) { - $rootScope.zmPopup = SecuredPopups.show('alert', { - title: $translate.instant('kLoginValidatedTitle'), - template: loginStatus, - okText: $translate.instant('kButtonOk'), - cancelText: $translate.instant('kButtonCancel'), - }).then(function (res) { - - $ionicSideMenuDelegate.toggleLeft(); - NVRDataModel.debug("Force reloading monitors..."); + }); - }); - } else // make sure CGI error is always shown - { - NVRDataModel.displayBanner((status < 500) ? 'error' : 'info', [loginStatus]); - } - NVRDataModel.debug("refreshing API version..."); - NVRDataModel.getAPIversion() - .then(function (data) { - var refresh = NVRDataModel.getMonitors(1); - $rootScope.apiVersion = data; - }, - function (error) { - var refresh = NVRDataModel.getMonitors(1); - $rootScope.apiVersion = "0.0.0"; - NVRDataModel.debug("Error, failed API version, setting to " + $rootScope.apiVersion); - }); - - }); - }); + }, + function (error) { + NVRDataModel.displayBanner('error', [$translate.instant('kBannerAPICheckFailed'), $translate.instant('kBannerPleaseCheck')]); + NVRDataModel.log("API login error " + JSON.stringify(error)); - }, - function (error) { - NVRDataModel.displayBanner('error', [$translate.instant('kBannerAPICheckFailed'), $translate.instant('kBannerPleaseCheck')]); - NVRDataModel.log("API login error " + JSON.stringify(error)); - - $rootScope.zmPopup = SecuredPopups.show('alert', { - title: $translate.instant('kLoginValidAPIFailedTitle'), - template: $translate.instant('kBannerPleaseCheck'), - okText: $translate.instant('kButtonOk'), - cancelText: $translate.instant('kButtonCancel'), + $rootScope.zmPopup = SecuredPopups.show('alert', { + title: $translate.instant('kLoginValidAPIFailedTitle'), + template: $translate.instant('kBannerPleaseCheck'), + okText: $translate.instant('kButtonOk'), + cancelText: $translate.instant('kButtonCancel'), + }); }); - }); }); } @@ -810,7 +808,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r $scope.saveItems = function () { - NVRDataModel.debug ("User tapped save, calling SaveItems"); + NVRDataModel.debug("User tapped save, calling SaveItems"); NVRDataModel.clearZmsMultiPortSupport(); if (!$scope.loginData.serverName) { $rootScope.zmPopup = $ionicPopup.alert({ diff --git a/www/js/MenuController.js b/www/js/MenuController.js index d9d4d114..39b6ce7f 100644 --- a/www/js/MenuController.js +++ b/www/js/MenuController.js @@ -2,7 +2,7 @@ /* jslint browser: true*/ /* global cordova,StatusBar,angular,console */ -angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$ionicSideMenuDelegate', 'zm', '$stateParams', '$ionicHistory', '$state', 'NVRDataModel', '$rootScope', '$ionicPopup', '$translate', '$timeout', '$location','EventServer', 'zmAutoLogin','$http','SecuredPopups',function ($scope, $ionicSideMenuDelegate, zm, $stateParams, $ionicHistory, $state, NVRDataModel, $rootScope, $ionicPopup, $translate, $timeout, $location, EventServer, zmAutoLogin, $http, SecuredPopups) { +angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$ionicSideMenuDelegate', 'zm', '$stateParams', '$ionicHistory', '$state', 'NVRDataModel', '$rootScope', '$ionicPopup', '$translate', '$timeout', '$location', 'EventServer', 'zmAutoLogin', '$http', 'SecuredPopups', function ($scope, $ionicSideMenuDelegate, zm, $stateParams, $ionicHistory, $state, NVRDataModel, $rootScope, $ionicPopup, $translate, $timeout, $location, EventServer, zmAutoLogin, $http, SecuredPopups) { $scope.openMenu = function () { $ionicSideMenuDelegate.toggleLeft(); }; @@ -13,9 +13,9 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io //---------------------------------------------------------------- - $scope.go = function(p) { - - + $scope.go = function (p) { + + $ionicHistory.nextViewOptions({ historyRoot: true, disableAnimate: true, @@ -23,7 +23,7 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io }); $ionicSideMenuDelegate.toggleLeft(); $location.path(p); - }; + }; $scope.navigateView = function (view, args) { @@ -50,20 +50,20 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io $rootScope.alarmCount = 0; $rootScope.isAlarm = false; $rootScope.authSession = ''; - - - - + + + + // First lets kill current stuf - NVRDataModel.debug ("** Resetting existing server"); + NVRDataModel.debug("** Resetting existing server"); var cld = NVRDataModel.getLogin(); if (cld.isUseEventServer) { - NVRDataModel.debug ("Stopping Event server"); + NVRDataModel.debug("Stopping Event server"); EventServer.disconnect(); } - NVRDataModel.debug ("**Switching to new server..."); + NVRDataModel.debug("**Switching to new server..."); NVRDataModel.clearZmsMultiPortSupport(); var zmServers = NVRDataModel.getServerGroups(); @@ -71,7 +71,7 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io NVRDataModel.debug("Retrieved state for this profile:" + JSON.stringify(loginData)); NVRDataModel.setLogin(loginData); - + if (!loginData.isUseBasicAuth) { $rootScope.basicAuthHeader = ''; @@ -87,7 +87,7 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io if (window.cordova) { if (loginData.isUseBasicAuth) { - NVRDataModel.debug ("Cordova HTTP: configuring basic auth"); + NVRDataModel.debug("Cordova HTTP: configuring basic auth"); cordova.plugin.http.useBasicAuth(loginData.basicAuthUser, loginData.basicAuthPassword); } @@ -95,9 +95,9 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io //alert("Enabling insecure SSL"); NVRDataModel.log(">>>> Disabling strict SSL checking (turn off in Dev Options if you can't connect)"); - cordova.plugin.http.setSSLCertMode('nocheck', function() { + cordova.plugin.http.setSSLCertMode('nocheck', function () { NVRDataModel.debug('--> SSL is permissive, will allow any certs. Use at your own risk.'); - }, function() { + }, function () { console.log('-->Error setting SSL permissive'); }); @@ -112,26 +112,26 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io if (loginData.isUseEventServer) { EventServer.init() - .then (function (succ) { - EventServer.sendMessage("control", { - type: 'filter', - monlist: loginData.eventServerMonitors, - intlist: loginData.eventServerInterval, - token: $rootScope.apnsToken - }); - }, - function (err) { - NVRDataModel.debug ("EventServer init failed"); - }); - - + .then(function (succ) { + EventServer.sendMessage("control", { + type: 'filter', + monlist: loginData.eventServerMonitors, + intlist: loginData.eventServerInterval, + token: $rootScope.apnsToken + }); + }, + function (err) { + NVRDataModel.debug("EventServer init failed"); + }); + + } var apiurl = loginData.apiurl + '/host/getVersion.json'; var portalurl = loginData.url + '/index.php'; - 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>") // 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 @@ -147,132 +147,132 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io $http.get(apiurl) .then(function (data) { - data = data.data; - NVRDataModel.getTimeZone(true); - var loginStatus = $translate.instant('kExploreEnjoy') + " " + $rootScope.appName + "!"; - EventServer.refresh(); - - // now grab and report PATH_ZMS - NVRDataModel.getPathZms() - .then(function (data) { - var ld = NVRDataModel.getLogin(); - var zm_cgi = data.toLowerCase(); - - var user_cgi = (ld.streamingurl).toLowerCase(); - NVRDataModel.log("ZM relative cgi-path: " + zm_cgi + ", you entered: " + user_cgi); - - $http.get(ld.streamingurl + "/zms") - .then(function (data) { - data = data.data; - NVRDataModel.debug("Urk! cgi-path returned success, but it should not have come here"); - loginStatus = $translate.instant('kLoginStatusNoCgi'); - - NVRDataModel.debug("refreshing API version..."); - NVRDataModel.getAPIversion() - .then(function (data) { - $rootScope.apiVersion = data; - var refresh = NVRDataModel.getMonitors(1) - .then (function () { - - - $ionicHistory.nextViewOptions({ - disableBack: true - }); + data = data.data; + NVRDataModel.getTimeZone(true); + var loginStatus = $translate.instant('kExploreEnjoy') + " " + $rootScope.appName + "!"; + EventServer.refresh(); + + // now grab and report PATH_ZMS + NVRDataModel.getPathZms() + .then(function (data) { + var ld = NVRDataModel.getLogin(); + var zm_cgi = data.toLowerCase(); + + var user_cgi = (ld.streamingurl).toLowerCase(); + NVRDataModel.log("ZM relative cgi-path: " + zm_cgi + ", you entered: " + user_cgi); + + $http.get(ld.streamingurl + "/zms") + .then(function (data) { + data = data.data; + NVRDataModel.debug("Urk! cgi-path returned success, but it should not have come here"); + loginStatus = $translate.instant('kLoginStatusNoCgi'); + + NVRDataModel.debug("refreshing API version..."); + NVRDataModel.getAPIversion() + .then(function (data) { + $rootScope.apiVersion = data; + var refresh = NVRDataModel.getMonitors(1) + .then(function () { + + + $ionicHistory.nextViewOptions({ + disableBack: true + }); + + console.log("+++ state go after getMonitors force"); + $state.go('app.refresh', { + "view": $state.current.name + }); + return; + }); + + + }, + function (error) { + var refresh = NVRDataModel.getMonitors(1) + .then(function () { + console.log("+++ state go after API version error: " + error); + $rootScope.apiVersion = "0.0.0"; + NVRDataModel.debug("Error, failed API version, setting to " + $rootScope.apiVersion); + + $ionicHistory.nextViewOptions({ + disableBack: true + }); + + + $state.go('app.refresh', { + "view": $state.current.name + }); + return; + + }); + + - console.log ("+++ state go after getMonitors force"); - $state.go('app.refresh', { - "view": $state.current.name - }); - return; - }); - - - }, - function (error) { - var refresh = NVRDataModel.getMonitors(1) - .then (function() { - console.log ("+++ state go after API version error: "+error); - $rootScope.apiVersion = "0.0.0"; - NVRDataModel.debug("Error, failed API version, setting to " + $rootScope.apiVersion); - - $ionicHistory.nextViewOptions({ - disableBack: true - }); - - - $state.go('app.refresh', { - "view": $state.current.name - }); - return; - - }); - - - - }); - - }, - function (error, status) { - // If its 5xx, then the cgi-bin path is valid - // if its 4xx then the cgi-bin path is not valid - - if (status < 500) { - loginStatus = $translate.instant('kLoginStatusNoCgiAlt'); - } - - NVRDataModel.displayBanner((status < 500) ? 'error' : 'info', [loginStatus]); - - NVRDataModel.debug("refreshing API version..."); - NVRDataModel.getAPIversion() - .then(function (data) { - var refresh = NVRDataModel.getMonitors(1) - .then (function () { - $rootScope.apiVersion = data; - $ionicHistory.nextViewOptions({ - disableBack: true - }); - - console.log ("+++ state go after 5xx"); - $state.go('app.refresh', { - "view": $state.current.name - }); - return; - }); - - }, - function (error) { - var refresh = NVRDataModel.getMonitors(1) - .then (function() { - $rootScope.apiVersion = "0.0.0"; - NVRDataModel.debug("Error, failed API version, setting to " + $rootScope.apiVersion); - $ionicHistory.nextViewOptions({ - disableBack: true }); - console.log ("+++ state go after API version force"); - $state.go('app.refresh', { - "view": $state.current.name + + }, + function (error, status) { + // If its 5xx, then the cgi-bin path is valid + // if its 4xx then the cgi-bin path is not valid + + if (status < 500) { + loginStatus = $translate.instant('kLoginStatusNoCgiAlt'); + } + + NVRDataModel.displayBanner((status < 500) ? 'error' : 'info', [loginStatus]); + + NVRDataModel.debug("refreshing API version..."); + NVRDataModel.getAPIversion() + .then(function (data) { + var refresh = NVRDataModel.getMonitors(1) + .then(function () { + $rootScope.apiVersion = data; + $ionicHistory.nextViewOptions({ + disableBack: true + }); + + console.log("+++ state go after 5xx"); + $state.go('app.refresh', { + "view": $state.current.name + }); + return; + }); + + }, + function (error) { + var refresh = NVRDataModel.getMonitors(1) + .then(function () { + $rootScope.apiVersion = "0.0.0"; + NVRDataModel.debug("Error, failed API version, setting to " + $rootScope.apiVersion); + $ionicHistory.nextViewOptions({ + disableBack: true + }); + console.log("+++ state go after API version force"); + $state.go('app.refresh', { + "view": $state.current.name + }); + return; + + }); + }); - return; - }); - - }); + }); + }); - }); - }); + }, + function (error) { + NVRDataModel.displayBanner('error', [$translate.instant('kBannerAPICheckFailed'), $translate.instant('kBannerPleaseCheck')]); + NVRDataModel.log("API login error " + JSON.stringify(error)); - }, - function (error) { - NVRDataModel.displayBanner('error', [$translate.instant('kBannerAPICheckFailed'), $translate.instant('kBannerPleaseCheck')]); - NVRDataModel.log("API login error " + JSON.stringify(error)); - - $rootScope.zmPopup = SecuredPopups.show('alert', { - title: $translate.instant('kLoginValidAPIFailedTitle'), - template: $translate.instant('kBannerPleaseCheck'), - okText: $translate.instant('kButtonOk'), - cancelText: $translate.instant('kButtonCancel'), + $rootScope.zmPopup = SecuredPopups.show('alert', { + title: $translate.instant('kLoginValidAPIFailedTitle'), + template: $translate.instant('kBannerPleaseCheck'), + okText: $translate.instant('kButtonOk'), + cancelText: $translate.instant('kButtonCancel'), + }); }); - }); }); @@ -281,16 +281,18 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io $scope.switchProfiles = function () { $scope.newServer = { - val:"" + val: "" }; $scope.avs = Object.keys(NVRDataModel.getServerGroups()); - $scope.avs = $scope.avs.filter(function() { return true; }); - + $scope.avs = $scope.avs.filter(function () { + return true; + }); + if ($scope.avs.length <= 1) { return; } - + $rootScope.zmPopup = $ionicPopup.show({ scope: $scope, template: '<ion-radio-fix ng-if="item" ng-repeat="item in avs" ng-value="item" ng-model="newServer.val"> {{item}} </ion-radio-fix>', @@ -302,7 +304,7 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io onTap: function (e) { if ($ionicSideMenuDelegate.isOpen()) { $ionicSideMenuDelegate.toggleLeft(); - + } } @@ -313,7 +315,7 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io NVRDataModel.log("Server selected:" + $scope.newServer.val); if ($ionicSideMenuDelegate.isOpen()) { $ionicSideMenuDelegate.toggleLeft(); - + } if (NVRDataModel.getLogin().serverName != $scope.newServer.val) switchToServer($scope.newServer.val); @@ -328,7 +330,7 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io }); - + }; diff --git a/www/js/MomentCtrl.js b/www/js/MomentCtrl.js index 5aad9a4d..6a56158e 100644 --- a/www/js/MomentCtrl.js +++ b/www/js/MomentCtrl.js @@ -150,7 +150,7 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$ } - if ($scope.expand) + if ($scope.expand) _expandAll(moments); else _collapseAll(moments); @@ -323,20 +323,20 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$ var ld = NVRDataModel.getLogin(); ld.montageReviewCollapse = $scope.expand; - console.log (">>>>>>>>> SAVING EXPAND AS:"+$scope.expand); + console.log(">>>>>>>>> SAVING EXPAND AS:" + $scope.expand); NVRDataModel.setLogin(ld); }; function expandAll() { - + _expandAll($scope.moments); } function _expandAll(arr) { - NVRDataModel.debug ("Expanding all images"); + NVRDataModel.debug("Expanding all images"); for (var i = 0; i < arr.length; i++) { arr[i].Event.hide = false; arr[i].Event.icon = 'ion-code-working'; @@ -348,10 +348,10 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$ $timeout(function () { masonry.reloadItems(); jiggleAway(); - + }, 100); } - + } function collapseAll() { @@ -360,8 +360,8 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$ } function _collapseAll(arr) { - - NVRDataModel.debug ("Collapsing all images"); + + NVRDataModel.debug("Collapsing all images"); for (var i = 0; i < monitors.length; i++) { var firstFound = false; var firstIndex = -1; @@ -398,10 +398,10 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$ $timeout(function () { masonry.reloadItems(); jiggleAway(); - + }, 100); } - + } //---------------------------------------------------------------- @@ -845,9 +845,9 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$ $scope.expand = ld.montageReviewCollapse; - console.log (">>>>>>>>> RESTORING EXPAND AS:"+$scope.expand); + console.log(">>>>>>>>> RESTORING EXPAND AS:" + $scope.expand); $scope.isMaxScoreFramePresent = false; - + $scope.loadingStatus = $translate.instant('kLoading'); $scope.gridSize = ld.momentGridSize; momentType = ld.momentArrangeBy; @@ -863,7 +863,7 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$ constructMask(); $scope.isSubMenu = ld.enableMomentSubMenu; - + for (var i = 0; i < monitors.length; i++) { if (excludeMonitors.indexOf(monitors[i].Monitor.Id) != -1) { diff --git a/www/js/MonitorCtrl.js b/www/js/MonitorCtrl.js index 881d6a2c..9edb1e36 100644 --- a/www/js/MonitorCtrl.js +++ b/www/js/MonitorCtrl.js @@ -182,12 +182,12 @@ angular.module('zmApp.controllers') }) .then(function () { - NVRDataModel.debug("MonitorCtrl: Not restarting ZM - Make sure you have the patch installed in MonitorsController.php or this won't work"); - }, - function (data, status, headers, config) { - NVRDataModel.debug("MonitorCtrl: Error changing monitor " + JSON.stringify(data)); - $scope.monfunc.myfailedIds.push(item); - }); + NVRDataModel.debug("MonitorCtrl: Not restarting ZM - Make sure you have the patch installed in MonitorsController.php or this won't work"); + }, + function (data, status, headers, config) { + NVRDataModel.debug("MonitorCtrl: Error changing monitor " + JSON.stringify(data)); + $scope.monfunc.myfailedIds.push(item); + }); $scope.monfunc.mypromises.push(httpPromise); }); @@ -420,34 +420,34 @@ angular.module('zmApp.controllers') //console.log("**** ZMC CHECK " + apiMonCheck); $http.get(apiMonCheck) .then(function (data) { - data = data.data; - NVRDataModel.debug("MonitorCtrl: monitor check state returned: " + JSON.stringify(data)); - if (data.statustext.indexOf("not running") > -1) { - $scope.monitors[j].Monitor.isRunning = "false"; - $scope.monitors[j].Monitor.color = zm.monitorNotRunningColor; - $scope.monitors[j].Monitor.char = "ion-close-circled"; - } else if (data.statustext.indexOf("pending") > -1) { - $scope.monitors[j].Monitor.isRunning = "pending"; - $scope.monitors[j].Monitor.color = zm.monitorPendingColor; - } else if (data.statustext.indexOf("running since") > -1) { - $scope.monitors[j].Monitor.isRunning = "true"; - $scope.monitors[j].Monitor.color = zm.monitorRunningColor; - } else if (data.statustext.indexOf("Unable to connect") > -1) { - $scope.monitors[j].Monitor.isRunning = "false"; - $scope.monitors[j].Monitor.color = zm.monitorNotRunningColor; - $scope.monitors[j].Monitor.char = "ion-close-circled"; - } - - $scope.monitors[j].Monitor.isRunningText = data.statustext; - }, - function (data) { - NVRDataModel.debug("MonitorCtrl: Error->monitor check state returned: " + - JSON.stringify(data)); - NVRDataModel.displayBanner('error', [$translate.instant('kErrorRetrievingState'), $translate.instant('kPleaseTryAgain')]); - $scope.monitors[j].Monitor.isRunning = "error"; - $scope.monitors[j].Monitor.color = zm.monitorErrorColor; - $scope.monitors[j].Monitor.char = "ion-help-circled"; - }); + data = data.data; + NVRDataModel.debug("MonitorCtrl: monitor check state returned: " + JSON.stringify(data)); + if (data.statustext.indexOf("not running") > -1) { + $scope.monitors[j].Monitor.isRunning = "false"; + $scope.monitors[j].Monitor.color = zm.monitorNotRunningColor; + $scope.monitors[j].Monitor.char = "ion-close-circled"; + } else if (data.statustext.indexOf("pending") > -1) { + $scope.monitors[j].Monitor.isRunning = "pending"; + $scope.monitors[j].Monitor.color = zm.monitorPendingColor; + } else if (data.statustext.indexOf("running since") > -1) { + $scope.monitors[j].Monitor.isRunning = "true"; + $scope.monitors[j].Monitor.color = zm.monitorRunningColor; + } else if (data.statustext.indexOf("Unable to connect") > -1) { + $scope.monitors[j].Monitor.isRunning = "false"; + $scope.monitors[j].Monitor.color = zm.monitorNotRunningColor; + $scope.monitors[j].Monitor.char = "ion-close-circled"; + } + + $scope.monitors[j].Monitor.isRunningText = data.statustext; + }, + function (data) { + NVRDataModel.debug("MonitorCtrl: Error->monitor check state returned: " + + JSON.stringify(data)); + NVRDataModel.displayBanner('error', [$translate.instant('kErrorRetrievingState'), $translate.instant('kPleaseTryAgain')]); + $scope.monitors[j].Monitor.isRunning = "error"; + $scope.monitors[j].Monitor.color = zm.monitorErrorColor; + $scope.monitors[j].Monitor.char = "ion-help-circled"; + }); })(i); } diff --git a/www/js/MonitorModalCtrl.js b/www/js/MonitorModalCtrl.js index cc110197..9c074c4b 100644 --- a/www/js/MonitorModalCtrl.js +++ b/www/js/MonitorModalCtrl.js @@ -76,9 +76,9 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ }.bind(this), zm.alarmStatusTime); - - if ($rootScope.platformOS == 'desktop') { + + if ($rootScope.platformOS == 'desktop') { window.addEventListener('keydown', keyboardHandler, true); } @@ -98,67 +98,79 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ TOGGLEPTZ_P: 80, UPLEFT_Q: 81, - UP_W:87, - UPRIGHT_E:69, + UP_W: 87, + UPRIGHT_E: 69, - LEFT_A:65, + LEFT_A: 65, CENTER_S: 83, - RIGHT_D:68, + RIGHT_D: 68, - DOWNLEFT_Z:90, - DOWN_X:88, - DOWNRIGHT_C:67, + DOWNLEFT_Z: 90, + DOWN_X: 88, + DOWNRIGHT_C: 67, ESC: 27 - + }; - $timeout (function () { + $timeout(function () { var keyCode = evt.keyCode; - - console.log (keyCode + " PRESSED"); + + console.log(keyCode + " PRESSED"); if (keyCode == keyCodes.ESC) { $scope.closeModal(); - } - else if (keyCode == keyCodes.LEFT) { + } else if (keyCode == keyCodes.LEFT) { $scope.monStatus = ""; moveToMonitor($scope.monitorId, -1); - } - else if (keyCode == keyCodes.RIGHT) { + } else if (keyCode == keyCodes.RIGHT) { $scope.monStatus = ""; moveToMonitor($scope.monitorId, 1); - } - - else if (keyCode == keyCodes.TOGGLEPTZ_P) { + } else if (keyCode == keyCodes.TOGGLEPTZ_P) { $scope.togglePTZ(); - } - else { // rest of the functions are PTZ + } else { // rest of the functions are PTZ if (!$scope.showPTZ) { - NVRDataModel.debug ("PTZ is not on, or disabled"); + NVRDataModel.debug("PTZ is not on, or disabled"); return; } // coming here means PTZ is on var cmd = ""; switch (keyCode) { - case keyCodes.UPLEFT_Q: cmd = 'UpLeft'; break; - case keyCodes.UP_W:cmd = 'Up'; break; - case keyCodes.UPRIGHT_E:cmd = 'UpRight'; break; - case keyCodes.LEFT_A:cmd = 'Left'; break; - case keyCodes.CENTER_S: cmd = 'presetHome'; break; - case keyCodes.RIGHT_D: cmd = 'Right'; break; - case keyCodes.DOWNLEFT_Z: cmd = 'UpLeft'; break; - case keyCodes.DOWN_X: cmd = 'Down'; break; - case keyCodes.DOWNRIGHT_C: cmd = 'DownRight'; break; + case keyCodes.UPLEFT_Q: + cmd = 'UpLeft'; + break; + case keyCodes.UP_W: + cmd = 'Up'; + break; + case keyCodes.UPRIGHT_E: + cmd = 'UpRight'; + break; + case keyCodes.LEFT_A: + cmd = 'Left'; + break; + case keyCodes.CENTER_S: + cmd = 'presetHome'; + break; + case keyCodes.RIGHT_D: + cmd = 'Right'; + break; + case keyCodes.DOWNLEFT_Z: + cmd = 'UpLeft'; + break; + case keyCodes.DOWN_X: + cmd = 'Down'; + break; + case keyCodes.DOWNRIGHT_C: + cmd = 'DownRight'; + break; } if (cmd) { - NVRDataModel.debug ("Invoking controlPTZ with "+cmd); + NVRDataModel.debug("Invoking controlPTZ with " + cmd); $scope.controlPTZ($scope.monitorId, cmd); - } - else { - NVRDataModel.debug ("ignoring invalid PTZ command"); + } else { + NVRDataModel.debug("ignoring invalid PTZ command"); } } @@ -854,17 +866,17 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ }); req.then(function (resp) { - //console.log("SUCCESS: " + JSON.stringify(resp)); - $ionicLoading.hide(); + //console.log("SUCCESS: " + JSON.stringify(resp)); + $ionicLoading.hide(); + + }, + function (resp) { + $ionicLoading.hide(); + //console.log("ERROR: " + JSON.stringify(resp)); + NVRDataModel.log("Error sending PTZ:" + JSON.stringify(resp), "error"); + }); - }, - function (resp) { - $ionicLoading.hide(); - //console.log("ERROR: " + JSON.stringify(resp)); - NVRDataModel.log("Error sending PTZ:" + JSON.stringify(resp), "error"); - }); - } $scope.getZoomLevel = function () { @@ -897,7 +909,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ function moveToMonitor(m, d) { - + if ($scope.isZoneEdit) { NVRDataModel.log("Not cycling, as you are editing zones"); return; @@ -1074,7 +1086,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ function triggerAlarm(mid, mode) { var apiurl = NVRDataModel.getLogin().apiurl; - var c = mode=='on' ? 'on' : 'off'; + var c = mode == 'on' ? 'on' : 'off'; var alarmurl = apiurl + "/monitors/alarm/id:" + mid + "/command:" + c + ".json"; NVRDataModel.log("Invoking " + alarmurl); @@ -1198,7 +1210,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ if ($rootScope.platformOS != 'desktop') { var album = 'zmNinja'; - NVRDataModel.debug ("Trying to save image to album: "+album); + NVRDataModel.debug("Trying to save image to album: " + album); cordova.plugins.photoLibrary.requestAuthorization( function () { //url = "https://picsum.photos/200/300/?random"; @@ -1207,41 +1219,45 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ var urle = encodeURI(url); var fname = "zmninja.jpg"; - fileTransfer.download(urle, cordova.file.dataDirectory + fname, - function(entry){ + fileTransfer.download(urle, cordova.file.dataDirectory + fname, + function (entry) { NVRDataModel.debug("local download complete: " + entry.toURL()); NVRDataModel.debug("Now trying to move it to album"); - cordova.plugins.photoLibrary.saveImage(entry.toURL(), album, + cordova.plugins.photoLibrary.saveImage(entry.toURL(), album, function (cameraRollAssetId) { - SaveSuccess(); - $cordovaFile.removeFile(cordova.file.dataDirectory, fname) - .then ( - function () { - NVRDataModel.debug ("file removed from data directory"); - }, - function (e) { - NVRDataModel.debug ("could not delete temp file: "+JSON.stringify(e)); - } - ); - - - }, function (err) { - NVRDataModel.debug ("Saving error:" + JSON.stringify(err)); - SaveError(); - - }); - - }, - function(err) { NVRDataModel.debug ("error downloading:"+JSON.stringify(err));SaveError();}, !loginData.enableStrictSSL, {}); + SaveSuccess(); + $cordovaFile.removeFile(cordova.file.dataDirectory, fname) + .then( + function () { + NVRDataModel.debug("file removed from data directory"); + }, + function (e) { + NVRDataModel.debug("could not delete temp file: " + JSON.stringify(e)); + } + ); + + + }, + function (err) { + NVRDataModel.debug("Saving error:" + JSON.stringify(err)); + SaveError(); + + }); + + }, + function (err) { + NVRDataModel.debug("error downloading:" + JSON.stringify(err)); + SaveError(); + }, !loginData.enableStrictSSL, {}); + + - - // User gave us permission to his library, retry reading it! }, function (err) { // User denied the access - NVRDataModel.debug ("Permission not granted"); + NVRDataModel.debug("Permission not granted"); SaveError(); }, // if options not provided, defaults to {read: true}. @@ -1250,21 +1266,19 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ write: true } ); - } - - else { + } else { $ionicLoading.hide(); - + $rootScope.zmPopup = SecuredPopups.show('alert', { - title: $translate.instant('kNote'), - template: $translate.instant('kDownloadVideoImage')+"<br/><br/><center><a href='" + url + "' class='button button-assertive icon ion-android-download' download=\"balls.jpg\">"+" "+$translate.instant('kDownload')+"</a></center>", - okText: $translate.instant('kDismiss'), - okType:'button-stable' - }); - - } - + title: $translate.instant('kNote'), + template: $translate.instant('kDownloadVideoImage') + "<br/><br/><center><a href='" + url + "' class='button button-assertive icon ion-android-download' download=\"balls.jpg\">" + " " + $translate.instant('kDownload') + "</a></center>", + okText: $translate.instant('kDismiss'), + okType: 'button-stable' + }); + + } + } @@ -1355,17 +1369,17 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ $scope.$on('modal.removed', function () { if ($rootScope.platformOS == 'android') { - NVRDataModel.debug ("Deregistering handlers for multi-window"); + NVRDataModel.debug("Deregistering handlers for multi-window"); window.MultiWindowPlugin.deregisterOnStop("monitormodal-pause"); window.MultiWindowPlugin.deregisterOnStart("monitormodal-resume"); - + } - if ($rootScope.platformOS == 'desktop') { - NVRDataModel.debug ("Removing keyboard handler"); + if ($rootScope.platformOS == 'desktop') { + NVRDataModel.debug("Removing keyboard handler"); window.removeEventListener('keydown', keyboardHandler, true); - + } as(); // dregister auth success $scope.isModalActive = false; @@ -1461,42 +1475,42 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ }); req.then(function (resp) { - resp = resp.data; - if (resp.result == "Ok" && ndx != -1) { - var ld = NVRDataModel.getLogin(); - var apiurl = ld.apiurl + "/events/" + resp.status.event + ".json"; - //console.log ("API " + apiurl); - $http.get(apiurl) - .then(function (data) { - data = data.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); + resp = resp.data; + if (resp.result == "Ok" && ndx != -1) { + var ld = NVRDataModel.getLogin(); + var apiurl = ld.apiurl + "/events/" + resp.status.event + ".json"; + //console.log ("API " + apiurl); + $http.get(apiurl) + .then(function (data) { + data = data.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); - } + } - }, - function (data) { - $scope.MontageMonitors[ndx].eventUrlTime = "-"; - }); + }, + function (data) { + $scope.MontageMonitors[ndx].eventUrlTime = "-"; + }); - } + } - }, + }, + + function (resp) { + //console.log("ERROR: " + JSON.stringify(resp)); + NVRDataModel.log("Error sending event command " + JSON.stringify(resp), "error"); + }); - function (resp) { - //console.log("ERROR: " + JSON.stringify(resp)); - NVRDataModel.log("Error sending event command " + JSON.stringify(resp), "error"); - }); - } $scope.toggleListMenu = function () { @@ -1562,198 +1576,198 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ var url = ld.apiurl + "/monitors/" + mid + ".json"; $http.get(url) .then(function (data) { - data = data.data; - $scope.isControllable = data.monitor.Monitor.Controllable; + data = data.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') { + // *** 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 = NVRDataModel.getLogin().apiurl; - var myurl = apiurl + "/controls/" + $scope.controlid + ".json"; - NVRDataModel.debug("configurePTZ : getting controllable data " + myurl); + var apiurl = NVRDataModel.getLogin().apiurl; + var myurl = apiurl + "/controls/" + $scope.controlid + ".json"; + NVRDataModel.debug("configurePTZ : getting controllable data " + myurl); - $http.get(myurl) - .then(function (data) { - data = data.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 // - - - //data.control.Control.HasPresets = '1'; - //data.control.Control.HasHomePreset = '1' - - - $scope.ptzMoveCommand = "move"; // start with as move; - $scope.ptzStopCommand = ""; - - // console.log ("GOT CONTROL "+JSON.stringify(data.control.Control)); - - 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) + .then(function (data) { + data = data.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 // - NVRDataModel.debug("configurePTZ: control data returned " + JSON.stringify(data)); + //data.control.Control.HasPresets = '1'; + //data.control.Control.HasHomePreset = '1' - if (data.control.Control.CanMoveMap == '1') { - //seems moveMap uses Up/Down/Left/Right, - // so no prefix - $scope.ptzMoveCommand = ""; - $scope.ptzStopCommand = "moveStop"; - // console.log ("MoveAbs set"); - } + $scope.ptzMoveCommand = "move"; // start with as move; + $scope.ptzStopCommand = ""; - if (data.control.Control.CanMoveAbs == '1') { + // console.log ("GOT CONTROL "+JSON.stringify(data.control.Control)); - $scope.ptzMoveCommand = "moveAbs"; - $scope.ptzStopCommand = "moveStop"; - // console.log ("MoveAbs set"); - } + if (data.control.Control.CanZoom == '1') { + $scope.canZoom = true; + if (data.control.Control.CanZoomCon == '1') { + $scope.zoomInCommand = "zoomConTele"; + $scope.zoomOutCommand = "zoomConWide"; - if (data.control.Control.CanMoveRel == '1') { + } 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"; + } + } - $scope.ptzMoveCommand = "moveRel"; - $scope.ptzStopCommand = "moveStop"; - } + NVRDataModel.debug("configurePTZ: control data returned " + JSON.stringify(data)); + if (data.control.Control.CanMoveMap == '1') { - // Prefer con over rel if both enabled - // I've tested con + //seems moveMap uses Up/Down/Left/Right, + // so no prefix + $scope.ptzMoveCommand = ""; + $scope.ptzStopCommand = "moveStop"; + // console.log ("MoveAbs set"); + } - if (data.control.Control.CanMoveCon == '1') { + if (data.control.Control.CanMoveAbs == '1') { - $scope.ptzMoveCommand = "moveCon"; - $scope.ptzStopCommand = "moveStop"; - } - //CanMoveMap + $scope.ptzMoveCommand = "moveAbs"; + $scope.ptzStopCommand = "moveStop"; + // console.log ("MoveAbs set"); + } - // presets - NVRDataModel.debug("ConfigurePTZ Preset value is " + data.control.Control.HasPresets); - $scope.ptzPresets = []; + if (data.control.Control.CanMoveRel == '1') { + $scope.ptzMoveCommand = "moveRel"; + $scope.ptzStopCommand = "moveStop"; + } - if (data.control.Control.HasPresets == '1') { - //$scope.presetAndControl = $translate.instant('kPresets'); + // Prefer con over rel if both enabled + // I've tested con - $scope.ptzPresetCount = parseInt(data.control.Control.NumPresets); - //$scope.ptzPresetCount =80; + if (data.control.Control.CanMoveCon == '1') { - NVRDataModel.debug("ConfigurePTZ Number of presets is " + $scope.ptzPresetCount); + $scope.ptzMoveCommand = "moveCon"; + $scope.ptzStopCommand = "moveStop"; + } + //CanMoveMap - for (var p = 0; p < $scope.ptzPresetCount; p++) { - $scope.ptzPresets.push({ - name: (p + 1).toString(), - icon: '', - cmd: "presetGoto" + (p + 1).toString(), - style: 'button-royal' - }); + // presets + NVRDataModel.debug("ConfigurePTZ Preset value is " + data.control.Control.HasPresets); + $scope.ptzPresets = []; - } - if (data.control.Control.HasHomePreset == '1') { - $scope.ptzPresets.unshift({ - name: '', - icon: "ion-ios-home", - cmd: 'presetHome', - style: 'button-royal' - }); - } - /* MAKE SURE THIS IS THE FIRST ICON */ - $scope.ptzPresets.unshift({ - // name: 'W', - icon: "ion-chevron-up", - cmd: 'special-hide-unhide', - style: 'button-royal button-dark ', - }); + if (data.control.Control.HasPresets == '1') { + //$scope.presetAndControl = $translate.instant('kPresets'); + $scope.ptzPresetCount = parseInt(data.control.Control.NumPresets); + //$scope.ptzPresetCount =80; - } - /*else - { - $scope.presetAndControl = $translate.instant('kMore'); - }*/ - // lets add these to the end - // strictly speaking, they aren't really presets, but meh for now + NVRDataModel.debug("ConfigurePTZ Number of presets is " + $scope.ptzPresetCount); - // no need to darken these buttons if presets are not there - var buttonAccent = "button-dark"; - if ($scope.ptzPresets.length == 0) { - buttonAccent = ""; - } + 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.CanWake == '1') { + } - $scope.ptzPresets.push({ - name: 'W', - icon: "ion-eye", - cmd: 'wake', - style: 'button-royal ' + buttonAccent - }); + if (data.control.Control.HasHomePreset == '1') { + $scope.ptzPresets.unshift({ + name: '', + icon: "ion-ios-home", + cmd: 'presetHome', + style: 'button-royal' + }); - } + } - if (data.control.Control.CanSleep == '1') { - $scope.ptzPresets.push({ - name: 'S', - icon: "ion-eye-disabled", - cmd: 'sleep', - style: 'button-royal ' + buttonAccent - }); + /* MAKE SURE THIS IS THE FIRST ICON */ + $scope.ptzPresets.unshift({ + // name: 'W', + icon: "ion-chevron-up", + cmd: 'special-hide-unhide', + style: 'button-royal button-dark ', + }); - } - if (data.control.Control.CanReset == '1') { - $scope.ptzPresets.push({ - name: 'R', - icon: "ion-ios-loop-strong", - cmd: 'reset', - style: 'button-royal ' + buttonAccent - }); + } + /*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 = ""; + } - NVRDataModel.log("ConfigurePTZ Modal: ControlDB reports PTZ command to be " + $scope.ptzMoveCommand); - }, - function (data) { - // console.log("** Error retrieving move PTZ command"); - NVRDataModel.log("ConfigurePTZ : Error retrieving PTZ command " + JSON.stringify(data), "error"); - }); + if (data.control.Control.CanWake == '1') { - } else { - NVRDataModel.log("configurePTZ " + mid + " is not PTZ controllable"); - } - }, - function (data) { - // console.log("** Error retrieving move PTZ command"); - NVRDataModel.log("configurePTZ : Error retrieving PTZ command " + JSON.stringify(data), "error"); - }); + $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 + }); + + } + + NVRDataModel.log("ConfigurePTZ Modal: ControlDB reports PTZ command to be " + $scope.ptzMoveCommand); + }, + function (data) { + // console.log("** Error retrieving move PTZ command"); + NVRDataModel.log("ConfigurePTZ : Error retrieving PTZ command " + JSON.stringify(data), "error"); + }); + + } else { + NVRDataModel.log("configurePTZ " + mid + " is not PTZ controllable"); + } + }, + function (data) { + // console.log("** Error retrieving move PTZ command"); + NVRDataModel.log("configurePTZ : Error retrieving PTZ command " + JSON.stringify(data), "error"); + }); } @@ -1799,11 +1813,10 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ document.addEventListener("pause", onPause, false); document.addEventListener("resume", onResume, false); - } - else { - NVRDataModel.debug ("MonitorModal: Android detected, using cordova-multiwindow plugin for onStop/onStart instead"); - window.MultiWindowPlugin.registerOnStop("monitormodal-pause", onPause); - window.MultiWindowPlugin.registerOnStart("monitormodal-resume", onResume); + } else { + NVRDataModel.debug("MonitorModal: Android detected, using cordova-multiwindow plugin for onStop/onStart instead"); + window.MultiWindowPlugin.registerOnStop("monitormodal-pause", onPause); + window.MultiWindowPlugin.registerOnStart("monitormodal-resume", onResume); } diff --git a/www/js/MontageCtrl.js b/www/js/MontageCtrl.js index f4c77a80..161a1025 100644 --- a/www/js/MontageCtrl.js +++ b/www/js/MontageCtrl.js @@ -35,7 +35,7 @@ angular.module('zmApp.controllers') SNAPSHOT: 1, ACTIVE: 2, STOPPED: 3, - PAUSED:4 + PAUSED: 4 }; var currentStreamState = streamState.SNAPSHOT; // first load snapshot @@ -49,7 +49,7 @@ angular.module('zmApp.controllers') var as = $scope.$on("auth-success", function () { - /* var tnow = new Date(); + /* var tnow = new Date(); var s = Math.round((tnow - timeInMontage) / 1000); NVRDataModel.debug ("Montage re-auth: time since we are here: " + s + " seconds"); @@ -313,7 +313,7 @@ angular.module('zmApp.controllers') pckry = new Packery('.grid', { itemSelector: '.grid-item', percentPosition: true, - //columnWidth: '.grid-sizer', + //columnWidth: '.grid-sizer', gutter: 0, initLayout: layouttype, shiftPercentResize: true, @@ -334,15 +334,15 @@ angular.module('zmApp.controllers') progressCalled = true; loadCount++; - // console.log ("loaded "+loadCount+" of "+positions.length); + // console.log ("loaded "+loadCount+" of "+positions.length); // if (layouttype) $timeout (function(){layout(pckry);},100); }); - $timeout (function() { + $timeout(function () { if ($scope.areImagesLoading) { - NVRDataModel.debug ("Images still loading after 15secs?"); + NVRDataModel.debug("Images still loading after 15secs?"); allImagesLoadedOrFailed(); } @@ -365,10 +365,12 @@ angular.module('zmApp.controllers') }); function allImagesLoadedOrFailed() { - - $timeout (function() {$scope.areImagesLoading = false;}); - + + $timeout(function () { + $scope.areImagesLoading = false; + }); + currentStreamState = streamState.SNAPSHOT; if (simulStreaming) { @@ -664,7 +666,7 @@ angular.module('zmApp.controllers') else $scope.timeNow = moment().tz(NVRDataModel.getTimeZoneNow()).format(NVRDataModel.getTimeFormatSec()); - + if (simulStreaming) { // console.log ("Skipping timer as simulStreaming"); return; @@ -683,7 +685,7 @@ angular.module('zmApp.controllers') // if you see the time move, montage should move - + //$scope.timeNow = moment().format(NVRDataModel.getTimeFormatSec()); //console.log ("Inside Montage timer..."); @@ -1187,11 +1189,11 @@ angular.module('zmApp.controllers') if (simulStreaming) { NVRDataModel.debug("Pausing all streams in montage to save memory/nw..."); - - for (var i = 0; i < $scope.MontageMonitors.length; i++) { - if ($scope.MontageMonitors[i].Monitor.listDisplay == 'show') NVRDataModel.pauseLiveStream($scope.MontageMonitors[i].Monitor.connKey, $scope.MontageMonitors[i].Monitor.controlURL, $scope.MontageMonitors[i].Monitor.Name); - } - + + for (var i = 0; i < $scope.MontageMonitors.length; i++) { + if ($scope.MontageMonitors[i].Monitor.listDisplay == 'show') NVRDataModel.pauseLiveStream($scope.MontageMonitors[i].Monitor.connKey, $scope.MontageMonitors[i].Monitor.controlURL, $scope.MontageMonitors[i].Monitor.Name); + } + } }); @@ -1325,12 +1327,12 @@ angular.module('zmApp.controllers') for (var i = 0; i < $scope.MontageMonitors.length; i++) { if ($scope.MontageMonitors[i].Monitor.listDisplay == 'show') NVRDataModel.resumeLiveStream($scope.MontageMonitors[i].Monitor.connKey, $scope.MontageMonitors[i].Monitor.controlURL, $scope.MontageMonitors[i].Monitor.Name); } - /* NVRDataModel.regenConnKeys(); - $scope.monitors = NVRDataModel.getMonitorsNow(); - $scope.MontageMonitors = angular.copy($scope.monitors);*/ + /* NVRDataModel.regenConnKeys(); + $scope.monitors = NVRDataModel.getMonitorsNow(); + $scope.MontageMonitors = angular.copy($scope.monitors);*/ } - + } @@ -1377,7 +1379,7 @@ angular.module('zmApp.controllers') broadcastHandles = []; - + $timeout(function () { if (!$scope.singleMonitorModalOpen && simulStreaming) { NVRDataModel.debug("Killing all streams in montage to save memory/nw..."); @@ -1432,9 +1434,9 @@ angular.module('zmApp.controllers') $scope.$on('$ionicView.leave', function () { // console.log("**VIEW ** Montage Ctrl Left, force removing modal"); if ($rootScope.platformOS == 'android') { - NVRDataModel.debug ("Deregistering handlers for multi-window"); + NVRDataModel.debug("Deregistering handlers for multi-window"); window.MultiWindowPlugin.deregisterOnStop("montage-pause"); - + } if ($scope.modal) $scope.modal.remove(); }); @@ -1771,7 +1773,7 @@ angular.module('zmApp.controllers') var stream; if (currentStreamState == streamState.STOPPED || monitor.Monitor.listDisplay == 'noshow' || $rootScope.authSession == 'undefined') { - // console.log ("STREAM=empty and auth="+$rootScope.authSession); + // console.log ("STREAM=empty and auth="+$rootScope.authSession); return ""; } @@ -1794,7 +1796,7 @@ angular.module('zmApp.controllers') //"&rand="+$scope.randToAvoidCacheMem + - // console.log("STREAM=" + stream); + // console.log("STREAM=" + stream); return stream; }; @@ -2004,10 +2006,9 @@ angular.module('zmApp.controllers') if ($rootScope.platformOS != 'android') { document.addEventListener("pause", onPause, false); - } - else { - NVRDataModel.debug ("MontageCtrl: Android detected, using cordova-multiwindow plugin for onStop/onStart instead"); - window.MultiWindowPlugin.registerOnStop("montage-pause", onPause); + } else { + NVRDataModel.debug("MontageCtrl: Android detected, using cordova-multiwindow plugin for onStop/onStart instead"); + window.MultiWindowPlugin.registerOnStop("montage-pause", onPause); } // document.addEventListener("resume", onResume, false); @@ -2189,18 +2190,18 @@ angular.module('zmApp.controllers') pckry.once('layoutComplete', resizeComplete); pckry.layout(); - /* pckry.getItemElements().forEach(function (elem) { - var id = elem.getAttribute("data-item-id"); - var sz = elem.getAttribute("data-item-size"); - if (isNaN(sz)) sz = 20; - //console.log("NOW IT IS-> " + id + ":" + sz); - if (oldScales[id] != sz) { - //console.log("Calling FIT on " + id + " size:" + oldScales[id] + "->" + sz); - pckry.once('fitComplete', resizeComplete); - pckry.fit(elem); - - } - });*/ + /* pckry.getItemElements().forEach(function (elem) { + var id = elem.getAttribute("data-item-id"); + var sz = elem.getAttribute("data-item-size"); + if (isNaN(sz)) sz = 20; + //console.log("NOW IT IS-> " + id + ":" + sz); + if (oldScales[id] != sz) { + //console.log("Calling FIT on " + id + " size:" + oldScales[id] + "->" + sz); + pckry.once('fitComplete', resizeComplete); + pckry.fit(elem); + + } + });*/ } else //shrink { //console.log("Calling shift"); diff --git a/www/js/NewsCtrl.js b/www/js/NewsCtrl.js index 55712753..ba45fb0e 100644 --- a/www/js/NewsCtrl.js +++ b/www/js/NewsCtrl.js @@ -88,12 +88,12 @@ angular.module('zmApp.controllers').controller('zmApp.NewsCtrl', ['$scope', '$ro $http.get(zm.blogUrl, { - responseType:'text' + responseType: 'text' }) .then(function (datastr) { datastr = datastr.data; var trunc = "])}while(1);</x>"; - datastr= datastr.substr(trunc.length); + datastr = datastr.substr(trunc.length); // console.log ("DATA:"+data); // var data = JSON.parse(datastr); diff --git a/www/js/PortalLoginCtrl.js b/www/js/PortalLoginCtrl.js index 2397adef..7fb4cc50 100644 --- a/www/js/PortalLoginCtrl.js +++ b/www/js/PortalLoginCtrl.js @@ -3,7 +3,7 @@ /*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', 'NVRDataModel', '$ionicSideMenuDelegate', '$rootScope', '$http', '$q', '$state', '$ionicLoading', '$ionicPopover', '$ionicScrollDelegate', '$ionicModal', '$timeout', 'zmAutoLogin', '$ionicHistory', 'EventServer', '$translate', '$ionicPopup',function ($ionicPlatform, $scope, zm, NVRDataModel, $ionicSideMenuDelegate, $rootScope, $http, $q, $state, $ionicLoading, $ionicPopover, $ionicScrollDelegate, $ionicModal, $timeout, zmAutoLogin, $ionicHistory, EventServer, $translate, $ionicPopup) { +angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionicPlatform', '$scope', 'zm', 'NVRDataModel', '$ionicSideMenuDelegate', '$rootScope', '$http', '$q', '$state', '$ionicLoading', '$ionicPopover', '$ionicScrollDelegate', '$ionicModal', '$timeout', 'zmAutoLogin', '$ionicHistory', 'EventServer', '$translate', '$ionicPopup', function ($ionicPlatform, $scope, zm, NVRDataModel, $ionicSideMenuDelegate, $rootScope, $http, $q, $state, $ionicLoading, $ionicPopover, $ionicScrollDelegate, $ionicModal, $timeout, zmAutoLogin, $ionicHistory, EventServer, $translate, $ionicPopup) { var processPush = false; var broadcastHandles = []; @@ -437,18 +437,18 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic EventServer.init(); NVRDataModel.zmPrivacyProcessed() - .then (function (val) { - console.log(">>>>>>>>>>>>>>>>>>> PRIVACY PROCEESSED:"+val); - if (!val) { - var alertPopup = $ionicPopup.alert({ - title: $translate.instant ('kNote'), - template: $translate.instant('kDataPrivacyZM'), - okText: $translate.instant('kButtonOk'), - cancelText: $translate.instant('kButtonCancel'), - }); + .then(function (val) { + console.log(">>>>>>>>>>>>>>>>>>> PRIVACY PROCEESSED:" + val); + if (!val) { + var alertPopup = $ionicPopup.alert({ + title: $translate.instant('kNote'), + template: $translate.instant('kDataPrivacyZM'), + okText: $translate.instant('kButtonOk'), + cancelText: $translate.instant('kButtonCancel'), + }); - } - }); + } + }); // if push broadcast happens BEFORE this, then no // state change will occur here which is good @@ -551,6 +551,6 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic NVRDataModel.log("Entering Portal Main"); var loginData; $ionicSideMenuDelegate.canDragContent(true); - + }]); diff --git a/www/js/StateCtrl.js b/www/js/StateCtrl.js index d845d02a..62bffb81 100644 --- a/www/js/StateCtrl.js +++ b/www/js/StateCtrl.js @@ -63,16 +63,16 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup' $scope.$on('$ionicView.enter', function () { // console.log("**VIEW ** Montage Ctrl Entered"); NVRDataModel.setAwake(false); - + }); $scope.$on('$ionicView.afterEnter', function () { // console.log("**VIEW ** Montage Ctrl Entered"); - - console.log ("STATE SHORTCUT: " + JSON.stringify($stateParams)); - $stateParams.shortcut && $stateParams.shortcut.fn && - $scope[$stateParams.shortcut.fn]($stateParams.shortcut.fnargs); // jshint ignore:line - + + console.log("STATE SHORTCUT: " + JSON.stringify($stateParams)); + $stateParams.shortcut && $stateParams.shortcut.fn && + $scope[$stateParams.shortcut.fn]($stateParams.shortcut.fnargs); // jshint ignore:line + }); //--------------------------------------------------------- diff --git a/www/js/TimelineCtrl.js b/www/js/TimelineCtrl.js index a5c7f818..e1fbc4ef 100644 --- a/www/js/TimelineCtrl.js +++ b/www/js/TimelineCtrl.js @@ -277,10 +277,10 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla //------------------------------------------------- $scope.$on('$ionicView.leave', function () { - if ($rootScope.platformOS == 'desktop') { - NVRDataModel.debug ("Removing keyboard handler"); + if ($rootScope.platformOS == 'desktop') { + NVRDataModel.debug("Removing keyboard handler"); window.removeEventListener('keydown', keyboardHandler, true); - + } NVRDataModel.debug("Timeline: Deregistering broadcast handles"); @@ -311,16 +311,16 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla timeline = ''; $scope.newEvents = ''; - if ($rootScope.platformOS == 'desktop') { + if ($rootScope.platformOS == 'desktop') { window.addEventListener('keydown', keyboardHandler, true); - + } - + }); // Keyboard handler for desktop versions - function keyboardHandler(evt) { + function keyboardHandler(evt) { var handled = false; var keyCodes = { @@ -328,51 +328,42 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla //events LEFT: 37, RIGHT: 39, - UP:38, - DOWN:40, + UP: 38, + DOWN: 40, ESC: 27, - + PREVDAY_A: 65, NEXTDAY_D: 68, - + }; - $timeout (function () { + $timeout(function () { var keyCode = evt.keyCode; - - console.log (keyCode + " PRESSED"); + + console.log(keyCode + " PRESSED"); if (keyCode == keyCodes.UP) { timeline.zoomIn(0.2); - } - else if (keyCode == keyCodes.DOWN) { + } else if (keyCode == keyCodes.DOWN) { timeline.zoomIn(0.2); - } - else if (keyCode == keyCodes.LEFT) { - - move (-0.2); - } - else if (keyCode == keyCodes.RIGHT) { - move (0.2); - } + } else if (keyCode == keyCodes.LEFT) { - else if (keyCode == keyCodes.ESC) { + move(-0.2); + } else if (keyCode == keyCodes.RIGHT) { + move(0.2); + } else if (keyCode == keyCodes.ESC) { timeline.fit(); - } - - else if (keyCode == keyCodes.PREVDAY_A) { + } else if (keyCode == keyCodes.PREVDAY_A) { $scope.moveDays(-1); - } - - else if (keyCode == keyCodes.NEXTDAY_D) { + } else if (keyCode == keyCodes.NEXTDAY_D) { $scope.moveDays(1); } - + handled = true; return handled; @@ -1104,7 +1095,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla NVRDataModel.getEventsPages(0, fromDateNoLang, toDateNoLang) .then(function (epData) { - var pages = 1; + var pages = 1; var itemsPerPage = parseInt(epData.limit); var iterCount; @@ -1120,7 +1111,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla while ((pages <= epData.pageCount) && (iterCount > 0)) { var promise = NVRDataModel.getEvents(0, pages, "none", fromDateNoLang, toDateNoLang); promises.push(promise); - + pages++; iterCount--; @@ -1128,7 +1119,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla $q.all(promises) .then(function (data) { - NVRDataModel.debug("TimelineCtrl/drawgraph: all pages of graph data received " ); + NVRDataModel.debug("TimelineCtrl/drawgraph: all pages of graph data received "); graphIndex = 0; NVRDataModel.log("Creating " + $scope.monitors.length + " groups for the graph"); // create groups @@ -1146,8 +1137,8 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla for (var j = 0; j < data.length; j++) { var myevents = data[j].events; - // console.log ("****************DATA ="+JSON.stringify(data[j])); - // console.log ("**********************************"); + // console.log ("****************DATA ="+JSON.stringify(data[j])); + // console.log ("**********************************"); if (graphIndex > count) { NVRDataModel.log("Exiting page count graph - reached limit of " + count); break; @@ -1208,30 +1199,30 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla //console.log ("ADDED "+tzs+" " +tze); if (!graphData.get(myevents[i].Event.Id)) { - graphData.add({ - //id: graphIndex, - id: myevents[i].Event.Id, - content: "<span class='my-vis-font'>" + "( <i class='ion-android-notifications'></i>" + myevents[i].Event.AlarmFrames + ") " + "(" + myevents[i].Event.Id + ") " + myevents[i].Event.Notes + "</span>", - - start: tzs, - //start: myevents[i].Event.StartTime, - //end: myevents[i].Event.EndTime, - end: tze, - group: myevents[i].Event.MonitorId, - //type: "range", - style: "background-color:" + colors[parseInt(myevents[i].Event.MonitorId) % colors.length] + - ";border-color:" + colors[parseInt(myevents[i].Event.MonitorId) % colors.length], - myframes: myevents[i].Event.Frames, - mydur: myevents[i].Event.Length, - myeid: myevents[i].Event.Id, - myename: myevents[i].Event.Name, - myvideo: myevents[i].Event.DefaultVideo, - myevent: myevents[i] - - }); - //console.log ("IED="+myevents[i].Event.Id); - graphIndex++; - } + graphData.add({ + //id: graphIndex, + id: myevents[i].Event.Id, + content: "<span class='my-vis-font'>" + "( <i class='ion-android-notifications'></i>" + myevents[i].Event.AlarmFrames + ") " + "(" + myevents[i].Event.Id + ") " + myevents[i].Event.Notes + "</span>", + + start: tzs, + //start: myevents[i].Event.StartTime, + //end: myevents[i].Event.EndTime, + end: tze, + group: myevents[i].Event.MonitorId, + //type: "range", + style: "background-color:" + colors[parseInt(myevents[i].Event.MonitorId) % colors.length] + + ";border-color:" + colors[parseInt(myevents[i].Event.MonitorId) % colors.length], + myframes: myevents[i].Event.Frames, + mydur: myevents[i].Event.Length, + myeid: myevents[i].Event.Id, + myename: myevents[i].Event.Name, + myvideo: myevents[i].Event.DefaultVideo, + myevent: myevents[i] + + }); + //console.log ("IED="+myevents[i].Event.Id); + graphIndex++; + } } else { //console.log ("SKIPPED GRAPH ID " + graphIndex); } diff --git a/www/js/WizardCtrl.js b/www/js/WizardCtrl.js index a152f537..f4b3d456 100644 --- a/www/js/WizardCtrl.js +++ b/www/js/WizardCtrl.js @@ -39,32 +39,32 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$ } }) .then(function (data, status, headers) { - data = data.data; - //console.log("LOOKING FOR " + zm.loginScreenString); - //console.log("DATA RECEIVED " + JSON.stringify(data)); - if (data.indexOf(zm.loginScreenString) == -1) { - - $scope.wizard.loginURL = $scope.wizard.fqportal; - $scope.wizard.portalValidText = $translate.instant('kPortal') + ": " + $scope.wizard.loginURL; - $scope.wizard.portalColor = "#16a085"; - d.resolve(true); - return d.promise; - } else { - //console.log("************ERROR"); + data = data.data; + //console.log("LOOKING FOR " + zm.loginScreenString); + //console.log("DATA RECEIVED " + JSON.stringify(data)); + if (data.indexOf(zm.loginScreenString) == -1) { + + $scope.wizard.loginURL = $scope.wizard.fqportal; + $scope.wizard.portalValidText = $translate.instant('kPortal') + ": " + $scope.wizard.loginURL; + $scope.wizard.portalColor = "#16a085"; + d.resolve(true); + return d.promise; + } else { + //console.log("************ERROR"); + $scope.wizard.portalValidText = $translate.instant('kPortalDetectionFailed'); + $scope.wizard.portalColor = "#e74c3c"; + d.reject(false); + return d.promise; + } + }, + function (error) { + // console.log("************ERROR:"+ JSON.stringify(error)); $scope.wizard.portalValidText = $translate.instant('kPortalDetectionFailed'); $scope.wizard.portalColor = "#e74c3c"; d.reject(false); return d.promise; - } - }, - function (error) { - // console.log("************ERROR:"+ JSON.stringify(error)); - $scope.wizard.portalValidText = $translate.instant('kPortalDetectionFailed'); - $scope.wizard.portalColor = "#e74c3c"; - d.reject(false); - return d.promise; - }); + }); return d.promise; @@ -141,7 +141,7 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$ return d.promise; } - + return findFirstReachableUrl(urls.slice(1), tail); }); } else { @@ -196,11 +196,11 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$ var urls = [a1, a2, a3, a4, a5]; // can't use getPathZms as loginData is not inited yet - $http.get ($scope.wizard.apiURL+"/configs/viewByName/ZM_PATH_ZMS.json") - //NVRDataModel.getPathZms() // what does ZM have stored in PATH_ZMS? + $http.get($scope.wizard.apiURL + "/configs/viewByName/ZM_PATH_ZMS.json") + //NVRDataModel.getPathZms() // what does ZM have stored in PATH_ZMS? .then(function (data) { // remove zms or nph-zms - var str = data.data.config.Value; + var str = data.data.config.Value; var path = str.trim(); path = path.replace("/nph-zms", ""); path = path.replace("/zms", ""); @@ -396,7 +396,7 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$ //-------------------------------------------------------------------------- function validateDataNewAPI() { - + } function validateData() { diff --git a/www/js/app.js b/www/js/app.js index fabcea3a..fef31358 100755 --- a/www/js/app.js +++ b/www/js/app.js @@ -11,8 +11,6 @@ var appVersion = "0.0.0"; - - // core app start stuff angular.module('zmApp', [ 'ionic', @@ -25,7 +23,6 @@ angular.module('zmApp', [ 'com.2fdevs.videogular', 'com.2fdevs.videogular.plugins.controls', 'com.2fdevs.videogular.plugins.overlayplay', - //'ionic-native-transitions', 'mgo-angular-wizard', 'pascalprecht.translate', 'uk.ac.soton.ecs.videogular.plugins.cuepoints', @@ -120,7 +117,7 @@ angular.module('zmApp', [ // window title and going out of sync // seems to get stuck in mobile .controller('zmApp.appCtrl', function ($scope, $rootScope) { - $scope.$on('$ionicView.afterEnter', function(ev, data) { + $scope.$on('$ionicView.afterEnter', function (ev, data) { if ($rootScope.platformOS == 'desktop') ev.stopPropagation(); }); }) @@ -763,7 +760,7 @@ angular.module('zmApp', [ // $localstorage.set("lastUpdateCheck", moment().toISOString()); //console.log ("FULL STRING " + success.data.tag_name); - // console.log ("^^^^^^^^^^^^^ GOT: " + JSON.stringify(success)); + // console.log ("^^^^^^^^^^^^^ GOT: " + JSON.stringify(success)); var res = success.data.tag_name.match("v(.*)"); zmUpdateVersion = res[1]; @@ -785,8 +782,8 @@ angular.module('zmApp', [ NVRDataModel.log("Checking for news updates"); $http.get(zm.blogUrl, { - responseType:'text', - transformResponse:undefined + responseType: 'text', + transformResponse: undefined }) .then(function (datastr) { @@ -914,22 +911,22 @@ angular.module('zmApp', [ // we need AUTH_HASH_LOGIN to be on for WKWebView /mobile if (ld.isUseAuth && $rootScope.platformOS != 'desktop') { - NVRDataModel.getAuthHashLogin() - .then (function (data) { - - if (data.data && data.data.config.Value != '1') { - $ionicPopup.alert({ - title: $translate.instant('kError'), - template: $translate.instant('kAuthHashDisabled') - }); - } + NVRDataModel.getAuthHashLogin() + .then(function (data) { - }, - function (err) { - console.log ("AUTH HASH ERROR: "+JSON.stringify(conf)); - }); + if (data.data && data.data.config.Value != '1') { + $ionicPopup.alert({ + title: $translate.instant('kError'), + template: $translate.instant('kAuthHashDisabled') + }); + } + + }, + function (err) { + console.log("AUTH HASH ERROR: " + JSON.stringify(conf)); + }); } - + }); @@ -974,7 +971,7 @@ angular.module('zmApp', [ var ld = NVRDataModel.getLogin(); var statename = $ionicHistory.currentStateName(); - + if (statename == "montage-history") { NVRDataModel.log("Skipping login process as we are in montage history. Re-logging will mess up the stream"); @@ -1009,8 +1006,8 @@ angular.module('zmApp', [ $ionicLoading.show({ template: $translate.instant('kReachabilityFailed'), noBackdrop: true, - - }); + + }); NVRDataModel.debug(">>>>>>>>>>>> Failed first login, trying reachability"); NVRDataModel.getReachableConfig(true) .then(function (data) { @@ -1064,7 +1061,7 @@ angular.module('zmApp', [ } - if (!str) str = $translate.instant ('kAuthenticating'); + if (!str) str = $translate.instant('kAuthenticating'); if (str) { $ionicLoading.show({ @@ -1082,102 +1079,106 @@ angular.module('zmApp', [ //first login using new API var loginAPI = loginData.apiurl + '/host/login.json'; - + $http({ - method:'post', - url: loginAPI, - timeout:httpDelay, - headers: {'Content-Type': 'application/x-www-form-urlencoded'}, - responseType:'text', - transformResponse: undefined, - transformRequest: function(obj) { - var str = []; - for(var p in obj) - str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); - return str.join("&"); - }, - data: {user: loginData.username, pass: loginData.password} - }) - //$http.get(loginAPI) + method: 'post', + url: loginAPI, + timeout: httpDelay, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + }, + responseType: 'text', + transformResponse: undefined, + transformRequest: function (obj) { + var str = []; + for (var p in obj) + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); + return str.join("&"); + }, + data: { + user: loginData.username, + pass: loginData.password + } + }) + //$http.get(loginAPI) .then(function (textsucc) { - $ionicLoading.hide(); + $ionicLoading.hide(); var succ; - + try { succ = JSON.parse(textsucc.data); - if (!succ.version) { - NVRDataModel.debug ("API login returned fake success, going back to webscrape"); - var ld = NVRDataModel.getLogin(); - ld.loginAPISupported = false; - NVRDataModel.setLogin(ld); - - loginWebScrape() - .then ( function (succ) { + if (!succ.version) { + NVRDataModel.debug("API login returned fake success, going back to webscrape"); + var ld = NVRDataModel.getLogin(); + ld.loginAPISupported = false; + NVRDataModel.setLogin(ld); + + loginWebScrape() + .then(function (succ) { d.resolve("Login Success"); return d.promise; - }, - function (err) { - $ionicLoading.hide(); - d.reject("Login Error"); - return (d.promise); - }); - return d.promise; - } - NVRDataModel.debug ("API based login returned... "); - NVRDataModel.setCurrentServerVersion(succ.version); - $ionicLoading.hide(); - //$rootScope.loggedIntoZm = 1; - $rootScope.authSession = ''; - - if (succ.credentials) { - $rootScope.authSession = "&" + succ.credentials; - if (succ.append_password == '1') { - $rootScope.authSession = $rootScope.authSession + - loginData.password; - } + }, + function (err) { + $ionicLoading.hide(); + d.reject("Login Error"); + return (d.promise); + }); + return d.promise; + } + NVRDataModel.debug("API based login returned... "); + NVRDataModel.setCurrentServerVersion(succ.version); + $ionicLoading.hide(); + //$rootScope.loggedIntoZm = 1; + $rootScope.authSession = ''; + + if (succ.credentials) { + $rootScope.authSession = "&" + succ.credentials; + if (succ.append_password == '1') { + $rootScope.authSession = $rootScope.authSession + + loginData.password; } - - var ldg = NVRDataModel.getLogin(); - ldg.loginAPISupported = true; - NVRDataModel.setLogin(ldg); - - NVRDataModel.log("Stream authentication construction: " + + } + + var ldg = NVRDataModel.getLogin(); + ldg.loginAPISupported = true; + NVRDataModel.setLogin(ldg); + + NVRDataModel.log("Stream authentication construction: " + $rootScope.authSession); - - NVRDataModel.log("zmAutologin successfully logged into Zoneminder via API"); - - - - d.resolve("Login Success"); - - $rootScope.$broadcast('auth-success', succ); - } - catch (e) { - NVRDataModel.debug ("Login API approach did not work..."); + + NVRDataModel.log("zmAutologin successfully logged into Zoneminder via API"); + + + + d.resolve("Login Success"); + + $rootScope.$broadcast('auth-success', succ); + } catch (e) { + NVRDataModel.debug("Login API approach did not work..."); var ld = NVRDataModel.getLogin(); - ld.loginAPISupported = false; - NVRDataModel.setLogin(ld); - loginWebScrape() - .then ( function (succ) { + ld.loginAPISupported = false; + NVRDataModel.setLogin(ld); + loginWebScrape() + .then(function (succ) { d.resolve("Login Success"); return d.promise; - }, - function (err) { - $ionicLoading.hide(); - d.reject("Login Error"); - return (d.promise); - }); - return d.promise; + }, + function (err) { + $ionicLoading.hide(); + d.reject("Login Error"); + return (d.promise); + }); + return d.promise; } - + }, function (err) { @@ -1186,36 +1187,35 @@ angular.module('zmApp', [ if (1) { - //if (err && err.data && 'success' in err.data) { + //if (err && err.data && 'success' in err.data) { console.log("API based login not supported, need to use web scraping..."); // login using old web scraping var ld = NVRDataModel.getLogin(); ld.loginAPISupported = false; NVRDataModel.setLogin(ld); loginWebScrape() - .then ( function (succ) { - d.resolve("Login Success"); - return d.promise; - }, - function (err) { - d.reject("Login Error"); - return (d.promise); - }); + .then(function (succ) { + d.resolve("Login Success"); + return d.promise; + }, + function (err) { + d.reject("Login Error"); + return (d.promise); + }); - } - else { + } else { // $rootScope.loggedIntoZm = -1; - //console.log("**** ZM Login FAILED"); - NVRDataModel.log("zmAutologin Error via API: some meta foo", "error"); - $rootScope.$broadcast('auth-error', "I'm confused why"); + //console.log("**** ZM Login FAILED"); + NVRDataModel.log("zmAutologin Error via API: some meta foo", "error"); + $rootScope.$broadcast('auth-error', "I'm confused why"); - d.reject("Login Error"); - return (d.promise); + d.reject("Login Error"); + return (d.promise); } - + } ); @@ -1238,7 +1238,7 @@ angular.module('zmApp', [ noBackdrop: true, duration: httpDelay }); - + NVRDataModel.isReCaptcha() .then(function (result) { @@ -1294,83 +1294,83 @@ angular.module('zmApp', [ } }) .then(function (data, status, headers) { - // console.log(">>>>>>>>>>>>>> PARALLEL POST SUCCESS"); - data = data.data; - $ionicLoading.hide(); + // console.log(">>>>>>>>>>>>>> PARALLEL POST SUCCESS"); + data = data.data; + $ionicLoading.hide(); - // Coming here does not mean success - // it could also be a bad login, but - // ZM returns you to login.php and returns 200 OK - // so we will check if the data has - // <title>ZM - Login</title> -- it it does then its the login page + // Coming here does not mean success + // it could also be a bad login, but + // ZM returns you to login.php and returns 200 OK + // so we will check if the data has + // <title>ZM - Login</title> -- it it does then its the login page - if (data.indexOf(zm.loginScreenString) == -1) { - //eventServer.start(); - //$rootScope.loggedIntoZm = 1; + if (data.indexOf(zm.loginScreenString) == -1) { + //eventServer.start(); + //$rootScope.loggedIntoZm = 1; - NVRDataModel.log("zmAutologin successfully logged into Zoneminder"); - $rootScope.apiValid = true; + NVRDataModel.log("zmAutologin successfully logged into Zoneminder"); + $rootScope.apiValid = true; - // now go to authKey part, so don't return yet... + // now go to authKey part, so don't return yet... - } else // this means login error - { - // $rootScope.loggedIntoZm = -1; - //console.log("**** ZM Login FAILED"); - NVRDataModel.log("zmAutologin Error: Bad Credentials ", "error"); - $rootScope.$broadcast('auth-error', "incorrect credentials"); + } else // this means login error + { + // $rootScope.loggedIntoZm = -1; + //console.log("**** ZM Login FAILED"); + NVRDataModel.log("zmAutologin Error: Bad Credentials ", "error"); + $rootScope.$broadcast('auth-error', "incorrect credentials"); - d.reject("Login Error"); - return (d.promise); - // no need to go to next code, so return above - } + d.reject("Login Error"); + return (d.promise); + // no need to go to next code, so return above + } - // Now go ahead and re-get auth key - // if login was a success - $rootScope.authSession = "undefined"; - var ld = NVRDataModel.getLogin(); - NVRDataModel.getAuthKey($rootScope.validMonitorId) - .then(function (success) { + // Now go ahead and re-get auth key + // if login was a success + $rootScope.authSession = "undefined"; + var ld = NVRDataModel.getLogin(); + NVRDataModel.getAuthKey($rootScope.validMonitorId) + .then(function (success) { - //console.log(success); - $rootScope.authSession = success; - NVRDataModel.log("Stream authentication construction: " + - $rootScope.authSession); + //console.log(success); + $rootScope.authSession = success; + NVRDataModel.log("Stream authentication construction: " + + $rootScope.authSession); d.resolve("Login Success"); $rootScope.$broadcast('auth-success', data); return d.promise; - }, - function (error) { - //console.log(error); + }, + function (error) { + //console.log(error); - NVRDataModel.log("Modal: Error returned Stream authentication construction. Retaining old value of: " + $rootScope.authSession); - NVRDataModel.debug("Error was: " + JSON.stringify(error)); - d.resolve("Login Success"); - $rootScope.$broadcast('auth-success', data); - }); + NVRDataModel.log("Modal: Error returned Stream authentication construction. Retaining old value of: " + $rootScope.authSession); + NVRDataModel.debug("Error was: " + JSON.stringify(error)); + d.resolve("Login Success"); + $rootScope.$broadcast('auth-success', data); + }); - return (d.promise); + return (d.promise); - }, - function (error, status) { + }, + function (error, status) { - // console.log(">>>>>>>>>>>>>> PARALLEL POST ERROR"); - $ionicLoading.hide(); + // console.log(">>>>>>>>>>>>>> PARALLEL POST ERROR"); + $ionicLoading.hide(); - //console.log("**** ZM Login FAILED"); + //console.log("**** ZM Login FAILED"); - // FIXME: Is this sometimes results in null + // FIXME: Is this sometimes results in null - NVRDataModel.log("zmAutologin Error " + JSON.stringify(error) + " and status " + status); - // bad urls etc come here - //$rootScope.loggedIntoZm = -1; - $rootScope.$broadcast('auth-error', error); + NVRDataModel.log("zmAutologin Error " + JSON.stringify(error) + " and status " + status); + // bad urls etc come here + //$rootScope.loggedIntoZm = -1; + $rootScope.$broadcast('auth-error', error); - d.reject("Login Error"); - return d.promise; - }); - return d.promise; + d.reject("Login Error"); + return d.promise; + }); + return d.promise; } function start() { @@ -1392,7 +1392,7 @@ angular.module('zmApp', [ var ld = NVRDataModel.getLogin(); $interval.cancel(zmAutoLoginHandle); - // $rootScope.loggedIntoZm = 0; + // $rootScope.loggedIntoZm = 0; NVRDataModel.log("Cancelling zmAutologin timer"); } @@ -1482,7 +1482,7 @@ angular.module('zmApp', [ $rootScope.toTime = ""; $rootScope.fromString = ""; $rootScope.toString = ""; - // $rootScope.loggedIntoZm = 0; + // $rootScope.loggedIntoZm = 0; $rootScope.apnsToken = ''; $rootScope.tappedNotification = 0; $rootScope.tappedMid = 0; @@ -1514,7 +1514,7 @@ angular.module('zmApp', [ NVRDataModel.debug("**EXCEPTION**" + error.reason + " caused by " + error.cause); }; - + if ($rootScope.platformOS == 'desktop' && 0) { window.addEventListener('beforeunload', function (ev) { @@ -1540,7 +1540,7 @@ angular.module('zmApp', [ }); }); - } + } // DPAD Handler - disabled for now // when ready add ionic cordova plugin add https://github.com/pliablepixels/cordova-plugin-android-tv.git @@ -1677,7 +1677,7 @@ angular.module('zmApp', [ $rootScope.online = true; $timeout(function () { - // NVRDataModel.debug ("Ignoring - Alex R. Hack"); + // NVRDataModel.debug ("Ignoring - Alex R. Hack"); if (0) { var networkState = "browser not supported"; if (navigator.connection) networkState = navigator.connection.type; @@ -1693,12 +1693,12 @@ angular.module('zmApp', [ NVRDataModel.debug("Not changing bandwidth state, as auto change is not on"); } NVRDataModel.log("Your network is online, re-authenticating"); - zmAutoLogin.doLogin($translate.instant('kReAuthenticating')); + zmAutoLogin.doLogin($translate.instant('kReAuthenticating')); } - + }, 1000); // need a time gap, seems network type registers late - + }); }, false); @@ -1767,7 +1767,7 @@ angular.module('zmApp', [ $rootScope.dpadId = 0; - + if ($rootScope.apiValid == false && toState.name != 'app.invalidapi' && toState.data.requireLogin == true) { event.preventDefault(); @@ -1778,27 +1778,26 @@ angular.module('zmApp', [ } - - if ((NVRDataModel.hasLoginInfo() || toState.data.requireLogin == false) && toState.name != "app.invalidapi" ) { + + if ((NVRDataModel.hasLoginInfo() || toState.data.requireLogin == false) && toState.name != "app.invalidapi") { //console.log("State transition is authorized"); - if (toState.name != "app.refresh" && - toState.name != "app.first-use" && - toState.name != "app.zm-portal-login" - ) - { + if (toState.name != "app.refresh" && + toState.name != "app.first-use" && + toState.name != "app.zm-portal-login" + ) { - NVRDataModel.debug ("Setting last-desktop-state to:"+JSON.stringify(toState)); + NVRDataModel.debug("Setting last-desktop-state to:" + JSON.stringify(toState)); localforage.setItem('last-desktop-state', { 'name': toState.name, 'params': toState.params }); - - + + } $rootScope.dpadState = toState.name.replace("app.", ""); return; - + } else { NVRDataModel.log("In Auth State trans: Not logged in, requested to go to " + JSON.stringify(toState)); // event.preventDefault(); @@ -1826,8 +1825,8 @@ angular.module('zmApp', [ // right about now, store last-state as the callback doesn't seem // to work in Windows - - NVRDataModel.debug ("Setting last-desktop-state to:"+JSON.stringify(toState)+" with params:"+JSON.stringify(toParams)); + + NVRDataModel.debug("Setting last-desktop-state to:" + JSON.stringify(toState) + " with params:" + JSON.stringify(toParams)); localforage.setItem('last-desktop-state', { 'name': toState, 'params': toParams @@ -1896,12 +1895,15 @@ angular.module('zmApp', [ //console.log("localforage config"); NVRDataModel.configureStorageDB() - .then (function () {NVRDataModel.log ("localforage driver:"+localforage.driver()); return NVRDataModel.cloudSync(); } ) - .then(function () { + .then(function () { + NVRDataModel.log("localforage driver:" + localforage.driver()); + return NVRDataModel.cloudSync(); + }) + .then(function () { // this should alert "cordovaSQLiteDriver" when in an emulator or a device - + // Now lets import old data if it exists: - NVRDataModel.log ("Cloudsync operation complete, continuing..."); + NVRDataModel.log("Cloudsync operation complete, continuing..."); var defaultServerName = $localstorage.get("defaultServerName"); localforage.getItem("defaultServerName") @@ -1995,9 +1997,9 @@ angular.module('zmApp', [ $rootScope.$state = $state; $rootScope.$stateParams = $stateParams; - if (window.cordova ) { + if (window.cordova) { console.log("------------->Keyboard foonone"); - //window.cordova.plugins.Keyboard.disableScroll(true); + //window.cordova.plugins.Keyboard.disableScroll(true); } if (window.StatusBar) { // org.apache.cordova.statusbar required @@ -2061,7 +2063,7 @@ angular.module('zmApp', [ NVRDataModel.log("First time detected "); $state.go("app.first-use"); return; - + } else { continueRestOfInit(); } @@ -2080,12 +2082,16 @@ angular.module('zmApp', [ localforage.getItem('last-desktop-state') .then(function (succ) { - console.log ("FOUND STATE" + JSON.stringify(succ) + ":"+succ); + console.log("FOUND STATE" + JSON.stringify(succ) + ":" + succ); // sanitize this - if (!succ.name || typeof succ.name !== 'string') {succ.name = "app.montage";} - - if (!succ.params) {succ.params = {};} + if (!succ.name || typeof succ.name !== 'string') { + succ.name = "app.montage"; + } + + if (!succ.params) { + succ.params = {}; + } if (succ) { if (succ.name == 'app.invalidapi' || succ.name == 'app.refresh' || succ.name == 'app.importantmessage' || succ.name == "app.first-use" || succ.name == "app.zm-portal-login" || !succ.name) { succ.name = 'app.montage'; @@ -2094,7 +2100,7 @@ angular.module('zmApp', [ $rootScope.lastState = succ.name; if ($rootScope.lastState.indexOf("app.") == -1) { $rootScope.lastState = "app." + $rootScope.lastState; - + } $rootScope.lastStateParam = succ.params; @@ -2102,7 +2108,7 @@ angular.module('zmApp', [ NVRDataModel.debug("last state=" + $rootScope.lastState + " param=" + $rootScope.lastStateParam); - + } loadServices(); @@ -2123,7 +2129,7 @@ angular.module('zmApp', [ zmCheckUpdates.start(); NVRDataModel.log("Setting up POST LOGIN timer"); zmAutoLogin.start(); - setupPauseAndResume(); + setupPauseAndResume(); } @@ -2132,25 +2138,24 @@ angular.module('zmApp', [ function setupPauseAndResume() { NVRDataModel.log("Setting up pause and resume handler AFTER language is loaded..."); - + if ($rootScope.platformOS != 'android') { - document.addEventListener("resume", function () { - resumeHandler(); + document.addEventListener("resume", function () { + resumeHandler(); }, false); document.addEventListener("pause", function () { pauseHandler(); }, false); - } - else { - NVRDataModel.debug ("Android detected, using cordova-multiwindow plugin for onStop/onStart instead"); + } else { + NVRDataModel.debug("Android detected, using cordova-multiwindow plugin for onStop/onStart instead"); window.MultiWindowPlugin.registerOnStop("app-pause", pauseHandler); window.MultiWindowPlugin.registerOnStart("app-resume", resumeHandler); - + } - + function resumeHandler() { NVRDataModel.setBackground(false); NVRDataModel.setJustResumed(true); @@ -2281,7 +2286,7 @@ angular.module('zmApp', [ // a) https://www.exratione.com/2013/08/angularjs-wrapping-http-for-fun-and-profit/ // b) https://gist.github.com/adamreisnz/354364e2a58786e2be71 - $provide.decorator('$http', ['$delegate', '$q', function($delegate, $q) { + $provide.decorator('$http', ['$delegate', '$q', function ($delegate, $q) { // create function which overrides $http function var $http = $delegate; @@ -2289,12 +2294,12 @@ angular.module('zmApp', [ var url; var method; - url = arguments[0].url; - method = arguments[0].method; + url = arguments[0].url; + method = arguments[0].method; var isOutgoingRequest = /^(http|https):\/\//.test(url); if (window.cordova && isOutgoingRequest) { - - + + var d = $q.defer(); var options = { method: method, @@ -2303,41 +2308,44 @@ angular.module('zmApp', [ timeout: arguments[0].timeout, responseType: arguments[0].responseType }; - // console.log ("**** -->"+method+"<-- using native HTTP with:"+encodeURI(url)+" payload:"+JSON.stringify(options)); - cordova.plugin.http.sendRequest(encodeURI(url),options, + // console.log ("**** -->"+method+"<-- using native HTTP with:"+encodeURI(url)+" payload:"+JSON.stringify(options)); + cordova.plugin.http.sendRequest(encodeURI(url), options, function (succ) { // automatic JSON parse if no responseType: text // fall back to text if JSON parse fails too - if (options.responseType =='text') { + if (options.responseType == 'text') { // don't parse into JSON - d.resolve({"data":succ.data}); + d.resolve({ + "data": succ.data + }); return d.promise; - } - else { + } else { try { - d.resolve({"data":JSON.parse(succ.data)}); + d.resolve({ + "data": JSON.parse(succ.data) + }); return d.promise; - } - catch (e) { + } catch (e) { - //console.log ("*** Native HTTP response: JSON parsing failed for "+url+", returning text"); - d.resolve({"data":succ.data}); + //console.log ("*** Native HTTP response: JSON parsing failed for "+url+", returning text"); + d.resolve({ + "data": succ.data + }); return d.promise; } } - }, + }, function (err) { - console.log ("*** Inside native HTTP error: "+JSON.stringify(err)); - + console.log("*** Inside native HTTP error: " + JSON.stringify(err)); + d.reject(err); return d.promise; }); - return d.promise; - - } - else { // not cordova, so lets go back to default http - // console.log ("**** "+method+" using XHR HTTP for "+url); + return d.promise; + + } else { // not cordova, so lets go back to default http + // console.log ("**** "+method+" using XHR HTTP for "+url); return $http.apply($http, arguments); } @@ -2351,23 +2359,23 @@ angular.module('zmApp', [ return $http[key].apply($http, arguments); }; }); - // wrap convenience functions - $delegate.get = function (url,config) { + // wrap convenience functions + $delegate.get = function (url, config) { return wrapper(angular.extend(config || {}, { method: 'get', url: url })); }; - $delegate.post = function (url,data,config) { + $delegate.post = function (url, data, config) { return wrapper(angular.extend(config || {}, { method: 'post', url: url, - data:data + data: data })); }; - $delegate.delete = function (url,config) { + $delegate.delete = function (url, config) { return wrapper(angular.extend(config || {}, { method: 'delete', url: url @@ -2436,7 +2444,7 @@ angular.module('zmApp', [ //controller: 'AppCtrl' }) - + .state('app.login', { data: { diff --git a/www/js/ionicUtils.js b/www/js/ionicUtils.js index c5da1304..cf75d1f4 100644 --- a/www/js/ionicUtils.js +++ b/www/js/ionicUtils.js @@ -21,7 +21,7 @@ angular.module('ionic.utils', []) $window.localStorage[key] = JSON.stringify(value); }, getObject: function (key) { - + return JSON.parse($window.localStorage[key] || '{}'); } }; |
