summaryrefslogtreecommitdiff
path: root/www/js/EventModalCtrl.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/js/EventModalCtrl.js')
-rw-r--r--www/js/EventModalCtrl.js897
1 files changed, 535 insertions, 362 deletions
diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js
index abdf5052..c1633d1f 100644
--- a/www/js/EventModalCtrl.js
+++ b/www/js/EventModalCtrl.js
@@ -3,11 +3,8 @@
/* jslint browser: true*/
/* global saveAs, cordova,StatusBar,angular,console,ionic, moment, Chart */
-
-
-
-angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$rootScope', 'zm', 'NVRDataModel', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$q', '$sce', 'carouselUtils', '$ionicPopup', '$translate', function ($scope, $rootScope, zm, NVRDataModel, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $q, $sce, carouselUtils, $ionicPopup, $translate) {
-
+angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$rootScope', 'zm', 'NVRDataModel', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$q', '$sce', 'carouselUtils', '$ionicPopup', '$translate', '$filter', 'SecuredPopups', function($scope, $rootScope, zm, NVRDataModel, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $q, $sce, carouselUtils, $ionicPopup, $translate, $filter, SecuredPopups)
+{
// from parent scope
var currentEvent = $scope.currentEvent;
@@ -16,22 +13,24 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
$scope.loginData = NVRDataModel.getLogin();
$scope.currentRate = '-';
var timeFormat = 'MM/DD/YYYY HH:mm:ss';
-
+ var event;
+ var gEvent;
+ var handle;
var framearray = {
labels: [],
- datasets: [{
+ datasets: [
+ {
//label: '# of Votes',
backgroundColor: 'rgba(242, 12, 12, 0.5)',
borderColor: 'rgba(242, 12, 12, 0.5)',
data: [],
- }]
+ }]
};
var frameoptions = [];
-
var eventImageDigits = 5; // failsafe
$scope.currentProgress = {
progress: 0
@@ -40,7 +39,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
progress: 0
};
NVRDataModel.getKeyConfigParams(0)
- .then(function (data) {
+ .then(function(data)
+ {
//console.log ("***GETKEY: " + JSON.stringify(data));
eventImageDigits = parseInt(data);
NVRDataModel.log("Image padding digits reported as " + eventImageDigits);
@@ -54,8 +54,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
$scope.showModalRangeSider = false;
$scope.isModalActive = true;
-
- $timeout(function () {
+ $timeout(function()
+ {
$scope.showModalRangeSider = true;
}, 2000);
@@ -64,7 +64,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
document.addEventListener("resume", onResume, false);
$rootScope.authSession = "undefined";
- $ionicLoading.show({
+ $ionicLoading.show(
+ {
template: $translate.instant('kNegotiatingStreamAuth'),
animation: 'fade-in',
showBackdrop: true,
@@ -74,116 +75,157 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
});
var ld = NVRDataModel.getLogin();
-
$scope.currentStreamMode = ld.gapless ? 'gapless' : 'single';
NVRDataModel.log("Using stream mode " + $scope.currentStreamMode);
NVRDataModel.debug("EventModalCtrl called from " + $ionicHistory.currentStateName());
// This is not needed for event mode
-
-
NVRDataModel.debug("Setting playback to " + $scope.streamMode);
-
$rootScope.validMonitorId = $scope.monitors[0].Monitor.Id;
NVRDataModel.getAuthKey($rootScope.validMonitorId, (Math.floor((Math.random() * 999999) + 1)).toString())
- .then(function (success) {
+ .then(function(success)
+ {
$ionicLoading.hide();
$rootScope.authSession = success;
NVRDataModel.log("Modal: Stream authentication construction: " + $rootScope.authSession);
},
- function (error) {
+ function(error)
+ {
$ionicLoading.hide();
NVRDataModel.debug("ModalCtrl: Error details of stream auth:" + error);
//$rootScope.authSession="";
NVRDataModel.log("Modal: Error returned Stream authentication construction. Retaining old value of: " + $rootScope.authSession);
});
-
-
-
+
//--------------------------------------------------------------------------------------
// Handles bandwidth change, if required
//
//--------------------------------------------------------------------------------------
- $rootScope.$on("bandwidth-change", function (e,data) {
- // not called for offline, I'm only interested in BW switches
+ $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') {
+ if (data == 'lowbw')
+ {
ds = $translate.instant('kLowBWDisplay');
- } else {
+ }
+ else
+ {
ds = $translate.instant('kHighBWDisplay');
}
NVRDataModel.displayBanner('net', [ds]);
var ld = NVRDataModel.getLogin();
-
- $scope.singleImageQuality = (NVRDataModel.getBandwidth()=="lowbw" )? zm.eventSingleImageQualityLowBW: ld.singleImageQuality;
- });
-
-
+ $scope.singleImageQuality = (NVRDataModel.getBandwidth() == "lowbw") ? zm.eventSingleImageQualityLowBW : ld.singleImageQuality;
+ });
//-------------------------------------------------------
// we use this to reload the connkey if authkey changed
//------------------------------------------------------
-
- $rootScope.$on("auth-success", function () {
+ $rootScope.$on("auth-success", function()
+ {
NVRDataModel.debug("EventModalCtrl: Re-login detected, resetting everything & re-generating connkey");
NVRDataModel.stopNetwork("Auth-Success inside EventModalCtrl");
$scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
//console.log ("********* OFFSET FROM AUTH SUCC");
- $timeout(function () {
+ $timeout(function()
+ {
sendCommand('14', $scope.connKey, '&offset=' + $scope.currentProgress.progress);
}, 500);
//$timeout.cancel(eventQueryHandle);
//eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery);
-
-
});
//-------------------------------------------------------
// tap to pause
//------------------------------------------------------
- $scope.togglePause = function () {
+ $scope.togglePause = function()
+ {
$scope.isPaused = !$scope.isPaused;
NVRDataModel.debug("Paused is " + $scope.isPaused);
-
-
sendCommand($scope.isPaused ? '1' : '2', $scope.connKey);
};
-
- $scope.onPlayerReady = function(handle)
+ $scope.onPlayerReady = function(api)
{
// we need this timeout to avoid load interrupting
// play -- I suppose its an angular digest foo thing
- NVRDataModel.debug ("Player is ready");
- $timeout (function() {handle.play();},400);
-
- // window.stop();
+ console.log ("*********** ON PLAY READY");
+ handle = api;
+
+ $ionicLoading.show(
+ {
+ template: "<ion-spinner icon='ripple' class='spinner-energized'></ion-spinner><br/>" + $translate.instant('kVideoLoading')+"...",
+
+ });
+ NVRDataModel.debug("Player is ready");
+ $timeout(function()
+ {
+ handle.pause();
+ handle.setPlayback(2);
+ handle.play();
+
+ }, 300);
+
+ // window.stop();
};
- $scope.onCanPlay = function ()
+ $scope.onCanPlay = function()
{
- NVRDataModel.debug ("This video can be played");
+
+ console.log ("*********** CAN PLAY");
+ $ionicLoading.hide();
+ NVRDataModel.debug("This video can be played");
+ $scope.videoObject.config.cuepoints.points = [];
+ // now set up cue points
+ NVRDataModel.debug("Setting cue points..");
+ NVRDataModel.debug ("API-Total length:"+currentEvent.Event.Length);
+ NVRDataModel.debug ("Player-Total length:"+handle.totalTime/1000);
+
+ for (var l=0; l<currentEvent.Frame.length; l++ )
+ {
+ if (currentEvent.Frame[l].Type=='Alarm')
+ {
+ // var ft = moment(currentEvent.Frame[l].TimeStamp);
+ //var s = factor*Math.abs(st.diff(ft,'seconds'));
+
+ var s = currentEvent.Frame[l].Delta;
+
+ //console.log("START="+currentEvent.Event.StartTime);
+ //console.log("END="+currentEvent.Frame[l].TimeStamp);
+ NVRDataModel.debug ("alarm cue at:"+s+"s");
+ $scope.videoObject.config.cuepoints.points.push({time:s});
+ }
+ }
};
- $scope.onVideoError = function (event)
+ $scope.onVideoError = function(event)
{
- NVRDataModel.debug ("player reported a video error:"+JSON.stringify(event));
- };
+ $ionicLoading.hide();
+ if (!$scope.isModalActive) return;
+ NVRDataModel.debug("player reported a video error:" + JSON.stringify(event));
+ $rootScope.zmPopup = SecuredPopups.show('alert',
+ {
+ title: $translate.instant('kError'),
+ template: $rootScope.platformOS == 'desktop' ? $translate.instant('kVideoError') : $translate.instant('kVideoErrorMobile'),
+ okText: $translate.instant('kButtonOk'),
+ cancelText: $translate.instant('kButtonCancel'),
+ });
+ };
//-------------------------------------------------------
// This is what we call every zm.EventQueryInterval
@@ -191,57 +233,64 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
// zms takes care of the display
//------------------------------------------------------
- function checkEvent() {
-
+ function checkEvent()
+ {
+
if ($scope.modalFromTimelineIsOpen == false)
{
- NVRDataModel.log ("Modal was closed in timeline, cancelling timer");
+ NVRDataModel.log("Modal was closed in timeline, cancelling timer");
$interval.cancel(eventQueryHandle);
return;
}
-
+
//console.log ("Event timer");
//console.log ("Event timer");
$scope.checkEventOn = true;
- if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '') {
+ if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '')
+ {
//console.log("playing video, not using zms, skipping event commands");
- } else {
+ }
+ else
+ {
processEvent('99', $scope.connKey);
}
}
-
- function sendCommand(cmd, connkey, extras, rq) {
+ function sendCommand(cmd, connkey, extras, rq)
+ {
var d = $q.defer();
- if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '') {
+ if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '')
+ {
// console.log("playing video, not using zms, skipping event commands");
d.resolve(true);
return (d.promise);
}
-
-
var loginData = NVRDataModel.getLogin();
//console.log("Sending CGI command to " + loginData.url);
var rqtoken = rq ? rq : "stream";
var myauthtoken = $rootScope.authSession.replace("&auth=", "");
//&auth=
- $http({
+ $http(
+ {
method: 'POST',
/*timeout: 15000,*/
url: loginData.url + '/index.php',
- headers: {
+ headers:
+ {
'Content-Type': 'application/x-www-form-urlencoded',
//'Accept': '*/*',
},
- transformRequest: function (obj) {
+ transformRequest: function(obj)
+ {
var str = [];
for (var p in obj)
str.push(encodeURIComponent(p) + "=" +
encodeURIComponent(obj[p]));
var foo = str.join("&");
- if (extras) {
+ if (extras)
+ {
foo = foo + extras;
//console.log("EXTRAS****SUB RETURNING " + foo);
}
@@ -250,7 +299,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
},
- data: {
+ data:
+ {
view: "request",
request: rqtoken,
connkey: connkey,
@@ -260,14 +310,15 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
// pass: loginData.password
}
})
- .then(function (resp) {
+ .then(function(resp)
+ {
NVRDataModel.debug("sendCmd response:" + JSON.stringify(resp));
d.resolve(resp);
return (d.promise);
-
},
- function (resp) {
+ function(resp)
+ {
NVRDataModel.debug("sendCmd error:" + JSON.stringify(resp));
d.reject(resp);
return (d.promise);
@@ -276,10 +327,11 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
return (d.promise);
}
+ function processEvent(cmd, connkey)
+ {
- function processEvent(cmd, connkey) {
-
- if ($scope.blockSlider) {
+ if ($scope.blockSlider)
+ {
//console.log("Not doing ZMS Command as slider is depressed...");
return;
}
@@ -288,15 +340,18 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
//console.log("sending process Event command to " + loginData.url);
var myauthtoken = $rootScope.authSession.replace("&auth=", "");
//&auth=
- var req = $http({
+ var req = $http(
+ {
method: 'POST',
/*timeout: 15000,*/
url: loginData.url + '/index.php',
- headers: {
+ headers:
+ {
'Content-Type': 'application/x-www-form-urlencoded',
//'Accept': '*/*',
},
- transformRequest: function (obj) {
+ transformRequest: function(obj)
+ {
var str = [];
for (var p in obj)
str.push(encodeURIComponent(p) + "=" +
@@ -306,7 +361,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
return foo;
},
- data: {
+ data:
+ {
view: "request",
request: "stream",
connkey: connkey,
@@ -317,17 +373,18 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
}
});
- req.success(function (resp) {
+ req.success(function(resp)
+ {
// NVRDataModel.debug ("processEvent success:"+JSON.stringify(resp));
- if (resp.result == "Ok") {
+ if (resp.result == "Ok")
+ {
$scope.currentProgress.progress = resp.status.progress;
$scope.eventId = resp.status.event;
$scope.d_eventId = $scope.eventId;
$scope.currentRate = resp.status.rate;
-
if ($scope.currentProgress.progress > $scope.currentEventDuration) $scope.currentProgress.progress = $scope.currentEventDuration;
$scope.progressText = "At " + $scope.currentProgress.progress + "s of " + $scope.currentEventDuration + "s";
@@ -337,12 +394,11 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
// as this code conflicts with fast rev etc
//if (Math.floor(resp.status.progress) >=$scope.currentEventDuration)
-
-
//$timeout (checkEvent(), zm.eventPlaybackQuery);
//eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery);
- } else // resp.result was messed up
+ }
+ else // resp.result was messed up
{
NVRDataModel.debug("Hmm I found an error " + JSON.stringify(resp));
@@ -350,7 +406,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
$scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
// console.log (JSON.stringify(resp));
- $timeout(function () {
+ $timeout(function()
+ {
sendCommand('14', $scope.connKey, '&offset=' + $scope.currentProgress.progress);
}, 500);
NVRDataModel.debug("so I'm regenerating Connkey to " + $scope.connKey);
@@ -358,8 +415,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
}
});
-
- req.error(function (resp) {
+ req.error(function(resp)
+ {
NVRDataModel.debug("processEvent error:" + JSON.stringify(resp));
//eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery);
@@ -367,9 +424,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
}
-
-
- function onPause() {
+ function onPause()
+ {
// $interval.cancel(modalIntervalHandle);
@@ -379,53 +435,50 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
}
-
- function onResume() {
+ function onResume()
+ {
NVRDataModel.debug("EventModalCtrl: Modal resume called");
-
-
$rootScope.modalRand = Math.floor((Math.random() * 100000) + 1);
}
-
-
-
-
-
-
-
- $scope.finishedLoadingImage = function () {
+ $scope.finishedLoadingImage = function()
+ {
// console.log("***Monitor image FINISHED Loading***");
$ionicLoading.hide();
};
- $scope.enableSliderBlock = function () {
+ $scope.enableSliderBlock = function()
+ {
$scope.blockSlider = true;
};
- $scope.youChangedSlider = function () {
+ $scope.youChangedSlider = function()
+ {
//console.log("YOU changed " + $scope.sliderProgress.progress);
$scope.currentProgress.progress = $scope.sliderProgress.progress;
sendCommand('14', $scope.connKey, '&offset=' + $scope.currentProgress.progress)
- .then (function (s) { $scope.blockSlider = false; }, function (e) {$scope.blockSlider = false;});
-
-
- };
-
-
-
+ .then(function(s)
+ {
+ $scope.blockSlider = false;
+ }, function(e)
+ {
+ $scope.blockSlider = false;
+ });
+ };
//-----------------------------------------------------------------------
// Sucess/Error handlers for saving a snapshot of the
// monitor image to phone storage
//-----------------------------------------------------------------------
- function SaveSuccess() {
- $ionicLoading.show({
+ function SaveSuccess()
+ {
+ $ionicLoading.show(
+ {
template: $translate.instant('kDone'),
noBackdrop: true,
duration: 1000
@@ -433,8 +486,10 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
NVRDataModel.debug("ModalCtrl:Photo saved successfuly");
}
- function SaveError(e) {
- $ionicLoading.show({
+ function SaveError(e)
+ {
+ $ionicLoading.show(
+ {
template: $translate.instant('kErrorSave'),
noBackdrop: true,
duration: 2000
@@ -443,79 +498,82 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
//console.log("***ERROR");
}
-
- $scope.jumpToOffsetInEvent = function () {
+ $scope.jumpToOffsetInEvent = function()
+ {
// streamReq.send( streamParms+"&command="+CMD_SEEK+"&offset="+offset );
};
-
-
//-----------------------------------------------------------------------
// Saves a snapshot of the monitor image to phone storage
//-----------------------------------------------------------------------
-
- $scope.saveEventImageToPhoneWithPerms = function (onlyAlarms)
+ $scope.saveEventImageToPhoneWithPerms = function(onlyAlarms)
{
-
+
if ($rootScope.platformOS != 'android')
{
processSaveEventImageToPhone(onlyAlarms);
return;
}
-
+
// if we are on android do the 6.x+ hasPermissions flow
NVRDataModel.debug("EventModalCtrl: Permission checking for write");
var permissions = cordova.plugins.permissions;
permissions.hasPermission(permissions.WRITE_EXTERNAL_STORAGE, checkPermissionCallback, null);
-
- function checkPermissionCallback(status) {
+
+ function checkPermissionCallback(status)
+ {
if (!status.hasPermission)
{
SaveError("No permission to write to external storage");
}
- permissions.requestPermission(permissions.WRITE_EXTERNAL_STORAGE, succ,err);
+ permissions.requestPermission(permissions.WRITE_EXTERNAL_STORAGE, succ, err);
}
-
+
function succ(s)
{
processSaveEventImageToPhone(onlyAlarms);
}
+
function err(e)
{
- SaveError ("Error in requestPermission");
+ SaveError("Error in requestPermission");
}
};
-
-
- function processSaveEventImageToPhone (onlyAlarms) {
- if ($scope.loginData.useNphZmsForEvents) {
+ function processSaveEventImageToPhone(onlyAlarms)
+ {
+
+ if ($scope.loginData.useNphZmsForEvents)
+ {
NVRDataModel.log("Use ZMS stream to save to phone");
saveEventImageToPhoneZms(onlyAlarms);
-
- } else {
+ }
+ else
+ {
saveEventImageToPhone(onlyAlarms);
}
-
}
- function saveEventImageToPhoneZms(onlyAlarms) {
+ function saveEventImageToPhoneZms(onlyAlarms)
+ {
// The strategy here is to build the array now so we can grab frames
// $scope.currentProgress.progress is the seconds where we are
// $scope.eventId is the event Id
$scope.isPaused = true;
- $ionicLoading.show({
+ $ionicLoading.show(
+ {
template: $translate.instant('kPleaseWait'),
noBackdrop: true,
duration: zm.httpTimeout
});
sendCommand('1', $scope.connKey).
- then(function (resp) {
+ then(function(resp)
+ {
// console.log ("PAUSE ANSWER IS " + JSON.stringify(resp));
$scope.currentProgress.progress = resp.data.status.progress;
@@ -525,9 +583,10 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
var apiurl = $scope.loginData.apiurl + "/events/" + $scope.eventId + ".json";
NVRDataModel.debug("prepared to get frame details using " + apiurl);
$http.get(apiurl)
- .then(function (success) {
+ .then(function(success)
+ {
- var event = success.data.event;
+ event = success.data.event;
event.Event.BasePath = computeBasePath(event);
event.Event.relativePath = computeRelativePath(event);
@@ -551,41 +610,48 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
$scope.mycarousel.index = myFrame;
// console.log ("STEP 1 : Computed index as "+ $scope.mycarousel.index);
var i;
- for (i = 1; i <= event.Frame.length; i++) {
- var fname = padToN(event.Frame[i-1].FrameId, eventImageDigits) + "-capture.jpg";
+ for (i = 1; i <= event.Frame.length; i++)
+ {
+ var fname = padToN(event.Frame[i - 1].FrameId, eventImageDigits) + "-capture.jpg";
// console.log ("Building " + fname);
// console.log ("DUMPING ONE " + JSON.stringify(event.Frame[i-1]));
// onlyAlarms means only copy alarmed frames
- if (onlyAlarms) {
- if (event.Frame[i - 1] && event.Frame[i - 1].Type == 'Alarm') {
- $scope.slides.push({
- id: event.Frame[i-1].FrameId,
+ if (onlyAlarms)
+ {
+ if (event.Frame[i - 1] && event.Frame[i - 1].Type == 'Alarm')
+ {
+ $scope.slides.push(
+ {
+ id: event.Frame[i - 1].FrameId,
img: fname,
});
//console.log ("ALARM PUSHED " + fname);
}
- } else // push all frames
+ }
+ else // push all frames
{
- $scope.slides.push({
- id: event.Frame[i-1].FrameId,
+ $scope.slides.push(
+ {
+ id: event.Frame[i - 1].FrameId,
img: fname,
});
//console.log ("PUSHED " + fname);
}
-
+
}
// console.log ("STEP 2 : calling Save Event To Phone");
$ionicLoading.hide();
saveEventImageToPhone(onlyAlarms);
-
},
- function (err) {
+ function(err)
+ {
$ionicLoading.hide();
NVRDataModel.log("snapshot API Error: Could not get frames " + JSON.stringify(err));
- $ionicLoading.show({
+ $ionicLoading.show(
+ {
template: $translate.instant('kErrorRetrievingFrames'),
noBackdrop: true,
duration: 4000
@@ -593,18 +659,18 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
});
},
- function (err) {
+ function(err)
+ {
NVRDataModel.debug("Error pausing stream before snapshot " + JSON.stringify(err));
$ionicLoading.hide();
}
); // then
-
}
-
- function saveEventImageToPhone(onlyAlarms) {
+ function saveEventImageToPhone(onlyAlarms)
+ {
var curState = carouselUtils.getStop();
carouselUtils.setStop(true);
@@ -615,20 +681,18 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
var canvas, context, imageDataUrl, imageData;
var loginData = NVRDataModel.getLogin();
-
// for alarms only
if (onlyAlarms) $scope.mycarousel.index = 0;
var url = $scope.playbackURL + '/index.php?view=image&rand=' + $rootScope.rand + "&path=" + $scope.relativePath + $scope.slides[$scope.mycarousel.index].img;
-
$scope.selectEventUrl = url;
$scope.slideIndex = $scope.mycarousel.index;
$scope.slideLastIndex = $scope.slides.length - 1;
- // console.log ("URL TO DISPLAY " + url);
-
+ // console.log ("URL TO DISPLAY " + url);
- $rootScope.zmPopup = $ionicPopup.show({
+ $rootScope.zmPopup = $ionicPopup.show(
+ {
template: '<center>Frame: {{slideIndex+1}} / {{slideLastIndex+1}}</center><br/><img src="{{selectEventUrl}}" width="100%" />',
title: 'Select ' + (onlyAlarms ? 'Alarmed ' : '') + 'frame to save',
subTitle: 'use left and right arrows to change',
@@ -639,13 +703,14 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
// left 1
text: '',
type: 'button-small button-energized ion-chevron-left',
- onTap: function (e) {
+ onTap: function(e)
+ {
if ($scope.slideIndex > 0) $scope.slideIndex--;
$scope.selectEventUrl = $scope.playbackURL + '/index.php?view=image&rand=' + $rootScope.rand + "&path=" + $scope.relativePath + $scope.slides[$scope.slideIndex].img;
//NVRDataModel.log("selected frame is " + $scope.slideIndex);
- console.log ("URL TO DISPLAY " + $scope.slides[$scope.slideIndex].img);
-
+ console.log("URL TO DISPLAY " + $scope.slides[$scope.slideIndex].img);
+
e.preventDefault();
}
},
@@ -653,11 +718,12 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
// right 1
text: '',
type: 'button-small button-energized ion-chevron-right',
- onTap: function (e) {
+ onTap: function(e)
+ {
if ($scope.slideIndex < $scope.slideLastIndex) $scope.slideIndex++;
$scope.selectEventUrl = $scope.playbackURL + '/index.php?view=image&rand=' + $rootScope.rand + "&path=" + $scope.relativePath + $scope.slides[$scope.slideIndex].img;
//NVRDataModel.log("selected frame is " + $scope.slideIndex);
- console.log ("URL TO DISPLAY " + $scope.slides[$scope.slideIndex].img);
+ console.log("URL TO DISPLAY " + $scope.slides[$scope.slideIndex].img);
e.preventDefault();
}
},
@@ -665,7 +731,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
// left 10
text: '',
type: 'button-small button-energized ion-skip-backward',
- onTap: function (e) {
+ onTap: function(e)
+ {
var tempVar = $scope.slideIndex;
tempVar -= 10;
if (tempVar < 0) tempVar = 0;
@@ -681,7 +748,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
// right 10
text: '',
type: 'button-small button-energized ion-skip-forward',
- onTap: function (e) {
+ onTap: function(e)
+ {
var tempVar = $scope.slideIndex;
tempVar += 10;
if (tempVar > $scope.slideLastIndex) tempVar = $scope.slideLastIndex;
@@ -700,15 +768,19 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
{
text: '',
type: 'button-positive button-small ion-checkmark-round',
- onTap: function (e) {
+ onTap: function(e)
+ {
saveNow();
}
- }]
+ }
+ ]
});
- function saveNow() {
- $ionicLoading.show({
+ function saveNow()
+ {
+ $ionicLoading.show(
+ {
template: $translate.instant('kSavingSnapshot') + "...",
noBackdrop: true,
duration: zm.httpTimeout
@@ -717,7 +789,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
NVRDataModel.log("saveNow: File path to grab is " + url);
var img = new Image();
- img.onload = function () {
+ img.onload = function()
+ {
// console.log("********* ONLOAD");
canvas = document.createElement('canvas');
canvas.width = img.width;
@@ -728,8 +801,10 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
imageDataUrl = canvas.toDataURL('image/jpeg', 1.0);
imageData = imageDataUrl.replace(/data:image\/jpeg;base64,/, '');
- if ($rootScope.platformOS != "desktop") {
- try {
+ if ($rootScope.platformOS != "desktop")
+ {
+ try
+ {
cordova.exec(
SaveSuccess,
@@ -738,70 +813,77 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
'saveImageDataToLibrary', [imageData]
);
// carouselUtils.setStop(curState);
- } catch (e) {
+ }
+ catch (e)
+ {
SaveError(e.message);
// carouselUtils.setStop(curState);
}
- } else {
-
+ }
+ else
+ {
var fname = $scope.relativePath + $scope.slides[$scope.slideIndex].img + ".png";
fname = fname.replace(/\//, "-");
fname = fname.replace(/\.jpg/, '');
- canvas.toBlob(function (blob) {
+ canvas.toBlob(function(blob)
+ {
saveAs(blob, fname);
SaveSuccess();
});
}
};
- try {
+ try
+ {
img.src = url;
// console.log ("SAVING IMAGE SOURCE");
- } catch (e) {
+ }
+ catch (e)
+ {
SaveError(e.message);
}
}
}
-
- $scope.reloadView = function () {
+ $scope.reloadView = function()
+ {
NVRDataModel.log("Reloading view for modal view, recomputing rand");
$rootScope.modalRand = Math.floor((Math.random() * 100000) + 1);
$scope.isModalActive = true;
};
- $scope.scaleImage = function () {
+ $scope.scaleImage = function()
+ {
$scope.imageFit = !$scope.imageFit;
- // console.log("Switching image style to " + $scope.imageFit);
+ console.log("Switching image style to " + $scope.imageFit);
};
- $scope.$on('$ionicView.enter', function () {
+ $scope.$on('$ionicView.enter', function()
+ {
//console.log (">>>>>>>>>>>>>>>>>>>> MODAL VIEW ENTER");
-
-
});
- $scope.$on('modal.shown', function (e, m) {
+ $scope.$on('modal.shown', function(e, m)
+ {
if (m.id != 'footage')
return;
+ $scope.videoDynamicTime = "";
$scope.videoIsReady = false;
var ld = NVRDataModel.getLogin();
$scope.loginData = NVRDataModel.getLogin();
- $scope.singleImageQuality = (NVRDataModel.getBandwidth()=="lowbw" )? zm.eventSingleImageQualityLowBW: ld.singleImageQuality;
+ $scope.singleImageQuality = (NVRDataModel.getBandwidth() == "lowbw") ? zm.eventSingleImageQualityLowBW : ld.singleImageQuality;
$scope.blockSlider = false;
$scope.checkEventOn = false;
//$scope.singleImageQuality = 100;
-
-
//$scope.commandURL = $scope.currentEvent.Event.baseURL+"/index.php";
// NVRDataModel.log (">>>>>>>>>>>>>>>>>>ZMS url command is " + $scope.commandURL);
@@ -813,26 +895,36 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
$scope.currentFrame = 1;
$scope.isPaused = false;
+
+ gEvent = $scope.currentEvent;
//console.log ("CURRENT EVENT " + JSON.stringify($scope.currentEvent));
+ //
$scope.currentEventDuration = Math.floor($scope.currentEvent.Event.Length);
//console.log ($scope.event.Event.Frames);
- if (currentEvent && currentEvent.Event) {
+ if (currentEvent && currentEvent.Event)
+ {
//console.log ("************ CALLING PREPARE MODAL ***********");
prepareModalEvent(currentEvent.Event.Id);
- if (ld.useNphZmsForEvents) {
- $timeout(function () {
+ if (ld.useNphZmsForEvents)
+ {
+ $timeout(function()
+ {
- if ($scope.modal != undefined && $scope.modal.isShown()) {
+ if ($scope.modal != undefined && $scope.modal.isShown())
+ {
NVRDataModel.log(">>>Starting checkAllEvents interval...");
//eventQueryHandle = $timeout (checkEvent(), zm.eventPlaybackQuery);
$interval.cancel(eventQueryHandle);
- eventQueryHandle = $interval(function () {
+ eventQueryHandle = $interval(function()
+ {
checkEvent();
// console.log ("Refreshing Image...");
- }.bind(this), (NVRDataModel.getBandwidth()=="lowbw")? zm.eventPlaybackQueryLowBW: zm.eventPlaybackQuery);
- } else {
+ }.bind(this), (NVRDataModel.getBandwidth() == "lowbw") ? zm.eventPlaybackQueryLowBW : zm.eventPlaybackQuery);
+ }
+ else
+ {
NVRDataModel.log(">>>Modal was exited, not starting checkAllEvents");
}
@@ -841,51 +933,53 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
}
-
-
-
-
-
});
//var current_data;
- function drawGraph() {
-
+ function drawGraph()
+ {
var cv = document.getElementById("eventchart");
var ctx = cv.getContext("2d");
-
frameoptions = {
responsive: true,
legend: false,
- title: {
+ title:
+ {
display: false,
text: ""
},
- scales: {
- yAxes: [{
+ scales:
+ {
+ yAxes: [
+ {
display: false,
- scaleLabel: {
+ scaleLabel:
+ {
display: false,
labelString: 'value',
}
- }],
- xAxes: [{
+ }],
+ xAxes: [
+ {
type: 'time',
display: false,
- time: {
+ time:
+ {
format: timeFormat,
tooltipFormat: 'll HH:mm',
min: framearray.datasets[0].data[0].x,
max: framearray.datasets[0].data[framearray.datasets[0].data.length - 1].x,
- displayFormats: {
+ displayFormats:
+ {
}
},
- scaleLabel: {
+ scaleLabel:
+ {
display: false,
labelString: ''
}
@@ -894,11 +988,11 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
}
};
+ $timeout(function()
+ {
- $timeout(function () {
-
-
- var myChart = new Chart(ctx, {
+ var myChart = new Chart(ctx,
+ {
type: 'line',
data: framearray,
options: frameoptions,
@@ -907,14 +1001,33 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
});
}
+ $scope.videoTime = function(s, c)
+ {
+ var a, o;
+ if (NVRDataModel.getLogin().useLocalTimeZone)
+ {
+ a = moment.tz(s, NVRDataModel.getTimeZoneNow()).tz(moment.tz.guess());
+
+ }
+ else
+ {
+ a = moment(s);
+ }
+ a.add(c);
+
+ o = a.format("MMM Do " + NVRDataModel.getTimeFormatSec());
+ $scope.videoDynamicTime = o;
+ //return a.format("MMM Do "+o);
+
+ };
- $scope.$on('modal.removed', function (e, m) {
- console.log ("************* REMOVE CALLED");
+ $scope.$on('modal.removed', function(e, m)
+ {
+ console.log("************* REMOVE CALLED");
$interval.cancel(eventQueryHandle);
if (m.id != 'footage')
return;
-
$scope.isModalActive = false;
NVRDataModel.debug("Modal removed - killing connkey");
@@ -924,13 +1037,15 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
// Execute action
});
-
// Playback speed adjuster
- $scope.adjustSpeed = function (val) {
+ $scope.adjustSpeed = function(val)
+ {
- if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '') {
+ if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '')
+ {
- $ionicLoading.show({
+ $ionicLoading.show(
+ {
template: $translate.instant('kUseVideoControls'),
noBackdrop: true,
duration: 3000
@@ -940,11 +1055,13 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
var ld = NVRDataModel.getLogin();
- if (ld.useNphZmsForEvents) {
+ if (ld.useNphZmsForEvents)
+ {
var cmd;
$scope.isPaused = false;
- switch (val) {
+ switch (val)
+ {
case 'ff':
cmd = 4;
break;
@@ -962,28 +1079,32 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
cmd = 0;
}
- $ionicLoading.show({
+ $ionicLoading.show(
+ {
template: $translate.instant('kPleaseWait') + "...",
noBackdrop: true,
duration: zm.httpTimeout
});
sendCommand(cmd, $scope.connKey)
- .then(function (success) {
+ .then(function(success)
+ {
$ionicLoading.hide();
},
- function (err) {
+ function(err)
+ {
$ionicLoading.hide();
NVRDataModel.debug("Error in adjust speed: " + JSON.stringify(err));
}
);
-
- } else // not using nph
+ }
+ else // not using nph
{
- switch (val) {
+ switch (val)
+ {
case "super":
$scope.eventSpeed = 20 / $scope.event.Event.Frames;
@@ -1011,7 +1132,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
}
NVRDataModel.debug("Set playback speed to " + $scope.eventSpeed);
- $ionicLoading.show({
+ $ionicLoading.show(
+ {
template: $translate.instant('kPlaybackInterval') + ': ' + $scope.eventSpeed.toFixed(3) + "ms",
animation: 'fade-in',
showBackdrop: false,
@@ -1021,12 +1143,10 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
});
}
-
-
};
-
- $scope.toggleGapless = function () {
+ $scope.toggleGapless = function()
+ {
// console.log(">>>>>>>>>>>>>>GAPLESS TOGGLE INSIDE MODAL");
$scope.loginData.gapless = !$scope.loginData.gapless;
NVRDataModel.setLogin($scope.loginData);
@@ -1036,18 +1156,18 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
NVRDataModel.debug("Regenerating connkey as gapless has changed");
// console.log ("********* OFFSET FROM TOGGLE GAPLESS");
$scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
- $timeout(function () {
+ $timeout(function()
+ {
sendCommand('14', $scope.connKey, '&offset=' + $scope.currentProgress.progress);
}, 500);
//$timeout.cancel(eventQueryHandle);
//eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery);
-
};
-
// This function returns neighbor events if applicable
- function neighborEvents(eid) {
+ function neighborEvents(eid)
+ {
var d = $q.defer();
// now get event details to show alarm frames
var loginData = NVRDataModel.getLogin();
@@ -1057,7 +1177,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
next: ""
};
$http.get(myurl)
- .success(function (data) {
+ .success(function(data)
+ {
// In Timeline view, gapless should stick to the same monitor
if ($scope.followSameMonitor == "1") // we are viewing only one monitor
@@ -1065,90 +1186,101 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
NVRDataModel.debug("Getting next event for same monitor Id ");
neighbors.prev = data.event.Event.PrevOfMonitor ? data.event.Event.PrevOfMonitor : "";
neighbors.next = data.event.Event.NextOfMonitor ? data.event.Event.NextOfMonitor : "";
- } else {
+ }
+ else
+ {
neighbors.prev = data.event.Event.Prev ? data.event.Event.Prev : "";
neighbors.next = data.event.Event.Next ? data.event.Event.Next : "";
}
NVRDataModel.debug("Neighbor events of " + eid + "are Prev:" +
neighbors.prev + " and Next:" + neighbors.next);
-
d.resolve(neighbors);
return (d.promise);
})
- .error(function (err) {
+ .error(function(err)
+ {
NVRDataModel.log("Error retrieving neighbors" + JSON.stringify(err));
d.reject(neighbors);
return (d.promise);
-
});
return (d.promise);
}
-
- $scope.zoomImage = function (val) {
+ $scope.zoomImage = function(val)
+ {
var zl = parseInt($ionicScrollDelegate.$getByHandle("imgscroll").getScrollPosition().zoom);
- if (zl == 1 && val == -1) {
+ if (zl == 1 && val == -1)
+ {
NVRDataModel.debug("Already zoomed out max");
return;
}
-
zl += val;
NVRDataModel.debug("Zoom level is " + zl);
$ionicScrollDelegate.$getByHandle("imgscroll").zoomTo(zl, true);
};
-
//--------------------------------------------------------
//Navigate to next/prev event in full screen mode
//--------------------------------------------------------
- $scope.onSwipeEvent = function (eid, dirn) {
+ $scope.onSwipeEvent = function(eid, dirn)
+ {
//console.log("HERE");
var ld = NVRDataModel.getLogin();
if (!ld.canSwipeMonitors) return;
- if ($ionicScrollDelegate.$getByHandle("imgscroll").getScrollPosition().zoom != 1) {
+ if ($ionicScrollDelegate.$getByHandle("imgscroll").getScrollPosition().zoom != 1)
+ {
//console.log("Image is zoomed in - not honoring swipe");
return;
}
- if (ld.useNphZmsForEvents) {
+ if (ld.useNphZmsForEvents)
+ {
NVRDataModel.log("using zms to move ");
jumpToEventZms($scope.connKey, dirn);
// sendCommand ( dirn==1?'13':'12',$scope.connKey);
- } else {
+ }
+ else
+ {
jumpToEvent(eid, dirn);
}
//console.log("JUMPING");
-
};
- $scope.jumpToEvent = function (eid, dirn) {
+ $scope.jumpToEvent = function(eid, dirn)
+ {
// console.log("jumptoevent");
var ld = NVRDataModel.getLogin();
- if (ld.useNphZmsForEvents) {
+ if (ld.useNphZmsForEvents)
+ {
NVRDataModel.log("using zms to move ");
jumpToEventZms($scope.connKey, dirn);
// sendCommand ( dirn==1?'13':'12',$scope.connKey);
- } else {
+ }
+ else
+ {
jumpToEvent(eid, dirn);
}
};
- function jumpToEvent(eid, dirn) {
+ function jumpToEvent(eid, dirn)
+ {
NVRDataModel.log("Event jump called with:" + eid);
- if (eid == "") {
- $ionicLoading.show({
+ if (eid == "")
+ {
+ $ionicLoading.show(
+ {
template: $translate.instant('kNoMoreEvents'),
noBackdrop: true,
duration: 2000
@@ -1159,26 +1291,29 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
var slidein;
var slideout;
- if (dirn == 1) {
+ if (dirn == 1)
+ {
slideout = "animated slideOutLeft";
slidein = "animated slideInRight";
- } else {
+ }
+ else
+ {
slideout = "animated slideOutRight";
slidein = "animated slideInLeft";
}
var element = angular.element(document.getElementById("full-screen-event"));
element.addClass(slideout).one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', outWithOld);
-
-
- function outWithOld() {
+ function outWithOld()
+ {
NVRDataModel.log("ModalCtrl:Stopping network pull...");
NVRDataModel.stopNetwork("EventModalCtrl-out with old");
$scope.animationInProgress = true;
// give digest time for image to swap
// 100 should be enough
- $timeout(function () {
+ $timeout(function()
+ {
element.removeClass(slideout);
element.addClass(slidein)
.one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', inWithNew);
@@ -1186,7 +1321,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
}, 200);
}
- function inWithNew() {
+ function inWithNew()
+ {
element.removeClass(slidein);
$scope.animationInProgress = false;
carouselUtils.setStop(false);
@@ -1197,18 +1333,20 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
function humanizeTime(str)
{
// if (NVRDataModel.getLogin().useLocalTimeZone)
- return moment.tz(str, NVRDataModel.getTimeZoneNow()).fromNow();
- // else
+ return moment.tz(str, NVRDataModel.getTimeZoneNow()).fromNow();
+ // else
// return moment(str).fromNow();
-
- }
- function jumpToEventZms(connkey, dirn) {
+ }
+ function jumpToEventZms(connkey, dirn)
+ {
- if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '') {
+ if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '')
+ {
- $ionicLoading.show({
+ $ionicLoading.show(
+ {
template: $translate.instant('kEventNavVidFeeds'),
noBackdrop: true,
duration: 3000
@@ -1220,7 +1358,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
$scope.d_eventId = "...";
NVRDataModel.debug("Sending " + cmd + " to " + connkey);
- $ionicLoading.show({
+ $ionicLoading.show(
+ {
template: $translate.instant('kSwitchingEvents') + "...",
noBackdrop: true,
duration: zm.httpTimeout
@@ -1229,17 +1368,20 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
//console.log("Send command connkey: " + connkey);
sendCommand(cmd, connkey)
.then(
- function (success) {
+ function(success)
+ {
//console.log ("jump success " + JSON.stringify(success));
$ionicLoading.hide();
},
- function (error) {
+ function(error)
+ {
NVRDataModel.debug("Hmm jump error " + JSON.stringify(error));
NVRDataModel.stopNetwork("EventModalCtrl-jumptoEventZms error");
$scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
// console.log ("********* OFFSET FROM JUMPTOEVENTZMS ERROR");
- $timeout(function () {
+ $timeout(function()
+ {
sendCommand('14', $scope.connKey, '&offset=' + $scope.currentProgress.progress);
}, 500);
NVRDataModel.debug("so I'm regenerating Connkey to " + $scope.connKey);
@@ -1249,23 +1391,24 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
});
var slidein;
var slideout;
- if (dirn == 1) {
+ if (dirn == 1)
+ {
slideout = "animated slideOutLeft";
slidein = "animated slideInRight";
- } else {
+ }
+ else
+ {
slideout = "animated slideOutRight";
slidein = "animated slideInLeft";
}
var element = angular.element(document.getElementById("full-screen-event"));
element.addClass(slideout).one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', outWithOld);
+ function outWithOld()
+ {
-
- function outWithOld() {
-
-
-
- $timeout(function () {
+ $timeout(function()
+ {
element.removeClass(slideout);
element.addClass(slidein)
.one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', inWithNew);
@@ -1273,20 +1416,20 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
}, 200);
}
- function inWithNew() {
+ function inWithNew()
+ {
element.removeClass(slidein);
-
}
}
-
//--------------------------------------------------------
// utility function
//--------------------------------------------------------
- function computeRelativePath(event) {
+ function computeRelativePath(event)
+ {
var relativePath = "";
var loginData = NVRDataModel.getLogin();
var str = event.Event.StartTime;
@@ -1311,7 +1454,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
// utility function
//--------------------------------------------------------
- function computeBasePath(event) {
+ function computeBasePath(event)
+ {
var basePath = "";
var loginData = NVRDataModel.getLogin();
var str = event.Event.StartTime;
@@ -1333,42 +1477,48 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
return basePath;
}
-
//-------------------------------------------------------------------------
// Called when rncarousel or video player finished playing event
//-------------------------------------------------------------------------
- $scope.playbackFinished = function () {
+ $scope.playbackFinished = function()
+ {
playbackFinished();
};
- function playbackFinished() {
+ function playbackFinished()
+ {
// currentEvent is updated with the currently playing event in prepareModalEvent()
NVRDataModel.log("Playback of event " + currentEvent.Event.Id + " is finished");
- if ($scope.loginData.gapless) {
+ if ($scope.loginData.gapless)
+ {
neighborEvents(currentEvent.Event.Id)
- .then(function (success) {
+ .then(function(success)
+ {
// lets give a second before gapless transition to the next event
- $timeout(function () {
+ $timeout(function()
+ {
$scope.nextId = success.next;
$scope.prevId = success.prev;
NVRDataModel.debug("Gapless move to event " + $scope.nextId);
jumpToEvent($scope.nextId, 1);
}, 1000);
},
- function (error) {
+ function(error)
+ {
NVRDataModel.debug("Error in neighbor call " +
JSON.stringify(error));
});
- } else {
+ }
+ else
+ {
NVRDataModel.debug("not going to next event, gapless is off");
}
}
-
//--------------------------------------------------------
// Called by openModal as well as jump to event
// what it basically does is get a detailed event API
@@ -1378,10 +1528,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
// API. Some parameters are repeated across both
//--------------------------------------------------------
-
-
-
- function prepareModalEvent(eid) {
+ function prepareModalEvent(eid)
+ {
// Lets get the detailed event API
var loginData = NVRDataModel.getLogin();
@@ -1390,8 +1538,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
$scope.humanizeTime = "...";
$scope.mName = "...";
$http.get(myurl)
- .then(function (success) {
-
+ .then(function(success)
+ {
// console.log ("DUCCESS::"+JSON.stringify(success));
var event = success.data.event;
@@ -1426,36 +1574,34 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
//console.log("Event ID is " + $scope.eventId);
//console.log("video is " + $scope.defaultVideo);
-
neighborEvents(event.Event.Id)
- .then(function (success) {
+ .then(function(success)
+ {
$scope.nextId = success.next;
$scope.prevId = success.prev;
},
- function (error) {
+ function(error)
+ {
//console.log(JSON.stringify(error));
});
$scope.nextId = "...";
$scope.prevId = "...";
-
-
-
event.Event.video = {};
var videoURL;
- if ((event.Event.imageMode == 'path') || NVRDataModel.getLogin().forceImageModePath )
+ if ((event.Event.imageMode == 'path') || NVRDataModel.getLogin().forceImageModePath)
videoURL = event.Event.baseURL + "/events/" + event.Event.relativePath + event.Event.DefaultVideo;
else
videoURL = event.Event.baseURL + "/index.php?view=view_video&eid=" + event.Event.Id;
// hack
- //videoURL = "http://static.videogular.com/assets/videos/videogular.mp4";
- //videoURL = "http://arjunrc.ddns.net:8888/foo2.mp4";
+ //videoURL = "http://static.videogular.com/assets/videos/videogular.mp4";
+ //videoURL = "http://arjunrc.ddns.net:8888/foo2.mp4";
$scope.video_url = videoURL;
- // console.log("************** VIDEO IS " + videoURL);
+ console.log("************** VIDEO IS " + videoURL);
NVRDataModel.debug("Video url passed to player is: " + videoURL);
@@ -1463,12 +1609,15 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
//console.log("************** VIDEO IS " + videoURL);
-
$scope.videoObject = {
- config: {
+ config:
+ {
autoPlay: true,
-
- playsInline:true,
+ responsive: false,
+ nativeControls: false,
+ nativeFullScreen:false,
+
+ playsInline: true,
sources: [
{
src: $sce.trustAsResourceUrl(videoURL),
@@ -1478,6 +1627,12 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
],
theme: "lib/videogular-themes-default/videogular.css",
+ cuepoints: {
+ theme: {
+ url:"lib/videogular-cuepoints/cuepoints.css"
+ },
+ points: [],
+ }
}
};
@@ -1502,31 +1657,38 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
realtime: true,
step: 1,
className: "mySliderClass",
- callback: function (value, released) {
+ callback: function(value, released)
+ {
//console.log("CALLBACK"+value+released);
$ionicScrollDelegate.freezeScroll(!released);
-
},
//modelLabels:function(val) {return "";},
smooth: false,
- css: {
- background: {
+ css:
+ {
+ background:
+ {
"background-color": "silver"
},
- before: {
+ before:
+ {
"background-color": "purple"
},
- default: {
+ default:
+ {
"background-color": "white"
}, // default value: 1px
- after: {
+ after:
+ {
"background-color": "green"
}, // zone after default value
- pointer: {
+ pointer:
+ {
"background-color": "red"
}, // circle pointer
- range: {
+ range:
+ {
"background-color": "red"
} // use it if double value
},
@@ -1534,8 +1696,6 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
};
-
-
$scope.mycarousel.index = 0;
$scope.ionRange.index = 1;
$scope.eventSpeed = $scope.event.Event.Length / $scope.event.Event.Frames;
@@ -1543,16 +1703,17 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
//console.log("**Resetting range");
$scope.slides = [];
var i;
- for (i = 1; i <= event.Event.Frames; i++) {
+ for (i = 1; i <= event.Event.Frames; i++)
+ {
var fname = padToN(i, eventImageDigits) + "-capture.jpg";
// console.log ("Building " + fname);
- $scope.slides.push({
+ $scope.slides.push(
+ {
id: i,
img: fname
});
}
-
// now get event details to show alarm frames
//$scope.FrameArray = event.Frame;
@@ -1561,60 +1722,72 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
// lets
framearray.datasets[0].data = [];
- for (i = 0; i < event.Frame.length; i++) {
+ for (i = 0; i < event.Frame.length; i++)
+ {
var ts = moment(event.Frame[i].TimeStamp).format(timeFormat);
//console.log ("pushing s:" + event.Frame[i].Score+" t:"+ts);
- framearray.datasets[0].data.push({
+ framearray.datasets[0].data.push(
+ {
x: ts,
y: event.Frame[i].Score
});
framearray.labels.push("");
-
}
$scope.totalEventTime = Math.round(parseFloat(event.Event.Length)) - 1;
$scope.currentEventTime = 0;
- $timeout(function () {
- drawGraph();
- }, 500);
+ // video mode doesn't need this graph - it won't really work
+ if ($scope.defaultVideo == undefined || $scope.defaultVideo == '')
+ {
+ $timeout(function()
+ {
+ drawGraph();
+ }, 500);
+ }
+
},
- function (err) {
+ function(err)
+ {
NVRDataModel.log("Error retrieving detailed frame API " + JSON.stringify(err));
NVRDataModel.displayBanner('error', ['could not retrieve frame details', 'please try again']);
});
-
}
-
- if (typeof $scope.ionRange !== 'undefined') {
- $scope.$watch('ionRange.index', function () {
+ if (typeof $scope.ionRange !== 'undefined')
+ {
+ $scope.$watch('ionRange.index', function()
+ {
//
$scope.mycarousel.index = parseInt($scope.ionRange.index) - 1;
if (carouselUtils.getStop() == true)
return;
-
//console.log ("***ION RANGE CHANGED TO " + $scope.mycarousel.index);
});
}
- if (typeof $scope.mycarousel !== 'undefined') {
- $scope.$watch('mycarousel.index', function () {
+ if (typeof $scope.mycarousel !== 'undefined')
+ {
+ $scope.$watch('mycarousel.index', function()
+ {
- if (currentEvent && $scope.ionRange.index == parseInt(currentEvent.Event.Frames - 1)) {
+ if (currentEvent && $scope.ionRange.index == parseInt(currentEvent.Event.Frames - 1))
+ {
playbackFinished();
}
// end of playback from quick scrub
// so ignore gapless
- if ($scope.event && $scope.ionRange.index == parseInt($scope.event.Event.Frames) - 1) {
- if (!$scope.modal || $scope.modal.isShown() == false) {
+ if ($scope.event && $scope.ionRange.index == parseInt($scope.event.Event.Frames) - 1)
+ {
+ if (!$scope.modal || $scope.modal.isShown() == false)
+ {
// console.log("quick scrub playback over");
carouselUtils.setStop(true);
$scope.ionRange.index = 0;
@@ -1627,28 +1800,28 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
$scope.ionRange.index = ($scope.mycarousel.index + 1).toString();
// console.log ("***IONRANGE RANGE CHANGED TO " + $scope.ionRange.index);
-
});
}
- function padToN(number, digits) {
+ function padToN(number, digits)
+ {
var i;
var stringMax = "";
var stringLeading = "";
- for (i = 1; i <= digits; i++) {
+ for (i = 1; i <= digits; i++)
+ {
stringMax = stringMax + "9";
if (i != digits) stringLeading = stringLeading + "0";
}
var numMax = parseInt(stringMax);
- if (number <= numMax) {
+ if (number <= numMax)
+ {
number = (stringLeading + number).slice(-digits);
}
//console.log ("PADTON: returning " + number);
return number;
}
-
-
-}]); \ No newline at end of file
+}]);