From 19c228b23507c5f8ec9a2f468fb6b221eb361da5 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Mon, 24 Sep 2018 15:32:36 -0400 Subject: #709 changes to how photos are saved --- www/js/EventModalCtrl.js | 124 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 85 insertions(+), 39 deletions(-) (limited to 'www/js/EventModalCtrl.js') diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js index cf77aa3d..eb78573a 100644 --- a/www/js/EventModalCtrl.js +++ b/www/js/EventModalCtrl.js @@ -3,7 +3,7 @@ /* 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', '$cordovaFile',function ($scope, $rootScope, zm, NVRDataModel, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $q, $sce, carouselUtils, $ionicPopup, $translate, $filter, SecuredPopups, $cordovaFile) { var playerReady = false; @@ -520,7 +520,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro noBackdrop: true, duration: 2000 }); - NVRDataModel.log("Error saving image: " + e.message); + //NVRDataModel.log("Error saving image: " + e.message); //console.log("***ERROR"); } @@ -880,37 +880,80 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro noBackdrop: true, duration: zm.httpTimeout }); + + var url = $scope.selectEventUrl; - NVRDataModel.log("saveNow: File path to grab is " + url); - - var img = new Image(); - img.onload = function () { - // console.log("********* ONLOAD"); - canvas = document.createElement('canvas'); - canvas.width = img.width; - canvas.height = img.height; - context = canvas.getContext('2d'); - context.drawImage(img, 0, 0); - - imageDataUrl = canvas.toDataURL('image/jpeg', 1.0); - imageData = imageDataUrl.replace(/data:image\/jpeg;base64,/, ''); - - if ($rootScope.platformOS != "desktop") { - try { - - cordova.exec( - SaveSuccess, - SaveError, - 'Canvas2ImagePlugin', - 'saveImageDataToLibrary', [imageData] - ); - // carouselUtils.setStop(curState); - } catch (e) { - - SaveError(e.message); - // carouselUtils.setStop(curState); + NVRDataModel.log(">>saveNow: File path to grab is " + url); + + if ($rootScope.platformOS != 'desktop') { + + var album = 'zmNinja'; + NVRDataModel.debug ("Trying to save image to album: "+album); + cordova.plugins.photoLibrary.requestAuthorization( + function () { + //url = "https://picsum.photos/200/300/?random"; + + var fileTransfer = new FileTransfer(); + var urle = encodeURI(url); + var fname = "zmninja.jpg"; + + fileTransfer.download(urle, cordova.file.dataDirectory + fname, + function(entry){ + NVRDataModel.debug("local download complete: " + entry.toURL()); + NVRDataModel.debug("Now trying to move it to album"); + cordova.plugins.photoLibrary.saveImage(entry.toURL(), album, + function (cameraRollAssetId) { + SaveSuccess(); + $cordovaFile.removeFile(cordova.file.dataDirectory, fname) + .then ( + function () { + NVRDataModel.debug ("file removed from data directory"); + }, + function (e) { + NVRDataModel.debug ("could not delete temp file: "+JSON.stringify(e)); + } + ); + + + }, function (err) { + NVRDataModel.debug ("Saving error:" + JSON.stringify(err)); + SaveError(); + + }); + + }, + function(err) { console.log ("error downloading:"+JSON.stringify(err));}, false, {}); + + + + + // User gave us permission to his library, retry reading it! + }, + function (err) { + // User denied the access + NVRDataModel.debug ("Permission not granted"); + SaveError(); + }, // if options not provided, defaults to {read: true}. + + { + read: true, + write: true } - } else { + ); + + } + else { + var img = new Image(); + img.onload = function () { + // console.log("********* ONLOAD"); + canvas = document.createElement('canvas'); + canvas.width = img.width; + canvas.height = img.height; + context = canvas.getContext('2d'); + context.drawImage(img, 0, 0); + + imageDataUrl = canvas.toDataURL('image/jpeg', 1.0); + imageData = imageDataUrl.replace(/data:image\/jpeg;base64,/, ''); var fname = $scope.relativePath + $scope.slides[$scope.slideIndex].img + ".png"; fname = fname.replace(/\//, "-"); @@ -920,15 +963,18 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro saveAs(blob, fname); SaveSuccess(); }); + }; + + try { + img.src = url; + console.log ("DESKTOP SAVING IMAGE SOURCE"); + } catch (e) { + SaveError(e.message); } - }; - try { - img.src = url; - // console.log ("SAVING IMAGE SOURCE"); - } catch (e) { - SaveError(e.message); } - } + + } + } $scope.reloadView = function () { @@ -2144,4 +2190,4 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro return number; } -}]); +}]); \ No newline at end of file -- cgit v1.2.3 From e520aecb5b1e3c3da74383f0c91e2e2f81d003f0 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Mon, 24 Sep 2018 16:48:40 -0400 Subject: #710 allow native video downloads --- www/js/EventModalCtrl.js | 221 +++++++++++++++++++++++++++++++---------------- 1 file changed, 146 insertions(+), 75 deletions(-) (limited to 'www/js/EventModalCtrl.js') diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js index eb78573a..217025d4 100644 --- a/www/js/EventModalCtrl.js +++ b/www/js/EventModalCtrl.js @@ -509,7 +509,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro $ionicLoading.show({ template: $translate.instant('kDone'), noBackdrop: true, - duration: 1000 + duration: 2000 }); NVRDataModel.debug("ModalCtrl:Photo saved successfuly"); } @@ -518,7 +518,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro $ionicLoading.show({ template: $translate.instant('kErrorSave'), noBackdrop: true, - duration: 2000 + duration: 3000 }); //NVRDataModel.log("Error saving image: " + e.message); //console.log("***ERROR"); @@ -562,8 +562,20 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro function processSaveEventImageToPhone(onlyAlarms) { + + if ($scope.isSnapShot()) { + + + $scope.selectEventUrl = $scope.constructStream(); + NVRDataModel.debug ("just saving current snapshot:"+$scope.selectEventUrl); + saveNow(); + return; + + } + if ($scope.loginData.useNphZmsForEvents) { NVRDataModel.log("Use ZMS stream to save to phone"); + saveEventImageToPhoneZms(onlyAlarms); } else { @@ -874,34 +886,70 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro ] }); - function saveNow() { - $ionicLoading.show({ - template: $translate.instant('kSavingSnapshot') + "...", - noBackdrop: true, - duration: zm.httpTimeout - }); + + } - var url = $scope.selectEventUrl; - NVRDataModel.log(">>saveNow: File path to grab is " + url); + function saveNow() { - if ($rootScope.platformOS != 'desktop') { - - var album = 'zmNinja'; - NVRDataModel.debug ("Trying to save image to album: "+album); - cordova.plugins.photoLibrary.requestAuthorization( - function () { - //url = "https://picsum.photos/200/300/?random"; - - var fileTransfer = new FileTransfer(); - var urle = encodeURI(url); - var fname = "zmninja.jpg"; - - fileTransfer.download(urle, cordova.file.dataDirectory + fname, - function(entry){ - NVRDataModel.debug("local download complete: " + entry.toURL()); - NVRDataModel.debug("Now trying to move it to album"); - cordova.plugins.photoLibrary.saveImage(entry.toURL(), album, + var fname = "zmninja.jpg"; + var fn = "cordova.plugins.photoLibrary.saveImage"; + + $ionicLoading.show({ + template: $translate.instant('kPleaseWait') + "...", + noBackdrop: true, + //duration: zm.httpTimeout + }); + + if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '') { + $scope.selectEventUrl = $scope.video_url; + fname = "zmNinja.mp4"; + fn = "cordova.plugins.photoLibrary.saveVideo"; + + NVRDataModel.debug ("-->Going to try and download "+$scope.selectEventUrl); + } + + + var url = $scope.selectEventUrl; + + + NVRDataModel.log(">>saveNow: File path to grab is " + url); + + if ($rootScope.platformOS != 'desktop') { + + var album = 'zmNinja'; + NVRDataModel.debug ("Trying to save image to album: "+album); + cordova.plugins.photoLibrary.requestAuthorization( + function () { + //url = "https://picsum.photos/200/300/?random"; + + var fileTransfer = new FileTransfer(); + var urle = encodeURI(url); + + + fileTransfer.onprogress = function (progressEvent) { + if (progressEvent.lengthComputable) { + + $timeout (function() { + var perc = Math.floor(progressEvent.loaded / progressEvent.total * 100); + $ionicLoading.show({ + template: $translate.instant('kPleaseWait') + "... ("+perc+"%)", + noBackdrop: true, + //duration: zm.httpTimeout + }); + }); + + + } + }; + + fileTransfer.download(urle, cordova.file.dataDirectory + fname, + function(entry){ + NVRDataModel.debug("local download complete: " + entry.toURL()); + NVRDataModel.debug("Now trying to move it to album"); + + if (fname == "zmNinja.mp4") { + cordova.plugins.photoLibrary.saveVideo(entry.toURL(), album, function (cameraRollAssetId) { SaveSuccess(); $cordovaFile.removeFile(cordova.file.dataDirectory, fname) @@ -920,62 +968,85 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro SaveError(); }); - - }, - function(err) { console.log ("error downloading:"+JSON.stringify(err));}, false, {}); - - - - - // User gave us permission to his library, retry reading it! - }, - function (err) { - // User denied the access - NVRDataModel.debug ("Permission not granted"); - SaveError(); - }, // if options not provided, defaults to {read: true}. - - { - read: true, - write: true - } - ); + } + else { - } - else { - var img = new Image(); - img.onload = function () { - // console.log("********* ONLOAD"); - canvas = document.createElement('canvas'); - canvas.width = img.width; - canvas.height = img.height; - context = canvas.getContext('2d'); - context.drawImage(img, 0, 0); - - imageDataUrl = canvas.toDataURL('image/jpeg', 1.0); - imageData = imageDataUrl.replace(/data:image\/jpeg;base64,/, ''); + cordova.plugins.photoLibrary.saveImage(entry.toURL(), album, + function (cameraRollAssetId) { + SaveSuccess(); + $cordovaFile.removeFile(cordova.file.dataDirectory, fname) + .then ( + function () { + NVRDataModel.debug ("file removed from data directory"); + }, + function (e) { + NVRDataModel.debug ("could not delete temp file: "+JSON.stringify(e)); + } + ); + - var fname = $scope.relativePath + $scope.slides[$scope.slideIndex].img + ".png"; - fname = fname.replace(/\//, "-"); - fname = fname.replace(/\.jpg/, ''); + }, function (err) { + NVRDataModel.debug ("Saving error:" + JSON.stringify(err)); + SaveError(); + + }); + + } + + + }, + function(err) { console.log ("error downloading:"+JSON.stringify(err));}, false, {}); - canvas.toBlob(function (blob) { - saveAs(blob, fname); - SaveSuccess(); - }); - }; - try { - img.src = url; - console.log ("DESKTOP SAVING IMAGE SOURCE"); - } catch (e) { - SaveError(e.message); + + + // User gave us permission to his library, retry reading it! + }, + function (err) { + // User denied the access + NVRDataModel.debug ("Permission not granted"); + SaveError(); + }, // if options not provided, defaults to {read: true}. + + { + read: true, + write: true } - } + ); + } + else { + var img = new Image(); + img.onload = function () { + // console.log("********* ONLOAD"); + canvas = document.createElement('canvas'); + canvas.width = img.width; + canvas.height = img.height; + context = canvas.getContext('2d'); + context.drawImage(img, 0, 0); + + imageDataUrl = canvas.toDataURL('image/jpeg', 1.0); + imageData = imageDataUrl.replace(/data:image\/jpeg;base64,/, ''); + + var fname = $scope.relativePath + $scope.slides[$scope.slideIndex].img + ".png"; + fname = fname.replace(/\//, "-"); + fname = fname.replace(/\.jpg/, ''); + + canvas.toBlob(function (blob) { + saveAs(blob, fname); + SaveSuccess(); + }); + }; + + try { + img.src = url; + console.log ("DESKTOP SAVING IMAGE SOURCE"); + } catch (e) { + SaveError(e.message); } + } - } + } $scope.reloadView = function () { NVRDataModel.log("Reloading view for modal view, recomputing rand"); -- cgit v1.2.3 From bc06e31f5ce9c5df538aa4be3987f4b82892d9f9 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Tue, 25 Sep 2018 11:16:26 -0400 Subject: fixed event frame offset + simplified plugin invocation #709 #710 --- www/js/EventModalCtrl.js | 46 ++++++++++++++++------------------------------ 1 file changed, 16 insertions(+), 30 deletions(-) (limited to 'www/js/EventModalCtrl.js') diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js index 217025d4..961db0b0 100644 --- a/www/js/EventModalCtrl.js +++ b/www/js/EventModalCtrl.js @@ -568,7 +568,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro $scope.selectEventUrl = $scope.constructStream(); NVRDataModel.debug ("just saving current snapshot:"+$scope.selectEventUrl); - saveNow(); + saveNow("image"); return; } @@ -722,6 +722,9 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro //console.log("Your index is " + $scope.mycarousel.index); //console.log("Associated image is " + $scope.slides[$scope.mycarousel.index].img); + + + NVRDataModel.debug("ModalCtrl: SaveEventImageToPhone called"); var canvas, context, imageDataUrl, imageData; var loginData = NVRDataModel.getLogin(); @@ -733,9 +736,13 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro if ($scope.event.Event.imageMode == 'path') { url = $scope.playbackURL + '/index.php?view=image&rand=' + $rootScope.rand + "&path=" + $scope.relativePath + $scope.slides[$scope.mycarousel.index].img; } else { + + console.log ("SLIDES "+JSON.stringify($scope.slides)); + console.log ("CAROUSEL "+JSON.stringify($scope.mycarousel)); + url = $scope.playbackURL + '/index.php?view=image&rand=' + $rootScope.rand + "&eid=" + $scope.eventId + - "&fid=" + $scope.slides[$scope.mycarousel.index].id; + "&fid=" + $scope.slides[$scope.mycarousel.index -1].id; } if ($rootScope.authSession != 'undefined') { @@ -879,7 +886,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro text: '', type: 'button-positive button-small ion-checkmark-round', onTap: function (e) { - saveNow(); + saveNow("image"); } } @@ -890,7 +897,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro } - function saveNow() { + function saveNow(t) { var fname = "zmninja.jpg"; var fn = "cordova.plugins.photoLibrary.saveImage"; @@ -901,7 +908,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro //duration: zm.httpTimeout }); - if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '') { + if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '' && t != "image") { $scope.selectEventUrl = $scope.video_url; fname = "zmNinja.mp4"; fn = "cordova.plugins.photoLibrary.saveVideo"; @@ -947,9 +954,10 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro function(entry){ NVRDataModel.debug("local download complete: " + entry.toURL()); NVRDataModel.debug("Now trying to move it to album"); + var pluginName = (fname == "zmNinja.mp4"? "saveVideo": "saveImage"); - if (fname == "zmNinja.mp4") { - cordova.plugins.photoLibrary.saveVideo(entry.toURL(), album, + + cordova.plugins.photoLibrary[pluginName](entry.toURL(), album, function (cameraRollAssetId) { SaveSuccess(); $cordovaFile.removeFile(cordova.file.dataDirectory, fname) @@ -968,30 +976,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro SaveError(); }); - } - else { - - cordova.plugins.photoLibrary.saveImage(entry.toURL(), album, - function (cameraRollAssetId) { - SaveSuccess(); - $cordovaFile.removeFile(cordova.file.dataDirectory, fname) - .then ( - function () { - NVRDataModel.debug ("file removed from data directory"); - }, - function (e) { - NVRDataModel.debug ("could not delete temp file: "+JSON.stringify(e)); - } - ); - - - }, function (err) { - NVRDataModel.debug ("Saving error:" + JSON.stringify(err)); - SaveError(); - }); - - } + }, -- cgit v1.2.3 From 74a4d75566708e78eb0aedae466008fb7c4e187e Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Tue, 25 Sep 2018 15:44:57 -0400 Subject: #709 #710 clean up video/image code, switch to "a download" for desktop --- www/js/EventModalCtrl.js | 248 +++++++++++++++++++++++++---------------------- 1 file changed, 131 insertions(+), 117 deletions(-) (limited to 'www/js/EventModalCtrl.js') diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js index 961db0b0..1894b96f 100644 --- a/www/js/EventModalCtrl.js +++ b/www/js/EventModalCtrl.js @@ -3,7 +3,7 @@ /* 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', '$cordovaFile',function ($scope, $rootScope, zm, NVRDataModel, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $q, $sce, carouselUtils, $ionicPopup, $translate, $filter, SecuredPopups, $cordovaFile) { +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', '$cordovaFile', function ($scope, $rootScope, zm, NVRDataModel, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $q, $sce, carouselUtils, $ionicPopup, $translate, $filter, SecuredPopups, $cordovaFile) { var playerReady = false; @@ -86,13 +86,13 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro NVRDataModel.debug("Setting playback to " + $scope.streamMode); - if ($rootScope.platformOS == 'desktop') { + if ($rootScope.platformOS == 'desktop') { window.addEventListener('keydown', keyboardHandler, true); } - // Keyboard handler for desktop versions - function keyboardHandler(evt) { + // Keyboard handler for desktop versions + function keyboardHandler(evt) { var handled = false; var keyCodes = { @@ -103,36 +103,31 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro ESC: 27, FITFILL_F: 70, - PLAY_SELECT:13 - + PLAY_SELECT: 13 + }; - $timeout (function () { + $timeout(function () { var keyCode = evt.keyCode; - - console.log (keyCode + " PRESSED"); + + console.log(keyCode + " PRESSED"); if (keyCode == keyCodes.ESC) { $scope.closeModal(); - } - else if (keyCode == keyCodes.LEFT) { - - $scope.jumpToEvent($scope.prevId, -1); - } - else if (keyCode == keyCodes.RIGHT) { + } else if (keyCode == keyCodes.LEFT) { + + $scope.jumpToEvent($scope.prevId, -1); + } else if (keyCode == keyCodes.RIGHT) { $scope.jumpToEvent($scope.nextId, 1); - } - else if (keyCode == keyCodes.FITFILL_F) { + } else if (keyCode == keyCodes.FITFILL_F) { $scope.scaleImage(); - } - else if (keyCode == keyCodes.PLAY_SELECT) { + } else if (keyCode == keyCodes.PLAY_SELECT) { if ($scope.isSnapShot() && !$scope.liveFeedMid) { $scope.convertSnapShotToStream(); - } - else { - NVRDataModel.debug ("Not in snapshot mode, ignoring"); + } else { + NVRDataModel.debug("Not in snapshot mode, ignoring"); } } @@ -528,6 +523,36 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro // streamReq.send( streamParms+"&command="+CMD_SEEK+"&offset="+offset ); }; + + $scope.saveEventVideoToPhoneWithPerms = function () { + + if ($rootScope.platformOS != 'android') { + saveNow(); + return; + } + + NVRDataModel.debug("EventModalCtrl: Permission checking for write"); + var permissions = cordova.plugins.permissions; + permissions.hasPermission(permissions.WRITE_EXTERNAL_STORAGE, checkPermissionCallback, null); + + 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) { + saveNow(); + } + + function err(e) { + SaveError("Error in requestPermission"); + } + + } + + //----------------------------------------------------------------------- // Saves a snapshot of the monitor image to phone storage //----------------------------------------------------------------------- @@ -563,11 +588,12 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro function processSaveEventImageToPhone(onlyAlarms) { + if ($scope.isSnapShot()) { - + $scope.selectEventUrl = $scope.constructStream(); - NVRDataModel.debug ("just saving current snapshot:"+$scope.selectEventUrl); + NVRDataModel.debug("just saving current snapshot:" + $scope.selectEventUrl); saveNow("image"); return; @@ -599,13 +625,13 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro sendCommand('1', $scope.connKey). then(function (resp) { - console.log ("PAUSE ANSWER IS " + JSON.stringify(resp)); + console.log("PAUSE ANSWER IS " + JSON.stringify(resp)); if (resp && resp.data && resp.data.status) $scope.currentProgress.progress = resp.data.status.progress; - else - $scope.currentProgress.progress = 100; - + else + $scope.currentProgress.progress = 100; + // console.log ("STEP 0 progress is " + $scope.currentProgress.progress); $scope.slides = []; @@ -718,11 +744,12 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro // console.log ("________________UNUSED?_______________________"); var curState = carouselUtils.getStop(); carouselUtils.setStop(true); + var url; //console.log("Your index is " + $scope.mycarousel.index); //console.log("Associated image is " + $scope.slides[$scope.mycarousel.index].img); - + NVRDataModel.debug("ModalCtrl: SaveEventImageToPhone called"); @@ -730,19 +757,20 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro var loginData = NVRDataModel.getLogin(); // for alarms only - if (onlyAlarms) $scope.mycarousel.index = 0; - var url; + if (onlyAlarms || ($scope.defaultVideo !== undefined && $scope.defaultVideo != '')) + $scope.mycarousel.index = 1; + if ($scope.event.Event.imageMode == 'path') { url = $scope.playbackURL + '/index.php?view=image&rand=' + $rootScope.rand + "&path=" + $scope.relativePath + $scope.slides[$scope.mycarousel.index].img; } else { - console.log ("SLIDES "+JSON.stringify($scope.slides)); - console.log ("CAROUSEL "+JSON.stringify($scope.mycarousel)); + console.log("SLIDES " + JSON.stringify($scope.slides)); + console.log("CAROUSEL " + JSON.stringify($scope.mycarousel)); url = $scope.playbackURL + '/index.php?view=image&rand=' + $rootScope.rand + "&eid=" + $scope.eventId + - "&fid=" + $scope.slides[$scope.mycarousel.index -1].id; + "&fid=" + $scope.slides[$scope.mycarousel.index - 1].id; } if ($rootScope.authSession != 'undefined') { @@ -893,7 +921,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro ] }); - + } @@ -905,7 +933,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro $ionicLoading.show({ template: $translate.instant('kPleaseWait') + "...", noBackdrop: true, - //duration: zm.httpTimeout + duration: zm.httpTimeout }); if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '' && t != "image") { @@ -913,84 +941,87 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro fname = "zmNinja.mp4"; fn = "cordova.plugins.photoLibrary.saveVideo"; - NVRDataModel.debug ("-->Going to try and download "+$scope.selectEventUrl); - } + } + NVRDataModel.debug("-->Going to try and download " + $scope.selectEventUrl); var url = $scope.selectEventUrl; - + NVRDataModel.log(">>saveNow: File path to grab is " + url); if ($rootScope.platformOS != 'desktop') { - + var album = 'zmNinja'; - NVRDataModel.debug ("Trying to save image to album: "+album); + NVRDataModel.debug("Trying to save image to album: " + album); cordova.plugins.photoLibrary.requestAuthorization( function () { //url = "https://picsum.photos/200/300/?random"; var fileTransfer = new FileTransfer(); var urle = encodeURI(url); - - + + fileTransfer.onprogress = function (progressEvent) { if (progressEvent.lengthComputable) { - $timeout (function() { + $timeout(function () { var perc = Math.floor(progressEvent.loaded / progressEvent.total * 100); $ionicLoading.show({ - template: $translate.instant('kPleaseWait') + "... ("+perc+"%)", + template: $translate.instant('kPleaseWait') + "... (" + perc + "%)", noBackdrop: true, //duration: zm.httpTimeout }); }); - + } }; - fileTransfer.download(urle, cordova.file.dataDirectory + fname, - function(entry){ + fileTransfer.download(urle, cordova.file.dataDirectory + fname, + function (entry) { NVRDataModel.debug("local download complete: " + entry.toURL()); NVRDataModel.debug("Now trying to move it to album"); - var pluginName = (fname == "zmNinja.mp4"? "saveVideo": "saveImage"); - - - cordova.plugins.photoLibrary[pluginName](entry.toURL(), album, - function (cameraRollAssetId) { - SaveSuccess(); - $cordovaFile.removeFile(cordova.file.dataDirectory, fname) - .then ( - function () { - NVRDataModel.debug ("file removed from data directory"); - }, - function (e) { - NVRDataModel.debug ("could not delete temp file: "+JSON.stringify(e)); - } - ); - - - }, function (err) { - NVRDataModel.debug ("Saving error:" + JSON.stringify(err)); - SaveError(); - - }); - - - - - }, - function(err) { console.log ("error downloading:"+JSON.stringify(err));}, false, {}); + var pluginName = (fname == "zmNinja.mp4" ? "saveVideo" : "saveImage"); + + + cordova.plugins.photoLibrary[pluginName](entry.toURL(), album, + function (cameraRollAssetId) { + SaveSuccess(); + $cordovaFile.removeFile(cordova.file.dataDirectory, fname) + .then( + function () { + NVRDataModel.debug("file removed from data directory"); + }, + function (e) { + NVRDataModel.debug("could not delete temp file: " + JSON.stringify(e)); + } + ); + + + }, + function (err) { + NVRDataModel.debug("Saving error:" + JSON.stringify(err)); + SaveError(); + + }); + + + + + }, + function (err) { + console.log("error downloading:" + JSON.stringify(err)); + }, false, {}); + + - - // User gave us permission to his library, retry reading it! }, function (err) { // User denied the access - NVRDataModel.debug ("Permission not granted"); + NVRDataModel.debug("Permission not granted"); SaveError(); }, // if options not provided, defaults to {read: true}. @@ -1000,40 +1031,24 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro } ); - } - else { - var img = new Image(); - img.onload = function () { - // console.log("********* ONLOAD"); - canvas = document.createElement('canvas'); - canvas.width = img.width; - canvas.height = img.height; - context = canvas.getContext('2d'); - context.drawImage(img, 0, 0); - - imageDataUrl = canvas.toDataURL('image/jpeg', 1.0); - imageData = imageDataUrl.replace(/data:image\/jpeg;base64,/, ''); - - var fname = $scope.relativePath + $scope.slides[$scope.slideIndex].img + ".png"; - fname = fname.replace(/\//, "-"); - fname = fname.replace(/\.jpg/, ''); - - canvas.toBlob(function (blob) { - saveAs(blob, fname); - SaveSuccess(); - }); - }; + } else { + //desktop + + $ionicLoading.hide(); + + $rootScope.zmPopup = SecuredPopups.show('alert', { + title: $translate.instant('kNote'), + template: $translate.instant('kDownloadVideoImage')+"

