summaryrefslogtreecommitdiff
path: root/www
diff options
context:
space:
mode:
Diffstat (limited to 'www')
-rw-r--r--www/css/style.css8
-rwxr-xr-xwww/js/DataModel.js137
-rw-r--r--www/js/DevOptionsCtrl.js7
-rw-r--r--www/js/EventCtrl.js24
-rw-r--r--www/js/EventModalCtrl.js23
-rw-r--r--www/js/EventServer.js10
-rw-r--r--www/js/EventsModalGraphCtrl.js14
-rw-r--r--www/js/LogCtrl.js4
-rw-r--r--www/js/LoginCtrl.js4
-rw-r--r--www/js/MenuController.js2
-rw-r--r--www/js/MonitorCtrl.js3
-rw-r--r--www/js/MonitorModalCtrl.js219
-rw-r--r--www/js/MontageCtrl.js3278
-rw-r--r--www/js/MontageHistoryCtrl.js26
-rw-r--r--www/js/PortalLoginCtrl.js20
-rw-r--r--www/js/TimelineCtrl.js10
-rw-r--r--www/js/TimelineModalCtrl.js8
-rwxr-xr-xwww/js/app.js57
-rw-r--r--www/lang/locale-en.json1
-rw-r--r--www/lang/locale-pl.json2
-rw-r--r--www/templates/devoptions.html5
-rw-r--r--www/templates/monitors-modal.html12
-rw-r--r--www/templates/montage.html11
-rw-r--r--www/templates/wizard.html4
24 files changed, 2019 insertions, 1870 deletions
diff --git a/www/css/style.css b/www/css/style.css
index 5b32a033..c850fb41 100644
--- a/www/css/style.css
+++ b/www/css/style.css
@@ -125,6 +125,14 @@ ion-popover-view.fit ion-content {
width: 100%
}
+/*.modal {
+ top: 100;
+
+ left: 100;
+
+ width: 10%
+}*/
+
/* I am using flexboxes to dynamicall adapt content
in montage view.
diff --git a/www/js/DataModel.js b/www/js/DataModel.js
index f930be8d..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");
@@ -1108,12 +1114,8 @@ angular.module('zmApp.controllers')
loginData.showLiveForInProgressEvents = true;
}
-
-
-
-
-
- log("DataModel init recovered this loginData as " + JSON.stringify(loginData));
+
+ log("DataModel init retrieved store loginData");
} else {
log("defaultServer configuration NOT found. Keeping login at defaults");
}
@@ -1125,7 +1127,7 @@ angular.module('zmApp.controllers')
// FIXME: HACK: This is the latest entry point into dataModel init, so start portal login after this
// not the neatest way
- $rootScope.$emit('init-complete');
+ $rootScope.$broadcast('init-complete');
});
monitorsLoaded = 0;
@@ -1142,7 +1144,7 @@ angular.module('zmApp.controllers')
},
setJustResumed: function (val) {
- justResumed = true;
+ justResumed = val;
},
stopNetwork: function (str) {
@@ -1151,10 +1153,11 @@ angular.module('zmApp.controllers')
if (justResumed) {
// we don't call stop as we did stop on pause
log(s + " Not calling window stop as we just resumed");
- justResumed = false;
+
} else {
- log(s + " Calling window.stop()");
- window.stop();
+ log(s + " stopNework: Calling window.stop()");
+ $timeout (function() {window.stop();});
+
}
},
@@ -1395,7 +1398,7 @@ angular.module('zmApp.controllers')
// Skipping monitor number as I only need an auth key
// so no need to generate an image
- var myurl = loginData.url + "/index.php?view=watch&mid=" + mid + "&connkey=" + ck;
+ var myurl = loginData.url + "/index.php?view=watch&mid=" + mid ;
debug("DataModel: Getting auth from " + myurl + " with mid=" + mid);
$http.get(myurl)
.then(function (success) {
@@ -1534,18 +1537,84 @@ angular.module('zmApp.controllers')
return monitors;
},
- killStream: function (ck) {
+ pauseLiveStream: function (ck,url) {
+ if (!url) url = loginData.url;
+
+ var myauthtoken = $rootScope.authSession.replace("&auth=", "");
+ var req = url+'/index.php';
+ req = req + "?view=request&request=stream";
+ req = req + "&connkey="+ck;
+ req = req + "&auth="+myauthtoken;
+ // req = req + "&command=17";
+
+ debug ("DataModel: Pausing live stream ck:"+ck);
+ return $http.get(req+"&command=1")
+ .then (
+ function (s) {
+ debug ("pause success for ck:"+ck+" with:"+JSON.stringify(s));
+
+ },
+ function (e) {debug ("pause success for ck:"+ck+" with:"+JSON.stringify(e));}
+ );
+
+ },
+
+ resumeLiveStream: function (ck,url) {
+ if (!url) url = loginData.url;
+
+ var myauthtoken = $rootScope.authSession.replace("&auth=", "");
+ var req = url+'/index.php';
+ req = req + "?view=request&request=stream";
+ req = req + "&connkey="+ck;
+ req = req + "&auth="+myauthtoken;
+ // req = req + "&command=17";
+
+ debug ("DataModel: Resuming live stream ck:"+ck);
+ return $http.get(req+"&command=2")
+ .then (
+ function (s) {
+ debug ("play success for ck:"+ck+" with:"+JSON.stringify(s));
+
+ },
+ function (e) {debug ("play success for ck:"+ck+" with:"+JSON.stringify(e));}
+ );
+
+ },
+
+ killLiveStream: function (ck,url,name) {
+
+ if (!url) url = loginData.url;
+
+ var myauthtoken = $rootScope.authSession.replace("&auth=", "");
+ var req = url+'/index.php';
+ req = req + "?view=request&request=stream";
+ req = req + "&connkey="+ck;
+ req = req + "&auth="+myauthtoken;
+ // req = req + "&command=17";
+ if (name==undefined) name="";
+ debug ("DataModel: killing "+name+" live stream ck:"+ck);
+ return $http.get(req+"&command=17")
+ .then (
+ function (s) {
+ debug ("kill success for ck:"+ck+" with:"+JSON.stringify(s));
+
+ },
+ function (e) {debug ("kill success for ck:"+ck+" with:"+JSON.stringify(e));}
+ );
+ },
+
+ /*killStream: function (ck) {
debug ("Killing connKey: "+ck);
var myauthtoken = $rootScope.authSession.replace("&auth=", "");
var req = $http(
{
method: 'POST',
- /*timeout: 15000,*/
+
url: loginData.url + '/index.php',
headers:
{
'Content-Type': 'application/x-www-form-urlencoded',
- //'Accept': '*/*',
+ ,
},
transformRequest: function(obj)
{
@@ -1563,26 +1632,27 @@ angular.module('zmApp.controllers')
view: "request",
request: "stream",
connkey: ck,
- command: 17,
+ command: 3,
auth: myauthtoken,
}
})
.then (function (succ) {
- console.log ("KILL OK WITH: " + JSON.stringify(succ));
+ console.log ("STOP/KILL OK WITH: " + JSON.stringify(succ));
},
function (err) {
console.log ("KILL ERROR WITH: " + JSON.stringify(err));
});
- },
+ },*/
regenConnKeys: function () {
- debug ("Regenerating connkeys...");
+ debug ("DataModel: Regenerating connkeys...");
for (var i=0; i < monitors.length; i++){
monitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
+ monitors[i].Monitor.rndKey = (Math.floor((Math.random() * 999999) + 1)).toString();
}
},
@@ -1610,6 +1680,8 @@ angular.module('zmApp.controllers')
// console.log ("gettign zms port");
getZmsMultiPortSupport()
.then(function (zmsPort) {
+
+ var controlURL = "";
debug ("ZMS Multiport reported: "+zmsPort);
debug ("Monitor URL to fetch is:"+myurl);
@@ -1641,6 +1713,7 @@ angular.module('zmApp.controllers')
monitors[i].Monitor.listDisplay = 'show';
monitors[i].Monitor.isAlarmed = false;
monitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
+ monitors[i].Monitor.rndKey = (Math.floor((Math.random() * 999999) + 1)).toString();
var serverFound = false;
for (var j = 0; j < multiservers.length; j++) {
@@ -1668,9 +1741,12 @@ angular.module('zmApp.controllers')
var st = "";
var baseurl = "";
var streamingurl = "";
+
st += (s.scheme ? s.scheme : p.scheme) + "://"; // server scheme overrides
+
+
// if server doesn't have a protocol, what we want is in path
if (!s.host) {
s.host = s.path;
@@ -1678,6 +1754,7 @@ angular.module('zmApp.controllers')
}
st += s.host;
+
// console.log ("STEP 1: ST="+st);
if (zmsPort <=0 )
@@ -1688,6 +1765,7 @@ angular.module('zmApp.controllers')
// console.log ("STEP 2 no ZMS: ST="+st);
}
+
}
else {
var sport = parseInt(zmsPort) + parseInt(monitors[i].Monitor.Id);
@@ -1701,6 +1779,7 @@ angular.module('zmApp.controllers')
baseurl = st;
+ controlURL =st;
st += (s.path ? s.path : p.path);
streamingurl += (s.path ? s.path : p.path);
@@ -1712,18 +1791,20 @@ angular.module('zmApp.controllers')
monitors[i].Monitor.streamingURL = st;
monitors[i].Monitor.baseURL = baseurl;
+ monitors[i].Monitor.controlURL = controlURL;
//console.log ("** Streaming="+st+" **base="+baseurl);
// starting 1.30 we have fid=xxx mode to return images
monitors[i].Monitor.imageMode = (versionCompare($rootScope.apiVersion, "1.30") == -1) ? "path" : "fid";
// debug("API " + $rootScope.apiVersion + ": Monitor " + monitors[i].Monitor.Id + " will use " + monitors[i].Monitor.imageMode + " for direct image access");
- debug ("Streaming URL for Monitor " + monitors[i].Monitor.Id + " is " + monitors[i].Monitor.streamingURL );
+ //debug ("Streaming URL for Monitor " + monitors[i].Monitor.Id + " is " + monitors[i].Monitor.streamingURL );
//debug ("Base URL for Monitor " + monitors[i].Monitor.Id + " is " + monitors[i].Monitor.baseURL );
} else {
//monitors[i].Monitor.listDisplay = 'show';
monitors[i].Monitor.isAlarmed = false;
monitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
+ monitors[i].Monitor.rndKey = (Math.floor((Math.random() * 999999) + 1)).toString();
var st2 = loginData.streamingurl;
@@ -1731,6 +1812,7 @@ angular.module('zmApp.controllers')
// we need to insert minport
st2 = "";
var p2 = URI.parse(loginData.streamingurl);
+ var p3 = URI.parse( loginData.url);
st2 += p2.scheme + "://";
if (!p2.host) {
p2.host = p2.path;
@@ -1739,11 +1821,16 @@ angular.module('zmApp.controllers')
st2 += p2.host;
var sport2 = parseInt(zmsPort) + parseInt(monitors[i].Monitor.Id);
st2 = st2 + ':'+sport2;
+
+ controlURL = st2;
+
if (p2.path) st2 += p2.path;
+ if (p3.path) controlURL +=p3.path;
}
monitors[i].Monitor.streamingURL = st2;
- debug ("Streaming URL for Monitor " + monitors[i].Monitor.Id + " is " + monitors[i].Monitor.streamingURL );
+ monitors[i].Monitor.controlURL = controlURL;
+ //debug ("Streaming URL for Monitor " + monitors[i].Monitor.Id + " is " + monitors[i].Monitor.streamingURL );
//console.log ("NO SERVER MATCH CONSTRUCTED STREAMING PATH="+st2);
monitors[i].Monitor.baseURL = loginData.url;
monitors[i].Monitor.imageMode = (versionCompare($rootScope.apiVersion, "1.30") == -1) ? "path" : "fid";
@@ -1769,6 +1856,7 @@ angular.module('zmApp.controllers')
//monitors[i].Monitor.listDisplay = 'show';
monitors[i].Monitor.isAlarmed = false;
monitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
+ monitors[i].Monitor.rndKey = (Math.floor((Math.random() * 999999) + 1)).toString();
var st = loginData.streamingurl;
if (zmsPort >0) {
// we need to insert minport
@@ -1789,10 +1877,11 @@ angular.module('zmApp.controllers')
}
monitors[i].Monitor.streamingURL = st;
- console.log ("CONSTRUCTED STREAMING PATH="+st);
+ // console.log ("CONSTRUCTED STREAMING PATH="+st);
monitors[i].Monitor.baseURL = loginData.url;
+
monitors[i].Monitor.imageMode = (versionCompare($rootScope.apiVersion, "1.30") == -1) ? "path" : "fid";
- debug("API " + $rootScope.apiVersion + ": Monitor " + monitors[i].Monitor.Id + " will use " + monitors[i].Monitor.imageMode + " for direct image access");
+ //debug("API " + $rootScope.apiVersion + ": Monitor " + monitors[i].Monitor.Id + " will use " + monitors[i].Monitor.imageMode + " for direct image access");
}
d.resolve(monitors);
@@ -1932,7 +2021,7 @@ angular.module('zmApp.controllers')
isTzSupported = true;
else
isTzSupported = false;
- $rootScope.$emit('tz-updated');
+ $rootScope.$broadcast('tz-updated');
return (d.promise);
},
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/EventCtrl.js b/www/js/EventCtrl.js
index 90eb90bf..423de0d2 100644
--- a/www/js/EventCtrl.js
+++ b/www/js/EventCtrl.js
@@ -61,6 +61,7 @@ angular.module('zmApp.controllers')
var mycarouselWatcher;
var nolangFrom;
var nolangTo;
+ var broadcastHandles = [];
$scope.typeOfFrames = $translate.instant('kShowTimeDiffFrames');
$scope.outlineMotion = false;
@@ -76,17 +77,19 @@ angular.module('zmApp.controllers')
//---------------------------------------------------
//we come here is TZ is updated after the view loads
- $rootScope.$on('tz-updated', function()
+ var tzu = $scope.$on('tz-updated', function()
{
$scope.tzAbbr = NVRDataModel.getTimeZoneNow();
NVRDataModel.debug("Timezone API updated timezone to " + NVRDataModel.getTimeZoneNow());
});
+ broadcastHandles.push(tzu);
- $rootScope.$on("language-changed", function()
+ var lc = $scope.$on("language-changed", function()
{
NVRDataModel.log(">>>>>>>>>>>>>>> language changed");
doRefresh();
});
+ broadcastHandles.push(lc);
$scope.$on('$ionicView.afterEnter', function()
{
@@ -151,6 +154,17 @@ angular.module('zmApp.controllers')
}
+
+ $scope.$on('$ionicView.beforeLeave', function()
+ {
+
+ NVRDataModel.debug ("EventCtrl: Deregistering broadcast handles");
+ for (var i=0; i < broadcastHandles.length; i++) {
+ // broadcastHandles[i]();
+ }
+ broadcastHandles = [];
+ });
+
$scope.$on('$ionicView.beforeEnter', function()
{
@@ -2138,6 +2152,12 @@ angular.module('zmApp.controllers')
{
NVRDataModel.debug("EventCtrl:onpause called");
if ($scope.popover) $scope.popover.remove();
+ NVRDataModel.debug ("EventCtrl Pause:Deregistering broadcast handles");
+ for (var i=0; i < broadcastHandles.length; i++) {
+ // broadcastHandles[i]();
+ }
+ broadcastHandles = [];
+
}
//-------------------------------------------------------------------------
diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js
index 52fc0711..4f9a12ce 100644
--- a/www/js/EventModalCtrl.js
+++ b/www/js/EventModalCtrl.js
@@ -17,6 +17,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
var gEvent;
var handle;
var showLive = true;
+ var broadcastHandles = [];
var framearray = {
@@ -107,7 +108,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
//
//--------------------------------------------------------------------------------------
- $rootScope.$on("bandwidth-change", function(e, data)
+ 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);
@@ -126,12 +127,13 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
$scope.singleImageQuality = (NVRDataModel.getBandwidth() == "lowbw") ? zm.eventSingleImageQualityLowBW : ld.singleImageQuality;
});
+ broadcastHandles.push(bc);
//-------------------------------------------------------
// we use this to reload the connkey if authkey changed
//------------------------------------------------------
- $rootScope.$on("auth-success", function()
+ var as = $scope.$on("auth-success", function()
{
NVRDataModel.debug("EventModalCtrl: Re-login detected, resetting everything & re-generating connkey");
@@ -146,6 +148,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
//eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery);
});
+ broadcastHandles.push(as);
//-------------------------------------------------------
// tap to pause
@@ -437,6 +440,12 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
function onPause()
{
+ NVRDataModel.debug ("EventModal Pause: Deregistering broadcast handles");
+ for (var i=0; i < broadcastHandles.length; i++) {
+ // broadcastHandles[i]();
+ }
+ broadcastHandles = [];
+
// $interval.cancel(modalIntervalHandle);
@@ -448,8 +457,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
function onResume()
{
- NVRDataModel.debug("EventModalCtrl: Modal resume called");
- $rootScope.modalRand = Math.floor((Math.random() * 100000) + 1);
+ /* NVRDataModel.debug("EventModalCtrl: Modal resume called");
+ $rootScope.modalRand = Math.floor((Math.random() * 100000) + 1);*/
}
@@ -1082,6 +1091,12 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
$scope.$on('modal.removed', function(e, m)
{
+ NVRDataModel.debug ("Deregistering broadcast handles");
+ for (var i=0; i < broadcastHandles.length; i++) {
+ // broadcastHandles[i]();
+ }
+ broadcastHandles = [];
+
//console.log("************* REMOVE CALLED");
$interval.cancel(eventQueryHandle);
if (m.id != 'footage')
diff --git a/www/js/EventServer.js b/www/js/EventServer.js
index 5254bde3..2d5831e9 100644
--- a/www/js/EventServer.js
+++ b/www/js/EventServer.js
@@ -116,7 +116,7 @@ angular.module('zmApp.controllers')
// console.log ("WS="+JSON.stringify(ws));
if (typeof ws !== 'undefined')
{
- NVRDataModel.debug("websocket already initialized -- thats not right.Forcing close");
+ NVRDataModel.debug("websocket already initialized --Forcing close");
ws.close(true);
ws=undefined;
@@ -139,6 +139,10 @@ angular.module('zmApp.controllers')
// Transmit auth information to server
// ws.$on('$open', openHandshake);
+ if (ws) {
+ ws.onErrorCallbacks = [];
+ NVRDataModel.debug("Removing error handlers for websocket");
+ }
NVRDataModel.debug("Setting up websocket error handler");
//ws.$on('$error', function(e)
ws.onError(function (e)
@@ -288,7 +292,7 @@ angular.module('zmApp.controllers')
{
//emit alarm details - this is when received over websockets
- $rootScope.$emit('alarm',
+ $rootScope.$broadcast('alarm',
{
message: listOfMonitors
});
@@ -654,7 +658,7 @@ angular.module('zmApp.controllers')
$rootScope.tappedEid = 0;
$rootScope.tappedMid = 0;
}
- $rootScope.$emit('process-push');
+ $rootScope.$broadcast('process-push');
}
else // app is foreground
diff --git a/www/js/EventsModalGraphCtrl.js b/www/js/EventsModalGraphCtrl.js
index fc9a9c42..3db8b31e 100644
--- a/www/js/EventsModalGraphCtrl.js
+++ b/www/js/EventsModalGraphCtrl.js
@@ -20,6 +20,17 @@ angular.module('zmApp.controllers').controller('EventsModalGraphCtrl', ['$scope'
var current_options;
var btype;
var data, options;
+ var broadCastHandles = [];
+
+
+ $scope.$on('modal.removed', function(e, m)
+ {
+ NVRDataModel.debug ("Deregistering broadcast handles");
+ for (var i=0; i < broadcastHandles.length; i++) {
+ // broadcastHandles[i]();
+ }
+ broadcastHandles = [];
+ });
$scope.$on('modal.shown', function(e, m)
{
@@ -104,12 +115,13 @@ angular.module('zmApp.controllers').controller('EventsModalGraphCtrl', ['$scope'
// we use this to reload the connkey if authkey changed
//------------------------------------------------------
- $rootScope.$on("auth-success", function()
+ var as = $scope.$on("auth-success", function()
{
NVRDataModel.debug("EventModalCtrl: Re-login detected, resetting everything & re-generating connkey");
});
+ broadCastHandles.push(as);
//-------------------------------------------------------
// I was kidding, this is where it really is drawn
diff --git a/www/js/LogCtrl.js b/www/js/LogCtrl.js
index fe18fe22..9f00a8f7 100644
--- a/www/js/LogCtrl.js
+++ b/www/js/LogCtrl.js
@@ -26,8 +26,8 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo
function onResume()
{
- NVRDataModel.debug("LogCtrl: resume called, starting log timer");
- loadLogs();
+ // NVRDataModel.debug("LogCtrl: resume called, starting log timer");
+ loadLogs();
}
$scope.flipLogs = function()
diff --git a/www/js/LoginCtrl.js b/www/js/LoginCtrl.js
index 1a728de4..56d6d4a7 100644
--- a/www/js/LoginCtrl.js
+++ b/www/js/LoginCtrl.js
@@ -30,7 +30,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r
document.addEventListener("resume", onResume, false);
function onResume() {
- NVRDataModel.log("Login screen resumed");
+ // NVRDataModel.log("Login screen resumed");
}
@@ -358,7 +358,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r
}
});*/
- $rootScope.$on('$stateChangeSuccess', function () {
+ $scope.$on('$stateChangeSuccess', function () {
$scope.ignoreDirty = false;
});
diff --git a/www/js/MenuController.js b/www/js/MenuController.js
index 071db4df..c7e96604 100644
--- a/www/js/MenuController.js
+++ b/www/js/MenuController.js
@@ -42,7 +42,7 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io
{
NVRDataModel.log("Language selected:" + $scope.myopt.lang);
NVRDataModel.setDefaultLanguage($scope.myopt.lang, true);
- $rootScope.$emit('language-changed');
+ $rootScope.$broadcast('language-changed');
//return "OK";
diff --git a/www/js/MonitorCtrl.js b/www/js/MonitorCtrl.js
index eca22d15..928a15b9 100644
--- a/www/js/MonitorCtrl.js
+++ b/www/js/MonitorCtrl.js
@@ -374,6 +374,7 @@ angular.module('zmApp.controllers')
NVRDataModel.debug("MonitorCtrl:Open Monitor Modal with monitor Id=" + mid +
" and Controllable:" + controllable + " with control ID:" + controlid);
+ $scope.controlURL = monitor.Monitor.controlURL;
$scope.monitor = monitor;
//console.log (">>>>>>>>>>>> MONITOR CRL " + $scope.monitor.
$scope.monitorId = mid;
@@ -402,7 +403,7 @@ angular.module('zmApp.controllers')
$scope.presetOn = false;
- $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
+
$scope.isControllable = controllable;
$rootScope.modalRand = Math.floor(Math.random() * (999999 - 111111 + 1)) + 111111;
diff --git a/www/js/MonitorModalCtrl.js b/www/js/MonitorModalCtrl.js
index ff0368cd..51f08fd5 100644
--- a/www/js/MonitorModalCtrl.js
+++ b/www/js/MonitorModalCtrl.js
@@ -10,7 +10,6 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
$scope.isModalActive = true;
var intervalModalHandle;
var cycleHandle;
- var nphTimer;
var ld = NVRDataModel.getLogin();
$scope.svgReady = false;
$scope.zoneArray = [];
@@ -20,6 +19,8 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
var targetID = "";
$scope.imageZoomable = true;
$scope.ptzButtonsShown = true;
+
+
@@ -31,16 +32,16 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
}, false);
- $rootScope.authSession = "undefined";
+ //$rootScope.authSession = "undefined";
- $ionicLoading.show({
+ /* $ionicLoading.show({
template: $translate.instant('kNegotiatingStreamAuth') + '...',
animation: 'fade-in',
showBackdrop: true,
duration: zm.loadingTimeout,
maxWidth: 300,
showDelay: 0
- });
+ });*/
$scope.currentStreamMode = 'single';
NVRDataModel.log("Using stream mode " + $scope.currentStreamMode);
@@ -48,7 +49,8 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
NVRDataModel.debug("MonitorModalCtrl called from " + $ionicHistory.currentStateName());
- $rootScope.validMonitorId = $scope.monitors[0].Monitor.Id;
+ //no need to recompute auth in modal
+ /*$rootScope.validMonitorId = $scope.monitors[0].Monitor.Id;
NVRDataModel.getAuthKey($rootScope.validMonitorId, $scope.monitors[0].Monitor.connKey)
.then(function (success) {
$ionicLoading.hide();
@@ -63,7 +65,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
//$rootScope.authSession="";
NVRDataModel.log("Modal: Error returned Stream authentication construction. Retaining old value of: " + $rootScope.authSession);
});
-
+*/
$interval.cancel(intervalModalHandle);
$interval.cancel(cycleHandle);
@@ -71,13 +73,9 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
intervalModalHandle = $interval(function () {
loadModalNotifications();
// console.log ("Refreshing Image...");
- }.bind(this), 5000);
+ }.bind(this), zm.alarmStatusTime);
- $timeout.cancel(nphTimer);
- nphTimer = $timeout(function () {
- $scope.currentStreamMode = 'jpeg';
- NVRDataModel.log("Switching playback via nphzms");
- }, zm.nphSwitchTimer);
+
// This is the PTZ menu
@@ -195,12 +193,28 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
// On re-auth, we need a new zms
//-------------------------------------------------------------
- $rootScope.$on("auth-success", function () {
+ var as = $scope.$on("auth-success", function () {
NVRDataModel.debug("MonitorModalCtrl: Re-login detected, resetting everything & re-generating connkey");
//NVRDataModel.stopNetwork("MonitorModal-auth success");
- NVRDataModel.killStream($scope.connKey);
+ $scope.isModalStreamPaused = false;
+
+ $timeout (function() {
+
+ 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();
+ });
+
+
});
@@ -266,7 +280,13 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
$interval.cancel(cycleHandle);
NVRDataModel.debug("Killing single stream...");
- NVRDataModel.killStream($scope.connKey);
+
+ 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?
@@ -285,7 +305,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
intervalModalHandle = $interval(function () {
loadModalNotifications();
- }.bind(this), 5000);
+ }.bind(this), zm.alarmStatusTime);
if (ld.cycleMonitors) {
NVRDataModel.debug("Cycling enabled at " + ld.cycleMonitorsInterval);
@@ -577,46 +597,38 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
// this is a good time to calculate scaled zone points
function imageLoaded() {
+ if ($scope.animationInProgress) return;
+ /*
var img = document.getElementById("singlemonitor");
-
- //$scope.cw = img.naturalWidth;
- //$scope.ch = img.naturalHeight;
-
$scope.cw = img.naturalWidth;
$scope.ch = img.naturalHeight;
- //console.log ("REPORTED DIM:" + $scope.cw+ "x"+$scope.ch );
- //console.log ("ORIGINAL DIM:" + img.naturalWidth+ "x"+img.naturalHeight);
- //https://server/zm/api/zones/forMonitor/7.json
- //
+
$scope.zoneArray = [];
$scope.circlePoints = [];
var ow = $scope.monitor.Monitor.Width;
- var oh = $scope.monitor.Monitor.Height;
+ var oh = $scope.monitor.Monitor.Height;*/
// console.log ("MONITOR IS: "+JSON.stringify($scope.monitor));
// console.log ("ORIGINAL WH="+ow+"x"+oh);
- for (var i = 0; i < originalZones.length; i++) {
+ /*for (var i = 0; i < originalZones.length; i++) {
var sx = $scope.cw / ow;
var sy = $scope.ch / oh;
- //$scope.zoneArray.push({
- // coords:scaleCoords(originalZones[i].coords,sx,sy),
- // type:originalZones[i].type});
$scope.zoneArray.push({
coords: originalZones[i].coords,
type: originalZones[i].type
});
- }
+ }*/
// now create a points array for circle handles
- for (i = 0; i < $scope.zoneArray.length; i++) {
- /*jshint loopfunc: true */
- // console.log ("ZONE ARRAY="+$scope.zoneArray[i].coords);
+
+ /* for (i = 0; i < $scope.zoneArray.length; i++) {
+ //jshint loopfunc: true
$scope.zoneArray[i].coords.split(' ')
.forEach(function (itm) {
var o = itm.split(',');
@@ -629,8 +641,10 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
// console.log ("CIRCLE X="+o[0]+"Y="+o[1]);
});
- }
+ }*/
+ $scope.isModalStreamPaused = false;
+ NVRDataModel.debug ("Modal image loaded, switching to streaming");
@@ -638,18 +652,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
}
- //-------------------------------------------------------------
- // this is checked to make sure we are not pulling images
- // when app is in background. This is a problem with Android,
- // for example
- //-------------------------------------------------------------
-
- $scope.isBackground = function () {
- // console.log ("Is background called from ModalCtrl and returned " +
- // NVRDataModel.isBackground());
- return NVRDataModel.isBackground();
- };
-
+
//-------------------------------------------------------------
// Send PTZ command to ZM
// Note: PTZ fails on desktop, don't bother about it
@@ -799,6 +802,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
function moveToMonitor(m, d) {
+ $scope.animationInProgress = true;
if ($scope.isZoneEdit) {
NVRDataModel.log("Not cycling, as you are editing zones");
}
@@ -838,38 +842,57 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
}
while (found != 1);
+ // now kill stream and set up next
+ NVRDataModel.debug("Killing stream before we move on to next monitor...");
+
+ $scope.isModalStreamPaused = true;
+ var element = angular.element(document.getElementById("monitorimage"));
var slidein;
var slideout;
- var dirn = d;
- if (dirn == 1) {
- slideout = "animated slideOutLeft";
- slidein = "animated slideInRight";
- } else {
- slideout = "animated slideOutRight";
- slidein = "animated slideInLeft";
- }
+ $timeout (function() {
+ NVRDataModel.killLiveStream($scope.connKey, $scope.controlURL);
+
+ // we should now have a paused stream, time to animate out
+
+
+
+ var dirn = d;
+ if (dirn == 1) {
+ slideout = "animated slideOutLeft";
+ slidein = "animated slideInRight";
+ } else {
+ slideout = "animated slideOutRight";
+ slidein = "animated slideInLeft";
+ }
+
+
+ element.addClass(slideout)
+ .one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', outWithOld);
+ });
+
+
- var element = angular.element(document.getElementById("monitorimage"));
- element.addClass(slideout)
- .one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', outWithOld);
function outWithOld() {
- NVRDataModel.log("ModalCtrl:Stopping network pull...");
- NVRDataModel.stopNetwork("MonitorModal-outwithOld");
+ NVRDataModel.log(">>>Old image out");
+ // NVRDataModel.log("ModalCtrl:Stopping network pull...");
+ //NVRDataModel.stopNetwork("MonitorModal-outwithOld");
$scope.rand = Math.floor((Math.random() * 100000) + 1);
- $scope.animationInProgress = true;
+
$timeout(function () {
element.removeClass(slideout);
element.addClass(slidein)
.one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', inWithNew);
+
$scope.monitorId = mid;
$scope.monitorName = NVRDataModel.getMonitorName(mid);
$scope.monitor = NVRDataModel.getMonitorObject(mid);
+ $scope.controlURL = $scope.monitor.Monitor.controlURL;
$scope.zoneArray = [];
$scope.circlePoints = [];
- getZones();
+ // getZones();
configurePTZ($scope.monitorId);
}, 200);
}
@@ -877,24 +900,15 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
function inWithNew() {
element.removeClass(slidein);
- $scope.animationInProgress = false;
+
+ $scope.isModalStreamPaused = false;
- NVRDataModel.log("New image loaded in");
+
var ld = NVRDataModel.getLogin();
carouselUtils.setStop(false);
- if (ld.useNphZms == true) {
- $scope.currentStreamMode = 'single';
- NVRDataModel.log("Setting timer to play nph-zms mode");
- // first 5 seconds, load a snapshot, then switch to real FPS display
- // this is to avoid initial image load delay
- // FIXME: 5 seconds fair?
- $timeout.cancel(nphTimer);
- nphTimer = $timeout(function () {
- $scope.currentStreamMode = 'jpeg';
- NVRDataModel.log("Switching playback via nphzms");
- }, zm.nphSwitchTimer);
- }
-
+ $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); // get new key for new id
+ $scope.animationInProgress = false; // has to be AFTER new connkey
+ NVRDataModel.log("<<<New image loaded in with ck:"+$scope.connKey);
}
$ionicLoading.hide();
@@ -1114,6 +1128,36 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
}
}
+
+ $scope.constructSingleStream = function() {
+
+
+ var stream;
+ stream = $scope.monitor.Monitor.streamingURL +
+ "/nph-zms?mode="+getSingleStreamMode() +
+ "&monitor="+$scope.monitorId +
+ "&scale="+$scope.quality +
+ $rootScope.authSession +
+ "&rand="+$rootScope.modalRand +
+ appendSingleStreamConnKey();
+
+ //console.log ("STREAM="+stream);
+
+ return stream;
+
+
+ };
+
+
+ function getSingleStreamMode() {
+ return $scope.isModalStreamPaused ? 'single': 'jpeg';
+ }
+
+function appendSingleStreamConnKey() {
+ return $scope.isModalStreamPaused ? "": "&connkey="+$scope.connKey;
+
+ }
+
//-------------------------------------------------------------
//reloaads mon - do we need it?
//-------------------------------------------------------------
@@ -1170,11 +1214,21 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
$scope.$on('modal.removed', function () {
+ as(); // dregister auth success
$scope.isModalActive = false;
- NVRDataModel.debug("Single monitor exited, killing stream");
- NVRDataModel.killStream($scope.connKey);
+ 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);
@@ -1572,6 +1626,13 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
}
$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;
@@ -1590,7 +1651,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
$scope.showZones = false;
- getZones();
+ //getZones();
var ld = NVRDataModel.getLogin();
//currentEvent = $scope.currentEvent;
diff --git a/www/js/MontageCtrl.js b/www/js/MontageCtrl.js
index f8fda110..f8ff4b01 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', 'message', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$ionicPopup', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$ionicPlatform', 'zm', '$ionicPopover', '$controller', 'imageLoadingDataShare', '$window', '$localstorage', '$translate', 'SecuredPopups', 'EventServer', function($scope, $rootScope, NVRDataModel, message, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $ionicPopup, $stateParams, $ionicHistory, $ionicScrollDelegate, $ionicPlatform, zm, $ionicPopover, $controller, imageLoadingDataShare, $window, $localstorage, $translate, SecuredPopups, EventServer)
-{
+ .controller('zmApp.MontageCtrl', ['$scope', '$rootScope', 'NVRDataModel', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$ionicPopup', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$ionicPlatform', 'zm', '$ionicPopover', '$controller', 'imageLoadingDataShare', '$window', '$localstorage', '$translate', 'SecuredPopups', 'EventServer', function ($scope, $rootScope, NVRDataModel, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $ionicPopup, $stateParams, $ionicHistory, $ionicScrollDelegate, $ionicPlatform, zm, $ionicPopover, $controller, imageLoadingDataShare, $window, $localstorage, $translate, SecuredPopups, EventServer) {
//---------------------------------------------------------------------
// Controller main
@@ -28,108 +26,118 @@ angular.module('zmApp.controllers')
var ld;
var refreshSec;
var reloadPage = zm.forceMontageReloadDelay;
+ var viewCleaned = false;
+ var randToAvoidCacheMem;
+
+
+ var areStreamsStopped = true; // first load snapshot
+ $scope.isModalStreamPaused = false; // used in Monitor Modal
+
//var reloadPage = 30;
- var simulStreaming = 0; // will be 1 if you multiport
+ var simulStreaming = false; // will be true if you multiport
+
+ 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;
+
+ $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
+ {
+ initPackery();
+ }, zm.packeryTimer);
- $rootScope.$on("auth-success", function () {
- NVRDataModel.debug("Montage Re-auth handler; stopping network...");
- //console.log ("RETAUTH");
- NVRDataModel.stopNetwork();
- if (NVRDataModel.getLogin().isUseEventServer) {
- NVRDataModel.debug ("Restablishing event server connection...");
- EventServer.disconnect();
- EventServer.init();
}
-
+ });
+ broadcastHandles.push(as);
+ //console.log (">>>>>>>>>>>>>>>>>>>>>>>>>>>AS="+as);
});
-
//--------------------------------------------------------------------------------------
// Handles bandwidth change, if required
//
//--------------------------------------------------------------------------------------
- $rootScope.$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 * 1000);
+ 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);
+
// --------------------------------------------------------
// Handling of back button in case modal is open should
// close the modal
// --------------------------------------------------------
- $ionicPlatform.registerBackButtonAction(function(e)
- {
- e.preventDefault();
- if ($scope.modal != undefined && $scope.modal.isShown())
- {
- // switch off awake, as liveview is finished
- NVRDataModel.debug("Modal is open, closing it");
- NVRDataModel.setAwake(false);
- $scope.isModalActive = false;
- cleanupOnClose();
- }
- 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)
@@ -147,322 +155,298 @@ angular.module('zmApp.controllers')
function forceReloadPage() {
- if ($scope.isDragabillyOn)
- {
- NVRDataModel.debug ("not cycling, 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.refresh', {
+ "view": 'app.montage'
+ });
+
+
+ /* $state.transitionTo($state.current, $stateParams, {
+ reload: true,
+ inherit: false,
+ notify: true
+ });*/
+
});
- $state.go("app.montage",
- {
- minimal: $scope.minimal,
- isRefresh: true
- });*/
+
+
+
+
+
+ /*$ionicHistory.nextViewOptions(
+ {
+ disableAnimate: true,
+ disableBack: true
+ });
+ $state.go("app.montage",
+ {
+ minimal: $scope.minimal,
+ isRefresh: true
+ });*/
}
// called by afterEnter to load Packery
- function initPackery()
- {
+ function initPackery() {
- /* $ionicLoading.show(
- {
- template: $translate.instant('kArrangingImages'),
- noBackdrop: true,
- duration: zm.loadingTimeout
- });*/
+ /* $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();
+ $scope.areImagesLoading = true;
+ var progressCalled = false;
+ draggies = [];
+ var layouttype = true;
+ var ld = NVRDataModel.getLogin();
- var positionsStr = ld.packeryPositions;
- var positions = {};
+ var positionsStr = ld.packeryPositions;
+ var positions = {};
- if (positionsStr == '' || positionsStr == undefined)
- {
- NVRDataModel.log("Did NOT find a packery layout");
- layouttype = true;
- }
- else
- {
+ 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");
+ //console.log ("POSITION STR IS " + positionsStr);
+ positions = JSON.parse(positionsStr);
+ NVRDataModel.log("found a packery layout");
- layouttype = false;
- }
+ layouttype = false;
+ }
- var cnt = 0;
- $scope.MontageMonitors.forEach(function(elem)
- {
- if ((elem.Monitor.Enabled != '0') && (elem.Monitor.Function != 'None') )
- cnt++;
- });
+ var cnt = 0;
+ $scope.MontageMonitors.forEach(function (elem) {
+ if ((elem.Monitor.Enabled != '0') && (elem.Monitor.Function != 'None'))
+ cnt++;
+ });
- NVRDataModel.log("Monitors that are active and not DOM hidden: " + cnt + " while grid has " + positions.length);
+ NVRDataModel.log("Monitors that are active and not DOM hidden: " + cnt + " while grid has " + positions.length);
- if (cnt > NVRDataModel.getLogin().maxMontage)
- {
- cnt = NVRDataModel.getLogin().maxMontage;
- NVRDataModel.log("restricting monitor count to " + cnt + " due to max-montage setting");
- }
+ if (cnt > NVRDataModel.getLogin().maxMontage) {
+ cnt = NVRDataModel.getLogin().maxMontage;
+ NVRDataModel.log("restricting monitor count to " + cnt + " due to max-montage setting");
+ }
- if (cnt != positions.length)
- {
+ if (cnt != positions.length) {
- NVRDataModel.log("Whoops!! Monitors have changed. I'm resetting layouts, sorry!");
- layouttype = true;
- positions = {};
- }
+ NVRDataModel.log("Whoops!! Monitors have changed. I'm resetting layouts, sorry!");
+ layouttype = true;
+ positions = {};
+ }
- var elem = angular.element(document.getElementById("mygrid"));
+ var elem = angular.element(document.getElementById("mygrid"));
- //console.log ("**** mygrid is " + JSON.stringify(elem));
+ //console.log ("**** mygrid is " + JSON.stringify(elem));
- if (pckry) pckry.destroy();
+ if (pckry) pckry.destroy();
- pckry = new Packery('.grid',
- {
- itemSelector: '.grid-item',
- percentPosition: true,
- columnWidth: '.grid-sizer',
- gutter: 0,
- initLayout: layouttype,
- shiftPercentResize: true
+ pckry = new Packery('.grid', {
+ itemSelector: '.grid-item',
+ percentPosition: true,
+ columnWidth: '.grid-sizer',
+ gutter: 0,
+ initLayout: layouttype,
+ shiftPercentResize: true
- });
+ });
- imagesLoaded(elem).on('progress', function(instance, img)
- {
+ imagesLoaded(elem).on('progress', function (instance, img) {
- var result = img.isLoaded ? 'loaded' : 'broken';
- // NVRDataModel.debug('~~loaded image is ' + result + ' for ' + img.img.src);
+ 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
+ // lay out every image if a pre-arranged position has not been found
- $timeout(function()
- {
- if (layouttype) pckry.layout();
- }, 100);
+ $timeout(function () {
+ if (layouttype) pckry.layout();
+ }, 100);
- progressCalled = true;
+ progressCalled = true;
- // if (layouttype) $timeout (function(){layout(pckry);},100);
- });
+ // if (layouttype) $timeout (function(){layout(pckry);},100);
+ });
- imagesLoaded(elem).on('always', function()
- {
- //console.log ("******** ALL IMAGES LOADED");
- // $scope.$digest();
- NVRDataModel.debug("All images loaded");
+ imagesLoaded(elem).on('always', function () {
+ //console.log ("******** ALL IMAGES LOADED");
+ // $scope.$digest();
+ NVRDataModel.debug("All images loaded, switching to streaming if applicable");
- $scope.areImagesLoading = false;
+ $scope.areImagesLoading = false;
+ areStreamsStopped = false;
- $ionicLoading.hide();
+ $ionicLoading.hide();
- if (!progressCalled)
- {
- NVRDataModel.log("*** PROGRESS WAS NOT CALLED");
- // pckry.reloadItems();
- }
+ if (!progressCalled) {
+ NVRDataModel.log("*** PROGRESS WAS NOT CALLED");
+ // pckry.reloadItems();
+ }
- $timeout(function()
- {
+ $timeout(function () {
- pckry.getItemElements().forEach(function(itemElem)
- {
+ pckry.getItemElements().forEach(function (itemElem) {
- draggie = new Draggabilly(itemElem);
- pckry.bindDraggabillyEvents(draggie);
- draggies.push(draggie);
- draggie.disable();
- draggie.unbindHandles();
- });
+ draggie = new Draggabilly(itemElem);
+ pckry.bindDraggabillyEvents(draggie);
+ draggies.push(draggie);
+ draggie.disable();
+ draggie.unbindHandles();
+ });
- pckry.on('dragItemPositioned', itemDragged);
+ pckry.on('dragItemPositioned', itemDragged);
- if (!isEmpty(positions))
- {
- NVRDataModel.log("Arranging as per packery grid");
+ if (!isEmpty(positions)) {
+ NVRDataModel.log("Arranging as per packery grid");
- for (var i = 0; i < $scope.MontageMonitors.length; i++)
- {
- for (var j = 0; j < positions.length; j++)
- {
- if ($scope.MontageMonitors[i].Monitor.Id == positions[j].attr)
- {
- 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);
- }
- }
+ 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);
+ }
+ }
- NVRDataModel.debug("All images loaded, doing image layout");
+ NVRDataModel.debug("All images loaded, doing image layout");
- }
- $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);
+ }
+ $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);
- function itemDragged(item)
- {
- NVRDataModel.debug("drag complete");
- $timeout (function(){pckry.shiftLayout();},20);
+ //pckry.onresize();
+
+ }, 20);
+
+ });
- pckry.once ('layoutComplete', function() {
+ function itemDragged(item) {
+ NVRDataModel.debug("drag complete");
+ $timeout(function () {
+ pckry.shiftLayout();
+ }, 20);
- 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.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) {
+ //pckry.getItemElements().forEach(function (itemElem) {
- //console.log (itemElem.attributes['data-item-id'].value+" size "+itemElem.attributes['data-item-size'].value );
- // });
+ //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;
@@ -473,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()
- {
+ function loadAlarmStatus() {
- if ((NVRDataModel.versionCompare($rootScope.apiVersion, "1.30") == -1) ||
- (NVRDataModel.getBandwidth() == 'lowbw') ||
- (NVRDataModel.getLogin().disableAlarmCheckMontage == true))
- {
+ if ((NVRDataModel.versionCompare($rootScope.apiVersion, "1.30") == -1) ||
+ (NVRDataModel.getBandwidth() == 'lowbw') ||
+ (NVRDataModel.getLogin().disableAlarmCheckMontage == true)) {
- 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]);
+ 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() {
- $scope.randToAvoidCacheMem = new Date().getTime();
+ randToAvoidCacheMem = new Date().getTime();
//$scope.randToAvoidCacheMem = "1";
//console.log ("Generating:"+$scope.randToAvoidCacheMem);
}
@@ -606,160 +575,143 @@ angular.module('zmApp.controllers')
// re-compute rand so snapshot in montage reloads
//-----------------------------------------------------------------------
- function loadNotifications()
- {
- if (simulStreaming=='1') {
- // 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");
});
@@ -774,102 +726,92 @@ angular.module('zmApp.controllers')
//----------------------------------------------------------------
// Alarm emit handling
//----------------------------------------------------------------
- $rootScope.$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);
+ }
}
+ }
+
});
- 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);
+ 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);
}
//----------------------------------------------------------------
// 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;
+ }
};
//-------------------------------------------------------------
@@ -878,411 +820,384 @@ 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;
-
- 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);
+ 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);
- }
+ }
}
//---------------------------------------------------------------------
// main monitor modal open - if drag is not on, this is called on touch
//---------------------------------------------------------------------
- $scope.openModal = function(mid, controllable, controlid, connKey, monitor)
- {
-
- if (simulStreaming=='1') {
- NVRDataModel.debug ("Killing all streams in montage to save memory/nw...");
- for (var i=0; i < $scope.MontageMonitors.length; i++) {
- NVRDataModel.killStream($scope.MontageMonitors[i].Monitor.connKey);
+ $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...");
+
+ 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);
}
+ }
}
-
- 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());
- $ionicLoading.show(
- {
- template: $translate.instant('kPleaseWait'),
- noBackdrop: true,
- duration: zm.loadingTimeout
- });
+ // This is a modal to show the monitor footage
+ $ionicModal.fromTemplateUrl('templates/monitors-modal.html', {
+ scope: $scope,
+ animation: 'slide-in-up',
+ id: 'monitorsmodal'
- // we don't really need this as we have stopped the timer
- // $scope.isModalActive = true;
+ })
+ .then(function (modal) {
+ $scope.modal = modal;
- //$timeout (function() {pckry.shiftLayout();},zm.packeryTimer);
- $scope.modal.show();
+ /* $ionicLoading.show(
+ {
+ template: $translate.instant('kPleaseWait'),
+ noBackdrop: true,
+ duration: zm.loadingTimeout
+ });*/
- });
+ // we don't really need this as we have stopped the timer
+ // $scope.isModalActive = true;
+
+ //$timeout (function() {pckry.shiftLayout();},zm.packeryTimer);
+ $scope.modal.show();
+
+ });
}
//---------------------------------------------------------------------
- //
+ // This is ONLY called when we exit modal to montage
//---------------------------------------------------------------------
- function cleanupOnClose()
- {
-
- // single connkey is removed in monitorModal
+ function cleanupOnCloseModal() {
- NVRDataModel.debug ("Regenerating connkeys for montage...");
- for (var i=0; i < $scope.MontageMonitors.length; i++) {
- $scope.MontageMonitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
- }
- $scope.modal.remove();
- // we did the montage, so redo flow
- $timeout (function() {initPackery();},zm.packeryTimer);
+ 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);
- /* $timeout(function()
- {
- NVRDataModel.log("MontageCtrl:Stopping network pull...");
- if (NVRDataModel.isForceNetworkStop()) NVRDataModel.stopNetwork();
- }, 50);*/
+ intervalHandleMontage = $interval(function () {
+ loadNotifications();
+ // console.log ("Refreshing Image...");
+ }.bind(this), refreshSec * 1000);
+ intervalHandleAlarmStatus = $interval(function () {
+ loadAlarmStatus();
+ // console.log ("Refreshing Image...");
+ }.bind(this), zm.alarmStatusTime);
+ intervalHandleMontageCycle = $interval(function () {
+ cycleMontageProfiles();
+ // console.log ("Refreshing Image...");
+ }.bind(this), 5000);
- $rootScope.rand = Math.floor((Math.random() * 100000) + 1);
- $scope.isModalActive = false;
+ intervalHandleReloadPage = $interval(function () {
+ forceReloadPage();
+ }.bind(this), reloadPage);
- NVRDataModel.log("Restarting montage timer, closing Modal...");
- 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);
+ $scope.isModalStreamPaused = true;
+ // let modal go to snapshot mode in render
+ $timeout(function () {
+ $scope.modal.remove();
+ });
- intervalHandleAlarmStatus = $interval(function()
- {
- loadAlarmStatus();
- // console.log ("Refreshing Image...");
- }.bind(this), 5000);
+ // We now need to regen connkeys
+ // once regenerated
+ if (simulStreaming) {
- intervalHandleMontageCycle = $interval(function()
- {
- cycleMontageProfiles();
- // console.log ("Refreshing Image...");
- }.bind(this), 5000);
+ NVRDataModel.debug("Re-creating all stream connkeys in montage ...");
+ NVRDataModel.regenConnKeys();
+ $scope.monitors = NVRDataModel.getMonitorsNow();
+ $scope.MontageMonitors = angular.copy($scope.monitors);
+ }
+
+ // we need to do this as we hide the view for snapshot as well
+ //areStreamsStopped = false;
+ $timeout(function () // after render
+ {
+ initPackery();
+ }, zm.packeryTimer);
+
+ }
+
- intervalHandleReloadPage = $interval(function()
- {
- forceReloadPage();
- }.bind(this), reloadPage * 1000);
-
+ // for some reason, double tap calls this twice
+ $scope.closeModal = function () {
+ NVRDataModel.debug("MontageCtrl: Close & Destroy Monitor Modal");
- // $timeout (function() {pckry.shiftLayout();},zm.packeryTimer);
+ if ($scope.singleMonitorModalOpen) {
+ $scope.singleMonitorModalOpen = false;
- }
+ cleanupOnCloseModal();
- $scope.closeModal = function()
- {
- if ($scope.singleMonitorModalOpen) {
- $scope.singleMonitorModalOpen = false;
- NVRDataModel.debug("MontageCtrl: Close & Destroy Monitor Modal");
- cleanupOnClose();
- }
- else {
- NVRDataModel.debug ("Ignoring double-invocation");
- }
-
- // $scope.isModalActive = false;
- // Note: no need to setAwake(false) as needs to be awake
- // in montage view
+ } else {
+ NVRDataModel.debug("Ignoring double-invocation");
+ }
+
+ // $scope.isModalActive = false;
+ // Note: no need to setAwake(false) as needs to be awake
+ // in montage view
};
@@ -1293,772 +1208,765 @@ angular.module('zmApp.controllers')
// refreshes to the server for images we are not seeing
//---------------------------------------------------------------------
- function onPause()
- {
- NVRDataModel.debug("MontageCtrl: onpause called");
- $interval.cancel(intervalHandleMontage);
- $interval.cancel(intervalHandleMontageCycle);
- $interval.cancel(intervalHandleAlarmStatus);
- $interval.cancel(intervalHandleReloadPage);
-
- // if modal is open stream gets killed
- // inside monitorModal
- if (!$scope.singleMonitorModalOpen && simulStreaming=='1') {
- NVRDataModel.debug ("Killing all streams in montage to save memory/nw...");
- for (var i=0; i < $scope.MontageMonitors.length; i++) {
- NVRDataModel.killStream($scope.MontageMonitors[i].Monitor.connKey);
+
+
+ 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...");
+
+ 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);
+
}
+ }
+
+
}
- // $interval.cancel(modalIntervalHandle);
- // FIXME: Do I need to setAwake(false) here?
+ });
+
+
+
}
- function onResume()
- {
+ function onPause() {
+ NVRDataModel.debug("MontageCtrl: onpause called");
+ viewCleanup();
+ }
- NVRDataModel.debug ("Montage resume called, regenerating all connkeys");
- NVRDataModel.regenConnKeys();
- $scope.MontageMonitors = NVRDataModel.getMonitorsNow();
+ 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();
}
- $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.MontageMonitors = NVRDataModel.getMonitorsNow();
- $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'));
-
-
- }
-
- }
-
-
- }
+ }
- }
- });
+ }
+ });
};
- $scope.getMode = function() {
+ function getMode() {
- // console.log ("SIMUL="+simulStreaming);
- return (simulStreaming == '1') ? 'jpeg': 'single';
- };
-
+ var mode = (simulStreaming && !areStreamsStopped) ? 'jpeg' : 'single';
+ //console.log ("mode="+mode);
+ return mode;
- // using connkey in snapshot results in error
- $scope.appendConnKey =function(ck) {
- if (simulStreaming == '1')
- return "&connkey="+ck;
- else
- return "";
- };
+ }
- $scope.toggleSubMenuFunction = function()
- {
- $scope.toggleSubMenu = !$scope.toggleSubMenu;
+ // 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);
+ }
+ }
- 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.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;
+ if (simulStreaming && !areStreamsStopped) {
+ NVRDataModel.debug("Re-creating all streams in montage to save memory/nw...");
+ NVRDataModel.regenConnKeys();
- NVRDataModel.getZmsMultiPortSupport()
- .then ( function (data) {
- //multiPortZms = data;
- simulStreaming = data > 0 ? '1':'0';
- //console.log ("****** MULTIPORT="+multiPortZms);
- NVRDataModel.debug ("Multiport="+data);
+ $scope.monitors = NVRDataModel.getMonitorsNow();
+ $scope.MontageMonitors = angular.copy($scope.monitors);
- /* if ($rootScope.platformOS == 'ios') {
- simulStreaming = '1';
- NVRDataModel.debug ("IOS detected, force enabling simulStreams");
- }
-*/
- if (ld.disableSimulStreaming) {
- simulStreaming = '0';
- NVRDataModel.debug ("Forcing simulStreams off as you have disabled it");
+ $timeout(function () {
+ initPackery();
+ }, zm.packeryTimer);
- }
- },
- function (err) {
- NVRDataModel.debug("******* SHOULD NEVER HAPPEN - MULTIPORT ERROR");
- simulStreaming = '0';
- }
- );
+ }
- });
- //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.$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';
+ $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;
- 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
+ function appendConnKey(ck) {
+ if (simulStreaming)
+ return "&connkey=" + ck;
+ else
+ return "";
+ }
- 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;
+ // using connkey in snapshot results in error
+ $scope.appendConnKey = function (ck) {
+ if (simulStreaming && !areStreamsStopped)
+ return "&connkey=" + ck;
+ else
+ return "";
+ };
- }
+ $scope.toggleSubMenuFunction = function () {
- $scope.monLimit = $scope.LoginData.maxMontage;
- $scope.toggleSubMenu = NVRDataModel.getLogin().showMontageSubMenu;
+ $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);
+ };
- $scope.monitors = message;
- $scope.MontageMonitors = angular.copy(message);
- $scope.sliderChanging = false;
- loginData = NVRDataModel.getLogin();
+ // 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;
+ //console.log ("****** MULTIPORT="+multiPortZms);
+ NVRDataModel.debug("Multiport=" + data);
- $scope.isRefresh = $stateParams.isRefresh;
- sizeInProgress = false;
- $scope.imageStyle = true;
- intervalHandleMontage = "";
- intervalHandleMontageCycle = "";
- $scope.isModalActive = false;
- $scope.isReorder = false;
+ if ($rootScope.platformOS == 'ios') {
+ simulStreaming = false;
+ NVRDataModel.debug ("IOS detected, DISABLING simul streaming");
+ }
- $ionicSideMenuDelegate.canDragContent($scope.minimal ? true : true);
+ if (ld.disableSimulStreaming) {
+ simulStreaming = false;
+ NVRDataModel.debug("Forcing simulStreams off as you have disabled it");
- $scope.areImagesLoading = true;
- var ld = NVRDataModel.getLogin();
+ }
+ },
+ function (err) {
+ NVRDataModel.debug("******* SHOULD NEVER HAPPEN - MULTIPORT ERROR");
+ simulStreaming = false;
- refreshSec = (NVRDataModel.getBandwidth() == 'lowbw') ? ld.refreshSecLowBW : ld.refreshSec;
+ }
+ );
- NVRDataModel.debug("bandwidth: " + NVRDataModel.getBandwidth() + " montage refresh set to: " + refreshSec);
+ });
- //console.log("Setting Awake to " + NVRDataModel.getKeepAwake());
- NVRDataModel.setAwake(NVRDataModel.getKeepAwake());
+ //avoid bogus scale error
+ $scope.LoginData = NVRDataModel.getLogin();
- $interval.cancel(intervalHandleMontage);
- $interval.cancel(intervalHandleMontageCycle);
- $interval.cancel(intervalHandleAlarmStatus);
- $interval.cancel(intervalHandleReloadPage);
+ $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;
- intervalHandleMontage = $interval(function()
- {
- loadNotifications();
- // console.log ("Refreshing Image...");
- }.bind(this), refreshSec * 1000);
+ if (NVRDataModel.isTzSupported())
+ $scope.iconTimeNow = 'server';
+ else
+ $scope.iconTimeNow = 'local';
- 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);
+ if ($scope.iconTimeNow == 'local')
+ $scope.timeNow = moment().format(NVRDataModel.getTimeFormatSec());
+ else
+ $scope.timeNow = moment().tz(NVRDataModel.getTimeZoneNow()).format(NVRDataModel.getTimeFormatSec());
- intervalHandleAlarmStatus = $interval(function()
- {
- loadAlarmStatus();
- // console.log ("Refreshing Image...");
- }.bind(this), 5000);
+ $scope.gridScale = "grid-item-50";
+ $scope.LoginData = NVRDataModel.getLogin();
+ //FIXME
- intervalHandleReloadPage = $interval(function()
- {
- forceReloadPage();
- }.bind(this), reloadPage * 1000);
+ 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;
- 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;
- }
+ $scope.monLimit = $scope.LoginData.maxMontage;
+ $scope.toggleSubMenu = NVRDataModel.getLogin().showMontageSubMenu;
- ld = NVRDataModel.getLogin();
+ $scope.sliderChanging = false;
+ loginData = NVRDataModel.getLogin();
- $rootScope.authSession = "undefined";
- $ionicLoading.show(
- {
- template: $translate.instant('kNegotiatingStreamAuth'),
- animation: 'fade-in',
- showBackdrop: true,
- duration: zm.loadingTimeout,
- maxWidth: 300,
- showDelay: 0
- });
+ $scope.isRefresh = $stateParams.isRefresh;
+ sizeInProgress = false;
+ $scope.imageStyle = true;
+ intervalHandleMontage = "";
+ intervalHandleMontageCycle = "";
+ $scope.isReorder = false;
- NVRDataModel.log("Inside Montage Ctrl:We found " + $scope.monitors.length + " monitors");
+ $ionicSideMenuDelegate.canDragContent($scope.minimal ? true : true);
- // 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;
+ $scope.areImagesLoading = true;
+ var ld = NVRDataModel.getLogin();
- }
+ refreshSec = (NVRDataModel.getBandwidth() == 'lowbw') ? ld.refreshSecLowBW : ld.refreshSec;
- $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);
- });
+ NVRDataModel.debug("bandwidth: " + NVRDataModel.getBandwidth() + " montage refresh set to: " + refreshSec);
- //console.log("**VIEW ** Montage Ctrl AFTER ENTER");
- window.addEventListener("resize", orientationChanged, false);
+ //console.log("Setting Awake to " + NVRDataModel.getKeepAwake());
+ NVRDataModel.setAwake(NVRDataModel.getKeepAwake());
- document.addEventListener("pause", onPause, false);
- document.addEventListener("resume", onResume, false);
+ $interval.cancel(intervalHandleMontage);
+ $interval.cancel(intervalHandleMontageCycle);
+ $interval.cancel(intervalHandleAlarmStatus);
+ $interval.cancel(intervalHandleReloadPage);
- });
- $scope.$on('$ionicView.beforeLeave', function()
- {
- // console.log("**VIEW ** Montage Ctrl Left, force removing modal");
-
- //console.log ("beforeLeave:Cancelling timer");
- $interval.cancel(intervalHandleMontage);
- $interval.cancel(intervalHandleMontageCycle);
- $interval.cancel(intervalHandleAlarmStatus);
- $interval.cancel(intervalHandleReloadPage);
- pckry.destroy();
- window.removeEventListener("resize", orientationChanged, false);
-
- // killing connkeys STILL leaks apache
- NVRDataModel.log("MontageCtrl:Stopping network pull...");
- NVRDataModel.stopNetwork();
+ 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
+ });
+
+ 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);
- /* if (!$scope.singleMonitorModalOpen) {
- NVRDataModel.debug ("Killing all streams in montage before exit");
- for (var i=0; i < $scope.MontageMonitors.length; i++) {
- NVRDataModel.killStream($scope.MontageMonitors[i].Monitor.connKey);
- }
- }*/
+ },
+ function (error) {
- // make sure this is applied in scope digest to stop network pull
- // thats why we are doing it beforeLeave
+ $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);
+ });
- /*if (NVRDataModel.isForceNetworkStop())
- {
- NVRDataModel.log("MontageCtrl:Stopping network pull...");
- NVRDataModel.stopNetwork();
+ //console.log("**VIEW ** Montage Ctrl AFTER ENTER");
+ window.addEventListener("resize", orientationChanged, false);
- }*/
+ document.addEventListener("pause", onPause, false);
+ // document.addEventListener("resume", onResume, false);
});
- $scope.$on('$ionicView.unloaded', function() {
+ $scope.$on('$ionicView.beforeLeave', function () {
+
+ areStreamsStopped = true;
+ viewCleanup();
});
- $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";
- }
- }
+ $scope.$on('$ionicView.unloaded', function () {
- $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);
+ }
- }
-
};
//---------------------------------------------------------
@@ -2068,181 +1976,161 @@ angular.module('zmApp.controllers')
// a copy and the value never changes
//---------------------------------------------------------
- $scope.sliderChanged = function(dirn)
- {
-
- if ($scope.sliderChanging)
- {
- // console.log("too fast my friend");
- //$scope.slider.monsize = oldSliderVal;
- return;
- }
+ $scope.sliderChanged = function (dirn) {
- $scope.sliderChanging = true;
+ if ($scope.sliderChanging) {
+ // console.log("too fast my friend");
+ //$scope.slider.monsize = oldSliderVal;
+ return;
+ }
- $ionicLoading.show(
- {
- template: $translate.instant('kPleaseWait'),
- noBackdrop: true,
- duration: 5000
- });
+ $scope.sliderChanging = true;
- 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/js/MontageHistoryCtrl.js b/www/js/MontageHistoryCtrl.js
index 6c8c3cf2..0df27dce 100644
--- a/www/js/MontageHistoryCtrl.js
+++ b/www/js/MontageHistoryCtrl.js
@@ -5,15 +5,17 @@
// FIXME: This is a copy of montageCtrl - needs a lot of code cleanup
angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$scope', '$rootScope', 'NVRDataModel', 'message', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$ionicPopup', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$ionicPlatform', 'zm', '$ionicPopover', '$controller', 'imageLoadingDataShare', '$window', '$translate', 'qHttp', '$q', function($scope, $rootScope, NVRDataModel, message, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $ionicPopup, $stateParams, $ionicHistory, $ionicScrollDelegate, $ionicPlatform, zm, $ionicPopover, $controller, imageLoadingDataShare, $window, $translate, qHttp, $q)
{
+ var broadcastHandles = [];
//--------------------------------------------------------------------------------------
// Handles bandwidth change, if required
//
//--------------------------------------------------------------------------------------
- $rootScope.$on("bandwidth-change", function(e, data)
+ var bc = $scope.$on("bandwidth-change", function(e, data)
{
// nothing to do for now
// eventUrl will use lower BW in next query cycle
});
+ broadcastHandles.push(bc);
$scope.getLocalTZ = function()
{
@@ -225,7 +227,10 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc
$scope.dragBorder = "";
$scope.isDragabillyOn = false;
$ionicSideMenuDelegate.canDragContent(false);
- NVRDataModel.stopNetwork("MontageHistory-footerCollapse");
+
+ for (i=0; i < $scope.MontageMonitors.length; i++) {
+ NVRDataModel.killLiveStream($scope.MontageMonitors[i]);
+ }
NVRDataModel.regenConnKeys();
var ld = NVRDataModel.getLogin();
@@ -863,6 +868,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc
function onResume()
{}
+
$scope.openMenu = function()
{
$timeout(function()
@@ -908,6 +914,14 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc
$scope.$on('$ionicView.beforeLeave', function()
{
//console.log("**VIEW ** Event History Ctrl Left, force removing modal");
+
+ NVRDataModel.debug ("Montage History: Deregistering broadcast handles");
+ for (var i=0; i < broadcastHandles.length; i++) {
+ //broadcastHandles[i]();
+ }
+ broadcastHandles = [];
+
+
if ($scope.modal) $scope.modal.remove();
NVRDataModel.log("Cancelling event query timer");
$interval.cancel($rootScope.eventQueryInterval);
@@ -916,8 +930,12 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc
// thats why we are doing it beforeLeave
pckry.destroy();
window.removeEventListener("resize", orientationChanged, false);
- NVRDataModel.log("Forcing a window.stop() here");
- NVRDataModel.stopNetwork("MontageHistory-beforeLeave");
+ //NVRDataModel.log("Forcing a window.stop() here");
+ //NVRDataModel.stopNetwork("MontageHistory-beforeLeave");
+
+ for (i=0; i < $scope.MontageMonitors.length; i++) {
+ NVRDataModel.killLiveStream($scope.MontageMonitors[i]);
+ }
});
$scope.$on('$ionicView.unloaded', function() {});
$scope.sliderChanged = function(dirn)
diff --git a/www/js/PortalLoginCtrl.js b/www/js/PortalLoginCtrl.js
index 75448ceb..f7ade984 100644
--- a/www/js/PortalLoginCtrl.js
+++ b/www/js/PortalLoginCtrl.js
@@ -7,16 +7,25 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
{
var processPush = false;
+ var broadcastHandles = [];
- $scope.$on ('$ionicView.beforeEnter', function() {
+ $scope.$on ('$ionicView.beforeLeave', function() {
//processPush = false;
// NVRDataModel.debug ("BeforeEnter in Portal: setting ProcessPush to false");
});
+ $scope.$on ('$ionicView.beforeLeave', function() {
+ NVRDataModel.debug ("Portal: Deregistering broadcast handles");
+ for (var i=0; i < broadcastHandles.length; i++) {
+ //broadcastHandles[i]();
+ }
+ broadcastHandles = [];
+ });
+
$scope.$on('$ionicView.enter',
function()
{
-
+ NVRDataModel.setJustResumed(false);
NVRDataModel.debug("Inside Portal login Enter handler");
loginData = NVRDataModel.getLogin();
@@ -246,7 +255,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
return;
}*/
// coming here means continue
- EventServer.refresh();
+ //EventServer.init();
var statetoGo = $rootScope.lastState ? $rootScope.lastState : 'app.montage';
//NVRDataModel.debug ("logging state transition");
@@ -276,13 +285,14 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
}
- $rootScope.$on("process-push", function () {
+ var pp = $scope.$on("process-push", function () {
NVRDataModel.debug("*** PROCESS PUSH HANDLER CALLED INSIDE PORTAL LOGIN, setting ProcessPush to true");
processPush = true;
evaluateTappedNotification();
});
+ broadcastHandles.push(pp);
function evaluateTappedNotification()
{
@@ -466,7 +476,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
NVRDataModel.getKeyConfigParams(1);
NVRDataModel.getTimeZone();
- EventServer.refresh();
+ EventServer.init();
// if push broadcast happens BEFORE this, then no
// state change will occur here which is good
diff --git a/www/js/TimelineCtrl.js b/www/js/TimelineCtrl.js
index a4a564d0..d689ec4f 100644
--- a/www/js/TimelineCtrl.js
+++ b/www/js/TimelineCtrl.js
@@ -14,6 +14,7 @@
angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPlatform', '$scope', 'zm', 'NVRDataModel', '$ionicSideMenuDelegate', '$rootScope', '$http', '$q', 'message', '$state', '$ionicLoading', '$ionicPopover', '$ionicScrollDelegate', '$ionicModal', '$timeout', '$ionicContentBanner', '$ionicHistory', '$sce', '$stateParams', '$translate', '$ionicPopup', '$interval', function($ionicPlatform, $scope, zm, NVRDataModel, $ionicSideMenuDelegate, $rootScope, $http, $q, message, $state, $ionicLoading, $ionicPopover, $ionicScrollDelegate, $ionicModal, $timeout, $ionicContentBanner, $ionicHistory, $sce, $stateParams, $translate, $ionicPopup, $interval)
{
+ var broadcastHandles = [];
//console.log("Inside Timeline controller");
$scope.openMenu = function()
@@ -282,11 +283,12 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
}
- $rootScope.$on('tz-updated', function()
+ var tzu = $scope.$on('tz-updated', function()
{
$scope.tzAbbr = NVRDataModel.getTimeZoneNow();
NVRDataModel.debug("Timezone API updated timezone to " + NVRDataModel.getTimeZoneNow());
});
+ broadcastHandles.push(tzu);
//-------------------------------------------------
// Make sure we delete the timeline
@@ -296,6 +298,12 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
$scope.$on('$ionicView.leave', function()
{
+ NVRDataModel.debug ("Timeline: Deregistering broadcast handles");
+ for (var i=0; i < broadcastHandles.length; i++) {
+ // broadcastHandles[i]();
+ }
+ broadcastHandles = [];
+
if (timeline)
{
$interval.cancel(updateInterval);
diff --git a/www/js/TimelineModalCtrl.js b/www/js/TimelineModalCtrl.js
index ef011d3b..e7a7e2cd 100644
--- a/www/js/TimelineModalCtrl.js
+++ b/www/js/TimelineModalCtrl.js
@@ -53,13 +53,7 @@ angular.module('zmApp.controllers').controller('TimelineModalCtrl', ['$scope', '
// we use this to reload the connkey if authkey changed
//------------------------------------------------------
- $rootScope.$on("auth-success", function()
- {
-
- NVRDataModel.debug("EventModalCtrl: Re-login detected, resetting everything & re-generating connkey");
-
- });
-
+
$scope.scrollUp = function()
{
//console.log ("SWIPE UP");
diff --git a/www/js/app.js b/www/js/app.js
index 487a0d0e..01928d5e 100755
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -52,14 +52,11 @@ angular.module('zmApp', [
logFile: 'zmNinjaLog.txt',
authoremail: 'pliablepixels+zmNinja@gmail.com',
logFileMaxSize: 20000, // after this limit log gets reset
- //loginInterval: 300000, //5m*60s*1000 - ZM auto login after 5 mins
- loginInterval: 1800000, //30m*60s*1000 - ZM auto login after 30 mins
-
- //loginInterval: 30000,
+
updateCheckInterval: 86400000, // 24 hrs
loadingTimeout: 15000,
slowLoadingTimeout: 60000,
- safeMontageLimit: 100,
+ safeMontageLimit: 10,
safeImageQuality: 10,
maxFPS: 30,
defaultFPS: 3,
@@ -93,6 +90,8 @@ angular.module('zmApp', [
cipherKey: 'sdf#@#%FSXSA_AR',
minCycleTime: 5,
+ loginInterval: 1800000, //30m*60s*1000 - ZM auto login after 30 mins
+ //loginInterval: 20000,
eventPlaybackQueryLowBW: 6000,
loginIntervalLowBW: 1800000, //30m login
eventSingleImageQualityLowBW: 70,
@@ -104,8 +103,9 @@ angular.module('zmApp', [
maxGifWidth: 800.0,
quantSample: 15,
hashSecret: 'unused at the moment',
- forceMontageReloadDelay: 3600, // 1 hr,
- thumbWidth:200
+ forceMontageReloadDelay: 4500000, // 1 hr 15m,
+ thumbWidth:200,
+ alarmStatusTime: 10000,
})
@@ -840,7 +840,7 @@ angular.module('zmApp', [
$rootScope.$on("auth-error", function () {
- NVRDataModel.debug("zmAutoLogin: Inside auth-error emit");
+ NVRDataModel.debug("zmAutoLogin: Inside auth-error broadcast");
NVRDataModel.displayBanner('error', ['ZoneMinder authentication failed', 'Please check settings']);
});
@@ -853,7 +853,7 @@ angular.module('zmApp', [
//------------------------------------------------------------------
$rootScope.$on("init-complete", function () {
- NVRDataModel.log(">>>>>>>>>>>>>>> All init over, going to portal login");
+ NVRDataModel.log("Inside init-complete in app.js: All init over, going to portal login");
$ionicHistory.nextViewOptions({
disableAnimate: true
});
@@ -883,7 +883,7 @@ angular.module('zmApp', [
$timeout(function () {
contentBannerInstance();
}, 2000);
- NVRDataModel.debug("auth-success emit:Successful");
+ NVRDataModel.debug("auth-success broadcast:Successful");
});
$rootScope.getProfileName = function () {
@@ -929,7 +929,7 @@ angular.module('zmApp', [
// coming here means login not needed, old login is valid
.then(function (success) {
d.resolve("Login Success due to fast login");
- $rootScope.$emit('auth-success', "fast login mode");
+ $rootScope.$broadcast('auth-success', "fast login mode");
return d.promise;
},
@@ -1010,7 +1010,7 @@ angular.module('zmApp', [
NVRDataModel.log("Auth is disabled!");
d.resolve("Login Success");
- $rootScope.$emit('auth-success', 'no auth');
+ $rootScope.$broadcast('auth-success', 'no auth');
return (d.promise);
}
@@ -1102,14 +1102,14 @@ angular.module('zmApp', [
d.resolve("Login Success");
- $rootScope.$emit('auth-success', data);
+ $rootScope.$broadcast('auth-success', data);
} else // this means login error
{
$rootScope.loggedIntoZm = -1;
//console.log("**** ZM Login FAILED");
NVRDataModel.log("zmAutologin Error: Bad Credentials ", "error");
- $rootScope.$emit('auth-error', "incorrect credentials");
+ $rootScope.$broadcast('auth-error', "incorrect credentials");
d.reject("Login Error");
return (d.promise);
@@ -1150,7 +1150,7 @@ angular.module('zmApp', [
NVRDataModel.log("zmAutologin Error " + JSON.stringify(error) + " and status " + status);
// bad urls etc come here
$rootScope.loggedIntoZm = -1;
- $rootScope.$emit('auth-error', error);
+ $rootScope.$broadcast('auth-error', error);
d.reject("Login Error");
return d.promise;
@@ -1328,7 +1328,8 @@ angular.module('zmApp', [
$rootScope.online = true;
$timeout(function () {
- var networkState = navigator.connection.type;
+ var networkState="browser not supported";
+ if (navigator.connection) networkState = navigator.connection.type;
NVRDataModel.debug("Detected network type as: " + networkState);
var strState = NVRDataModel.getBandwidth();
NVRDataModel.debug("getBandwidth() normalized it as: " + strState);
@@ -1336,7 +1337,7 @@ angular.module('zmApp', [
if ((NVRDataModel.getLogin().autoSwitchBandwidth == true) &&
(NVRDataModel.getLogin().enableLowBandwidth == true)) {
NVRDataModel.debug("Setting app state to: " + strState);
- $rootScope.$emit('bandwidth-change', strState);
+ $rootScope.$broadcast('bandwidth-change', strState);
} else {
NVRDataModel.debug("Not changing bandwidth state, as auto change is not on");
}
@@ -1774,7 +1775,7 @@ angular.module('zmApp', [
// now do SSL check
//setSSLCerts();
- EventServer.init();
+ //EventServer.init();
zmCheckUpdates.start();
NVRDataModel.log("Setting up POST LOGIN timer");
zmAutoLogin.start();
@@ -1794,6 +1795,7 @@ angular.module('zmApp', [
//----------------------------------------------------------------------------
document.addEventListener("resume", function () {
+ NVRDataModel.setJustResumed(true);
$ionicPlatform.ready(function () {
NVRDataModel.log("App is resuming from background");
$rootScope.isDownloading = false;
@@ -1850,7 +1852,8 @@ angular.module('zmApp', [
//----------------------------------------------------------------------------
document.addEventListener("pause", function () {
NVRDataModel.setBackground(true);
- NVRDataModel.setJustResumed(true); // used for window stop
+ NVRDataModel.setJustResumed(false);
+ // NVRDataModel.setJustResumed(true); // used for window stop
EventServer.disconnect();
@@ -1858,18 +1861,21 @@ angular.module('zmApp', [
$interval.cancel($rootScope.eventQueryInterval);
$interval.cancel($rootScope.intervalHandle);
+ zmAutoLogin.stop();
+ if ($rootScope.zmPopup)
+ $rootScope.zmPopup.close();
- NVRDataModel.log("ROOT APP: Stopping network pull...");
- window.stop(); // dont call stopNetwork - we need to stop here
- var ld = NVRDataModel.getLogin();
+ NVRDataModel.log("ROOT APP: Stopping network ");
+ NVRDataModel.stopNetwork("called from app.js");
+ // dont call stopNetwork - we need to stop here
+
+ var ld = NVRDataModel.getLogin();
- zmAutoLogin.stop();
- if ($rootScope.zmPopup)
- $rootScope.zmPopup.close();
+
if (ld.exitOnSleep && $rootScope.platformOS == "android") {
NVRDataModel.log("user exited app");
@@ -2258,6 +2264,7 @@ angular.module('zmApp', [
resolve: {
message: function (NVRDataModel) {
//console.log("Inside app.events resolve");
+ NVRDataModel.regenConnKeys();
return NVRDataModel.getMonitors(0);
}
diff --git a/www/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/lang/locale-pl.json b/www/lang/locale-pl.json
index 61793000..d66fc3b6 100644
--- a/www/lang/locale-pl.json
+++ b/www/lang/locale-pl.json
@@ -37,7 +37,7 @@
"kChangeSettingsFor" :"Zmień ustawienia dla",
"kChangeState" :"Zmień Stan",
"kCheckCredentials" :"Proszę sprawdzić dane logowania",
- "kChromeMax" :"maksimum 5 monitorów - limit chrome",
+ "kChromeMax" :"maksimum 5 monitorów - limit przeglądarki",
"kCleaningUp" :"czyszczenie",
"kClear" :"Wyczyść",
"kCollapse" :"zwiń",
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/monitors-modal.html b/www/templates/monitors-modal.html
index 79f443da..02b46a37 100644
--- a/www/templates/monitors-modal.html
+++ b/www/templates/monitors-modal.html
@@ -2,9 +2,6 @@
<ion-modal-view cache-view="false" style="background-color:#444444">
<ion-content ng-cloak on-double-tap="closeModal();" scroll="false">
-
-
-
<div id="imagecontainer">
<ion-scroll ng-if="!isZoneEdit" on-scroll="checkZoom()" delegate-handle="imgscroll" has-bouncing=false min-zoom=1 zooming="true"
direction="xy" style="width: 100%;" overflow-scroll="false">
@@ -12,14 +9,15 @@
<!-- -->
<div id="monitorimage" style="height: 100vh;" class="main">
<div ng-if="$root.authSession!='undefined'">
- <div ng-if="!animationInProgress && !isBackground() && connKey">
+ <div ng-if="!animationInProgress">
+
<!--<span style="color:white">{{currentStreamMode}}</span>-->
- <img id="singlemonitor" style="width:100vw; height:100vh;" image-spinner-loader="lines" image-spinner-src="{{monitor.Monitor.streamingURL}}/nph-zms?mode={{currentStreamMode}}&monitor={{monitorId}}&scale={{quality}}{{$root.authSession}}&rand={{$root.modalRand}}&connkey={{connKey}}"
+ <img id="singlemonitor" style="width:100vw; height:100vh;" image-spinner-loader="lines" image-spinner-src="{{constructSingleStream()}}"
ng-class="{'object-fit_cover':imageFit==false, 'object-fit_contain':imageFit==true}" on-swipe-left="onSwipe(monitorId,1)"
on-swipe-right="onSwipe(monitorId,-1)" on-double-tap="closeModal();" imageonload="imageLoaded()" />
</div>
- <div ng-if="animationInProgress || isBackground()">
+ <div ng-if="animationInProgress">
<img style="width:100vw; height:100vh" ng-src="img/pausevideo.png" class="object-fit_contain" />
</div>
</div>
@@ -43,7 +41,7 @@
<div ng-if="!animationInProgress && !isBackground() && connKey">
<!--<span style="color:white">{{currentStreamMode}}</span>-->
- <img id="singlemonitor" style="width:100vw; height:100vh;" image-spinner-loader="lines" image-spinner-src="{{monitor.Monitor.streamingURL}}/nph-zms?mode={{currentStreamMode}}&monitor={{monitorId}}&scale={{quality}}{{$root.authSession}}&rand={{$root.modalRand}}&connkey={{connKey}}"
+ <img id="singlemonitor" style="width:100vw; height:100vh;" image-spinner-loader="lines" image-spinner-src="{{constructSingleStream()}}"
ng-class="{'object-fit_cover':imageFit==false, 'object-fit_contain':imageFit==true}" on-swipe-left="onSwipe(monitorId,1)"
on-swipe-right="onSwipe(monitorId,-1)" on-double-tap="closeModal();" imageonload="imageLoaded()" />
</div>
diff --git a/www/templates/montage.html b/www/templates/montage.html
index 5abf9b22..0742e3d3 100644
--- a/www/templates/montage.html
+++ b/www/templates/montage.html
@@ -33,6 +33,10 @@
<br/>
<div id="flyoutmenu" style="float:left">
<ul>
+ <!-- <li>
+ <a href="" ng-click="killAllImages()"> <i class="ion-ionic"></i></a>
+ </li>-->
+
<li>
<a href="" ng-click="sliderChanged(1)"> <i class="ion-plus-circled"></i></a>
</li>
@@ -97,16 +101,15 @@
<figure class="{{dragBorder}}" ng-show="monitor.Monitor.listDisplay!='noshow'">
<!--<div ng-if="!isModalActive" >-->
<!--<div ng-if="$root.authSession!='undefined' && !isBackground() && !areImagesLoading">-->
- <div ng-if="$root.authSession!='undefined' && !isBackground() ">
+ <div ng-if="$root.authSession!='undefined' && $root.authSession!=''">
<div ng-if = "!minimal" >
-
- <img class="{{monitor.Monitor.selectStyle}}" id="img-{{$index}}" image-spinner-src="{{monitor.Monitor.streamingURL}}/nph-zms?mode={{getMode()}}&monitor={{monitor.Monitor.Id}}&scale={{LoginData.montageQuality}}{{$root.authSession}}&rand={{randToAvoidCacheMem}}{{appendConnKey(monitor.Monitor.connKey)}}" ng-click="!isDragabillyOn?openModal(monitor.Monitor.Id, monitor.Monitor.Controllable, monitor.Monitor.ControlId, monitor.Monitor.connKey,monitor):toggleSelectItem(monitor.Monitor.Id);" image-spinner-loader="lines" img-spinner-w="{{monitor.Monitor.Width}}" img-spinner-h="{{monitor.Monitor.Height}}" />
+ <img class="{{monitor.Monitor.selectStyle}}" id="img-{{$index}}" image-spinner-src="{{constructStream(monitor)}}" ng-click="!isDragabillyOn?openModal(monitor.Monitor.Id, monitor.Monitor.Controllable, monitor.Monitor.ControlId, monitor.Monitor.connKey,monitor):toggleSelectItem(monitor.Monitor.Id);" image-spinner-loader="lines" img-spinner-w="{{monitor.Monitor.Width}}" img-spinner-h="{{monitor.Monitor.Height}}" />
</div>
<div ng-if = "minimal">
- <img id="img-{{$index}}" image-spinner-src="{{monitor.Monitor.streamingURL}}/zms?mode={{getMode()}}&monitor={{monitor.Monitor.Id}}&scale={{LoginData.montageQuality}}{{$root.authSession}}&rand={{randToAvoidCacheMem}}{{appendConnKey(monitor.Monitor.connKey)}}" ng-click="!isDragabillyOn?openModal(monitor.Monitor.Id, monitor.Monitor.Controllable, monitor.Monitor.ControlId, monitor.Monitor.connKey,monitor):toggleSelectItem(monitor.Monitor.Id);" image-spinner-loader="lines" img-spinner-w="{{monitor.Monitor.Width}}" img-spinner-h="{{monitor.Monitor.Height}}" />
+ <img id="img-{{$index}}" image-spinner-src="{{constructStream(monitor)}}" ng-click="!isDragabillyOn?openModal(monitor.Monitor.Id, monitor.Monitor.Controllable, monitor.Monitor.ControlId, monitor.Monitor.connKey,monitor):toggleSelectItem(monitor.Monitor.Id);" image-spinner-loader="lines" img-spinner-w="{{monitor.Monitor.Width}}" img-spinner-h="{{monitor.Monitor.Height}}" />
</div>
</div>
diff --git a/www/templates/wizard.html b/www/templates/wizard.html
index 60d1e1ef..70f17b6e 100644
--- a/www/templates/wizard.html
+++ b/www/templates/wizard.html
@@ -41,13 +41,15 @@
<!--<p >{{'kWizPasswdNote' | translate}}</p>-->
</label>
</div>
- <ion-toggle ng-show="wizard.useauth" ng-model="wizard.usebasicauth" ng-checked="wizard.usebasicauth" toggle-class="toggle-calm">{{'kWizBasicAuth' | translate}}</ion-toggle>
+ <ion-toggle ng-show="wizard.useauth" ng-model="wizard.usebasicauth" ng-checked="wizard.usebasicauth" toggle-class="toggle-calm">{{'kWizBasicAuth' | translate}}<p ng-show="wizard.usebasicauth">{{'kWarningBasicAuth'|translate}}</p></ion-toggle>
+
<label class="item item-input item-floating-label" ng-show="wizard.usebasicauth">
<span class="input-label">{{'kUserName' | translate}}</span>
<input autocorrect="off" autocapitalize="none" autocomplete="off" type="text" ng-model="wizard.basicuser" placeholder="{{'kPlaceHolderBasicAuthUser'|translate}}">
</label>
<label class="item item-input item-text-wrap item-floating-label" ng-show="wizard.usebasicauth">
<span class="input-label">{{'kPassword' | translate}}</span>
+
<input type="password" ng-model="wizard.basicpassword" placeholder="{{'kPlaceHolderBasicAuthPass'|translate}}">
<p>{{'kWizPasswdNote' | translate}}</p>
</label>