summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPliable Pixels <pliablepixels@gmail.com>2018-04-14 18:01:00 -0400
committerPliable Pixels <pliablepixels@gmail.com>2018-04-14 18:01:00 -0400
commit40e07fd39fa64b174cfe79312a96f9b82d72d4b4 (patch)
tree97566446e4f45d2623279a0a5499d8f389a775f0
parent057f40889202702fc8464b4d6f68dc1863bec6d7 (diff)
#602 #606 - iOS won't support multiport. Webkit bug see https://bugs.webkit.org/show_bug.cgi?id=35377
-rwxr-xr-xwww/js/DataModel.js8
-rw-r--r--www/js/DevOptionsCtrl.js7
-rw-r--r--www/js/MonitorModalCtrl.js38
-rw-r--r--www/js/MontageCtrl.js3304
-rw-r--r--www/lang/locale-en.json1
-rw-r--r--www/templates/devoptions.html5
-rw-r--r--www/templates/montage.html6
7 files changed, 1600 insertions, 1769 deletions
diff --git a/www/js/DataModel.js b/www/js/DataModel.js
index a98b9af5..a7badad8 100755
--- a/www/js/DataModel.js
+++ b/www/js/DataModel.js
@@ -848,7 +848,13 @@ angular.module('zmApp.controllers')
if (typeof loginData.disableSimulStreaming == 'undefined') {
loginData.disableSimulStreaming = false;
+
}
+ // iOS it is always off, webkit bug
+
+ if ($rootScope.platformOS=='ios') {
+ loginData.disableSimulStreaming = true;
+ }
if (typeof loginData.exitOnSleep == 'undefined') {
debug("exitOnSleep does not exist. Setting to false");
@@ -1150,7 +1156,7 @@ angular.module('zmApp.controllers')
} else {
log(s + " stopNework: Calling window.stop()");
- $timeout (function() {window.stop();},10);
+ $timeout (function() {window.stop();});
}
},
diff --git a/www/js/DevOptionsCtrl.js b/www/js/DevOptionsCtrl.js
index e6f107c2..92c1e2c0 100644
--- a/www/js/DevOptionsCtrl.js
+++ b/www/js/DevOptionsCtrl.js
@@ -72,6 +72,10 @@ angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope'
return NVRDataModel.getTimeZoneNow();
};
+ $scope.checkMultiPortToggle = function() {
+ if ($rootScope.platformOS == 'ios')
+ $scope.loginData.disableSimulStreaming = true;
+ };
//------------------------------------------------------------------
// Perform the login action when the user submits the login form
//------------------------------------------------------------------
@@ -109,6 +113,9 @@ angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope'
$scope.loginData.singleImageQuality = zm.safeImageQuality.toString();
}
+ if (!$scope.loginData.disableSimulStreaming && $rootScope.platformOS=='ios') {
+ $scope.loginData.disableSimulStreaming = true;
+ }
NVRDataModel.debug("SaveDevOptions: Saving to disk");
NVRDataModel.setLogin($scope.loginData);
NVRDataModel.getMonitors(1);
diff --git a/www/js/MonitorModalCtrl.js b/www/js/MonitorModalCtrl.js
index 9522ebee..51f08fd5 100644
--- a/www/js/MonitorModalCtrl.js
+++ b/www/js/MonitorModalCtrl.js
@@ -200,7 +200,15 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
$scope.isModalStreamPaused = false;
$timeout (function() {
- NVRDataModel.killLiveStream($scope.connKey, $scope.controlURL);
+
+ if (0 && $rootScope.platformOS == 'ios') {
+ NVRDataModel.debug ("Webkit hack, hammering window.stop();");
+ NVRDataModel.stopNetwork();
+ }
+ else {
+ NVRDataModel.killLiveStream($scope.connKey, $scope.controlURL);
+ }
+
$scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
@@ -272,7 +280,13 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
$interval.cancel(cycleHandle);
NVRDataModel.debug("Killing single stream...");
+
+ if (0 && $rootScope.platformOS == 'ios') {
+ NVRDataModel.debug ("Webkit hack, hammering window.stop();");
+ NVRDataModel.stopNetwork();
+ } else {
NVRDataModel.killLiveStream($scope.connKey, $scope.controlURL);
+ }
// $interval.cancel(modalIntervalHandle);
// FIXME: Do I need to setAwake(false) here?
@@ -1202,8 +1216,19 @@ function appendSingleStreamConnKey() {
as(); // dregister auth success
$scope.isModalActive = false;
- NVRDataModel.debug("Single monitor exited killing stream");
- NVRDataModel.killLiveStream($scope.connKey, $scope.controlURL);
+
+ if (1 || $rootScope.platformOS != 'ios') {
+
+ // ios calls window stop...
+ NVRDataModel.debug("Single monitor exited killing stream");
+ NVRDataModel.killLiveStream($scope.connKey, $scope.controlURL);
+ }
+
+ else {
+
+ NVRDataModel.debug("Webkit hack, hammering window.stop();");
+ NVRDataModel.stopNetwork();
+ }
//console.log("**MODAL REMOVED: Stopping modal timer");
$interval.cancel(intervalModalHandle);
@@ -1601,6 +1626,13 @@ function appendSingleStreamConnKey() {
}
$scope.$on('modal.shown', function () {
+
+
+ if (0 && $rootScope.platformOS == 'ios') {
+ NVRDataModel.debug("Webkit hack, hammering window.stop();");
+ NVRDataModel.stopNetwork();
+ }
+
$scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
$scope.monStatus = "";
$scope.isToggleListMenu = true;
diff --git a/www/js/MontageCtrl.js b/www/js/MontageCtrl.js
index 0bc0511a..c0c9fc1b 100644
--- a/www/js/MontageCtrl.js
+++ b/www/js/MontageCtrl.js
@@ -1,4 +1,3 @@
-
// Controller for the montage view
/* jshint -W041 */
@@ -6,8 +5,7 @@
/* global cordova,StatusBar,angular,console,ionic,Packery, Draggabilly, imagesLoaded, ConnectSDK, moment */
angular.module('zmApp.controllers')
-.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)
-{
+ .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) {
//---------------------------------------------------------------------
// Controller main
@@ -34,7 +32,7 @@ angular.module('zmApp.controllers')
var areStreamsStopped = true; // first load snapshot
$scope.isModalStreamPaused = false; // used in Monitor Modal
-
+
//var reloadPage = 30;
var simulStreaming = false; // will be true if you multiport
@@ -42,29 +40,29 @@ angular.module('zmApp.controllers')
var broadcastHandles = [];
var as = $scope.$on("auth-success", function () {
-
- if ($scope.singleMonitorModalOpen) {
- NVRDataModel.debug ("Montage: Not creating streams, as modal is open");
- return;
- }
-
-
- NVRDataModel.debug("Montage Re-auth handler");
- areStreamsStopped = true;
+ if ($scope.singleMonitorModalOpen) {
+ NVRDataModel.debug("Montage: Not creating streams, as modal is open");
+ return;
+ }
- $timeout (function () { // after render
+
+ NVRDataModel.debug("Montage Re-auth handler");
+
+ areStreamsStopped = true;
+
+ $timeout(function () { // after render
if (simulStreaming) {
- NVRDataModel.debug ("Re-creating all stream connkeys in montage ...");
- NVRDataModel.regenConnKeys();
- $scope.monitors = NVRDataModel.getMonitorsNow();
- $scope.MontageMonitors = angular.copy($scope.monitors);
- $timeout(function() // after render
+ NVRDataModel.debug("Re-creating all stream connkeys in montage ...");
+ NVRDataModel.regenConnKeys();
+ $scope.monitors = NVRDataModel.getMonitorsNow();
+ $scope.MontageMonitors = angular.copy($scope.monitors);
+ $timeout(function () // after render
{
- initPackery();
+ initPackery();
}, zm.packeryTimer);
-
+
}
});
broadcastHandles.push(as);
@@ -76,51 +74,43 @@ angular.module('zmApp.controllers')
//
//--------------------------------------------------------------------------------------
- var bc = $scope.$on("bandwidth-change", function(e, data)
- {
- // not called for offline, I'm only interested in BW switches
- NVRDataModel.debug("Got network change:" + data);
- var ds;
- if (data == 'lowbw')
- {
- ds = $translate.instant('kLowBWDisplay');
- }
- else
- {
- ds = $translate.instant('kHighBWDisplay');
- }
- NVRDataModel.displayBanner('net', [ds]);
- var ld = NVRDataModel.getLogin();
- refreshSec = (NVRDataModel.getBandwidth() == 'lowbw') ? ld.refreshSecLowBW : ld.refreshSec;
-
- $interval.cancel(intervalHandleMontage);
- $interval.cancel(intervalHandleMontageCycle);
- $interval.cancel(intervalHandleReloadPage);
-
-
- intervalHandleMontage = $interval(function()
- {
- loadNotifications();
- }.bind(this), refreshSec * 1000);
+ var bc = $scope.$on("bandwidth-change", function (e, data) {
+ // not called for offline, I'm only interested in BW switches
+ NVRDataModel.debug("Got network change:" + data);
+ var ds;
+ if (data == 'lowbw') {
+ ds = $translate.instant('kLowBWDisplay');
+ } else {
+ ds = $translate.instant('kHighBWDisplay');
+ }
+ NVRDataModel.displayBanner('net', [ds]);
+ var ld = NVRDataModel.getLogin();
+ refreshSec = (NVRDataModel.getBandwidth() == 'lowbw') ? ld.refreshSecLowBW : ld.refreshSec;
+
+ $interval.cancel(intervalHandleMontage);
+ $interval.cancel(intervalHandleMontageCycle);
+ $interval.cancel(intervalHandleReloadPage);
+
+
+ intervalHandleMontage = $interval(function () {
+ loadNotifications();
+ }.bind(this), refreshSec * 1000);
- intervalHandleMontageCycle = $interval(function()
- {
- cycleMontageProfiles();
- }.bind(this), NVRDataModel.getLogin().cycleMontageInterval* 1000);
+ intervalHandleMontageCycle = $interval(function () {
+ cycleMontageProfiles();
+ }.bind(this), NVRDataModel.getLogin().cycleMontageInterval * 1000);
- intervalHandleReloadPage = $interval(function()
- {
- forceReloadPage();
- }.bind(this), reloadPage);
+ intervalHandleReloadPage = $interval(function () {
+ forceReloadPage();
+ }.bind(this), reloadPage);
- if (NVRDataModel.getBandwidth() == 'lowbw')
- {
- NVRDataModel.debug("Enabling low bandwidth parameters");
- $scope.LoginData.montageQuality = zm.montageQualityLowBW;
- $scope.LoginData.singleImageQuality = zm.eventSingleImageQualityLowBW;
- $scope.LoginData.montageHistoryQuality = zm.montageQualityLowBW;
+ if (NVRDataModel.getBandwidth() == 'lowbw') {
+ NVRDataModel.debug("Enabling low bandwidth parameters");
+ $scope.LoginData.montageQuality = zm.montageQualityLowBW;
+ $scope.LoginData.singleImageQuality = zm.eventSingleImageQualityLowBW;
+ $scope.LoginData.montageHistoryQuality = zm.montageQualityLowBW;
- }
+ }
});
broadcastHandles.push(bc);
@@ -130,31 +120,24 @@ angular.module('zmApp.controllers')
// close the modal
// --------------------------------------------------------
- $ionicPlatform.registerBackButtonAction(function(e)
- {
- e.preventDefault();
- if ($scope.modal != undefined && $scope.modal.isShown())
- {
- // switch off awake, as liveview is finished
- NVRDataModel.debug("Modal is open, closing it");
- NVRDataModel.setAwake(false);
- cleanupOnCloseModal();
- }
- else
- {
- NVRDataModel.debug("Modal is closed, so toggling or exiting");
- if (!$ionicSideMenuDelegate.isOpenLeft())
- {
- $ionicSideMenuDelegate.toggleLeft();
-
- }
- else
- {
- navigator.app.exitApp();
- }
+ $ionicPlatform.registerBackButtonAction(function (e) {
+ e.preventDefault();
+ if ($scope.modal != undefined && $scope.modal.isShown()) {
+ // switch off awake, as liveview is finished
+ NVRDataModel.debug("Modal is open, closing it");
+ NVRDataModel.setAwake(false);
+ cleanupOnCloseModal();
+ } else {
+ NVRDataModel.debug("Modal is closed, so toggling or exiting");
+ if (!$ionicSideMenuDelegate.isOpenLeft()) {
+ $ionicSideMenuDelegate.toggleLeft();
+ } else {
+ navigator.app.exitApp();
}
+ }
+
}, 1000);
/*$scope.toggleHide = function(mon)
@@ -172,324 +155,298 @@ angular.module('zmApp.controllers')
function forceReloadPage() {
- if ($scope.isDragabillyOn)
- {
- NVRDataModel.debug ("not reloading, edit in progress");
- return;
+ if ($scope.isDragabillyOn) {
+ NVRDataModel.debug("not reloading, edit in progress");
+ return;
- }
+ }
- var ld = NVRDataModel.getLogin();
- ld.reloadInMontage = true;
- NVRDataModel.log ("Reloading view to keep memory in check...");
- NVRDataModel.setLogin(ld)
- .then (function() {
- //window.location.reload(true);
- //location.reload();
- //$ionicHistory.clearCache();
- //$state.go('app.montage');
-
- /*$ionicHistory.clearCache([$state.current.name]).then(function() {
- $state.go('app.montage', $stateParams, {reload:true, inherit:false});
- });*/
- $ionicHistory.nextViewOptions({
- disableAnimate: true,
- disableBack: true
- });
-
- $state.go('app.refresh',
- {
- "view": 'app.montage'
- });
-
+ var ld = NVRDataModel.getLogin();
+ ld.reloadInMontage = true;
+ NVRDataModel.log("Reloading view to keep memory in check...");
+ NVRDataModel.setLogin(ld)
+ .then(function () {
+ //window.location.reload(true);
+ //location.reload();
+ //$ionicHistory.clearCache();
+ //$state.go('app.montage');
- /* $state.transitionTo($state.current, $stateParams, {
- reload: true,
- inherit: false,
- notify: true
+ /*$ionicHistory.clearCache([$state.current.name]).then(function() {
+ $state.go('app.montage', $stateParams, {reload:true, inherit:false});
});*/
-
- });
-
-
-
-
-
- /*$ionicHistory.nextViewOptions(
- {
+ $ionicHistory.nextViewOptions({
disableAnimate: true,
disableBack: true
- });
- $state.go("app.montage",
- {
- minimal: $scope.minimal,
- isRefresh: true
- });*/
- }
+ });
- // called by afterEnter to load Packery
- function initPackery()
- {
+ $state.go('app.refresh', {
+ "view": 'app.montage'
+ });
- /* $ionicLoading.show(
- {
- template: $translate.instant('kArrangingImages'),
- noBackdrop: true,
- duration: zm.loadingTimeout
- });*/
- areStreamsStopped = true;
+ /* $state.transitionTo($state.current, $stateParams, {
+ reload: true,
+ inherit: false,
+ notify: true
+ });*/
- $scope.areImagesLoading = true;
- var progressCalled = false;
- draggies = [];
- var layouttype = true;
- var ld = NVRDataModel.getLogin();
+ });
- var positionsStr = ld.packeryPositions;
- var positions = {};
- if (positionsStr == '' || positionsStr == undefined)
- {
- NVRDataModel.log("Did NOT find a packery layout");
- layouttype = true;
- }
- else
- {
- //console.log ("POSITION STR IS " + positionsStr);
- positions = JSON.parse(positionsStr);
- NVRDataModel.log("found a packery layout");
- layouttype = false;
- }
- var cnt = 0;
- $scope.MontageMonitors.forEach(function(elem)
- {
- if ((elem.Monitor.Enabled != '0') && (elem.Monitor.Function != 'None') )
- cnt++;
- });
+ /*$ionicHistory.nextViewOptions(
+ {
+ disableAnimate: true,
+ disableBack: true
+ });
+ $state.go("app.montage",
+ {
+ minimal: $scope.minimal,
+ isRefresh: true
+ });*/
+ }
- NVRDataModel.log("Monitors that are active and not DOM hidden: " + cnt + " while grid has " + positions.length);
+ // called by afterEnter to load Packery
+ function initPackery() {
- if (cnt > NVRDataModel.getLogin().maxMontage)
- {
- cnt = NVRDataModel.getLogin().maxMontage;
- NVRDataModel.log("restricting monitor count to " + cnt + " due to max-montage setting");
- }
+ /* $ionicLoading.show(
+ {
+ template: $translate.instant('kArrangingImages'),
+ noBackdrop: true,
+ duration: zm.loadingTimeout
+ });*/
+
+ areStreamsStopped = true;
+
+ $scope.areImagesLoading = true;
+ var progressCalled = false;
+ draggies = [];
+ var layouttype = true;
+ var ld = NVRDataModel.getLogin();
+
+ var positionsStr = ld.packeryPositions;
+ var positions = {};
+
+ if (positionsStr == '' || positionsStr == undefined) {
+ NVRDataModel.log("Did NOT find a packery layout");
+ layouttype = true;
+ } else {
+
+ //console.log ("POSITION STR IS " + positionsStr);
+ positions = JSON.parse(positionsStr);
+ NVRDataModel.log("found a packery layout");
+
+ layouttype = false;
+ }
+
+ var cnt = 0;
+ $scope.MontageMonitors.forEach(function (elem) {
+ if ((elem.Monitor.Enabled != '0') && (elem.Monitor.Function != 'None'))
+ cnt++;
+ });
- if (cnt != positions.length)
- {
+ NVRDataModel.log("Monitors that are active and not DOM hidden: " + cnt + " while grid has " + positions.length);
- NVRDataModel.log("Whoops!! Monitors have changed. I'm resetting layouts, sorry!");
- layouttype = true;
- positions = {};
- }
+ if (cnt > NVRDataModel.getLogin().maxMontage) {
+ cnt = NVRDataModel.getLogin().maxMontage;
+ NVRDataModel.log("restricting monitor count to " + cnt + " due to max-montage setting");
+ }
- var elem = angular.element(document.getElementById("mygrid"));
+ if (cnt != positions.length) {
- //console.log ("**** mygrid is " + JSON.stringify(elem));
+ NVRDataModel.log("Whoops!! Monitors have changed. I'm resetting layouts, sorry!");
+ layouttype = true;
+ positions = {};
+ }
- if (pckry) pckry.destroy();
+ var elem = angular.element(document.getElementById("mygrid"));
- pckry = new Packery('.grid',
- {
- itemSelector: '.grid-item',
- percentPosition: true,
- columnWidth: '.grid-sizer',
- gutter: 0,
- initLayout: layouttype,
- shiftPercentResize: true
+ //console.log ("**** mygrid is " + JSON.stringify(elem));
- });
+ if (pckry) pckry.destroy();
- imagesLoaded(elem).on('progress', function(instance, img)
- {
+ pckry = new Packery('.grid', {
+ itemSelector: '.grid-item',
+ percentPosition: true,
+ columnWidth: '.grid-sizer',
+ gutter: 0,
+ initLayout: layouttype,
+ shiftPercentResize: true
- var result = img.isLoaded ? 'loaded' : 'broken';
- // NVRDataModel.debug('~~loaded image is ' + result + ' for ' + img.img.src);
+ });
- // lay out every image if a pre-arranged position has not been found
+ imagesLoaded(elem).on('progress', function (instance, img) {
- $timeout(function()
- {
- if (layouttype) pckry.layout();
- }, 100);
+ var result = img.isLoaded ? 'loaded' : 'broken';
+ // NVRDataModel.debug('~~loaded image is ' + result + ' for ' + img.img.src);
- progressCalled = true;
+ // lay out every image if a pre-arranged position has not been found
- // if (layouttype) $timeout (function(){layout(pckry);},100);
- });
+ $timeout(function () {
+ if (layouttype) pckry.layout();
+ }, 100);
- imagesLoaded(elem).on('always', function()
- {
- //console.log ("******** ALL IMAGES LOADED");
- // $scope.$digest();
- NVRDataModel.debug("All images loaded, switching to streaming if applicable");
+ progressCalled = true;
- $scope.areImagesLoading = false;
- areStreamsStopped = false;
+ // if (layouttype) $timeout (function(){layout(pckry);},100);
+ });
- $ionicLoading.hide();
+ imagesLoaded(elem).on('always', function () {
+ //console.log ("******** ALL IMAGES LOADED");
+ // $scope.$digest();
+ NVRDataModel.debug("All images loaded, switching to streaming if applicable");
- if (!progressCalled)
- {
- NVRDataModel.log("*** PROGRESS WAS NOT CALLED");
- // pckry.reloadItems();
- }
+ $scope.areImagesLoading = false;
+ areStreamsStopped = false;
- $timeout(function()
- {
+ $ionicLoading.hide();
- pckry.getItemElements().forEach(function(itemElem)
- {
+ if (!progressCalled) {
+ NVRDataModel.log("*** PROGRESS WAS NOT CALLED");
+ // pckry.reloadItems();
+ }
- draggie = new Draggabilly(itemElem);
- pckry.bindDraggabillyEvents(draggie);
- draggies.push(draggie);
- draggie.disable();
- draggie.unbindHandles();
- });
+ $timeout(function () {
- pckry.on('dragItemPositioned', itemDragged);
+ pckry.getItemElements().forEach(function (itemElem) {
- if (!isEmpty(positions))
- {
- NVRDataModel.log("Arranging as per packery grid");
+ draggie = new Draggabilly(itemElem);
+ pckry.bindDraggabillyEvents(draggie);
+ draggies.push(draggie);
+ draggie.disable();
+ draggie.unbindHandles();
+ });
+ pckry.on('dragItemPositioned', itemDragged);
- for (var i = 0; i < $scope.MontageMonitors.length; i++)
- {
- for (var j = 0; j < positions.length; j++)
- {
- if ($scope.MontageMonitors[i].Monitor.Id == positions[j].attr)
- {
- if (isNaN(positions[j].size)) positions[j].size=20;
- $scope.MontageMonitors[i].Monitor.gridScale = positions[j].size;
- $scope.MontageMonitors[i].Monitor.listDisplay = positions[j].display;
- // NVRDataModel.debug("Setting monitor ID: " + $scope.MontageMonitors[i].Monitor.Id + " to size: " + positions[j].size + " and display:" + positions[j].display);
- }
- //console.log ("Index:"+positions[j].attr+ " with size: " + positions[j].size);
- }
- }
+ if (!isEmpty(positions)) {
+ NVRDataModel.log("Arranging as per packery grid");
- NVRDataModel.debug("All images loaded, doing image layout");
+ for (var i = 0; i < $scope.MontageMonitors.length; i++) {
+ for (var j = 0; j < positions.length; j++) {
+ if ($scope.MontageMonitors[i].Monitor.Id == positions[j].attr) {
+ if (isNaN(positions[j].size)) positions[j].size = 20;
+ $scope.MontageMonitors[i].Monitor.gridScale = positions[j].size;
+ $scope.MontageMonitors[i].Monitor.listDisplay = positions[j].display;
+ // NVRDataModel.debug("Setting monitor ID: " + $scope.MontageMonitors[i].Monitor.Id + " to size: " + positions[j].size + " and display:" + positions[j].display);
}
- $timeout(function()
- {
- //NVRDataModel.log("Force calling resize");
- ///pckry.reloadItems();
- ///positions is defined only if layouttype was false
- // console.log (">>> Positions is "+ JSON.stringify(positions));
- if (!layouttype) pckry.initShiftLayout(positions, "data-item-id");
- // now do a jiggle
- $timeout(function()
- {
- NVRDataModel.debug("doing the jiggle and dance...");
- pckry.resize(true);
- }, 300);
-
- }, 100);
-
- //pckry.onresize();
-
- }, 20);
+ //console.log ("Index:"+positions[j].attr+ " with size: " + positions[j].size);
+ }
+ }
- });
+ NVRDataModel.debug("All images loaded, doing image layout");
- function itemDragged(item)
- {
- NVRDataModel.debug("drag complete");
- $timeout (function(){pckry.shiftLayout();},20);
+ }
+ $timeout(function () {
+ //NVRDataModel.log("Force calling resize");
+ ///pckry.reloadItems();
+ ///positions is defined only if layouttype was false
+ // console.log (">>> Positions is "+ JSON.stringify(positions));
+ if (!layouttype) pckry.initShiftLayout(positions, "data-item-id");
+ // now do a jiggle
+ $timeout(function () {
+ NVRDataModel.debug("doing the jiggle and dance...");
+ pckry.resize(true);
+ }, 300);
- pckry.once ('layoutComplete', function() {
+ }, 100);
- var positions = pckry.getShiftPositions('data-item-id');
- //console.log ("POSITIONS MAP " + JSON.stringify(positions));
- var ld = NVRDataModel.getLogin();
- ld.packeryPositions = JSON.stringify(positions);
- // console.log ("Saving " + ld.packeryPositions);
- // console.log ("FULL OBJECT "+ JSON.stringify(ld));
- ld.currentMontageProfile = "";
- $scope.currentProfileName = $translate.instant ('kMontage');
- NVRDataModel.setLogin(ld);
- NVRDataModel.debug("saved new positions");
- });
+ //pckry.onresize();
- //pckry.getItemElements().forEach(function (itemElem) {
+ }, 20);
- //console.log (itemElem.attributes['data-item-id'].value+" size "+itemElem.attributes['data-item-size'].value );
- // });
+ });
-
- }
+ function itemDragged(item) {
+ NVRDataModel.debug("drag complete");
+ $timeout(function () {
+ pckry.shiftLayout();
+ }, 20);
+
+ pckry.once('layoutComplete', function () {
+
+ var positions = pckry.getShiftPositions('data-item-id');
+ //console.log ("POSITIONS MAP " + JSON.stringify(positions));
+ var ld = NVRDataModel.getLogin();
+ ld.packeryPositions = JSON.stringify(positions);
+ // console.log ("Saving " + ld.packeryPositions);
+ // console.log ("FULL OBJECT "+ JSON.stringify(ld));
+ ld.currentMontageProfile = "";
+ $scope.currentProfileName = $translate.instant('kMontage');
+ NVRDataModel.setLogin(ld);
+ NVRDataModel.debug("saved new positions");
+ });
+
+ //pckry.getItemElements().forEach(function (itemElem) {
+
+ //console.log (itemElem.attributes['data-item-id'].value+" size "+itemElem.attributes['data-item-size'].value );
+ // });
+
+
+ }
}
- function isEmpty(obj)
- {
- for (var prop in obj)
- {
- return false;
- }
- return true;
+ function isEmpty(obj) {
+ for (var prop in obj) {
+ return false;
+ }
+ return true;
}
//-----------------------------------------------------------------------
// color for monitor state in montage
//-----------------------------------------------------------------------
- $scope.stateColor = function()
- {
- //console.log ("***MONSTATUS**"+$scope.monStatus+"**");
- var attr = "";
- switch ($scope.monStatus)
- {
- case "":
- attr = "color:rgba(0, 0, 0, 0)";
- break;
- case "idle":
- attr = "color:rgba(0, 0, 0, 0)";
- break;
- case "pre-alarm":
- attr = "color:#e67e22";
- break;
- case "alarmed":
- attr = "color:#D91E18";
- break;
- case "alert":
- attr = "color:#e67e22";
- break;
- case "record":
- attr = "color:#26A65B";
- break;
- }
+ $scope.stateColor = function () {
+ //console.log ("***MONSTATUS**"+$scope.monStatus+"**");
+ var attr = "";
+ switch ($scope.monStatus) {
+ case "":
+ attr = "color:rgba(0, 0, 0, 0)";
+ break;
+ case "idle":
+ attr = "color:rgba(0, 0, 0, 0)";
+ break;
+ case "pre-alarm":
+ attr = "color:#e67e22";
+ break;
+ case "alarmed":
+ attr = "color:#D91E18";
+ break;
+ case "alert":
+ attr = "color:#e67e22";
+ break;
+ case "record":
+ attr = "color:#26A65B";
+ break;
+ }
- return attr;
+ return attr;
};
- function findNext (key,obj)
- {
+ function findNext(key, obj) {
- // console.log (" key is: "+ key);
- // console.log ("array is " + JSON.stringify (obj));
- var keys = Object.keys(obj);
+ // console.log (" key is: "+ key);
+ // console.log ("array is " + JSON.stringify (obj));
+ var keys = Object.keys(obj);
- var len = keys.length;
- var curindex = keys.indexOf(key);
- var modulus = (curindex + 1) % len;
+ var len = keys.length;
+ var curindex = keys.indexOf(key);
+ var modulus = (curindex + 1) % len;
- //console.log ("*********** len="+len+" curr="+curindex+" next="+modulus);
+ //console.log ("*********** len="+len+" curr="+curindex+" next="+modulus);
- //console.log ("Keys array "+ JSON.stringify(keys));
+ //console.log ("Keys array "+ JSON.stringify(keys));
- //console.log ("Current index: "+ keys.indexOf(key) );
- //console.log ("returning index of " + (keys.indexOf(key) + 1) % (keys.length));
+ //console.log ("Current index: "+ keys.indexOf(key) );
+ //console.log ("returning index of " + (keys.indexOf(key) + 1) % (keys.length));
// console.log ("keys length is "+ keys.length);
- return keys[modulus];
+ return keys[modulus];
/* var size = Object.keys(obj).length;
var i;
@@ -500,131 +457,116 @@ angular.module('zmApp.controllers')
}
i = (i + 1) % size;
return Object.keys(obj)[i];*/
-
+
}
//----------------------------------------------
// cycle profiles
//-----------------------------------------------
- function cycleMontageProfiles()
- {
+ function cycleMontageProfiles() {
- var ld = NVRDataModel.getLogin();
+ var ld = NVRDataModel.getLogin();
- if (!ld.cycleMontageProfiles)
- {
- // NVRDataModel.debug ("cycling disabled");
- return;
+ if (!ld.cycleMontageProfiles) {
+ // NVRDataModel.debug ("cycling disabled");
+ return;
- }
+ }
- if ($scope.reOrderActive)
- {
- NVRDataModel.debug ("not cycling, re-order in progress");
- return;
- }
+ if ($scope.reOrderActive) {
+ NVRDataModel.debug("not cycling, re-order in progress");
+ return;
+ }
- if ($scope.isDragabillyOn)
- {
- NVRDataModel.debug ("not cycling, edit in progress");
- return;
+ if ($scope.isDragabillyOn) {
+ NVRDataModel.debug("not cycling, edit in progress");
+ return;
- }
-
- var nextProfile = findNext(ld.currentMontageProfile, ld.packeryPositionsArray);
+ }
- if (nextProfile == ld.currentMontageProfile)
- {
- NVRDataModel.debug ("Not cycling profiles, looks like you only have one");
- }
- else
- {
- NVRDataModel.debug ("Cycling profile from: "+ld.currentMontageProfile+" to:"+nextProfile);
- switchMontageProfile(nextProfile);
+ var nextProfile = findNext(ld.currentMontageProfile, ld.packeryPositionsArray);
+
+ if (nextProfile == ld.currentMontageProfile) {
+ NVRDataModel.debug("Not cycling profiles, looks like you only have one");
+ } else {
+ NVRDataModel.debug("Cycling profile from: " + ld.currentMontageProfile + " to:" + nextProfile);
+ switchMontageProfile(nextProfile);
+
+ }
- }
-
}
//-----------------------------------------------------------------------
// cycle through all displayed monitors and check alarm status
//-----------------------------------------------------------------------
- function loadAlarmStatus()
- {
-
- if ((NVRDataModel.versionCompare($rootScope.apiVersion, "1.30") == -1) ||
- (NVRDataModel.getBandwidth() == 'lowbw') ||
- (NVRDataModel.getLogin().disableAlarmCheckMontage == true))
- {
+ function loadAlarmStatus() {
- return;
- }
+ if ((NVRDataModel.versionCompare($rootScope.apiVersion, "1.30") == -1) ||
+ (NVRDataModel.getBandwidth() == 'lowbw') ||
+ (NVRDataModel.getLogin().disableAlarmCheckMontage == true)) {
- for (var i = 0; i < $scope.MontageMonitors.length; i++)
- {
- if (($scope.MontageMonitors[i].Monitor.Function == 'None') ||
- ($scope.MontageMonitors[i].Monitor.Enabled == '0') ||
- ($scope.MontageMonitors[i].Monitor.listDisplay == 'noshow'))
- {
- continue;
- }
- getAlarmStatus($scope.MontageMonitors[i]);
+ return;
+ }
+ for (var i = 0; i < $scope.MontageMonitors.length; i++) {
+ if (($scope.MontageMonitors[i].Monitor.Function == 'None') ||
+ ($scope.MontageMonitors[i].Monitor.Enabled == '0') ||
+ ($scope.MontageMonitors[i].Monitor.listDisplay == 'noshow')) {
+ continue;
}
+ getAlarmStatus($scope.MontageMonitors[i]);
+
+ }
}
//-----------------------------------------------------------------------
// get alarm status over HTTP for a single monitor
//-----------------------------------------------------------------------
- function getAlarmStatus(monitor)
- {
- var apiurl = NVRDataModel.getLogin().apiurl;
- //console.log ("ALARM CALLED WITH " +JSON.stringify(monitor));
-
- var alarmurl = apiurl + "/monitors/alarm/id:" + monitor.Monitor.Id + "/command:status.json";
- // console.log("Alarm Check: Invoking " + alarmurl);
-
- $http.get(alarmurl)
- .then(function(data)
- {
- // NVRDataModel.debug ("Success in monitor alarmed status " + JSON.stringify(data));
-
- var sid = parseInt(data.data.status);
- switch (sid)
- {
- case 0: // idle
- monitor.Monitor.alarmState = 'color:rgba(0,0,0,0);';
- break;
- case 1: // pre alarm
- monitor.Monitor.alarmState = 'color:#e67e22;';
- break;
- case 2: // alarm
- monitor.Monitor.alarmState = 'color:#D91E18;';
- break;
- case 3: // alert
- monitor.Monitor.alarmState = 'color:#e67e22;';
- break;
- case 4:
- monitor.Monitor.alarmState = 'color:#26A65B;';
- break;
-
- }
-
- },
- function(error)
- {
-
- monitor.Monitor.alarmState = 'color:rgba(0,0,0,0);';
- NVRDataModel.debug("Error in monitor alarmed status ");
- });
+ function getAlarmStatus(monitor) {
+ var apiurl = NVRDataModel.getLogin().apiurl;
+ //console.log ("ALARM CALLED WITH " +JSON.stringify(monitor));
+
+ var alarmurl = apiurl + "/monitors/alarm/id:" + monitor.Monitor.Id + "/command:status.json";
+ // console.log("Alarm Check: Invoking " + alarmurl);
+
+ $http.get(alarmurl)
+ .then(function (data) {
+ // NVRDataModel.debug ("Success in monitor alarmed status " + JSON.stringify(data));
+
+ var sid = parseInt(data.data.status);
+ switch (sid) {
+ case 0: // idle
+ monitor.Monitor.alarmState = 'color:rgba(0,0,0,0);';
+ break;
+ case 1: // pre alarm
+ monitor.Monitor.alarmState = 'color:#e67e22;';
+ break;
+ case 2: // alarm
+ monitor.Monitor.alarmState = 'color:#D91E18;';
+ break;
+ case 3: // alert
+ monitor.Monitor.alarmState = 'color:#e67e22;';
+ break;
+ case 4:
+ monitor.Monitor.alarmState = 'color:#26A65B;';
+ break;
+
+ }
+
+ },
+ function (error) {
+
+ monitor.Monitor.alarmState = 'color:rgba(0,0,0,0);';
+ NVRDataModel.debug("Error in monitor alarmed status ");
+ });
}
function randEachTime() {
- randToAvoidCacheMem = new Date().getTime();
+ randToAvoidCacheMem = new Date().getTime();
//$scope.randToAvoidCacheMem = "1";
//console.log ("Generating:"+$scope.randToAvoidCacheMem);
}
@@ -633,160 +575,143 @@ angular.module('zmApp.controllers')
// re-compute rand so snapshot in montage reloads
//-----------------------------------------------------------------------
- function loadNotifications()
- {
- if (simulStreaming) {
- // console.log ("Skipping timer as simulStreaming");
- return;
- }
+ function loadNotifications() {
+ if (simulStreaming) {
+ // console.log ("Skipping timer as simulStreaming");
+ return;
+ }
- randEachTime();
- //console.log ($scope.randToAvoidCacheMem);
+ randEachTime();
+ //console.log ($scope.randToAvoidCacheMem);
- if ($scope.areImagesLoading)
- {
- NVRDataModel.debug("skipping image refresh, packery is still loading");
- return;
- }
+ if ($scope.areImagesLoading) {
+ NVRDataModel.debug("skipping image refresh, packery is still loading");
+ return;
+ }
- //if (pckry && !$scope.isDragabillyOn) pckry.shiftLayout();
- $rootScope.rand = Math.floor((Math.random() * 100000) + 1);
+ //if (pckry && !$scope.isDragabillyOn) pckry.shiftLayout();
+ $rootScope.rand = Math.floor((Math.random() * 100000) + 1);
- // if you see the time move, montage should move
+ // if you see the time move, montage should move
- if ($scope.iconTimeNow == 'local')
- $scope.timeNow = moment().format(NVRDataModel.getTimeFormatSec());
- else
- $scope.timeNow = moment().tz(NVRDataModel.getTimeZoneNow()).format(NVRDataModel.getTimeFormatSec());
- //$scope.timeNow = moment().format(NVRDataModel.getTimeFormatSec());
+ if ($scope.iconTimeNow == 'local')
+ $scope.timeNow = moment().format(NVRDataModel.getTimeFormatSec());
+ else
+ $scope.timeNow = moment().tz(NVRDataModel.getTimeZoneNow()).format(NVRDataModel.getTimeFormatSec());
+ //$scope.timeNow = moment().format(NVRDataModel.getTimeFormatSec());
- //console.log ("Inside Montage timer...");
+ //console.log ("Inside Montage timer...");
}
- $scope.cancelReorder = function()
- {
- $scope.modal.remove();
+ $scope.cancelReorder = function () {
+ $scope.modal.remove();
};
- $scope.saveReorder = function()
- {
- NVRDataModel.debug("Saving monitor hide/unhide");
+ $scope.saveReorder = function () {
+ NVRDataModel.debug("Saving monitor hide/unhide");
- // redo packery as monitor status has changed
- // DOM may need reloading if you've hidden/unhidden stuff
- $scope.MontageMonitors = $scope.copyMontage;
- $scope.modal.remove();
+ // redo packery as monitor status has changed
+ // DOM may need reloading if you've hidden/unhidden stuff
+ $scope.MontageMonitors = $scope.copyMontage;
+ $scope.modal.remove();
- $timeout(function()
- {
+ $timeout(function () {
- draggies.forEach(function(drag)
- {
- drag.destroy();
- });
+ draggies.forEach(function (drag) {
+ drag.destroy();
+ });
- pckry.reloadItems();
- draggies = [];
- pckry.once('layoutComplete', savePackeryOrder);
- pckry.layout();
+ pckry.reloadItems();
+ draggies = [];
+ pckry.once('layoutComplete', savePackeryOrder);
+ pckry.layout();
- }, 400);
+ }, 400);
};
- function savePackeryOrder()
- {
- $timeout(function()
- {
- var positions = pckry.getShiftPositions('data-item-id');
- NVRDataModel.debug("POSITIONS MAP " + JSON.stringify(positions));
- var ld = NVRDataModel.getLogin();
- ld.packeryPositions = JSON.stringify(positions);
- //console.log ("Savtogging " + ld.packeryPositions);
- ld.currentMontageProfile = "";
- $scope.currentProfileName = $translate.instant ('kMontage');
- NVRDataModel.setLogin(ld);
-
- pckry.getItemElements().forEach(function(itemElem)
- {
- draggie = new Draggabilly(itemElem);
- pckry.bindDraggabillyEvents(draggie);
- draggies.push(draggie);
- draggie.disable();
- });
+ function savePackeryOrder() {
+ $timeout(function () {
+ var positions = pckry.getShiftPositions('data-item-id');
+ NVRDataModel.debug("POSITIONS MAP " + JSON.stringify(positions));
+ var ld = NVRDataModel.getLogin();
+ ld.packeryPositions = JSON.stringify(positions);
+ //console.log ("Savtogging " + ld.packeryPositions);
+ ld.currentMontageProfile = "";
+ $scope.currentProfileName = $translate.instant('kMontage');
+ NVRDataModel.setLogin(ld);
- $ionicScrollDelegate.$getByHandle("montage-delegate").scrollTop();
+ pckry.getItemElements().forEach(function (itemElem) {
+ draggie = new Draggabilly(itemElem);
+ pckry.bindDraggabillyEvents(draggie);
+ draggies.push(draggie);
+ draggie.disable();
+ });
- // Now also ask DataModel to update its monitor display status
- NVRDataModel.reloadMonitorDisplayStatus();
- //$scope.MontageMonitors = angular.copy(NVRDataModel.getMonitorsNow());
- //$scope.MontageMonitors = NVRDataModel.getMonitorsNow();
- pckry.layout();
- }, 20);
- }
+ $ionicScrollDelegate.$getByHandle("montage-delegate").scrollTop();
- $scope.getCycleStatus = function()
- {
- var c = NVRDataModel.getLogin().cycleMontageProfiles;
- var str = (c) ? $translate.instant('kOn'):$translate.instant('kOff');
- return str;
+ // Now also ask DataModel to update its monitor display status
+ NVRDataModel.reloadMonitorDisplayStatus();
+ //$scope.MontageMonitors = angular.copy(NVRDataModel.getMonitorsNow());
+ //$scope.MontageMonitors = NVRDataModel.getMonitorsNow();
+ pckry.layout();
+ }, 20);
+ }
+
+ $scope.getCycleStatus = function () {
+ var c = NVRDataModel.getLogin().cycleMontageProfiles;
+ var str = (c) ? $translate.instant('kOn') : $translate.instant('kOff');
+ return str;
};
- $scope.toggleCycle = function()
- {
- var ld = NVRDataModel.getLogin();
- ld.cycleMontageProfiles = !ld.cycleMontageProfiles;
- NVRDataModel.setLogin(ld);
- NVRDataModel.debug ("cycle="+ld.cycleMontageProfiles);
- NVRDataModel.debug ("cycle interval="+ld.cycleMontageInterval);
+ $scope.toggleCycle = function () {
+ var ld = NVRDataModel.getLogin();
+ ld.cycleMontageProfiles = !ld.cycleMontageProfiles;
+ NVRDataModel.setLogin(ld);
+ NVRDataModel.debug("cycle=" + ld.cycleMontageProfiles);
+ NVRDataModel.debug("cycle interval=" + ld.cycleMontageInterval);
};
- $scope.toggleHide = function(i)
- {
+ $scope.toggleHide = function (i) {
- if ($scope.copyMontage[i].Monitor.listDisplay == 'show')
- $scope.copyMontage[i].Monitor.listDisplay = 'noshow';
- else
- $scope.copyMontage[i].Monitor.listDisplay = 'show';
+ if ($scope.copyMontage[i].Monitor.listDisplay == 'show')
+ $scope.copyMontage[i].Monitor.listDisplay = 'noshow';
+ else
+ $scope.copyMontage[i].Monitor.listDisplay = 'show';
- NVRDataModel.debug("index " + i + " is now " + $scope.copyMontage[i].Monitor.listDisplay);
+ NVRDataModel.debug("index " + i + " is now " + $scope.copyMontage[i].Monitor.listDisplay);
};
- $scope.hideUnhide = function()
- {
- if ($scope.isDragabillyOn)
- {
- dragToggle();
- }
- // make a copy of the current list and work on that
- // this is to avoid packery screw ups while you are hiding/unhiding
- $scope.copyMontage = angular.copy($scope.MontageMonitors);
- $ionicModal.fromTemplateUrl('templates/reorder-modal.html',
- {
- scope: $scope,
- animation: 'slide-in-up',
- id:'reorder',
- })
- .then(function(modal)
- {
- $scope.modal = modal;
- $scope.reOrderActive = true;
- $scope.modal.show();
- });
+ $scope.hideUnhide = function () {
+ if ($scope.isDragabillyOn) {
+ dragToggle();
+ }
+ // make a copy of the current list and work on that
+ // this is to avoid packery screw ups while you are hiding/unhiding
+ $scope.copyMontage = angular.copy($scope.MontageMonitors);
+ $ionicModal.fromTemplateUrl('templates/reorder-modal.html', {
+ scope: $scope,
+ animation: 'slide-in-up',
+ id: 'reorder',
+ })
+ .then(function (modal) {
+ $scope.modal = modal;
+ $scope.reOrderActive = true;
+ $scope.modal.show();
+ });
};
- $scope.$on('modal.removed', function(e, m)
- {
+ $scope.$on('modal.removed', function (e, m) {
- if (m.id != 'reorder')
- return;
- $scope.reOrderActive = false;
+ if (m.id != 'reorder')
+ return;
+ $scope.reOrderActive = false;
- //console.log ("************** FOOTAGE CLOSED");
+ //console.log ("************** FOOTAGE CLOSED");
});
@@ -801,104 +726,92 @@ angular.module('zmApp.controllers')
//----------------------------------------------------------------
// Alarm emit handling
//----------------------------------------------------------------
- var al = $scope.$on("alarm", function(event, args)
- {
- // FIXME: I should probably unregister this instead
- if (typeof $scope.monitors === undefined)
- return;
- //console.log ("***EVENT TRAP***");
- var alarmMonitors = args.message;
- for (var i = 0; i < alarmMonitors.length; i++)
- {
- //console.log ("**** TRAPPED EVENT: "+alarmMonitors[i]);
-
- for (var j = 0; j < $scope.MontageMonitors.length; j++)
- {
- if ($scope.MontageMonitors[j].Monitor.Id == alarmMonitors[i])
- {
- NVRDataModel.debug("Enabling alarm for Monitor:" + $scope.monitors[j].Monitor.Id);
- $scope.MontageMonitors[j].Monitor.isAlarmed = true;
- scheduleRemoveFlash(j);
- }
- }
+ var al = $scope.$on("alarm", function (event, args) {
+ // FIXME: I should probably unregister this instead
+ if (typeof $scope.monitors === undefined)
+ return;
+ //console.log ("***EVENT TRAP***");
+ var alarmMonitors = args.message;
+ for (var i = 0; i < alarmMonitors.length; i++) {
+ //console.log ("**** TRAPPED EVENT: "+alarmMonitors[i]);
+ for (var j = 0; j < $scope.MontageMonitors.length; j++) {
+ if ($scope.MontageMonitors[j].Monitor.Id == alarmMonitors[i]) {
+ NVRDataModel.debug("Enabling alarm for Monitor:" + $scope.monitors[j].Monitor.Id);
+ $scope.MontageMonitors[j].Monitor.isAlarmed = true;
+ scheduleRemoveFlash(j);
+ }
}
+ }
+
});
broadcastHandles.push(al);
- function scheduleRemoveFlash(id)
- {
- NVRDataModel.debug("Scheduled a " + zm.alarmFlashTimer + "ms timer for dis-alarming monitor ID:" + $scope.MontageMonitors[id].Monitor.Id);
- $timeout(function()
- {
- $scope.MontageMonitors[id].Monitor.isAlarmed = false;
- NVRDataModel.debug("dis-alarming monitor ID:" + $scope.MontageMonitors[id].Monitor.Id);
- }, zm.alarmFlashTimer);
+ function scheduleRemoveFlash(id) {
+ NVRDataModel.debug("Scheduled a " + zm.alarmFlashTimer + "ms timer for dis-alarming monitor ID:" + $scope.MontageMonitors[id].Monitor.Id);
+ $timeout(function () {
+ $scope.MontageMonitors[id].Monitor.isAlarmed = false;
+ NVRDataModel.debug("dis-alarming monitor ID:" + $scope.MontageMonitors[id].Monitor.Id);
+ }, zm.alarmFlashTimer);
}
//----------------------------------------------------------------
// Alarm notification handling
//----------------------------------------------------------------
- $scope.handleAlarms = function()
- {
- $rootScope.isAlarm = !$rootScope.isAlarm;
- if (!$rootScope.isAlarm)
- // if (1)
- {
- $rootScope.alarmCount = "0";
- $ionicHistory.nextViewOptions(
- {
- disableBack: true
- });
- $state.go("app.events",
- {
- "id": 0,
- "playEvent": false
- }/*,
- {
- reload: true
- }*/);
- return;
- }
+ $scope.handleAlarms = function () {
+ $rootScope.isAlarm = !$rootScope.isAlarm;
+ if (!$rootScope.isAlarm)
+ // if (1)
+ {
+ $rootScope.alarmCount = "0";
+ $ionicHistory.nextViewOptions({
+ disableBack: true
+ });
+ $state.go("app.events", {
+ "id": 0,
+ "playEvent": false
+ }
+ /*,
+ {
+ reload: true
+ }*/
+ );
+ return;
+ }
};
- $scope.handleAlarmsWhileMinimized = function()
- {
- $rootScope.isAlarm = !$rootScope.isAlarm;
+ $scope.handleAlarmsWhileMinimized = function () {
+ $rootScope.isAlarm = !$rootScope.isAlarm;
- $scope.minimal = !$scope.minimal;
- var ld = NVRDataModel.getLogin();
- ld.isFullScreen = $scope.minimal;
- NVRDataModel.setLogin(ld);
+ $scope.minimal = !$scope.minimal;
+ var ld = NVRDataModel.getLogin();
+ ld.isFullScreen = $scope.minimal;
+ NVRDataModel.setLogin(ld);
- NVRDataModel.debug("MontageCtrl: switch minimal is " + $scope.minimal);
- ionic.Platform.fullScreen($scope.minimal, !$scope.minimal);
- //console.log ("alarms:Cancelling timer");
- $interval.cancel(intervalHandleMontage);
- $interval.cancel(intervalHandleMontageCycle);
- $interval.cancel(intervalHandleAlarmStatus);
- $interval.cancel(intervalHandleReloadPage);
-
+ NVRDataModel.debug("MontageCtrl: switch minimal is " + $scope.minimal);
+ ionic.Platform.fullScreen($scope.minimal, !$scope.minimal);
+ //console.log ("alarms:Cancelling timer");
+ $interval.cancel(intervalHandleMontage);
+ $interval.cancel(intervalHandleMontageCycle);
+ $interval.cancel(intervalHandleAlarmStatus);
+ $interval.cancel(intervalHandleReloadPage);
- if (!$rootScope.isAlarm)
- {
- $rootScope.alarmCount = "0";
- $ionicHistory.nextViewOptions(
- {
- disableBack: true
- });
- $state.go("app.events",
- {
- "id": 0,
- "playEvent": false
- },
- {
- reload: true
- });
- return;
- }
+
+ if (!$rootScope.isAlarm) {
+ $rootScope.alarmCount = "0";
+ $ionicHistory.nextViewOptions({
+ disableBack: true
+ });
+ $state.go("app.events", {
+ "id": 0,
+ "playEvent": false
+ }, {
+ reload: true
+ });
+ return;
+ }
};
//-------------------------------------------------------------
@@ -907,332 +820,302 @@ angular.module('zmApp.controllers')
// for example
//-------------------------------------------------------------
- $scope.isBackground = function()
- {
- //console.log ("Is background called from Montage and returned " +
- //NVRDataModel.isBackground());
- return NVRDataModel.isBackground();
+ $scope.isBackground = function () {
+ //console.log ("Is background called from Montage and returned " +
+ //NVRDataModel.isBackground());
+ return NVRDataModel.isBackground();
};
//---------------------------------------------------------------------
// Triggered when you enter/exit full screen
//---------------------------------------------------------------------
- $scope.switchMinimal = function()
- {
- $scope.minimal = !$scope.minimal;
- NVRDataModel.debug("MontageCtrl: switch minimal is " + $scope.minimal);
- // console.log("Hide Statusbar");
- ionic.Platform.fullScreen($scope.minimal, !$scope.minimal);
- //console.log ("minimal switch:Cancelling timer");
- $interval.cancel(intervalHandleMontage); //we will renew on reload
- $interval.cancel(intervalHandleMontageCycle);
- $interval.cancel(intervalHandleAlarmStatus);
- $interval.cancel(intervalHandleReloadPage);
-
- var ld = NVRDataModel.getLogin();
- ld.isFullScreen = $scope.minimal;
- NVRDataModel.setLogin(ld);
-
-
- // We are reloading this view, so we don't want entry animations
- $ionicHistory.nextViewOptions(
- {
- disableAnimate: true,
- disableBack: true
- });
- $state.go("app.montage",
- {
- minimal: $scope.minimal,
- isRefresh: true
- });
- return;
+ $scope.switchMinimal = function () {
+ $scope.minimal = !$scope.minimal;
+ NVRDataModel.debug("MontageCtrl: switch minimal is " + $scope.minimal);
+ // console.log("Hide Statusbar");
+ ionic.Platform.fullScreen($scope.minimal, !$scope.minimal);
+ //console.log ("minimal switch:Cancelling timer");
+ $interval.cancel(intervalHandleMontage); //we will renew on reload
+ $interval.cancel(intervalHandleMontageCycle);
+ $interval.cancel(intervalHandleAlarmStatus);
+ $interval.cancel(intervalHandleReloadPage);
+
+ var ld = NVRDataModel.getLogin();
+ ld.isFullScreen = $scope.minimal;
+ NVRDataModel.setLogin(ld);
+
+
+ // We are reloading this view, so we don't want entry animations
+ $ionicHistory.nextViewOptions({
+ disableAnimate: true,
+ disableBack: true
+ });
+ $state.go("app.montage", {
+ minimal: $scope.minimal,
+ isRefresh: true
+ });
+ return;
};
//---------------------------------------------------------------------
// Show/Hide PTZ control in monitor view
//---------------------------------------------------------------------
- $scope.togglePTZ = function()
- {
- $scope.showPTZ = !$scope.showPTZ;
+ $scope.togglePTZ = function () {
+ $scope.showPTZ = !$scope.showPTZ;
};
- function getIndex (mid)
- {
- var ndx = 0;
- for (var i=0; i< $scope.MontageMonitors.length; i++)
- {
- if ($scope.MontageMonitors[i].Monitor.Id == mid)
- {
- ndx = i;
- break;
- }
+ function getIndex(mid) {
+ var ndx = 0;
+ for (var i = 0; i < $scope.MontageMonitors.length; i++) {
+ if ($scope.MontageMonitors[i].Monitor.Id == mid) {
+ ndx = i;
+ break;
}
- return ndx;
+ }
+ return ndx;
}
- $scope.toggleStamp = function ()
- {
- if (!$scope.isDragabillyOn) return;
- var found = false;
-
+ $scope.toggleStamp = function () {
+ if (!$scope.isDragabillyOn) return;
+ var found = false;
- for (var i=0; i< $scope.MontageMonitors.length; i++)
- {
- if ($scope.MontageMonitors[i].Monitor.selectStyle == 'dragborder-selected')
- {
-
- findPackeryElement(i);
- }
+
+ for (var i = 0; i < $scope.MontageMonitors.length; i++) {
+ if ($scope.MontageMonitors[i].Monitor.selectStyle == 'dragborder-selected') {
+
+ findPackeryElement(i);
}
+ }
- function findPackeryElement(i)
- {
- pckry.getItemElements().forEach(function(elem)
- {
+ function findPackeryElement(i) {
+ pckry.getItemElements().forEach(function (elem) {
- var id = elem.getAttribute("data-item-id");
- if (id == $scope.MontageMonitors[i].Monitor.Id)
- {
- if ($scope.MontageMonitors[i].Monitor.isStamp)
- pckry.unstamp(elem);
- else
- pckry.stamp(elem);
+ var id = elem.getAttribute("data-item-id");
+ if (id == $scope.MontageMonitors[i].Monitor.Id) {
+ if ($scope.MontageMonitors[i].Monitor.isStamp)
+ pckry.unstamp(elem);
+ else
+ pckry.stamp(elem);
- $scope.MontageMonitors[i].Monitor.isStamp = !$scope.MontageMonitors[i].Monitor.isStamp;
- NVRDataModel.debug ("Stamp for "+$scope.MontageMonitors[i].Monitor.Name + " is:"+$scope.MontageMonitors[i].Monitor.isStamp );
- //break;
+ $scope.MontageMonitors[i].Monitor.isStamp = !$scope.MontageMonitors[i].Monitor.isStamp;
+ NVRDataModel.debug("Stamp for " + $scope.MontageMonitors[i].Monitor.Name + " is:" + $scope.MontageMonitors[i].Monitor.isStamp);
+ //break;
- }
- });
- }
+ }
+ });
+ }
};
- $scope.hideMonitor = function (mid)
- {
- if (!$scope.isDragabillyOn) return;
- var found = false;
- for (var i=0; i< $scope.MontageMonitors.length; i++)
- {
- if ($scope.MontageMonitors[i].Monitor.selectStyle == 'dragborder-selected')
- {
- $scope.MontageMonitors[i].Monitor.listDisplay = 'noshow';
- $scope.MontageMonitors[i].Monitor.selectStyle = "";
- found = true;
- }
+ $scope.hideMonitor = function (mid) {
+ if (!$scope.isDragabillyOn) return;
+ var found = false;
+ for (var i = 0; i < $scope.MontageMonitors.length; i++) {
+ if ($scope.MontageMonitors[i].Monitor.selectStyle == 'dragborder-selected') {
+ $scope.MontageMonitors[i].Monitor.listDisplay = 'noshow';
+ $scope.MontageMonitors[i].Monitor.selectStyle = "";
+ found = true;
+ }
+
+ }
+ if (found) {
+ pckry.once('layoutComplete', saveUpdatedLayout);
+ $timeout(function () {
+ pckry.shiftLayout();
+ }, 300);
+ }
+
+ function saveUpdatedLayout() {
+ $timeout(function () {
+ var positions = pckry.getShiftPositions('data-item-id');
+ // console.log("SAVING");
+ var ld = NVRDataModel.getLogin();
+
+ ld.packeryPositions = JSON.stringify(positions);
+ //console.log ("Saving " + ld.packeryPositions);
+ ld.currentMontageProfile = "";
+ $scope.currentProfileName = $translate.instant('kMontage');
+ NVRDataModel.setLogin(ld);
+ $ionicLoading.hide();
+ //$scope.sliderChanging = false;
+ }, 20);
+ }
- }
- if (found)
- {
- pckry.once ('layoutComplete', saveUpdatedLayout);
- $timeout (function() {pckry.shiftLayout();},300);
- }
-
- function saveUpdatedLayout()
- {
- $timeout(function()
- {
- var positions = pckry.getShiftPositions('data-item-id');
- // console.log("SAVING");
- var ld = NVRDataModel.getLogin();
-
- ld.packeryPositions = JSON.stringify(positions);
- //console.log ("Saving " + ld.packeryPositions);
- ld.currentMontageProfile = "";
- $scope.currentProfileName = $translate.instant ('kMontage');
- NVRDataModel.setLogin(ld);
- $ionicLoading.hide();
- //$scope.sliderChanging = false;
- }, 20);
- }
-
};
- $scope.toggleSelectItem = function(mid)
- {
- var ndx = getIndex(mid);
- //console.log ("TOGGLE DETECTED AT INDEX:"+ndx+" NAME="+$scope.MontageMonitors[ndx].Monitor.Name);
- if ($scope.MontageMonitors[ndx].Monitor.selectStyle !== "undefined" && $scope.MontageMonitors[ndx].Monitor.selectStyle == "dragborder-selected")
- {
- $scope.MontageMonitors[ndx].Monitor.selectStyle = "";
- }
- else
- {
- $scope.MontageMonitors[ndx].Monitor.selectStyle = "dragborder-selected";
- }
- //console.log ("Switched value to " + $scope.MontageMonitors[ndx] .Monitor.selectStyle);
+ $scope.toggleSelectItem = function (mid) {
+ var ndx = getIndex(mid);
+ //console.log ("TOGGLE DETECTED AT INDEX:"+ndx+" NAME="+$scope.MontageMonitors[ndx].Monitor.Name);
+ if ($scope.MontageMonitors[ndx].Monitor.selectStyle !== "undefined" && $scope.MontageMonitors[ndx].Monitor.selectStyle == "dragborder-selected") {
+ $scope.MontageMonitors[ndx].Monitor.selectStyle = "";
+ } else {
+ $scope.MontageMonitors[ndx].Monitor.selectStyle = "dragborder-selected";
+ }
+ //console.log ("Switched value to " + $scope.MontageMonitors[ndx] .Monitor.selectStyle);
};
//---------------------------------------------------------------------
// Called when you enable/disable dragging
//---------------------------------------------------------------------
- $scope.dragToggle = function()
- {
- dragToggle();
+ $scope.dragToggle = function () {
+ dragToggle();
};
- function dragToggle()
- {
- var i;
- $scope.isDragabillyOn = !$scope.isDragabillyOn;
+ function dragToggle() {
+ var i;
+ $scope.isDragabillyOn = !$scope.isDragabillyOn;
+
+ for (i = 0; i < $scope.MontageMonitors.length; i++) {
+ $scope.MontageMonitors[i].Monitor.isStamp = false;
+ }
+
+ $ionicSideMenuDelegate.canDragContent($scope.isDragabillyOn ? false : true);
+
+ //$timeout(function(){pckry.reloadItems();},10);
+ NVRDataModel.debug("setting dragabilly to " + $scope.isDragabillyOn);
+ if ($scope.isDragabillyOn) {
+ $scope.toggleSubMenu = true;
+
+ $scope.dragBorder = "dragborder";
+ NVRDataModel.debug("Enabling drag for " + draggies.length + " items");
+ for (i = 0; i < draggies.length; i++) {
+ draggies[i].enable();
+ draggies[i].bindHandles();
+ }
+
+ // reflow and reload as some may be hidden
+ // $timeout(function(){pckry.reloadItems();$timeout(function(){pckry.layout();},300);},100);
+ } else {
+ $scope.dragBorder = "";
+ NVRDataModel.debug("Disabling drag for " + draggies.length + " items");
+ for (i = 0; i < draggies.length; i++) {
+ draggies[i].disable();
+ draggies[i].unbindHandles();
+ }
+ for (i = 0; i < $scope.MontageMonitors.length; i++) {
+ $scope.MontageMonitors[i].Monitor.selectStyle = "";
+ }
+ // reflow and reload as some may be hidden
+ $timeout(function () {
+ $timeout(function () {
+ var positions = pckry.getShiftPositions('data-item-id');
+ //console.log ("POSITIONS MAP " + JSON.stringify(positions));
+ var ld = NVRDataModel.getLogin();
+ ld.packeryPositions = JSON.stringify(positions);
+ //console.log ("Saving " + ld.packeryPositions);
+ ld.currentMontageProfile = "";
+ $scope.currentProfileName = $translate.instant('kMontage');
+ NVRDataModel.setLogin(ld);
+ }, 300);
+ }, 100);
- for ( i = 0; i < $scope.MontageMonitors.length; i++)
- {
- $scope.MontageMonitors[i].Monitor.isStamp = false;
- }
+ }
+ }
- $ionicSideMenuDelegate.canDragContent($scope.isDragabillyOn ? false : true);
+ //---------------------------------------------------------------------
+ // main monitor modal open - if drag is not on, this is called on touch
+ //---------------------------------------------------------------------
- //$timeout(function(){pckry.reloadItems();},10);
- NVRDataModel.debug("setting dragabilly to " + $scope.isDragabillyOn);
- if ($scope.isDragabillyOn)
- {
- $scope.toggleSubMenu = true;
+ $scope.openModal = function (mid, controllable, controlid, connKey, monitor) {
- $scope.dragBorder = "dragborder";
- NVRDataModel.debug("Enabling drag for " + draggies.length + " items");
- for (i = 0; i < draggies.length; i++)
- {
- draggies[i].enable();
- draggies[i].bindHandles();
- }
+ areStreamsStopped = true;
+ $scope.isModalStreamPaused = true; // we stop montage and start modal stream in snapshot first
+ $timeout(function () { // after render
- // reflow and reload as some may be hidden
- // $timeout(function(){pckry.reloadItems();$timeout(function(){pckry.layout();},300);},100);
- }
- else
- {
- $scope.dragBorder = "";
- NVRDataModel.debug("Disabling drag for " + draggies.length + " items");
- for (i = 0; i < draggies.length; i++)
- {
- draggies[i].disable();
- draggies[i].unbindHandles();
- }
- for (i = 0; i < $scope.MontageMonitors.length; i++)
- {
- $scope.MontageMonitors[i].Monitor.selectStyle = "";
- }
- // reflow and reload as some may be hidden
- $timeout(function()
- {
- $timeout(function()
- {
- var positions = pckry.getShiftPositions('data-item-id');
- //console.log ("POSITIONS MAP " + JSON.stringify(positions));
- var ld = NVRDataModel.getLogin();
- ld.packeryPositions = JSON.stringify(positions);
- //console.log ("Saving " + ld.packeryPositions);
- ld.currentMontageProfile = "";
- $scope.currentProfileName =$translate.instant ('kMontage');
- NVRDataModel.setLogin(ld);
- }, 300);
- }, 100);
+ if (simulStreaming) {
+ NVRDataModel.debug("Killing all streams in montage to save memory/nw...");
+
+ if ($rootScope.platformOS == 'ios') {
+
+ } else {
+ for (var i = 0; i < $scope.MontageMonitors.length; i++) {
+ NVRDataModel.killLiveStream($scope.MontageMonitors[i].Monitor.connKey, $scope.MontageMonitors[i].Monitor.controlURL, $scope.MontageMonitors[i].Monitor.Name);
+ }
+ }
}
- }
- //---------------------------------------------------------------------
- // main monitor modal open - if drag is not on, this is called on touch
- //---------------------------------------------------------------------
+ });
- $scope.openModal = function(mid, controllable, controlid, connKey, monitor)
- {
-
- areStreamsStopped = true;
- $scope.isModalStreamPaused = true; // we stop montage and start modal stream in snapshot first
- $timeout (function () { // after render
- if (simulStreaming) {
- 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].Monitor.connKey, $scope.MontageMonitors[i].Monitor.controlURL, $scope.MontageMonitors[i].Monitor.Name );
- }
- }
- });
-
+ $scope.controlURL = monitor.Monitor.controlURL;
+ openModal(mid, controllable, controlid, connKey, monitor);
- $scope.controlURL = monitor.Monitor.controlURL;
- openModal(mid, controllable, controlid, connKey, monitor);
-
};
- function openModal(mid, controllable, controlid, connKey, monitor)
- {
+ function openModal(mid, controllable, controlid, connKey, monitor) {
- $scope.singleMonitorModalOpen = true;
- NVRDataModel.debug("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
- // in montage view
-
- NVRDataModel.log("Cancelling montage timer, opening Modal");
- // NVRDataModel.log("Starting Modal timer");
- //console.log ("openModal:Cancelling timer");
- $interval.cancel(intervalHandleMontage);
- $interval.cancel(intervalHandleMontageCycle);
- $interval.cancel(intervalHandleAlarmStatus);
- $interval.cancel(intervalHandleReloadPage);
-
+ $scope.singleMonitorModalOpen = true;
+ NVRDataModel.debug("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
+ // in montage view
- $scope.monitor = monitor;
- $scope.showPTZ = false;
- $scope.monitorId = mid;
- $scope.monitorName = NVRDataModel.getMonitorName(mid);
- $scope.controlid = controlid;
+ NVRDataModel.log("Cancelling montage timer, opening Modal");
+ // NVRDataModel.log("Starting Modal timer");
+ //console.log ("openModal:Cancelling timer");
+ $interval.cancel(intervalHandleMontage);
+ $interval.cancel(intervalHandleMontageCycle);
+ $interval.cancel(intervalHandleAlarmStatus);
+ $interval.cancel(intervalHandleReloadPage);
- //$scope.LoginData = NVRDataModel.getLogin();
- $rootScope.modalRand = Math.floor(Math.random() * (999999 - 111111 + 1)) + 111111;
- $scope.ptzMoveCommand = "";
- $scope.ptzStopCommand = "";
+ $scope.monitor = monitor;
+ $scope.showPTZ = false;
+ $scope.monitorId = mid;
+ $scope.monitorName = NVRDataModel.getMonitorName(mid);
+ $scope.controlid = controlid;
- $scope.zoomInCommand = "";
- $scope.zoomOutCommand = "";
- $scope.zoomStopCommand = "zoomStop";
- $scope.canZoom = false;
+ //$scope.LoginData = NVRDataModel.getLogin();
+ $rootScope.modalRand = Math.floor(Math.random() * (999999 - 111111 + 1)) + 111111;
- $scope.presetOn = false;
- $scope.isControllable = controllable;
- $scope.refMonitor = monitor;
+ $scope.ptzMoveCommand = "";
+ $scope.ptzStopCommand = "";
- // 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
- NVRDataModel.setAwake(NVRDataModel.getKeepAwake());
+ $scope.zoomInCommand = "";
+ $scope.zoomOutCommand = "";
+ $scope.zoomStopCommand = "zoomStop";
+ $scope.canZoom = false;
- // This is a modal to show the monitor footage
- $ionicModal.fromTemplateUrl('templates/monitors-modal.html',
- {
- scope: $scope,
- animation: 'slide-in-up',
- id: 'monitorsmodal'
+ $scope.presetOn = false;
+ $scope.isControllable = controllable;
+ $scope.refMonitor = monitor;
- })
- .then(function(modal)
- {
- $scope.modal = modal;
+ // 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
+ NVRDataModel.setAwake(NVRDataModel.getKeepAwake());
+
+ // This is a modal to show the monitor footage
+ $ionicModal.fromTemplateUrl('templates/monitors-modal.html', {
+ scope: $scope,
+ animation: 'slide-in-up',
+ id: 'monitorsmodal'
- /* $ionicLoading.show(
- {
- template: $translate.instant('kPleaseWait'),
- noBackdrop: true,
- duration: zm.loadingTimeout
- });*/
+ })
+ .then(function (modal) {
+ $scope.modal = modal;
- // we don't really need this as we have stopped the timer
- // $scope.isModalActive = true;
+ /* $ionicLoading.show(
+ {
+ template: $translate.instant('kPleaseWait'),
+ noBackdrop: true,
+ duration: zm.loadingTimeout
+ });*/
- //$timeout (function() {pckry.shiftLayout();},zm.packeryTimer);
- $scope.modal.show();
+ // we don't really need this as we have stopped the timer
+ // $scope.isModalActive = true;
- });
+ //$timeout (function() {pckry.shiftLayout();},zm.packeryTimer);
+ $scope.modal.show();
+
+ });
}
@@ -1240,89 +1123,82 @@ angular.module('zmApp.controllers')
// This is ONLY called when we exit modal to montage
//---------------------------------------------------------------------
- function cleanupOnCloseModal()
- {
+ function cleanupOnCloseModal() {
- NVRDataModel.log("Restarting montage timers...");
- var ld = NVRDataModel.getLogin();
- // console.log ("closeModal: Cancelling timer");
- $interval.cancel(intervalHandleMontage);
- $interval.cancel(intervalHandleAlarmStatus);
- $interval.cancel(intervalHandleMontageCycle);
- $interval.cancel(intervalHandleReloadPage);
+ NVRDataModel.log("Restarting montage timers...");
+ var ld = NVRDataModel.getLogin();
+ // console.log ("closeModal: Cancelling timer");
+ $interval.cancel(intervalHandleMontage);
+ $interval.cancel(intervalHandleAlarmStatus);
+ $interval.cancel(intervalHandleMontageCycle);
+ $interval.cancel(intervalHandleReloadPage);
-
- intervalHandleMontage = $interval(function()
- {
- loadNotifications();
- // console.log ("Refreshing Image...");
- }.bind(this), refreshSec * 1000);
- intervalHandleAlarmStatus = $interval(function()
- {
- loadAlarmStatus();
- // console.log ("Refreshing Image...");
- }.bind(this), zm.alarmStatusTime);
+ intervalHandleMontage = $interval(function () {
+ loadNotifications();
+ // console.log ("Refreshing Image...");
+ }.bind(this), refreshSec * 1000);
- intervalHandleMontageCycle = $interval(function()
- {
- cycleMontageProfiles();
- // console.log ("Refreshing Image...");
- }.bind(this), 5000);
+ intervalHandleAlarmStatus = $interval(function () {
+ loadAlarmStatus();
+ // console.log ("Refreshing Image...");
+ }.bind(this), zm.alarmStatusTime);
- intervalHandleReloadPage = $interval(function()
- {
- forceReloadPage();
- }.bind(this), reloadPage);
+ intervalHandleMontageCycle = $interval(function () {
+ cycleMontageProfiles();
+ // console.log ("Refreshing Image...");
+ }.bind(this), 5000);
-
+ intervalHandleReloadPage = $interval(function () {
+ forceReloadPage();
+ }.bind(this), reloadPage);
- $scope.isModalStreamPaused = true;
- // let modal go to snapshot mode in render
- $timeout (function () {
- $scope.modal.remove();
- });
- // We now need to regen connkeys
- // once regenerated
- if (simulStreaming) {
- NVRDataModel.debug ("Re-creating all stream connkeys in montage ...");
- NVRDataModel.regenConnKeys();
- $scope.monitors = NVRDataModel.getMonitorsNow();
- $scope.MontageMonitors = angular.copy($scope.monitors);
- //areStreamsStopped = false;
- $timeout(function() // after render
- {
- initPackery();
- }, zm.packeryTimer);
+ $scope.isModalStreamPaused = true;
+ // let modal go to snapshot mode in render
+ $timeout(function () {
+ $scope.modal.remove();
+ });
-
- }
-
+ // We now need to regen connkeys
+ // once regenerated
+ if (simulStreaming) {
+
+ NVRDataModel.debug("Re-creating all stream connkeys in montage ...");
+ NVRDataModel.regenConnKeys();
+ $scope.monitors = NVRDataModel.getMonitorsNow();
+ $scope.MontageMonitors = angular.copy($scope.monitors);
+ //areStreamsStopped = false;
+ $timeout(function () // after render
+ {
+ initPackery();
+ }, zm.packeryTimer);
+
+ }
+
}
+
// for some reason, double tap calls this twice
- $scope.closeModal = function()
- {
- NVRDataModel.debug("MontageCtrl: Close & Destroy Monitor Modal");
+ $scope.closeModal = function () {
+ NVRDataModel.debug("MontageCtrl: Close & Destroy Monitor Modal");
- if ($scope.singleMonitorModalOpen) {
- $scope.singleMonitorModalOpen = false;
-
- cleanupOnCloseModal();
-
- }
- else {
- NVRDataModel.debug ("Ignoring double-invocation");
- }
-
- // $scope.isModalActive = false;
- // Note: no need to setAwake(false) as needs to be awake
- // in montage view
+ if ($scope.singleMonitorModalOpen) {
+ $scope.singleMonitorModalOpen = false;
+
+ cleanupOnCloseModal();
+
+ } else {
+ NVRDataModel.debug("Ignoring double-invocation");
+ }
+
+ // $scope.isModalActive = false;
+ // Note: no need to setAwake(false) as needs to be awake
+ // in montage view
};
@@ -1334,838 +1210,764 @@ angular.module('zmApp.controllers')
//---------------------------------------------------------------------
-
+
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]();
- //console.log ("DEREGISTER "+broadcastHandles[i]);
- }
- broadcastHandles = [];
-
- areStreamsStopped = true;
- // if modal is open stream gets killed
- // inside monitorModal
-
- $timeout (function () {
- if (!$scope.singleMonitorModalOpen && simulStreaming) {
- NVRDataModel.debug ("Killing all streams in montage to save memory/nw...");
- for (i=0; i < $scope.MontageMonitors.length; i++) {
- NVRDataModel.killLiveStream($scope.MontageMonitors[i].Monitor.connKey, $scope.MontageMonitors[i].Monitor.controlURL);
-
- }
+ 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]();
+ //console.log ("DEREGISTER "+broadcastHandles[i]);
+ }
+ broadcastHandles = [];
+
+ areStreamsStopped = true;
+
+
+
+ // if modal is open stream gets killed
+ // inside monitorModal
+
+ $timeout(function () {
+ if (!$scope.singleMonitorModalOpen && simulStreaming) {
+ NVRDataModel.debug("Killing all streams in montage to save memory/nw...");
+
+ if (0 && $rootScope.platformOS == 'ios') {
+ NVRDataModel.debug("Webkit hack, hammering window.stop();");
+ NVRDataModel.stopNetwork();
+ } else {
+ for (i = 0; i < $scope.MontageMonitors.length; i++) {
+ NVRDataModel.killLiveStream($scope.MontageMonitors[i].Monitor.connKey, $scope.MontageMonitors[i].Monitor.controlURL);
+
}
+ }
+
+
+ }
+
+ });
- });
-
}
- function onPause()
- {
- NVRDataModel.debug("MontageCtrl: onpause called");
- viewCleanup();
+ function onPause() {
+ NVRDataModel.debug("MontageCtrl: onpause called");
+ viewCleanup();
}
- function onResume()
- {
+ function onResume() {
- // 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();
+ // 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();
}
- $scope.openMenu = function()
- {
- $timeout(function()
- {
- $rootScope.stateofSlide = $ionicSideMenuDelegate.isOpen();
- }, 500);
+ $scope.openMenu = function () {
+ $timeout(function () {
+ $rootScope.stateofSlide = $ionicSideMenuDelegate.isOpen();
+ }, 500);
- $ionicSideMenuDelegate.toggleLeft();
+ $ionicSideMenuDelegate.toggleLeft();
};
- $scope.$on('$destroy', function() {
- });
+ $scope.$on('$destroy', function () {});
- $scope.$on('$ionicView.loaded', function()
- {
- // console.log("**VIEW ** Montage Ctrl Loaded");
+ $scope.$on('$ionicView.loaded', function () {
+ // console.log("**VIEW ** Montage Ctrl Loaded");
});
- $scope.$on('$ionicView.leave', function()
- {
- // console.log("**VIEW ** Montage Ctrl Left, force removing modal");
- if ($scope.modal) $scope.modal.remove();
+ $scope.$on('$ionicView.leave', function () {
+ // console.log("**VIEW ** Montage Ctrl Left, force removing modal");
+ if ($scope.modal) $scope.modal.remove();
});
- function orientationChanged()
- {
-
+ function orientationChanged() {
+
}
// remove a saved montage profile
- $scope.deleteMontageProfile = function()
- {
- var posArray;
+ $scope.deleteMontageProfile = function () {
+ var posArray;
- try
- {
- posArray = NVRDataModel.getLogin().packeryPositionsArray;
- //console.log ("PA="+JSON.stringify(posArray));
+ try {
+ posArray = NVRDataModel.getLogin().packeryPositionsArray;
+ //console.log ("PA="+JSON.stringify(posArray));
- }
- catch (e)
- {
- NVRDataModel.debug("error parsing packery array positions");
- posArray = {};
- }
+ } catch (e) {
+ NVRDataModel.debug("error parsing packery array positions");
+ posArray = {};
+ }
- //console.log ("posArray="+JSON.stringify(posArray));
+ //console.log ("posArray="+JSON.stringify(posArray));
- $scope.listdata = [];
- for (var key in posArray)
- {
- if (posArray.hasOwnProperty(key))
- {
- $scope.listdata.push(key);
- }
+ $scope.listdata = [];
+ for (var key in posArray) {
+ if (posArray.hasOwnProperty(key)) {
+ $scope.listdata.push(key);
}
+ }
- if (!$scope.listdata.length)
- {
+ if (!$scope.listdata.length) {
+
+ $rootScope.zmPopup = $ionicPopup.alert({
+ title: $translate.instant('kError'),
+ template: $translate.instant('kMontageNoSavedProfiles'),
+ okText: $translate.instant('kButtonOk'),
+ cancelText: $translate.instant('kButtonCancel'),
+ });
+ return;
+ }
+
+ $scope.data = {
+ 'selectedVal': ''
+ };
+
+ $rootScope.zmPopup = SecuredPopups.show('confirm', {
+ template: '<ion-list> ' +
+ ' <ion-radio-fix ng-repeat="item in listdata" ng-value="item" ng-model="data.selectedVal"> ' +
+ ' {{item}} ' +
+ ' </ion-item> ' +
+ '</ion-list> ',
+
+ title: $translate.instant('kSelect'),
+ subTitle: $translate.instant('kSelectDelete'),
+ scope: $scope,
+ okText: $translate.instant('kButtonOk'),
+ cancelText: $translate.instant('kButtonCancel'),
+
+ }).then(function (res) {
+ NVRDataModel.debug("Deleting profile: " + $scope.data.selectedVal);
+ delete posArray[$scope.data.selectedVal];
+ var ld = NVRDataModel.getLogin();
+ ld.packeryPositionsArray = posArray;
+
+ if (ld.currentMontageProfile == $scope.data.selectedVal) {
+ ld.currentMontageProfile = "";
+ $scope.currentProfileName = $translate.instant('kMontage');
- $rootScope.zmPopup = $ionicPopup.alert(
- {
- title: $translate.instant('kError'),
- template: $translate.instant('kMontageNoSavedProfiles'),
- okText: $translate.instant('kButtonOk'),
- cancelText: $translate.instant('kButtonCancel'),
- });
- return;
}
- $scope.data = {
- 'selectedVal': ''
- };
+ if ($scope.currentMontageProfile == $scope.data.selectedVal)
+ $scope.currentProfileName = $translate.instant('kMontage');
- $rootScope.zmPopup = SecuredPopups.show('confirm',
- {
- template: '<ion-list> ' +
- ' <ion-radio-fix ng-repeat="item in listdata" ng-value="item" ng-model="data.selectedVal"> ' +
- ' {{item}} ' +
- ' </ion-item> ' +
- '</ion-list> ',
-
- title: $translate.instant('kSelect'),
- subTitle:$translate.instant('kSelectDelete'),
- scope: $scope,
- okText: $translate.instant('kButtonOk'),
- cancelText: $translate.instant('kButtonCancel'),
-
- }).then(function(res)
- {
- NVRDataModel.debug("Deleting profile: " + $scope.data.selectedVal);
- delete posArray[$scope.data.selectedVal];
- var ld = NVRDataModel.getLogin();
- ld.packeryPositionsArray = posArray;
+ NVRDataModel.setLogin(ld);
- if (ld.currentMontageProfile == $scope.data.selectedVal)
- {
- ld.currentMontageProfile = "";
- $scope.currentProfileName = $translate.instant ('kMontage');
+ });
- }
+ };
- if ($scope.currentMontageProfile == $scope.data.selectedVal)
- $scope.currentProfileName = $translate.instant('kMontage');
- NVRDataModel.setLogin(ld);
+ function switchMontageProfile(mName) {
+ $interval.cancel(intervalHandleMontageCycle);
+ intervalHandleMontageCycle = $interval(function () {
+ cycleMontageProfiles();
+ // console.log ("Refreshing Image...");
+ }.bind(this), NVRDataModel.getLogin().cycleMontageInterval * 1000);
- });
- };
+ //console.log ("SELECTED " + $scope.data.selectedVal);
+ var ld = NVRDataModel.getLogin();
+ //console.log ("OLD POS="+ld.packeryPositions);
+ ld.packeryPositions = ld.packeryPositionsArray[mName];
+ ld.currentMontageProfile = mName;
+ $scope.currentProfileName = mName;
+ //console.log ("NEW POS="+ld.packeryPositions);
+ NVRDataModel.setLogin(ld);
+ //console.log ("SAVING "+ld.packeryPositions.name+ " but "+$scope.data.selectedVal);
+ //$scope.MontageMonitors = angular.copy(NVRDataModel.getMonitorsNow());
+
+
+ draggies.forEach(function (drag) {
+ drag.destroy();
+ });
+ draggies = [];
+ pckry.destroy();
+ NVRDataModel.reloadMonitorDisplayStatus();
+ NVRDataModel.regenConnKeys();
+ $scope.monitors = NVRDataModel.getMonitorsNow();
+ $scope.MontageMonitors = angular.copy($scope.monitors);
+ $timeout(function () {
+ initPackery();
+ }, zm.packeryTimer);
- function switchMontageProfile (mName)
- {
- $interval.cancel(intervalHandleMontageCycle);
- intervalHandleMontageCycle = $interval(function()
- {
- cycleMontageProfiles();
- // console.log ("Refreshing Image...");
- }.bind(this), NVRDataModel.getLogin().cycleMontageInterval* 1000);
-
- //console.log ("SELECTED " + $scope.data.selectedVal);
- var ld = NVRDataModel.getLogin();
- //console.log ("OLD POS="+ld.packeryPositions);
- ld.packeryPositions = ld.packeryPositionsArray[mName];
- ld.currentMontageProfile = mName;
- $scope.currentProfileName =mName;
- //console.log ("NEW POS="+ld.packeryPositions);
- NVRDataModel.setLogin(ld);
- //console.log ("SAVING "+ld.packeryPositions.name+ " but "+$scope.data.selectedVal);
-
- //$scope.MontageMonitors = angular.copy(NVRDataModel.getMonitorsNow());
-
-
- draggies.forEach(function(drag)
- {
- drag.destroy();
- });
- draggies = [];
- pckry.destroy();
- NVRDataModel.reloadMonitorDisplayStatus();
- NVRDataModel.regenConnKeys();
- $scope.monitors = NVRDataModel.getMonitorsNow();
- $scope.MontageMonitors = angular.copy($scope.monitors);
- $timeout (function() {initPackery();},zm.packeryTimer);
-
-
}
// switch to another montage profile
- $scope.switchMontageProfile = function()
- {
- var posArray;
+ $scope.switchMontageProfile = function () {
+ var posArray;
- try
- {
- posArray = NVRDataModel.getLogin().packeryPositionsArray;
- //console.log ("PA="+JSON.stringify(posArray));
+ try {
+ posArray = NVRDataModel.getLogin().packeryPositionsArray;
+ //console.log ("PA="+JSON.stringify(posArray));
- }
- catch (e)
- {
- NVRDataModel.debug("error parsing packery array positions");
- posArray = {};
- }
+ } catch (e) {
+ NVRDataModel.debug("error parsing packery array positions");
+ posArray = {};
+ }
- //console.log ("posArray="+JSON.stringify(posArray));
+ //console.log ("posArray="+JSON.stringify(posArray));
- $scope.listdata = [];
- for (var key in posArray)
- {
- if (posArray.hasOwnProperty(key))
- {
- $scope.listdata.push(key);
- }
+ $scope.listdata = [];
+ for (var key in posArray) {
+ if (posArray.hasOwnProperty(key)) {
+ $scope.listdata.push(key);
}
- if ($scope.listdata.indexOf($translate.instant('kMontageDefaultProfile')) == -1)
- $scope.listdata.push($translate.instant('kMontageDefaultProfile'));
+ }
+ if ($scope.listdata.indexOf($translate.instant('kMontageDefaultProfile')) == -1)
+ $scope.listdata.push($translate.instant('kMontageDefaultProfile'));
- if (!$scope.listdata.length)
- {
+ if (!$scope.listdata.length) {
- $rootScope.zmPopup = $ionicPopup.alert(
- {
- title: $translate.instant('kError'),
- template: $translate.instant('kMontageNoSavedProfiles'),
+ $rootScope.zmPopup = $ionicPopup.alert({
+ title: $translate.instant('kError'),
+ template: $translate.instant('kMontageNoSavedProfiles'),
- });
- return;
- }
+ });
+ return;
+ }
- $scope.data = {
- 'selectedVal': ''
- };
+ $scope.data = {
+ 'selectedVal': ''
+ };
- $rootScope.zmPopup = SecuredPopups.show('confirm',
- {
- template: '<ion-list> ' +
- ' <ion-radio-fix ng-repeat="item in listdata" ng-value="item" ng-model="data.selectedVal"> ' +
- ' {{item}} ' +
- ' </ion-item> ' +
- '</ion-list> ',
-
- title: $translate.instant('kSelect'),
- subTitle:$translate.instant('kSelectSwitch'),
- scope: $scope,
- okText: $translate.instant('kButtonOk'),
- cancelText: $translate.instant('kButtonCancel'),
-
-
- }).then(function(res)
- {
- if (res)
- {
- // destroy cycle timer and redo it
- //
- switchMontageProfile($scope.data.selectedVal);
+ $rootScope.zmPopup = SecuredPopups.show('confirm', {
+ template: '<ion-list> ' +
+ ' <ion-radio-fix ng-repeat="item in listdata" ng-value="item" ng-model="data.selectedVal"> ' +
+ ' {{item}} ' +
+ ' </ion-item> ' +
+ '</ion-list> ',
-
- //pckry.reloadItems();
- }
+ title: $translate.instant('kSelect'),
+ subTitle: $translate.instant('kSelectSwitch'),
+ scope: $scope,
+ okText: $translate.instant('kButtonOk'),
+ cancelText: $translate.instant('kButtonCancel'),
- });
+
+ }).then(function (res) {
+ if (res) {
+ // destroy cycle timer and redo it
+ //
+ switchMontageProfile($scope.data.selectedVal);
+
+
+ //pckry.reloadItems();
+ }
+
+ });
};
// save current configuration into a profile
- $scope.saveMontageProfile = function()
- {
+ $scope.saveMontageProfile = function () {
+
+ var posArray;
+
+ try {
+ posArray = NVRDataModel.getLogin().packeryPositionsArray;
+ //console.log ("PA="+JSON.stringify(posArray));
+
+ } catch (e) {
+ NVRDataModel.debug("error parsing packery array positions");
+ posArray = {};
+ }
+ $scope.data = {
+ montageName: ""
+ };
+
+ $scope.listdata = [];
+ for (var key in posArray) {
+ if (posArray.hasOwnProperty(key)) {
+ $scope.listdata.push(key);
+ }
+ }
+ if ($scope.listdata.indexOf($translate.instant('kMontageDefaultProfile')) == -1)
+ $scope.listdata.push($translate.instant('kMontageDefaultProfile'));
+
+
+ var templ = "<input autocapitalize='none' autocomplete='off' autocorrect='off' type='text' ng-model='data.montageName'>";
+
+ if ($scope.listdata.length)
+ templ += '<br/><div class="item item-divider">' + $translate.instant('kMontageSavedProfiles') + '</div>' +
+ '<ion-list> ' +
+ ' <ion-radio-fix ng-repeat="item in listdata" ng-value="item" ng-model="data.montageName"> ' +
+ ' {{item}} ' +
+ ' </ion-item> ' +
+ '</ion-list> ';
+
+
+ $rootScope.zmPopup = SecuredPopups.show('confirm', {
+ title: $translate.instant('kMontageSave'),
+ template: templ,
+ subTitle: $translate.instant('kMontageSaveSubtitle'),
+ scope: $scope,
+ okText: $translate.instant('kButtonOk'),
+ cancelText: $translate.instant('kButtonCancel'),
+
+ }).then(function (res) {
+ //console.log(res);
+ if (res) // ok
+ {
+
+ var ld = NVRDataModel.getLogin();
+
+ if ($scope.data.montageName != '') {
+ // lets allow them to save default
+ //if ($scope.data.montageName != $translate.instant('kMontageDefaultProfile'))
+ if (1) {
+ var getMonPos = pckry.getShiftPositions('data-item-id');
+ var unHidden = false;
+
+ // if you are saving to default all monitor profile
+ // then I will undo any hidden monitors
+ if ($scope.data.montageName == $translate.instant('kMontageDefaultProfile')) {
+ for (var p = 0; p < getMonPos.length; p++) {
+ //console.log ("CHECK");
+ if (getMonPos[p].display != 'show') {
+ getMonPos[p].display = 'show';
+ unHidden = true;
+ }
+ }
+ }
- var posArray;
+ var pos = JSON.stringify(getMonPos);
- try
- {
- posArray = NVRDataModel.getLogin().packeryPositionsArray;
- //console.log ("PA="+JSON.stringify(posArray));
+ //console.log ("SAVING POS = "+pos);
- }
- catch (e)
- {
- NVRDataModel.debug("error parsing packery array positions");
- posArray = {};
- }
- $scope.data = {
- montageName: ""
- };
+ ld.packeryPositionsArray[$scope.data.montageName] = pos;
+ NVRDataModel.debug("Saving " + $scope.data.montageName + " with:" + pos);
+ ld.currentMontageProfile = $scope.data.montageName;
+ NVRDataModel.setLogin(ld);
+ $scope.currentProfileName = $scope.data.montageName;
- $scope.listdata = [];
- for (var key in posArray)
- {
- if (posArray.hasOwnProperty(key))
- {
- $scope.listdata.push(key);
- }
- }
- if ($scope.listdata.indexOf($translate.instant('kMontageDefaultProfile')) == -1)
- $scope.listdata.push($translate.instant('kMontageDefaultProfile'));
+ if (unHidden) {
+ $rootScope.zmPopup = SecuredPopups.show('alert', {
+ title: $translate.instant('kNote'),
+ template: $translate.instant('kMontageSaveDefaultWarning'),
+ okText: $translate.instant('kButtonOk'),
+ });
+ switchMontageProfile($translate.instant('kMontageDefaultProfile'));
- var templ = "<input autocapitalize='none' autocomplete='off' autocorrect='off' type='text' ng-model='data.montageName'>";
- if ($scope.listdata.length)
- templ += '<br/><div class="item item-divider">'+$translate.instant('kMontageSavedProfiles')+'</div>'+
- '<ion-list> ' +
- ' <ion-radio-fix ng-repeat="item in listdata" ng-value="item" ng-model="data.montageName"> ' +
- ' {{item}} ' +
- ' </ion-item> ' +
- '</ion-list> ';
+ }
+ }
- $rootScope.zmPopup = SecuredPopups.show('confirm',
- {
- title: $translate.instant('kMontageSave'),
- template: templ,
- subTitle: $translate.instant('kMontageSaveSubtitle'),
- scope: $scope,
- okText: $translate.instant('kButtonOk'),
- cancelText: $translate.instant('kButtonCancel'),
-
- }).then(function(res)
- {
- //console.log(res);
- if (res) // ok
- {
- var ld = NVRDataModel.getLogin();
-
- if ($scope.data.montageName != '')
- {
- // lets allow them to save default
- //if ($scope.data.montageName != $translate.instant('kMontageDefaultProfile'))
- if (1)
- {
- var getMonPos = pckry.getShiftPositions('data-item-id');
- var unHidden = false;
-
- // if you are saving to default all monitor profile
- // then I will undo any hidden monitors
- if ($scope.data.montageName == $translate.instant('kMontageDefaultProfile'))
- {
- for ( var p=0; p < getMonPos.length; p++)
- {
- //console.log ("CHECK");
- if (getMonPos[p].display != 'show')
- {
- getMonPos[p].display = 'show';
- unHidden = true;
- }
- }
- }
-
- var pos = JSON.stringify(getMonPos);
-
- //console.log ("SAVING POS = "+pos);
-
- ld.packeryPositionsArray[$scope.data.montageName] = pos;
- NVRDataModel.debug("Saving " + $scope.data.montageName + " with:" + pos);
- ld.currentMontageProfile =$scope.data.montageName ;
- NVRDataModel.setLogin(ld);
- $scope.currentProfileName = $scope.data.montageName;
-
- if (unHidden)
- {
- $rootScope.zmPopup = SecuredPopups.show('alert',
- {
- title: $translate.instant('kNote'),
- template: $translate.instant('kMontageSaveDefaultWarning'),
- okText: $translate.instant('kButtonOk'),
-
- });
- switchMontageProfile($translate.instant('kMontageDefaultProfile'));
-
-
- }
-
- }
-
-
- }
+ }
- }
- });
+ }
+ });
};
- function getMode() {
+ function getMode() {
- var mode = (simulStreaming && !areStreamsStopped) ? 'jpeg': 'single';
- //console.log ("mode="+mode);
- return mode;
+ var mode = (simulStreaming && !areStreamsStopped) ? 'jpeg' : 'single';
+ //console.log ("mode="+mode);
+ return mode;
- }
-
+ }
- // only for testing
- $scope.killAllImages= function() {
- areStreamsStopped = !areStreamsStopped; // inside timeout, because we need DOM to hide
- $timeout (function () {
- if (simulStreaming && areStreamsStopped) {
- 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].Monitor.connKey, $scope.MontageMonitors[i].Monitor.controlURL);
- }
+
+ // only for testing
+ $scope.killAllImages = function () {
+ areStreamsStopped = !areStreamsStopped; // inside timeout, because we need DOM to hide
+ $timeout(function () {
+ if (simulStreaming && areStreamsStopped) {
+ 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].Monitor.connKey, $scope.MontageMonitors[i].Monitor.controlURL);
+ }
}
- });
-
+ });
- if (simulStreaming && !areStreamsStopped) {
- NVRDataModel.debug ("Re-creating all streams in montage to save memory/nw...");
- NVRDataModel.regenConnKeys();
- $scope.monitors = NVRDataModel.getMonitorsNow();
- $scope.MontageMonitors = angular.copy($scope.monitors);
+ if (simulStreaming && !areStreamsStopped) {
+ NVRDataModel.debug("Re-creating all streams in montage to save memory/nw...");
+ NVRDataModel.regenConnKeys();
- $timeout(function()
- {
- initPackery();
- }, zm.packeryTimer);
+ $scope.monitors = NVRDataModel.getMonitorsNow();
+ $scope.MontageMonitors = angular.copy($scope.monitors);
-
- }
-
-
+ $timeout(function () {
+ initPackery();
+ }, zm.packeryTimer);
+
+
+ }
- };
-
- $scope.constructStream = function(monitor) {
-
- var stream;
- //if (areStreamsStopped) return ""; //getmode doing snapshot now
- stream = monitor.Monitor.streamingURL +
- "/nph-zms?mode="+getMode() +
- "&monitor="+monitor.Monitor.Id +
- "&scale="+$scope.LoginData.montageQuality +
- $rootScope.authSession +
- "&rand="+randToAvoidCacheMem;
- //"&rand="+$scope.randToAvoidCacheMem +
- appendConnKey (monitor.Monitor.connKey);
- // console.log ("MODE="+getMode());
- return stream;
-
- };
-
- function appendConnKey (ck) {
- if (simulStreaming)
- return "&connkey="+ck;
- else
- return "";
- }
-
- // using connkey in snapshot results in error
- $scope.appendConnKey =function(ck) {
- if (simulStreaming && !areStreamsStopped )
- return "&connkey="+ck;
- else
- return "";
- };
-
- $scope.toggleSubMenuFunction = function()
- {
- $scope.toggleSubMenu = !$scope.toggleSubMenu;
- NVRDataModel.debug("toggling size buttons:" + $scope.toggleSubMenu);
- if ($scope.toggleSubMenu) $ionicScrollDelegate.$getByHandle("montage-delegate").scrollTop();
- var ld = NVRDataModel.getLogin();
- ld.showMontageSubMenu = $scope.toggleSubMenu;
- NVRDataModel.setLogin(ld);
};
- // minimal has to be beforeEnter or header won't hide
- $scope.$on('$ionicView.beforeEnter', function()
- {
+ $scope.constructStream = function (monitor) {
+
+ var stream;
+ //if (areStreamsStopped) return ""; //getmode doing snapshot now
+ stream = monitor.Monitor.streamingURL +
+ "/nph-zms?mode=" + getMode() +
+ "&monitor=" + monitor.Monitor.Id +
+ "&scale=" + $scope.LoginData.montageQuality +
+ $rootScope.authSession +
+ "&rand=" + randToAvoidCacheMem;
+ //"&rand="+$scope.randToAvoidCacheMem +
+ appendConnKey(monitor.Monitor.connKey);
+ //console.log("STREAM=" + stream);
+ return stream;
- broadcastHandles = [];
- randToAvoidCacheMem = new Date().getTime();
- areStreamsStopped = true;
- // 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 );
- }
+ function appendConnKey(ck) {
+ if (simulStreaming)
+ return "&connkey=" + ck;
+ else
+ return "";
+ }
- $scope.singleMonitorModalOpen = false;
- // $scope.minimal = $stateParams.minimal;
- var ld = NVRDataModel.getLogin();
- $scope.minimal = ld.isFullScreen;
- //console.log ("**************** MINIMAL ENTER " + $scope.minimal);
- $scope.zmMarginTop = $scope.minimal ? 0 : 15;
+ // using connkey in snapshot results in error
+ $scope.appendConnKey = function (ck) {
+ if (simulStreaming && !areStreamsStopped)
+ return "&connkey=" + ck;
+ else
+ return "";
+ };
+
+ $scope.toggleSubMenuFunction = function () {
+
+ $scope.toggleSubMenu = !$scope.toggleSubMenu;
+
+ NVRDataModel.debug("toggling size buttons:" + $scope.toggleSubMenu);
+ if ($scope.toggleSubMenu) $ionicScrollDelegate.$getByHandle("montage-delegate").scrollTop();
+ var ld = NVRDataModel.getLogin();
+ ld.showMontageSubMenu = $scope.toggleSubMenu;
+ NVRDataModel.setLogin(ld);
+ };
- NVRDataModel.getZmsMultiPortSupport()
- .then ( function (data) {
+ // minimal has to be beforeEnter or header won't hide
+ $scope.$on('$ionicView.beforeEnter', function () {
+
+ broadcastHandles = [];
+ randToAvoidCacheMem = new Date().getTime();
+ areStreamsStopped = true;
+ // 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();
+ $scope.minimal = ld.isFullScreen;
+ //console.log ("**************** MINIMAL ENTER " + $scope.minimal);
+ $scope.zmMarginTop = $scope.minimal ? 0 : 15;
+
+ NVRDataModel.getZmsMultiPortSupport()
+ .then(function (data) {
//multiPortZms = data;
- simulStreaming = data > 0 ? true:false;
+ simulStreaming = data > 0 ? true : false;
//console.log ("****** MULTIPORT="+multiPortZms);
- NVRDataModel.debug ("Multiport="+data);
+ NVRDataModel.debug("Multiport=" + data);
- /* if ($rootScope.platformOS == 'ios') {
- simulStreaming = '1';
- NVRDataModel.debug ("IOS detected, force enabling simulStreams");
+ if ($rootScope.platformOS == 'ios') {
+ simulStreaming = false;
+ NVRDataModel.debug ("IOS detected, DISABLING simul streaming");
}
-*/
+
if (ld.disableSimulStreaming) {
- simulStreaming = false;
- NVRDataModel.debug ("Forcing simulStreams off as you have disabled it");
+ simulStreaming = false;
+ NVRDataModel.debug("Forcing simulStreams off as you have disabled it");
}
- },
- function (err) {
+ },
+ function (err) {
NVRDataModel.debug("******* SHOULD NEVER HAPPEN - MULTIPORT ERROR");
simulStreaming = false;
- }
- );
+ }
+ );
});
//avoid bogus scale error
$scope.LoginData = NVRDataModel.getLogin();
- $scope.toggleTimeType = function()
- {
- if (NVRDataModel.isTzSupported())
- {
- if ($scope.iconTimeNow == 'server')
- {
- $scope.iconTimeNow = 'local';
- $scope.timeNow = $translate.instant('kPleaseWait');
- }
- else
- {
- $scope.iconTimeNow = 'server';
- $scope.timeNow = $translate.instant('kPleaseWait');
- }
- }
- else
- NVRDataModel.debug("timezone API not supported, can't display");
+ $scope.toggleTimeType = function () {
+ if (NVRDataModel.isTzSupported()) {
+ if ($scope.iconTimeNow == 'server') {
+ $scope.iconTimeNow = 'local';
+ $scope.timeNow = $translate.instant('kPleaseWait');
+ } else {
+ $scope.iconTimeNow = 'server';
+ $scope.timeNow = $translate.instant('kPleaseWait');
+ }
+ } else
+ NVRDataModel.debug("timezone API not supported, can't display");
};
- $scope.$on('$ionicView.afterEnter', function()
- {
- NVRDataModel.debug("Setting image mode to snapshot, will change to image when packery is all done");
- $scope.areImagesLoading = true;
- $scope.isDragabillyOn = false;
- $scope.reOrderActive = false;
+ $scope.$on('$ionicView.afterEnter', function () {
+ NVRDataModel.debug("Setting image mode to snapshot, will change to image when packery is all done");
+ $scope.areImagesLoading = true;
+ $scope.isDragabillyOn = false;
+ $scope.reOrderActive = false;
- if (NVRDataModel.isTzSupported())
- $scope.iconTimeNow = 'server';
- else
- $scope.iconTimeNow = 'local';
+ if (NVRDataModel.isTzSupported())
+ $scope.iconTimeNow = 'server';
+ else
+ $scope.iconTimeNow = 'local';
- if ($scope.iconTimeNow == 'local')
- $scope.timeNow = moment().format(NVRDataModel.getTimeFormatSec());
- else
- $scope.timeNow = moment().tz(NVRDataModel.getTimeZoneNow()).format(NVRDataModel.getTimeFormatSec());
+ if ($scope.iconTimeNow == 'local')
+ $scope.timeNow = moment().format(NVRDataModel.getTimeFormatSec());
+ else
+ $scope.timeNow = moment().tz(NVRDataModel.getTimeZoneNow()).format(NVRDataModel.getTimeFormatSec());
- $scope.gridScale = "grid-item-50";
- $scope.LoginData = NVRDataModel.getLogin();
- //FIXME
+ $scope.gridScale = "grid-item-50";
+ $scope.LoginData = NVRDataModel.getLogin();
+ //FIXME
- if (NVRDataModel.getBandwidth() == 'lowbw')
- {
- NVRDataModel.debug("Enabling low bandwidth parameters");
- $scope.LoginData.montageQuality = zm.montageQualityLowBW;
- $scope.LoginData.singleImageQuality = zm.eventSingleImageQualityLowBW;
- $scope.LoginData.montageHistoryQuality = zm.montageQualityLowBW;
+ if (NVRDataModel.getBandwidth() == 'lowbw') {
+ NVRDataModel.debug("Enabling low bandwidth parameters");
+ $scope.LoginData.montageQuality = zm.montageQualityLowBW;
+ $scope.LoginData.singleImageQuality = zm.eventSingleImageQualityLowBW;
+ $scope.LoginData.montageHistoryQuality = zm.montageQualityLowBW;
- }
+ }
- $scope.monLimit = $scope.LoginData.maxMontage;
- $scope.toggleSubMenu = NVRDataModel.getLogin().showMontageSubMenu;
+ $scope.monLimit = $scope.LoginData.maxMontage;
+ $scope.toggleSubMenu = NVRDataModel.getLogin().showMontageSubMenu;
- $scope.sliderChanging = false;
- loginData = NVRDataModel.getLogin();
+ $scope.sliderChanging = false;
+ loginData = NVRDataModel.getLogin();
- $scope.isRefresh = $stateParams.isRefresh;
- sizeInProgress = false;
- $scope.imageStyle = true;
- intervalHandleMontage = "";
- intervalHandleMontageCycle = "";
- $scope.isReorder = false;
+ $scope.isRefresh = $stateParams.isRefresh;
+ sizeInProgress = false;
+ $scope.imageStyle = true;
+ intervalHandleMontage = "";
+ intervalHandleMontageCycle = "";
+ $scope.isReorder = false;
- $ionicSideMenuDelegate.canDragContent($scope.minimal ? true : true);
+ $ionicSideMenuDelegate.canDragContent($scope.minimal ? true : true);
- $scope.areImagesLoading = true;
- var ld = NVRDataModel.getLogin();
+ $scope.areImagesLoading = true;
+ var ld = NVRDataModel.getLogin();
- refreshSec = (NVRDataModel.getBandwidth() == 'lowbw') ? ld.refreshSecLowBW : ld.refreshSec;
+ refreshSec = (NVRDataModel.getBandwidth() == 'lowbw') ? ld.refreshSecLowBW : ld.refreshSec;
- NVRDataModel.debug("bandwidth: " + NVRDataModel.getBandwidth() + " montage refresh set to: " + refreshSec);
+ NVRDataModel.debug("bandwidth: " + NVRDataModel.getBandwidth() + " montage refresh set to: " + refreshSec);
- //console.log("Setting Awake to " + NVRDataModel.getKeepAwake());
- NVRDataModel.setAwake(NVRDataModel.getKeepAwake());
+ //console.log("Setting Awake to " + NVRDataModel.getKeepAwake());
+ NVRDataModel.setAwake(NVRDataModel.getKeepAwake());
- $interval.cancel(intervalHandleMontage);
- $interval.cancel(intervalHandleMontageCycle);
- $interval.cancel(intervalHandleAlarmStatus);
- $interval.cancel(intervalHandleReloadPage);
+ $interval.cancel(intervalHandleMontage);
+ $interval.cancel(intervalHandleMontageCycle);
+ $interval.cancel(intervalHandleAlarmStatus);
+ $interval.cancel(intervalHandleReloadPage);
- intervalHandleMontage = $interval(function()
- {
- loadNotifications();
- // console.log ("Refreshing Image...");
- }.bind(this), refreshSec * 1000);
-
- NVRDataModel.debug ("Setting up cycle interval of:"+ NVRDataModel.getLogin().cycleMontageInterval* 1000);
- intervalHandleMontageCycle = $interval(function()
- {
- cycleMontageProfiles();
- // console.log ("Refreshing Image...");
- }.bind(this), NVRDataModel.getLogin().cycleMontageInterval* 1000);
-
- intervalHandleAlarmStatus = $interval(function()
- {
- loadAlarmStatus();
- // console.log ("Refreshing Image...");
- }.bind(this), zm.alarmStatusTime);
-
- intervalHandleReloadPage = $interval(function()
- {
- forceReloadPage();
- }.bind(this), reloadPage);
-
+ intervalHandleMontage = $interval(function () {
loadNotifications();
+ // console.log ("Refreshing Image...");
+ }.bind(this), refreshSec * 1000);
+
+ NVRDataModel.debug("Setting up cycle interval of:" + NVRDataModel.getLogin().cycleMontageInterval * 1000);
+ intervalHandleMontageCycle = $interval(function () {
+ cycleMontageProfiles();
+ // console.log ("Refreshing Image...");
+ }.bind(this), NVRDataModel.getLogin().cycleMontageInterval * 1000);
+
+ intervalHandleAlarmStatus = $interval(function () {
+ loadAlarmStatus();
+ // console.log ("Refreshing Image...");
+ }.bind(this), zm.alarmStatusTime);
+
+ intervalHandleReloadPage = $interval(function () {
+ forceReloadPage();
+ }.bind(this), reloadPage);
+
+ loadNotifications();
+
+ if ($scope.MontageMonitors.length == 0) {
+ $rootScope.zmPopup = $ionicPopup.alert({
+ title: $translate.instant('kNoMonitors'),
+ template: $translate.instant('kCheckCredentials'),
+ okText: $translate.instant('kButtonOk'),
+ cancelText: $translate.instant('kButtonCancel'),
+ });
+ $ionicHistory.nextViewOptions({
+ disableBack: true
+ });
+ $state.go("app.login", {
+ "wizard": false
+ });
+ return;
+ }
+
+ ld = NVRDataModel.getLogin();
+
+ $rootScope.authSession = "undefined";
+ $ionicLoading.show({
+ template: $translate.instant('kNegotiatingStreamAuth'),
+ animation: 'fade-in',
+ showBackdrop: true,
+ duration: zm.loadingTimeout,
+ maxWidth: 300,
+ showDelay: 0
+ });
- if ($scope.MontageMonitors.length == 0)
- {
- $rootScope.zmPopup = $ionicPopup.alert(
- {
- title: $translate.instant('kNoMonitors'),
- template: $translate.instant('kCheckCredentials'),
- okText: $translate.instant('kButtonOk'),
- cancelText: $translate.instant('kButtonCancel'),
- });
- $ionicHistory.nextViewOptions(
- {
- disableBack: true
- });
- $state.go("app.login",
- {
- "wizard": false
- });
- return;
- }
+ NVRDataModel.log("Inside Montage Ctrl:We found " + $scope.monitors.length + " monitors");
- ld = NVRDataModel.getLogin();
+ // set them all at 50% for packery
+ for (var i = 0; i < $scope.MontageMonitors.length; i++) {
+ $scope.MontageMonitors[i].Monitor.gridScale = "50";
+ $scope.MontageMonitors[i].Monitor.selectStyle = "";
+ $scope.MontageMonitors[i].Monitor.alarmState = 'color:rgba(0,0,0,0);';
+ $scope.MontageMonitors[i].Monitor.isStamp = false;
- $rootScope.authSession = "undefined";
- $ionicLoading.show(
- {
- template: $translate.instant('kNegotiatingStreamAuth'),
- animation: 'fade-in',
- showBackdrop: true,
- duration: zm.loadingTimeout,
- maxWidth: 300,
- showDelay: 0
- });
+ }
- NVRDataModel.log("Inside Montage Ctrl:We found " + $scope.monitors.length + " monitors");
-
- // set them all at 50% for packery
- for (var i = 0; i < $scope.MontageMonitors.length; i++)
- {
- $scope.MontageMonitors[i].Monitor.gridScale = "50";
- $scope.MontageMonitors[i].Monitor.selectStyle = "";
- $scope.MontageMonitors[i].Monitor.alarmState = 'color:rgba(0,0,0,0);';
- $scope.MontageMonitors[i].Monitor.isStamp = false;
+ $rootScope.validMonitorId = $scope.monitors[0].Monitor.Id;
+ NVRDataModel.getAuthKey($rootScope.validMonitorId, (Math.floor((Math.random() * 999999) + 1)).toString())
+ .then(function (success) {
+ $ionicLoading.hide();
+ //console.log(success);
+ $rootScope.authSession = success;
+ NVRDataModel.log("Stream authentication construction: " +
+ $rootScope.authSession);
+ $timeout(function () {
+ initPackery();
+ }, zm.packeryTimer);
- }
+ },
+ function (error) {
- $rootScope.validMonitorId = $scope.monitors[0].Monitor.Id;
- NVRDataModel.getAuthKey($rootScope.validMonitorId, (Math.floor((Math.random() * 999999) + 1)).toString())
- .then(function(success)
- {
- $ionicLoading.hide();
- //console.log(success);
- $rootScope.authSession = success;
- NVRDataModel.log("Stream authentication construction: " +
- $rootScope.authSession);
- $timeout(function()
- {
- initPackery();
- }, zm.packeryTimer);
-
- },
- function(error)
- {
-
- $ionicLoading.hide();
- NVRDataModel.debug("MontageCtrl: Error in authkey retrieval " + error);
- //$rootScope.authSession="";
- NVRDataModel.log("MontageCtrl: Error returned Stream authentication construction. Retaining old value of: " + $rootScope.authSession);
- $timeout(function()
- {
- initPackery();
- }, zm.packeryTimer);
- });
+ $ionicLoading.hide();
+ NVRDataModel.debug("MontageCtrl: Error in authkey retrieval " + error);
+ //$rootScope.authSession="";
+ NVRDataModel.log("MontageCtrl: Error returned Stream authentication construction. Retaining old value of: " + $rootScope.authSession);
+ $timeout(function () {
+ initPackery();
+ }, zm.packeryTimer);
+ });
- //console.log("**VIEW ** Montage Ctrl AFTER ENTER");
- window.addEventListener("resize", orientationChanged, false);
+ //console.log("**VIEW ** Montage Ctrl AFTER ENTER");
+ window.addEventListener("resize", orientationChanged, false);
- document.addEventListener("pause", onPause, false);
+ document.addEventListener("pause", onPause, false);
// document.addEventListener("resume", onResume, false);
});
- $scope.$on('$ionicView.beforeLeave', function()
- {
+ $scope.$on('$ionicView.beforeLeave', function () {
- areStreamsStopped =true;
- viewCleanup();
+ areStreamsStopped = true;
+ viewCleanup();
});
- $scope.$on('$ionicView.unloaded', function() {
+ $scope.$on('$ionicView.unloaded', function () {
});
- $scope.resetSizes = function()
- {
- var somethingReset = false;
- for (var i = 0; i < $scope.MontageMonitors.length; i++)
- {
- if ($scope.isDragabillyOn)
- {
- if ($scope.MontageMonitors[i].Monitor.selectStyle == "dragborder-selected")
- {
- $scope.MontageMonitors[i].Monitor.gridScale = "50";
- somethingReset = true;
- }
- }
- else
- {
- $scope.MontageMonitors[i].Monitor.gridScale = "50";
- // somethingReset = true;
- }
- }
- if (!somethingReset && $scope.isDragabillyOn) // nothing was selected
- {
- for (i = 0; i < $scope.MontageMonitors.length; i++)
- {
- $scope.MontageMonitors[i].Monitor.gridScale = "50";
- }
- }
-
- $timeout(function()
- {
- pckry.reloadItems();
-
- pckry.once('layoutComplete', function()
- {
- //console.log ("Layout complete");
- var positions = pckry.getShiftPositions('data-item-id');
- //console.log ("POSITIONS MAP " + JSON.stringify(positions));
- var ld = NVRDataModel.getLogin();
-
- ld.packeryPositions = JSON.stringify(positions);
- //console.log ("Saving " + ld.packeryPositions);
- ld.currentMontageProfile = "";
- $scope.currentProfileName = $translate.instant ('kMontage');
- NVRDataModel.setLogin(ld);
-
- $timeout(function()
- {
- NVRDataModel.debug("doing the jiggle and dance...");
- pckry.resize(true);
- }, 300);
-
- // $scope.slider.monsize = 2;
- });
- pckry.layout();
+ $scope.resetSizes = function () {
+ var somethingReset = false;
+ for (var i = 0; i < $scope.MontageMonitors.length; i++) {
+ if ($scope.isDragabillyOn) {
+ if ($scope.MontageMonitors[i].Monitor.selectStyle == "dragborder-selected") {
+ $scope.MontageMonitors[i].Monitor.gridScale = "50";
+ somethingReset = true;
+ }
+ } else {
+ $scope.MontageMonitors[i].Monitor.gridScale = "50";
+ // somethingReset = true;
+ }
+ }
+ if (!somethingReset && $scope.isDragabillyOn) // nothing was selected
+ {
+ for (i = 0; i < $scope.MontageMonitors.length; i++) {
+ $scope.MontageMonitors[i].Monitor.gridScale = "50";
+ }
+ }
+
+ $timeout(function () {
+ pckry.reloadItems();
+
+ pckry.once('layoutComplete', function () {
+ //console.log ("Layout complete");
+ var positions = pckry.getShiftPositions('data-item-id');
+ //console.log ("POSITIONS MAP " + JSON.stringify(positions));
+ var ld = NVRDataModel.getLogin();
+
+ ld.packeryPositions = JSON.stringify(positions);
+ //console.log ("Saving " + ld.packeryPositions);
+ ld.currentMontageProfile = "";
+ $scope.currentProfileName = $translate.instant('kMontage');
+ NVRDataModel.setLogin(ld);
+
+ $timeout(function () {
+ NVRDataModel.debug("doing the jiggle and dance...");
+ pckry.resize(true);
+ }, 300);
+
+ // $scope.slider.monsize = 2;
+ });
+ pckry.layout();
- }, 20);
+ }, 20);
};
- function layout(pckry)
- {
- pckry.shiftLayout();
+ function layout(pckry) {
+ pckry.shiftLayout();
}
- $scope.squeezeMonitors = function()
- {
- pckry.once('layoutComplete', resizeComplete);
- $timeout (function() {pckry.layout();});
+ $scope.squeezeMonitors = function () {
+ pckry.once('layoutComplete', resizeComplete);
+ $timeout(function () {
+ pckry.layout();
+ });
- function resizeComplete()
- {
- //console.log ("HERE");
- $timeout(function()
- {
- var positions = pckry.getShiftPositions('data-item-id');
- //console.log("SAVING");
- var ld = NVRDataModel.getLogin();
-
- ld.packeryPositions = JSON.stringify(positions);
- //console.log ("Saving " + ld.packeryPositions);
- ld.currentMontageProfile = "";
- $scope.currentProfileName =$translate.instant ('kMontage');
- NVRDataModel.setLogin(ld);
- $ionicLoading.hide();
- $scope.sliderChanging = false;
- }, 20);
+ function resizeComplete() {
+ //console.log ("HERE");
+ $timeout(function () {
+ var positions = pckry.getShiftPositions('data-item-id');
+ //console.log("SAVING");
+ var ld = NVRDataModel.getLogin();
+
+ ld.packeryPositions = JSON.stringify(positions);
+ //console.log ("Saving " + ld.packeryPositions);
+ ld.currentMontageProfile = "";
+ $scope.currentProfileName = $translate.instant('kMontage');
+ NVRDataModel.setLogin(ld);
+ $ionicLoading.hide();
+ $scope.sliderChanging = false;
+ }, 20);
+
+ }
- }
-
};
//---------------------------------------------------------
@@ -2175,181 +1977,161 @@ angular.module('zmApp.controllers')
// a copy and the value never changes
//---------------------------------------------------------
- $scope.sliderChanged = function(dirn)
- {
+ $scope.sliderChanged = function (dirn) {
- if ($scope.sliderChanging)
- {
- // console.log("too fast my friend");
- //$scope.slider.monsize = oldSliderVal;
- return;
- }
+ if ($scope.sliderChanging) {
+ // console.log("too fast my friend");
+ //$scope.slider.monsize = oldSliderVal;
+ return;
+ }
- $scope.sliderChanging = true;
+ $scope.sliderChanging = true;
- $ionicLoading.show(
- {
- template: $translate.instant('kPleaseWait'),
- noBackdrop: true,
- duration: 5000
- });
-
- var somethingReset = false;
+ $ionicLoading.show({
+ template: $translate.instant('kPleaseWait'),
+ noBackdrop: true,
+ duration: 5000
+ });
- var oldScales = {};
- pckry.getItemElements().forEach(function(elem)
- {
- var id = elem.getAttribute("data-item-id");
- var sz = elem.getAttribute("data-item-size");
- if (isNaN(sz)) sz=20;
- oldScales[id] = sz;
- // console.log("REMEMBERING " + id + ":" + sz);
+ var somethingReset = false;
- });
+ var oldScales = {};
+ pckry.getItemElements().forEach(function (elem) {
+ var id = elem.getAttribute("data-item-id");
+ var sz = elem.getAttribute("data-item-size");
+ if (isNaN(sz)) sz = 20;
+ oldScales[id] = sz;
+ // console.log("REMEMBERING " + id + ":" + sz);
- // this only changes items that are selected
- for (var i = 0; i < $scope.MontageMonitors.length; i++)
- {
+ });
- var curVal = parseInt($scope.MontageMonitors[i].Monitor.gridScale) || 20;
- curVal = curVal + (5 * dirn);
- if (curVal < 10) curVal = 10;
- if (curVal > 100) curVal = 100;
- //console.log ("For Index: " + i + " From: " + $scope.MontageMonitors[i].Monitor.gridScale + " To: " + curVal);
+ // this only changes items that are selected
+ for (var i = 0; i < $scope.MontageMonitors.length; i++) {
- if ($scope.isDragabillyOn)
- {
- // only do this for selected monitors
- if ($scope.MontageMonitors[i].Monitor.selectStyle == "dragborder-selected")
- {
+ var curVal = parseInt($scope.MontageMonitors[i].Monitor.gridScale) || 20;
+ curVal = curVal + (5 * dirn);
+ if (curVal < 10) curVal = 10;
+ if (curVal > 100) curVal = 100;
+ //console.log ("For Index: " + i + " From: " + $scope.MontageMonitors[i].Monitor.gridScale + " To: " + curVal);
- $scope.MontageMonitors[i].Monitor.gridScale = curVal;
- somethingReset = true;
- }
- }
- else
- {
- $scope.MontageMonitors[i].Monitor.gridScale = curVal;
- //somethingReset = true;
+ if ($scope.isDragabillyOn) {
+ // only do this for selected monitors
+ if ($scope.MontageMonitors[i].Monitor.selectStyle == "dragborder-selected") {
- }
+ $scope.MontageMonitors[i].Monitor.gridScale = curVal;
+ somethingReset = true;
+ }
+ } else {
+ $scope.MontageMonitors[i].Monitor.gridScale = curVal;
+ //somethingReset = true;
}
- // this changes all items if none were selected
- if (!somethingReset && $scope.isDragabillyOn) // nothing was selected
- {
- for (i = 0; i < $scope.MontageMonitors.length; i++)
- {
- var cv = parseInt($scope.MontageMonitors[i].Monitor.gridScale) || 20;
- cv = cv + (5 * dirn);
- if (cv < 10) cv = 10;
- if (cv > 100) cv = 100;
- $scope.MontageMonitors[i].Monitor.gridScale = cv;
- //console.log ("*******GRIDSCALE="+)
- }
+ }
+
+ // this changes all items if none were selected
+ if (!somethingReset && $scope.isDragabillyOn) // nothing was selected
+ {
+ for (i = 0; i < $scope.MontageMonitors.length; i++) {
+ var cv = parseInt($scope.MontageMonitors[i].Monitor.gridScale) || 20;
+ cv = cv + (5 * dirn);
+ if (cv < 10) cv = 10;
+ if (cv > 100) cv = 100;
+ $scope.MontageMonitors[i].Monitor.gridScale = cv;
+ //console.log ("*******GRIDSCALE="+)
}
+ }
- // reload sizes from DOM and trigger a layout
+ // reload sizes from DOM and trigger a layout
- $timeout(function()
- {
- //console.log("Calling re-layout");
- //pckry.reloadItems();
+ $timeout(function () {
+ //console.log("Calling re-layout");
+ //pckry.reloadItems();
- if (dirn == 1) //expand
- {
- 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");
- pckry.once('layoutComplete', resizeComplete);
- pckry.shiftLayout();
+ if (dirn == 1) //expand
+ {
+ 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");
+ pckry.once('layoutComplete', resizeComplete);
+ pckry.shiftLayout();
+
+ }
+
+ }, 20);
+
+ /* if (!somethingReset) {
+ //console.log (">>>SOMETHING NOT RESET");
+ $timeout(function () {
+ pckry.layout();
+ }, zm.packeryTimer);
+ } else {
+
+ //console.log (">>>SOMETHING RESET");
+ $timeout(function () {
+ layout(pckry);
+ }, zm.packeryTimer);
+ }*/
+ function resizeComplete() {
+ //console.log ("HERE");
+ $timeout(function () {
+ var positions = pckry.getShiftPositions('data-item-id');
+ //console.log("SAVING");
+ var ld = NVRDataModel.getLogin();
+
+ ld.packeryPositions = JSON.stringify(positions);
+ //console.log ("Saving " + ld.packeryPositions);
+ ld.currentMontageProfile = "";
+ $scope.currentProfileName = $translate.instant('kMontage');
+ NVRDataModel.setLogin(ld);
+ $ionicLoading.hide();
+ $scope.sliderChanging = false;
}, 20);
- /* if (!somethingReset) {
- //console.log (">>>SOMETHING NOT RESET");
- $timeout(function () {
- pckry.layout();
- }, zm.packeryTimer);
- } else {
-
- //console.log (">>>SOMETHING RESET");
- $timeout(function () {
- layout(pckry);
- }, zm.packeryTimer);
- }*/
- function resizeComplete()
- {
- //console.log ("HERE");
- $timeout(function()
- {
- var positions = pckry.getShiftPositions('data-item-id');
- //console.log("SAVING");
- var ld = NVRDataModel.getLogin();
-
- ld.packeryPositions = JSON.stringify(positions);
- //console.log ("Saving " + ld.packeryPositions);
- ld.currentMontageProfile = "";
- $scope.currentProfileName = $translate.instant ('kMontage');
- NVRDataModel.setLogin(ld);
- $ionicLoading.hide();
- $scope.sliderChanging = false;
- }, 20);
-
- }
+ }
};
- $scope.$on('$ionicView.afterEnter', function()
- {
- // This rand is really used to reload the monitor image in img-src so it is not cached
- // I am making sure the image in montage view is always fresh
- // I don't think I am using this anymore FIXME: check and delete if needed
- // $rootScope.rand = Math.floor((Math.random() * 100000) + 1);
+ $scope.$on('$ionicView.afterEnter', function () {
+ // This rand is really used to reload the monitor image in img-src so it is not cached
+ // I am making sure the image in montage view is always fresh
+ // I don't think I am using this anymore FIXME: check and delete if needed
+ // $rootScope.rand = Math.floor((Math.random() * 100000) + 1);
});
- $scope.currentProfileName = NVRDataModel.getLogin().currentMontageProfile || $translate.instant ('kMontage');
+ $scope.currentProfileName = NVRDataModel.getLogin().currentMontageProfile || $translate.instant('kMontage');
- $scope.reloadView = function()
- {
- $rootScope.rand = Math.floor((Math.random() * 100000) + 1);
- NVRDataModel.log("User action: image reload " + $rootScope.rand);
+ $scope.reloadView = function () {
+ $rootScope.rand = Math.floor((Math.random() * 100000) + 1);
+ NVRDataModel.log("User action: image reload " + $rootScope.rand);
};
- $scope.doRefresh = function()
- {
+ $scope.doRefresh = function () {
- // console.log("***Pull to Refresh, recomputing Rand");
- NVRDataModel.log("Reloading view for montage view, recomputing rand");
- $rootScope.rand = Math.floor((Math.random() * 100000) + 1);
- $scope.monitors = [];
- imageLoadingDataShare.set(0);
+ // console.log("***Pull to Refresh, recomputing Rand");
+ NVRDataModel.log("Reloading view for montage view, recomputing rand");
+ $rootScope.rand = Math.floor((Math.random() * 100000) + 1);
+ $scope.monitors = [];
+ imageLoadingDataShare.set(0);
- var refresh = NVRDataModel.getMonitors(1);
+ var refresh = NVRDataModel.getMonitors(1);
- refresh.then(function(data)
- {
- $scope.monitors = data;
- $scope.$broadcast('scroll.refreshComplete');
- });
+ refresh.then(function (data) {
+ $scope.monitors = data;
+ $scope.$broadcast('scroll.refreshComplete');
+ });
};
-}]);
+ }]);
diff --git a/www/lang/locale-en.json b/www/lang/locale-en.json
index d49aa5a2..2ff00d64 100644
--- a/www/lang/locale-en.json
+++ b/www/lang/locale-en.json
@@ -68,6 +68,7 @@
"kDisablePush" :"disable APNS/GCM",
"kDisableSamsung" :"If you are on a samsung device and are facing input issues, please temporarily disable auto-correction",
"kDisableSimulStreaming" :"Disable Montage real-time streaming",
+ "kDisableSimulStreamingNote" :"(always disabled in iOS)",
"kDiscovering" :"discovering",
"kDiscoveringAPI" :"discovering api",
"kDiscoveringCGI" :"discovering cgi",
diff --git a/www/templates/devoptions.html b/www/templates/devoptions.html
index 5be3fd65..61076042 100644
--- a/www/templates/devoptions.html
+++ b/www/templates/devoptions.html
@@ -124,6 +124,7 @@
<label ng-if="$root.platformOS!='desktop'">
<ion-toggle ng-model="loginData.enableStrictSSL" ng-checked="loginData.enableStrictSSL" toggle-class="toggle-calm"><span class="item-text-wrap">{{'kEnableStrictSSL' | translate}}
+
</span>
</ion-toggle>
</label>
@@ -155,7 +156,9 @@
</label>
<label>
- <ion-toggle ng-model="loginData.disableSimulStreaming" ng-checked="loginData.disableSimulStreaming" toggle-class="toggle-calm"><span class="item-text-wrap">{{'kDisableSimulStreaming' | translate}}
+ <ion-toggle ng-model="loginData.disableSimulStreaming" ng-checked="loginData.disableSimulStreaming"
+ ng-change="checkMultiPortToggle()" toggle-class="toggle-calm"><span class="item-text-wrap">{{'kDisableSimulStreaming' | translate}}
+ <p ng-if="$root.platformOS=='ios'">{{'kDisableSimulStreamingNote' | translate}}</p>
</span>
</ion-toggle>
</label>
diff --git a/www/templates/montage.html b/www/templates/montage.html
index 77580f5e..0742e3d3 100644
--- a/www/templates/montage.html
+++ b/www/templates/montage.html
@@ -33,9 +33,9 @@
<br/>
<div id="flyoutmenu" style="float:left">
<ul>
- <li>
+ <!-- <li>
<a href="" ng-click="killAllImages()"> <i class="ion-ionic"></i></a>
- </li>
+ </li>-->
<li>
<a href="" ng-click="sliderChanged(1)"> <i class="ion-plus-circled"></i></a>
@@ -90,7 +90,7 @@
- <span ng-repeat="monitor in MontageMonitors | onlyEnabled |limitTo: monLimit">
+ <span ng-if="!singleMonitorModalOpen" ng-repeat="monitor in MontageMonitors | onlyEnabled |limitTo: monLimit">
<div class="grid-item grid-item-{{monitor.Monitor.gridScale}} " data-item-id="{{monitor.Monitor.Id}}" data-item-size="{{monitor.Monitor.gridScale}}" data-item-listdisplay="{{monitor.Monitor.listDisplay}} ">
<!-- <figure>