"+" "+$translate.instant('kDownload')+"
", + cancelText: $translate.instant('kDismiss'), + cancelType:'button-stable' + }); + - try { - img.src = url; - console.log ("DESKTOP SAVING IMAGE SOURCE"); - } catch (e) { - SaveError(e.message); - } - } } + } + $scope.reloadView = function () { NVRDataModel.log("Reloading view for modal view, recomputing rand"); $rootScope.modalRand = Math.floor((Math.random() * 100000) + 1); @@ -1269,7 +1284,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro $scope.videoTime = function (s, c) { - // console.log ("VIDEO TIME WITH "+s+ " and "+c); + // console.log ("VIDEO TIME WITH "+s+ " and "+c); var a, o; if (NVRDataModel.getLogin().useLocalTimeZone) { a = moment.tz(s, NVRDataModel.getTimeZoneNow()).tz(moment.tz.guess()); @@ -1287,10 +1302,10 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro $scope.$on('modal.removed', function (e, m) { - if ($rootScope.platformOS == 'desktop') { - NVRDataModel.debug ("Removing keyboard handler"); + if ($rootScope.platformOS == 'desktop') { + NVRDataModel.debug("Removing keyboard handler"); window.removeEventListener('keydown', keyboardHandler, true); - + } NVRDataModel.debug("Deregistering broadcast handles"); @@ -1913,8 +1928,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro // console.log ("**ONLY ALARM AT " + i + "of " + data.event.Frame.length); - if (ts != data.event.Frame[i].TimeStamp) - { + if (ts != data.event.Frame[i].TimeStamp) { tempAlarms.push({ id: data.event.Frame[i].Id, @@ -1922,7 +1936,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro }); ts = data.event.Frame[i].TimeStamp; } - + } @@ -2247,4 +2261,4 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro return number; } -}]); \ No newline at end of file +}]); -- cgit v1.2.3 From 88a89c59cf8dcf6c31a86e243ed50b93f562808b Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Tue, 25 Sep 2018 15:52:35 -0400 Subject: typo --- www/js/EventModalCtrl.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'www/js/EventModalCtrl.js') diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js index 1894b96f..195b94ba 100644 --- a/www/js/EventModalCtrl.js +++ b/www/js/EventModalCtrl.js @@ -550,7 +550,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro SaveError("Error in requestPermission"); } - } + }; //----------------------------------------------------------------------- -- cgit v1.2.3 From 776d0d1a52622d5c84411ec3e3d9303ab117a696 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Tue, 25 Sep 2018 16:10:11 -0400 Subject: #709 #710 text fix --- www/js/EventModalCtrl.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'www/js/EventModalCtrl.js') diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js index 195b94ba..32d89b87 100644 --- a/www/js/EventModalCtrl.js +++ b/www/js/EventModalCtrl.js @@ -1039,8 +1039,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro $rootScope.zmPopup = SecuredPopups.show('alert', { title: $translate.instant('kNote'), template: $translate.instant('kDownloadVideoImage')+"

