diff options
Diffstat (limited to 'www/js/EventModalCtrl.js')
| -rw-r--r-- | www/js/EventModalCtrl.js | 771 |
1 files changed, 439 insertions, 332 deletions
diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js index 9067bd0e..5773c5ef 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', '$filter', 'SecuredPopups', function($scope, $rootScope, zm, NVRDataModel, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $q, $sce, carouselUtils, $ionicPopup, $translate, $filter, SecuredPopups) { - +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; @@ -17,11 +14,11 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro $scope.currentRate = '-'; var timeFormat = 'MM/DD/YYYY HH:mm:ss'; - var framearray = { labels: [], - datasets: [{ + datasets: [ + { //label: '# of Votes', backgroundColor: 'rgba(242, 12, 12, 0.5)', borderColor: 'rgba(242, 12, 12, 0.5)', @@ -31,7 +28,6 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro var frameoptions = []; - var eventImageDigits = 5; // failsafe $scope.currentProgress = { progress: 0 @@ -40,7 +36,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 +51,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 +61,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,27 +72,25 @@ 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); @@ -102,20 +98,22 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro 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) { + $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]); @@ -125,78 +123,80 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro $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(handle) + { // 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); + $timeout(function() + { + handle.play(); + }, 400); // window.stop(); }; - $scope.onCanPlay = function() { + $scope.onCanPlay = function() + { NVRDataModel.debug("This video can be played"); }; - $scope.onVideoError = function(event) { + $scope.onVideoError = function(event) + { if (!$scope.isModalActive) return; NVRDataModel.debug("player reported a video error:" + JSON.stringify(event)); - $rootScope.zmPopup = SecuredPopups.show('alert', { + $rootScope.zmPopup = SecuredPopups.show('alert', + { title: $translate.instant('kError'), template: $rootScope.platformOS == 'desktop' ? $translate.instant('kVideoError') : $translate.instant('kVideoErrorMobile') }); }; - //------------------------------------------------------- // This is what we call every zm.EventQueryInterval // it really only queries to get status to it can display // zms takes care of the display //------------------------------------------------------ - function checkEvent() { + function checkEvent() + { - if ($scope.modalFromTimelineIsOpen == false) { + if ($scope.modalFromTimelineIsOpen == false) + { NVRDataModel.log("Modal was closed in timeline, cancelling timer"); $interval.cancel(eventQueryHandle); return; @@ -205,45 +205,51 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro //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); } @@ -252,7 +258,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro }, - data: { + data: + { view: "request", request: rqtoken, connkey: connkey, @@ -262,14 +269,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); @@ -278,10 +286,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; } @@ -290,15 +299,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) + "=" + @@ -308,7 +320,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro return foo; }, - data: { + data: + { view: "request", request: "stream", connkey: connkey, @@ -319,17 +332,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"; @@ -339,12 +353,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)); @@ -352,7 +365,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); @@ -360,8 +374,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); @@ -369,9 +383,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro } - - - function onPause() { + function onPause() + { // $interval.cancel(modalIntervalHandle); @@ -381,53 +394,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 @@ -435,8 +445,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 @@ -445,21 +457,20 @@ 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') { + if ($rootScope.platformOS != 'android') + { processSaveEventImageToPhone(onlyAlarms); return; } @@ -469,51 +480,59 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro var permissions = cordova.plugins.permissions; permissions.hasPermission(permissions.WRITE_EXTERNAL_STORAGE, checkPermissionCallback, null); - function checkPermissionCallback(status) { - if (!status.hasPermission) { + function checkPermissionCallback(status) + { + if (!status.hasPermission) + { SaveError("No permission to write to external storage"); } permissions.requestPermission(permissions.WRITE_EXTERNAL_STORAGE, succ, err); } - function succ(s) { + function succ(s) + { processSaveEventImageToPhone(onlyAlarms); } - function err(e) { + function err(e) + { SaveError("Error in requestPermission"); } }; + function processSaveEventImageToPhone(onlyAlarms) + { - function processSaveEventImageToPhone(onlyAlarms) { - - if ($scope.loginData.useNphZmsForEvents) { + 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; @@ -523,7 +542,8 @@ 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; @@ -549,23 +569,29 @@ 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++) { + 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({ + 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({ + $scope.slides.push( + { id: event.Frame[i - 1].FrameId, img: fname, }); @@ -577,13 +603,14 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro $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 @@ -591,18 +618,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); @@ -613,30 +640,30 @@ 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); - - $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', scope: $scope, cssClass: 'popup95', - buttons: [{ + buttons: [ + { // 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); @@ -645,22 +672,26 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro e.preventDefault(); } - }, { + }, + { // 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); e.preventDefault(); } - }, { + }, + { // 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; @@ -671,11 +702,13 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro e.preventDefault(); } - }, { + }, + { // 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; @@ -690,10 +723,12 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro { text: '', type: 'button-assertive button-small ion-close-round' - }, { + }, + { text: '', type: 'button-positive button-small ion-checkmark-round', - onTap: function(e) { + onTap: function(e) + { saveNow(); } @@ -701,8 +736,10 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro ] }); - function saveNow() { - $ionicLoading.show({ + function saveNow() + { + $ionicLoading.show( + { template: $translate.instant('kSavingSnapshot') + "...", noBackdrop: true, duration: zm.httpTimeout @@ -711,7 +748,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; @@ -722,8 +760,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, @@ -732,54 +772,62 @@ 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); }; - $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') @@ -795,8 +843,6 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro $scope.checkEventOn = false; //$scope.singleImageQuality = 100; - - //$scope.commandURL = $scope.currentEvent.Event.baseURL+"/index.php"; // NVRDataModel.log (">>>>>>>>>>>>>>>>>>ZMS url command is " + $scope.commandURL); @@ -811,23 +857,30 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro //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 { + } + else + { NVRDataModel.log(">>>Modal was exited, not starting checkAllEvents"); } @@ -836,51 +889,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: '' } @@ -889,11 +944,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, @@ -902,12 +957,16 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro }); } - $scope.videoTime = function(s, c) { + $scope.videoTime = function(s, c) + { var a, o; - if (NVRDataModel.getLogin().useLocalTimeZone) { + if (NVRDataModel.getLogin().useLocalTimeZone) + { a = moment.tz(s, NVRDataModel.getTimeZoneNow()).tz(moment.tz.guess()); - } else { + } + else + { a = moment(s); } a.add(c); @@ -918,13 +977,13 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro }; - $scope.$on('modal.removed', function(e, m) { + $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"); @@ -934,13 +993,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 @@ -950,11 +1011,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; @@ -972,28 +1035,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; @@ -1021,7 +1088,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, @@ -1031,12 +1099,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); @@ -1046,18 +1112,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(); @@ -1067,7 +1133,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 @@ -1075,90 +1142,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 @@ -1169,26 +1247,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); @@ -1196,7 +1277,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro }, 200); } - function inWithNew() { + function inWithNew() + { element.removeClass(slidein); $scope.animationInProgress = false; carouselUtils.setStop(false); @@ -1204,7 +1286,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro } - function humanizeTime(str) { + function humanizeTime(str) + { // if (NVRDataModel.getLogin().useLocalTimeZone) return moment.tz(str, NVRDataModel.getTimeZoneNow()).fromNow(); // else @@ -1212,12 +1295,14 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro } - 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 @@ -1229,7 +1314,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 @@ -1238,17 +1324,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); @@ -1258,23 +1347,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); @@ -1282,20 +1372,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; @@ -1320,7 +1410,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; @@ -1342,42 +1433,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 @@ -1387,10 +1484,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(); @@ -1399,8 +1494,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; @@ -1435,22 +1530,20 @@ 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; @@ -1472,15 +1565,16 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro //console.log("************** VIDEO IS " + videoURL); - $scope.videoObject = { - config: { + config: + { autoPlay: true, responsive: false, nativeControls: false, playsInline: true, - sources: [{ + sources: [ + { src: $sce.trustAsResourceUrl(videoURL), type: "video/mp4" } @@ -1512,31 +1606,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 }, @@ -1544,8 +1645,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; @@ -1553,16 +1652,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; @@ -1571,65 +1671,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; // video mode doesn't need this graph - it won't really work - if ($scope.defaultVideo == undefined || $scope.defaultVideo == '') { - $timeout(function() { + 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; @@ -1642,28 +1749,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; } - - }]); |
