diff options
| author | pliablepixels <pliablepixels@gmail.com> | 2016-01-29 14:17:35 -0500 |
|---|---|---|
| committer | pliablepixels <pliablepixels@gmail.com> | 2016-01-29 14:17:35 -0500 |
| commit | a3090dd2d4af0de8829464874f572e1caed8e76c (patch) | |
| tree | 57834d955742c88aadc4ff1b81366347e16860ce /www/js | |
| parent | 77bc8857ccaf16c70a68f95f750191b469bf07ff (diff) | |
#154 and #155 various updates, also ties into https://github.com/ZoneMinder/ZoneMinder/issues/1253
Former-commit-id: 7f939b4bad5d9463a7653abbdcafd79d8a6c1fa8
Diffstat (limited to 'www/js')
| -rw-r--r-- | www/js/DataModel.js | 21 | ||||
| -rw-r--r-- | www/js/EventCtrl.js | 2 | ||||
| -rw-r--r-- | www/js/ModalCtrl.js | 140 | ||||
| -rw-r--r-- | www/js/MonitorCtrl.js | 9 | ||||
| -rw-r--r-- | www/js/MontageCtrl.js | 12 | ||||
| -rw-r--r-- | www/js/MontageHistoryCtrl.js | 53 | ||||
| -rw-r--r-- | www/js/app.js | 1 |
7 files changed, 213 insertions, 25 deletions
diff --git a/www/js/DataModel.js b/www/js/DataModel.js index 88a0ac38..28228e1c 100644 --- a/www/js/DataModel.js +++ b/www/js/DataModel.js @@ -64,6 +64,7 @@ angular.module('zmApp.controllers') 'useNphZms':true, 'packMontage':true, 'exitOnSleep':false, + 'forceNetworkStop':false }; @@ -243,6 +244,13 @@ angular.module('zmApp.controllers') loginData.packMontage = true; } + if (typeof loginData.forceNetworkStop == 'undefined') + { + zmDebug ("forceNetwork does not exist. Setting to false"); + loginData.forceNetworkStop = false; + } + + if (typeof loginData.exitOnSleep == 'undefined') { @@ -263,6 +271,11 @@ angular.module('zmApp.controllers') zmDebug ( "loginData structure values: " + JSON.stringify(loginData)); }, + + isForceNetworkStop: function() + { + return loginData.forceNetworkStop; + }, isLoggedIn: function () { @@ -491,7 +504,7 @@ angular.module('zmApp.controllers') // need a mid as restricted users won't be able to get // auth with just &watch - getAuthKey: function (mid) + getAuthKey: function (mid, ck) { var d=$q.defer(); @@ -504,7 +517,7 @@ angular.module('zmApp.controllers') // Skipping monitor number as I only need an auth key // so no need to generate an image - var myurl =loginData.url+"/index.php?view=watch&mid="+mid; + var myurl =loginData.url+"/index.php?view=watch&mid="+mid+"&connkey="+ck; zmDebug ("DataModel: Getting auth from " + myurl + " with mid="+mid); $http.get (myurl) .then (function (success) { @@ -776,6 +789,10 @@ angular.module('zmApp.controllers') { monitors[i].Monitor.listDisplay='show'; monitors[i].Monitor.isAlarmed = 'false'; + monitors[i].Monitor.connKey = monitors[i].Monitor.Id.toString() + Math.floor((Math.random() * 100000) + 1); + zmLog("ConnKey for "+monitors[i].Monitor.Id+" is :"+monitors[i].Monitor.connKey); + + // monitors[i].Monitor.sortOrder=i; } d.resolve(monitors); diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js index 47aa629c..f4ca7da8 100644 --- a/www/js/EventCtrl.js +++ b/www/js/EventCtrl.js @@ -1033,6 +1033,8 @@ angular.module('zmApp.controllers') //-------------------------------------------------------- function controlEventStream(cmd, disp) { + + ZMDataModel.zmDebug ("OH CRAP!! THE WORLD HAS COME TO AN END****************"); // console.log("Command value " + cmd); if (disp) { diff --git a/www/js/ModalCtrl.js b/www/js/ModalCtrl.js index 0dbda85c..90804473 100644 --- a/www/js/ModalCtrl.js +++ b/www/js/ModalCtrl.js @@ -70,7 +70,7 @@ angular.module('zmApp.controllers').controller('ModalCtrl', ['$scope', '$rootSco $rootScope.validMonitorId = $scope.monitors[0].Monitor.Id; - ZMDataModel.getAuthKey($rootScope.validMonitorId) + ZMDataModel.getAuthKey($rootScope.validMonitorId, $scope.monitors[0].Monitor.connKey) .then(function (success) { $ionicLoading.hide(); $rootScope.authSession = success; @@ -309,7 +309,142 @@ angular.module('zmApp.controllers').controller('ModalCtrl', ['$scope', '$rootSco // ZMDataModel.isBackground()); return ZMDataModel.isBackground(); }; + + + + + + $scope.controlStream = function (cmd,disp,connkey,ndx) + { + controlStream(cmd,disp,connkey,ndx); + }; + + function controlStream(cmd, disp, connkey, ndx) { + // console.log("Command value " + cmd); + + if (disp) { + $ionicLoading.hide(); + $ionicLoading.show({ + template: "please wait...", + noBackdrop: true, + duration: zm.loadingTimeout, + }); + } + var loginData = ZMDataModel.getLogin(); + + /* + var CMD_NONE = 0; + var CMD_PAUSE = 1; + var CMD_PLAY = 2; + var CMD_STOP = 3; + var CMD_FASTFWD = 4; + var CMD_SLOWFWD = 5; + var CMD_SLOWREV = 6; + var CMD_FASTREV = 7; + var CMD_ZOOMIN = 8; + var CMD_ZOOMOUT = 9; + var CMD_PAN = 10; + var CMD_SCALE = 11; + var CMD_PREV = 12; + var CMD_NEXT = 13; + var CMD_SEEK = 14; + var CMD_QUIT = 17; + var CMD_QUERY = 99; + */ + + + + // You need to POST commands to control zms + // Note that I am url encoding the parameters into the URL + // If I leave it as JSON, it gets converted to OPTONS due + // to CORS behaviour and ZM/Apache don't seem to handle it + + //console.log("POST: " + loginData.url + '/index.php'); + + //console.log ("AUTH IS " + $rootScope.authSession); + + var myauthtoken = $rootScope.authSession.replace("&auth=",""); + //&auth= + var req = $http({ + method: 'POST', + /*timeout: 15000,*/ + url: loginData.url + '/index.php', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + //'Accept': '*/*', + }, + transformRequest: function (obj) { + var str = []; + for (var p in obj) + str.push(encodeURIComponent(p) + "=" + + encodeURIComponent(obj[p])); + var foo = str.join("&"); + console.log("****RETURNING " + foo); + return foo; + }, + + data: { + view: "request", + request: "stream", + connkey: connkey, + command: cmd, + auth: myauthtoken, + // user: loginData.username, + // pass: loginData.password + } + }); + req.success(function (resp) { + + console.log("SUCCESS FOR: " + JSON.stringify(resp)); + + if (resp.result=="Ok" && ndx != -1) + { + var ld = ZMDataModel.getLogin(); + var apiurl= ld.apiurl + "/events/"+resp.status.event+".json"; + console.log ("API " + apiurl); + $http.get (apiurl) + .success (function (data) + { + if ($scope.MontageMonitors[ndx].eventUrlTime!=data.event.Event.StartTime) + { + + var element = angular.element(document.getElementById($scope.MontageMonitors[ndx].Monitor.Id+"-timeline")); + element.removeClass ('animated slideInRight'); + element.addClass('animated slideOutRight'); + $timeout (function() { + element.removeClass ('animated slideOutRight'); + element.addClass('animated slideInRight'); + $scope.MontageMonitors[ndx].eventUrlTime=data.event.Event.StartTime; + },300); + + } + + }) + .error (function (data) + { + $scope.MontageMonitors[ndx].eventUrlTime="-"; + }); + + } + //var str = toast_blurb + "event:" + resp.status.event; + // console.log(str); + // $ionicLoading.hide(); + + + + + }); + req.error(function (resp) { + //console.log("ERROR: " + JSON.stringify(resp)); + ZMDataModel.zmLog("Error sending event command " + JSON.stringify(resp), "error"); + }); + } + + + + + //------------------------------------------------------------- // Send PTZ command to ZM // Note: PTZ fails on desktop, don't bother about it @@ -874,6 +1009,9 @@ angular.module('zmApp.controllers').controller('ModalCtrl', ['$scope', '$rootSco $scope.isModalActive = false; console.log("**MODAL REMOVED: Stopping modal timer"); $interval.cancel(intervalModalHandle); + ZMDataModel.zmDebug ("Modal removed - killing connkey"); + controlStream(17,"",$scope.connKey,-1); + // Execute action }); diff --git a/www/js/MonitorCtrl.js b/www/js/MonitorCtrl.js index 6d77b4fe..6b712507 100644 --- a/www/js/MonitorCtrl.js +++ b/www/js/MonitorCtrl.js @@ -20,6 +20,8 @@ angular.module('zmApp.controllers') $scope.monitors = []; $scope.monitors = message; + + if ($scope.monitors.length == 0) { @@ -283,7 +285,7 @@ angular.module('zmApp.controllers') console.log("**VIEW ** Monitor Ctrl Unloaded"); }); - $scope.openModal = function (mid, controllable, controlid) { + $scope.openModal = function (mid, controllable, controlid, connKey) { ZMDataModel.zmDebug("MonitorCtrl:Open Monitor Modal with monitor Id=" + mid + " and Controllable:" + controllable + " with control ID:" + controlid); @@ -293,10 +295,13 @@ angular.module('zmApp.controllers') $scope.LoginData = ZMDataModel.getLogin(); $scope.rand = Math.floor(Math.random() * (999999 - 111111 + 1)) + 111111; $rootScope.rand = Math.floor(Math.random() * (999999 - 111111 + 1)) + 111111; + $scope.connKey = connKey; $scope.ptzMoveCommand = ""; $scope.presetOn = false; + + // This is a modal to show the monitor footage // We need to switch to always awake if set so the feed doesn't get interrupted @@ -400,7 +405,7 @@ angular.module('zmApp.controllers') // switch off awake, as liveview is finished ZMDataModel.setAwake(false); $scope.modal.remove(); - $timeout (function() {ZMDataModel.zmLog("Stopping network pull...");window.stop();},50); + $timeout (function() {ZMDataModel.zmLog("Stopping network pull...");if (ZMDataModel.isForceNetworkStop()) window.stop();},50); }; //Cleanup the modal when we're done with it! $scope.$on('$destroy', function () { diff --git a/www/js/MontageCtrl.js b/www/js/MontageCtrl.js index 2e64d3e5..9a564dd1 100644 --- a/www/js/MontageCtrl.js +++ b/www/js/MontageCtrl.js @@ -61,6 +61,9 @@ angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', ' // console.log ("TEMP MONITORS IS " + JSON.stringify(tempMonitors)); var tempResponse = ZMDataModel.applyMontageMonitorPrefs(message, 0); $scope.monitors = tempResponse[0]; + + + montageOrder = tempResponse[1]; hiddenOrder = tempResponse[2]; @@ -191,7 +194,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', ' //console.log ("MONITORS " + JSON.stringify($scope.monitors)); $rootScope.validMonitorId = $scope.monitors[0].Monitor.Id; - ZMDataModel.getAuthKey($rootScope.validMonitorId) + ZMDataModel.getAuthKey($rootScope.validMonitorId, $scope.monitors[0].Monitor.connKey) .then(function (success) { $ionicLoading.hide(); console.log(success); @@ -565,7 +568,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', ' //--------------------------------------------------------------------- // main monitor modal open //--------------------------------------------------------------------- - $scope.openModal = function (mid, controllable, controlid) { + $scope.openModal = function (mid, controllable, controlid, connKey) { ZMDataModel.zmDebug("MontageCtrl: Open Monitor Modal with monitor Id=" + mid + " and Controllable:" + controllable + " with control ID:" + controlid); // $scope.isModalActive = true; // Note: no need to setAwake(true) as its already awake @@ -589,6 +592,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', ' $scope.ptzMoveCommand = ""; $scope.ptzStopCommand = ""; $scope.presetOn = false; + $scope.connKey = connKey; // This is a modal to show the monitor footage // We need to switch to always awake if set so the feed doesn't get interrupted @@ -682,7 +686,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', ' $scope.modal.remove(); - $timeout (function() {ZMDataModel.zmLog("Stopping network pull...");window.stop();},50); + $timeout (function() {ZMDataModel.zmLog("Stopping network pull...");if (ZMDataModel.isForceNetworkStop()) window.stop();},50); $rootScope.rand = Math.floor((Math.random() * 100000) + 1); $scope.isModalActive = false; @@ -853,7 +857,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', ' // make sure this is applied in scope digest to stop network pull // thats why we are doing it beforeLeave - window.stop(); + if (ZMDataModel.isForceNetworkStop()) window.stop(); }); diff --git a/www/js/MontageHistoryCtrl.js b/www/js/MontageHistoryCtrl.js index 0afa5b6a..844031be 100644 --- a/www/js/MontageHistoryCtrl.js +++ b/www/js/MontageHistoryCtrl.js @@ -59,7 +59,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc var cmd = $scope.MontageMonitors[m].isPaused? 1:2; ZMDataModel.zmDebug ("Sending CMD:"+cmd+" for monitor "+$scope.MontageMonitors[m].Monitor.Name); - controlEventStream(cmd,"",$scope.MontageMonitors[m].connKey,-1); + controlEventStream(cmd,"",$scope.MontageMonitors[m].Monitor.connKey,-1); } }; @@ -79,6 +79,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc console.log ("******************COLLAPSE"); + window.stop(); $scope.sliderVal.realRate = $scope.sliderVal.rate *100; ZMDataModel.zmDebug ("Playback rate is:" + $scope.sliderVal.realRate); @@ -90,13 +91,13 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc var TimeObjectTo = moment(TimeObjectFrom).add(1,'hour').format('YYYY-MM-DD HH:mm'); - if ($scope.datetimeValue.value == $scope.oldTime) + /*if ($scope.datetimeValue.value == $scope.oldTime) { ZMDataModel.zmLog ("********** Date HAS NOT CHANGED"); return; - } + }*/ - window.stop(); + if (ZMDataModel.isForceNetworkStop()) window.stop(); $scope.oldTime = $scope.datetimeValue.value; @@ -105,10 +106,17 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc for (var i=0; i< $scope.MontageMonitors.length; i++) { - $scope.MontageMonitors[i].eventUrl = "img/noevent.png"; - $scope.MontageMonitors[i].eventUrlTime=""; - $scope.MontageMonitors[i].isPaused=false; - $scope.MontageMonitors[i].connKey = $rootScope.rand = Math.floor((Math.random() * 100000) + 1); + // generate new connKeys if timeline changes + if ($scope.MontageMonitors[i].Monitor.connKey) + { + ZMDataModel.zmLog ("Calling kill with " + $scope.MontageMonitors[i].Monitor.connKey); + controlEventStream(17,"",$scope.MontageMonitors[i].Monitor.connKey,-1); + $scope.MontageMonitors[i].Monitor.connKey = $scope.MontageMonitors[i].Monitor.Id.toString() + Math.floor((Math.random() * 100000) + 1); + } + $scope.MontageMonitors[i].eventUrl = "img/noevent.png"; + // $scope.MontageMonitors[i].eventUrlTime=""; + // $scope.MontageMonitors[i].isPaused=false; + // $scope.MontageMonitors[i].connkey= i; @@ -154,6 +162,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc if (!ZMDataModel.isBackground()) { $scope.MontageMonitors[j].eventUrl=ld.streamingurl+"/nph-zms?source=event&mode=jpeg&event="+eid+"&frame=1&replay="+($scope.sliderVal.enableGapless?"gapless":"single"); + console.log ("SWITCHING TO " + $scope.MontageMonitors[j].eventUrl); $scope.MontageMonitors[j].eventUrlTime = stime; @@ -213,6 +222,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc { $scope.MontageMonitors[i].eventUrl=ld.streamingurl+"/nph-zms?source=event&mode=jpeg&event="+data.events[0].Event.Id+"&frame=1&replay="+($scope.sliderVal.enableGapless?"gapless":"single"); + console.log ("SWITCHING TO " + $scope.MontageMonitors[i].eventUrl); $scope.MontageMonitors[i].eventUrlTime = data.events[0].Event.StartTime; @@ -253,7 +263,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc if ($scope.MontageMonitors[i].eventUrl !="" && $scope.MontageMonitors[i].eventUrl !='img/noevent.png') { console.log ("Checking event status for " + $scope.MontageMonitors[i].Monitor.Name); - controlEventStream('99','',$scope.MontageMonitors[i].connKey, i); + controlEventStream('99','',$scope.MontageMonitors[i].Monitor.connKey, i); } } @@ -373,13 +383,16 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc if ($scope.MontageMonitors[ndx].eventUrlTime!=data.event.Event.StartTime) { + var ld = ZMDataModel.getLogin(); var element = angular.element(document.getElementById($scope.MontageMonitors[ndx].Monitor.Id+"-timeline")); - element.removeClass ('animated slideInRight'); - element.addClass('animated slideOutRight'); + element.removeClass ('animated flipInX'); + element.addClass('animated flipOutX'); $timeout (function() { - element.removeClass ('animated slideOutRight'); - element.addClass('animated slideInRight'); + element.removeClass ('animated flipOutX'); + element.addClass('animated flipInX'); $scope.MontageMonitors[ndx].eventUrlTime=data.event.Event.StartTime; + + $scope.MontageMonitors[ndx].eventUrl=ld.streamingurl+"/nph-zms?source=event&mode=jpeg&event="+data.event.Event.Id+"&frame=1&replay="+($scope.sliderVal.enableGapless?"gapless":"single"); },300); } @@ -602,7 +615,9 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc for (i=0; i< $scope.MontageMonitors.length; i++) { $scope.MontageMonitors[i].eventUrl = "img/noevent.png"; - + $scope.MontageMonitors[i].eventUrlTime=""; + $scope.MontageMonitors[i].isPaused=false; + } @@ -1218,7 +1233,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc $scope.modal.remove(); - $timeout (function() {ZMDataModel.zmLog("Stopping network pull...");window.stop();},50); + $timeout (function() {ZMDataModel.zmLog("Stopping network pull...");if (ZMDataModel.isForceNetworkStop()) window.stop();},50); $rootScope.rand = Math.floor((Math.random() * 100000) + 1); $scope.isModalActive = false; @@ -1395,7 +1410,13 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc // make sure this is applied in scope digest to stop network pull // thats why we are doing it beforeLeave - window.stop(); + for (var i=0; i<$scope.MontageMonitors.length; i++) + { + ZMDataModel.zmLog ("Calling kill with " + $scope.MontageMonitors[i].Monitor.connKey); + controlEventStream(17,"",$scope.MontageMonitors[i].Monitor.connKey,-1); + } + + //window.stop(); /* $timeout ( function() { diff --git a/www/js/app.js b/www/js/app.js index 5f67ee44..071f2783 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -68,6 +68,7 @@ angular.module('zmApp', [ latestRelease: "https://api.github.com/repos/pliablepixels/zmNinja/releases/latest", nphSwitchTimer:6000, eventHistoryTimer:10000, + }) |