"+" "+$translate.instant('kDownload')+"
", - cancelText: $translate.instant('kDismiss'), - cancelType:'button-stable' + okText: $translate.instant('kDismiss'), + okType:'button-stable' }); -- cgit v1.2.3 From d8fea09d65e5207ef8c4fafcddd5fc74a7f7be00 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Fri, 28 Sep 2018 08:37:24 -0400 Subject: #709 implement native/XHR wrapper, convert all success/error to "then" construct --- www/js/EventModalCtrl.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'www/js/EventModalCtrl.js') diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js index 32d89b87..422b66b9 100644 --- a/www/js/EventModalCtrl.js +++ b/www/js/EventModalCtrl.js @@ -402,9 +402,10 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro // pass: loginData.password } }) - .success(function (resp) { + .then(function (resp) { // NVRDataModel.debug ("processEvent success:"+JSON.stringify(resp)); + resp = resp.data; if (resp.result == "Ok") { if (resp.status) $scope.currentProgress.progress = resp.status.progress; @@ -439,8 +440,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro NVRDataModel.debug("so I'm regenerating Connkey to " + $scope.connKey);*/ } - }) - .error(function (resp) { + }, + function (resp) { NVRDataModel.debug("processEvent error:" + JSON.stringify(resp)); //eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery); @@ -1547,7 +1548,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro }); return $http.delete(apiDelete) - .success(function (data) { + .then(function (data) { + data = data.data; $ionicLoading.hide(); // NVRDataModel.debug("delete output: " + JSON.stringify(data)); @@ -1577,8 +1579,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro //doRefresh(); - }) - .error(function (data) { + }, + function (data) { $ionicLoading.hide(); NVRDataModel.debug("delete error: " + JSON.stringify(data)); NVRDataModel.displayBanner('error', [$translate.instant('kDeleteEventError1'), $translate.instant('kDeleteEventError2')]); -- cgit v1.2.3 From 736002099098b9e044000dd02f359182c4043ef8 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Sat, 29 Sep 2018 16:47:06 -0400 Subject: certificate fixes --- www/js/EventModalCtrl.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'www/js/EventModalCtrl.js') diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js index 422b66b9..68d378dc 100644 --- a/www/js/EventModalCtrl.js +++ b/www/js/EventModalCtrl.js @@ -930,6 +930,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro var fname = "zmninja.jpg"; var fn = "cordova.plugins.photoLibrary.saveImage"; + var loginData = NVRDataModel.getLogin(); $ionicLoading.show({ template: $translate.instant('kPleaseWait') + "...", @@ -1012,8 +1013,9 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro }, function (err) { - console.log("error downloading:" + JSON.stringify(err)); - }, false, {}); + NVRDataModel.log("error downloading:" + JSON.stringify(err)); + SaveError(); + }, !loginData.enableStrictSSL, {}); -- cgit v1.2.3 From adb3927065bc2908f3dc1e88922db5ec37762684 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Tue, 9 Oct 2018 11:32:06 -0400 Subject: updated eventId only if present in response --- www/js/EventModalCtrl.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'www/js/EventModalCtrl.js') diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js index 68d378dc..0e6d6be7 100644 --- a/www/js/EventModalCtrl.js +++ b/www/js/EventModalCtrl.js @@ -403,13 +403,13 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro } }) .then(function (resp) { - // NVRDataModel.debug ("processEvent success:"+JSON.stringify(resp)); + //NVRDataModel.debug ("processEvent success:"+JSON.stringify(resp)); resp = resp.data; if (resp.result == "Ok") { if (resp.status) $scope.currentProgress.progress = resp.status.progress; - if (resp.status) $scope.eventId = resp.status.event; + if (resp.status && resp.status.event) $scope.eventId = resp.status.event; $scope.d_eventId = $scope.eventId; if (resp.status) $scope.currentRate = resp.status.rate; @@ -1067,8 +1067,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro $scope.constructStream = function (monitor) { + //console.log ("STREAMSTATE ="+currentStreamState); if ($scope.animationInProgress) return ""; - var stream = ""; // eventId gets populated when prepareModal completes if (currentStreamState == streamState.STOPPED || !$scope.eventId) { @@ -1092,7 +1092,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro } //console.log ($scope.connKey ); - // console.log ("STREAM="+stream); + //console.log ("STREAM="+stream); //console.log ("EID="+$scope.eventId); if ($rootScope.basicAuthToken && stream) stream += "&basicauth=" + $rootScope.basicAuthToken; return stream; -- cgit v1.2.3