summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--www/js/MontageCtrl.js166
-rw-r--r--www/js/MontageHistoryCtrl.js5
-rwxr-xr-xwww/js/app.js22
-rw-r--r--www/templates/montage.html8
4 files changed, 133 insertions, 68 deletions
diff --git a/www/js/MontageCtrl.js b/www/js/MontageCtrl.js
index 9cf5e77d..8c1ab309 100644
--- a/www/js/MontageCtrl.js
+++ b/www/js/MontageCtrl.js
@@ -6,7 +6,7 @@
/* global cordova,StatusBar,angular,console,ionic,Packery, Draggabilly, imagesLoaded, ConnectSDK, moment */
angular.module('zmApp.controllers')
-.controller('zmApp.MontageCtrl', ['$scope', '$rootScope', 'NVRDataModel', 'message', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$ionicPopup', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$ionicPlatform', 'zm', '$ionicPopover', '$controller', 'imageLoadingDataShare', '$window', '$localstorage', '$translate', 'SecuredPopups', 'EventServer', function($scope, $rootScope, NVRDataModel, message, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $ionicPopup, $stateParams, $ionicHistory, $ionicScrollDelegate, $ionicPlatform, zm, $ionicPopover, $controller, imageLoadingDataShare, $window, $localstorage, $translate, SecuredPopups, EventServer)
+.controller('zmApp.MontageCtrl', ['$scope', '$rootScope', 'NVRDataModel', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$ionicPopup', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$ionicPlatform', 'zm', '$ionicPopover', '$controller', 'imageLoadingDataShare', '$window', '$localstorage', '$translate', 'SecuredPopups', 'EventServer', function($scope, $rootScope, NVRDataModel, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $ionicPopup, $stateParams, $ionicHistory, $ionicScrollDelegate, $ionicPlatform, zm, $ionicPopover, $controller, imageLoadingDataShare, $window, $localstorage, $translate, SecuredPopups, EventServer)
{
//---------------------------------------------------------------------
@@ -28,6 +28,10 @@ angular.module('zmApp.controllers')
var ld;
var refreshSec;
var reloadPage = zm.forceMontageReloadDelay;
+ var viewCleaned = false;
+
+ var isKilled = false;
+
//var reloadPage = 30;
var simulStreaming = 0; // will be 1 if you multiport
@@ -1119,7 +1123,7 @@ angular.module('zmApp.controllers')
if (simulStreaming=='1') {
NVRDataModel.debug ("Killing all streams in montage to save memory/nw...");
for (var i=0; i < $scope.MontageMonitors.length; i++) {
- NVRDataModel.killStream($scope.MontageMonitors[i].Monitor.connKey);
+ NVRDataModel.killLiveStream($scope.MontageMonitors[i]);
}
}
@@ -1294,15 +1298,36 @@ angular.module('zmApp.controllers')
// refreshes to the server for images we are not seeing
//---------------------------------------------------------------------
- function onPause()
- {
- NVRDataModel.debug("MontageCtrl: onpause called");
+
+ // so when we go to pause,
+ // doing connkey kills is a bad idea
+ // because root window stop messes up return
+
+ function pauseViewCleanup() {
+ viewCleaned = true;
+ if (pckry) pckry.destroy();
$interval.cancel(intervalHandleMontage);
$interval.cancel(intervalHandleMontageCycle);
$interval.cancel(intervalHandleAlarmStatus);
$interval.cancel(intervalHandleReloadPage);
- NVRDataModel.debug ("Deregistering broadcast handles");
+
+ }
+
+ function viewCleanup() {
+
+ if (viewCleaned) {
+ NVRDataModel.debug ("Montage View Cleanup was already done, skipping");
+ return;
+ }
+ viewCleaned = true;
+ $interval.cancel(intervalHandleMontage);
+ $interval.cancel(intervalHandleMontageCycle);
+ $interval.cancel(intervalHandleAlarmStatus);
+ $interval.cancel(intervalHandleReloadPage);
+ if (pckry) pckry.destroy();
+
+ NVRDataModel.debug ("Montage: Deregistering broadcast handles");
for (var i=0; i < broadcastHandles.length; i++) {
broadcastHandles[i]();
}
@@ -1314,20 +1339,26 @@ angular.module('zmApp.controllers')
if (!$scope.singleMonitorModalOpen && simulStreaming=='1') {
NVRDataModel.debug ("Killing all streams in montage to save memory/nw...");
for (i=0; i < $scope.MontageMonitors.length; i++) {
- NVRDataModel.killStream($scope.MontageMonitors[i].Monitor.connKey);
+ NVRDataModel.killLiveStream($scope.MontageMonitors[i]);
}
}
- // $interval.cancel(modalIntervalHandle);
- // FIXME: Do I need to setAwake(false) here?
+
+ }
+
+ function onPause()
+ {
+ NVRDataModel.debug("MontageCtrl: onpause called");
+ viewCleanup();
}
function onResume()
{
- NVRDataModel.debug ("Montage resume called, regenerating all connkeys");
- NVRDataModel.regenConnKeys();
- $scope.MontageMonitors = NVRDataModel.getMonitorsNow();
+ // we should be going to portal login so no need here
+ //NVRDataModel.debug ("Montage resume called, regenerating all connkeys");
+ //NVRDataModel.regenConnKeys();
+ // $scope.MontageMonitors = NVRDataModel.getMonitorsNow();
}
@@ -1341,8 +1372,10 @@ angular.module('zmApp.controllers')
$ionicSideMenuDelegate.toggleLeft();
};
+
$scope.$on('$destroy', function() {
+ console.log ("MONTAGE DESTROYED!!!!!!!!!!!!!!!!!");
});
$scope.$on('$ionicView.loaded', function()
@@ -1476,7 +1509,8 @@ angular.module('zmApp.controllers')
pckry.destroy();
NVRDataModel.reloadMonitorDisplayStatus();
NVRDataModel.regenConnKeys();
- $scope.MontageMonitors = NVRDataModel.getMonitorsNow();
+ $scope.monitors = NVRDataModel.getMonitorsNow();
+ $scope.MontageMonitors = angular.copy($scope.monitors);
$timeout (function() {initPackery();},zm.packeryTimer);
@@ -1682,13 +1716,60 @@ angular.module('zmApp.controllers')
$scope.getMode = function() {
// console.log ("SIMUL="+simulStreaming);
- return (simulStreaming == '1') ? 'jpeg': 'single';
+ var mode = (simulStreaming == '1' && !$scope.areImagesLoading) ? 'jpeg': 'single';
+ //console.log ("mode="+mode);
+ return mode;
};
+
+ function getMode() {
+ var mode = (simulStreaming == '1' && !$scope.areImagesLoading) ? 'jpeg': 'single';
+ //console.log ("mode="+mode);
+ return mode;
+
+ }
+
+
+ $scope.killAllImages= function() {
+ //isKilled = !isKilled;
+
+ if (simulStreaming=='1') {
+ NVRDataModel.debug ("Killing all streams in montage to save memory/nw...");
+ for (var i=0; i < $scope.MontageMonitors.length; i++) {
+ NVRDataModel.killLiveStream($scope.MontageMonitors[i]);
+ }
+ }
+
+ };
+
+ $scope.constructStream = function(monitor) {
+
+ var stream = '';
+
+ if (!isKilled)
+ stream = monitor.Monitor.streamingURL +
+ "/nph-zms?mode="+getMode() +
+ "&monitor="+monitor.Monitor.Id +
+ "&scale="+$scope.LoginData.montageQuality +
+ $rootScope.authSession +
+ //"&rand="+$scope.randToAvoidCacheMem +
+ appendConnKey (monitor.Monitor.connKey);
+
+ return stream;
+
+ };
+
+ function appendConnKey (ck) {
+ if (simulStreaming == '1' && !$scope.areImagesLoading)
+ return "&connkey="+ck;
+ else
+ return "";
+ }
+
// using connkey in snapshot results in error
$scope.appendConnKey =function(ck) {
- if (simulStreaming == '1')
+ if (simulStreaming == '1' && !$scope.areImagesLoading)
return "&connkey="+ck;
else
return "";
@@ -1710,7 +1791,17 @@ angular.module('zmApp.controllers')
$scope.$on('$ionicView.beforeEnter', function()
{
-
+ // NVRDataModel.regenConnKeys();
+ $scope.monitors = NVRDataModel.getMonitorsNow();
+
+
+
+ $scope.MontageMonitors = angular.copy($scope.monitors);
+
+ for (var ck=0; ck < $scope.MontageMonitors.length; ck++) {
+ console.log ("Monitor: " + $scope.MontageMonitors[ck].Monitor.Name + " Connkey:"+ $scope.MontageMonitors[ck].Monitor.connKey );
+ }
+
$scope.singleMonitorModalOpen = false;
// $scope.minimal = $stateParams.minimal;
var ld = NVRDataModel.getLogin();
@@ -1800,9 +1891,6 @@ angular.module('zmApp.controllers')
$scope.monLimit = $scope.LoginData.maxMontage;
$scope.toggleSubMenu = NVRDataModel.getLogin().showMontageSubMenu;
-
- $scope.monitors = message;
- $scope.MontageMonitors = angular.copy(message);
$scope.sliderChanging = false;
loginData = NVRDataModel.getLogin();
@@ -1935,49 +2023,15 @@ angular.module('zmApp.controllers')
window.addEventListener("resize", orientationChanged, false);
document.addEventListener("pause", onPause, false);
- document.addEventListener("resume", onResume, false);
+ // document.addEventListener("resume", onResume, false);
});
$scope.$on('$ionicView.beforeLeave', function()
{
- NVRDataModel.debug ("Deregistering broadcast handles");
- for (var i=0; i < broadcastHandles.length; i++) {
- broadcastHandles[i]();
- }
- broadcastHandles = [];
-
- // console.log("**VIEW ** Montage Ctrl Left, force removing modal");
-
- //console.log ("beforeLeave:Cancelling timer");
- $interval.cancel(intervalHandleMontage);
- $interval.cancel(intervalHandleMontageCycle);
- $interval.cancel(intervalHandleAlarmStatus);
- $interval.cancel(intervalHandleReloadPage);
- pckry.destroy();
- window.removeEventListener("resize", orientationChanged, false);
-
- // killing connkeys STILL leaks apache
- NVRDataModel.log("MontageCtrl:Stopping network pull...");
- NVRDataModel.stopNetwork();
-
- /* if (!$scope.singleMonitorModalOpen) {
- NVRDataModel.debug ("Killing all streams in montage before exit");
- for (var i=0; i < $scope.MontageMonitors.length; i++) {
- NVRDataModel.killStream($scope.MontageMonitors[i].Monitor.connKey);
- }
- }*/
-
- // make sure this is applied in scope digest to stop network pull
- // thats why we are doing it beforeLeave
-
- /*if (NVRDataModel.isForceNetworkStop())
- {
- NVRDataModel.log("MontageCtrl:Stopping network pull...");
- NVRDataModel.stopNetwork();
-
- }*/
+ isKilled =true;
+ viewCleanup();
});
diff --git a/www/js/MontageHistoryCtrl.js b/www/js/MontageHistoryCtrl.js
index 43cb8f8f..75fcdcc7 100644
--- a/www/js/MontageHistoryCtrl.js
+++ b/www/js/MontageHistoryCtrl.js
@@ -865,6 +865,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc
function onResume()
{}
+
$scope.openMenu = function()
{
$timeout(function()
@@ -911,13 +912,13 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc
{
//console.log("**VIEW ** Event History Ctrl Left, force removing modal");
- NVRDataModel.debug ("Deregistering broadcast handles");
+ NVRDataModel.debug ("Montage History: Deregistering broadcast handles");
for (var i=0; i < broadcastHandles.length; i++) {
broadcastHandles[i]();
}
broadcastHandles = [];
-
+
if ($scope.modal) $scope.modal.remove();
NVRDataModel.log("Cancelling event query timer");
$interval.cancel($rootScope.eventQueryInterval);
diff --git a/www/js/app.js b/www/js/app.js
index 92fed8e1..ef545483 100755
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -853,7 +853,7 @@ angular.module('zmApp', [
//------------------------------------------------------------------
$rootScope.$on("init-complete", function () {
- NVRDataModel.log(">>>>>>>>>>>>>>> All init over, going to portal login");
+ NVRDataModel.log("Inside init-complete in app.js: All init over, going to portal login");
$ionicHistory.nextViewOptions({
disableAnimate: true
});
@@ -1795,6 +1795,7 @@ angular.module('zmApp', [
//----------------------------------------------------------------------------
document.addEventListener("resume", function () {
+ NVRDataModel.setJustResumed(true);
$ionicPlatform.ready(function () {
NVRDataModel.log("App is resuming from background");
$rootScope.isDownloading = false;
@@ -1851,7 +1852,8 @@ angular.module('zmApp', [
//----------------------------------------------------------------------------
document.addEventListener("pause", function () {
NVRDataModel.setBackground(true);
- NVRDataModel.setJustResumed(true); // used for window stop
+ NVRDataModel.setJustResumed(false);
+ // NVRDataModel.setJustResumed(true); // used for window stop
EventServer.disconnect();
@@ -1859,18 +1861,21 @@ angular.module('zmApp', [
$interval.cancel($rootScope.eventQueryInterval);
$interval.cancel($rootScope.intervalHandle);
+ zmAutoLogin.stop();
+ if ($rootScope.zmPopup)
+ $rootScope.zmPopup.close();
- NVRDataModel.log("ROOT APP: Stopping network pull...");
- window.stop(); // dont call stopNetwork - we need to stop here
- var ld = NVRDataModel.getLogin();
+ NVRDataModel.log("ROOT APP: Stopping network ");
+ NVRDataModel.stopNetwork("called from app.js");
+ // dont call stopNetwork - we need to stop here
+
+ var ld = NVRDataModel.getLogin();
- zmAutoLogin.stop();
- if ($rootScope.zmPopup)
- $rootScope.zmPopup.close();
+
if (ld.exitOnSleep && $rootScope.platformOS == "android") {
NVRDataModel.log("user exited app");
@@ -2259,6 +2264,7 @@ angular.module('zmApp', [
resolve: {
message: function (NVRDataModel) {
//console.log("Inside app.events resolve");
+ NVRDataModel.regenConnKeys();
return NVRDataModel.getMonitors(0);
}
diff --git a/www/templates/montage.html b/www/templates/montage.html
index 5abf9b22..1a0b56df 100644
--- a/www/templates/montage.html
+++ b/www/templates/montage.html
@@ -33,6 +33,10 @@
<br/>
<div id="flyoutmenu" style="float:left">
<ul>
+ <li>
+ <a href="" ng-click="killAllImages()"> <i class="ion-ionic"></i></a>
+ </li>
+
<li>
<a href="" ng-click="sliderChanged(1)"> <i class="ion-plus-circled"></i></a>
</li>
@@ -99,8 +103,8 @@
<!--<div ng-if="$root.authSession!='undefined' && !isBackground() && !areImagesLoading">-->
<div ng-if="$root.authSession!='undefined' && !isBackground() ">
<div ng-if = "!minimal" >
-
- <img class="{{monitor.Monitor.selectStyle}}" id="img-{{$index}}" image-spinner-src="{{monitor.Monitor.streamingURL}}/nph-zms?mode={{getMode()}}&monitor={{monitor.Monitor.Id}}&scale={{LoginData.montageQuality}}{{$root.authSession}}&rand={{randToAvoidCacheMem}}{{appendConnKey(monitor.Monitor.connKey)}}" ng-click="!isDragabillyOn?openModal(monitor.Monitor.Id, monitor.Monitor.Controllable, monitor.Monitor.ControlId, monitor.Monitor.connKey,monitor):toggleSelectItem(monitor.Monitor.Id);" image-spinner-loader="lines" img-spinner-w="{{monitor.Monitor.Width}}" img-spinner-h="{{monitor.Monitor.Height}}" />
+
+ <img class="{{monitor.Monitor.selectStyle}}" id="img-{{$index}}" image-spinner-src="{{constructStream(monitor)}}" ng-click="!isDragabillyOn?openModal(monitor.Monitor.Id, monitor.Monitor.Controllable, monitor.Monitor.ControlId, monitor.Monitor.connKey,monitor):toggleSelectItem(monitor.Monitor.Id);" image-spinner-loader="lines" img-spinner-w="{{monitor.Monitor.Width}}" img-spinner-h="{{monitor.Monitor.Height}}" />
</div>