diff options
Diffstat (limited to 'www/js/EventModalCtrl.js')
| -rw-r--r-- | www/js/EventModalCtrl.js | 897 |
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 +}]); |
