summaryrefslogtreecommitdiff
path: root/www/js/EventModalCtrl.js
diff options
context:
space:
mode:
authorPliable Pixels <pliablepixels@users.noreply.github.com>2018-10-14 15:00:02 -0400
committerGitHub <noreply@github.com>2018-10-14 15:00:02 -0400
commit3cd1ff34c0cd8412ebe07d4ba5614ec938b72456 (patch)
treeb256e275147ee495721bedeaaafb1a65f8aef98c /www/js/EventModalCtrl.js
parentffbacb34a6a654eb1124c627320bc75131636ff7 (diff)
parent863e507613e33cc66022ba3639f7e1a5b8eb7c96 (diff)
Merge pull request #709 from pliablepixels/webview
WKWebView migration resolutions and other stuff
Diffstat (limited to 'www/js/EventModalCtrl.js')
-rw-r--r--www/js/EventModalCtrl.js323
1 files changed, 222 insertions, 101 deletions
diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js
index cf77aa3d..0e6d6be7 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;
@@ -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");
}
}
@@ -407,13 +402,14 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
// pass: loginData.password
}
})
- .success(function (resp) {
- // NVRDataModel.debug ("processEvent success:"+JSON.stringify(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;
- 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;
@@ -444,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);
@@ -509,7 +505,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,9 +514,9 @@ 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);
+ //NVRDataModel.log("Error saving image: " + e.message);
//console.log("***ERROR");
}
@@ -528,6 +524,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
//-----------------------------------------------------------------------
@@ -562,8 +588,21 @@ 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("image");
+ return;
+
+ }
+
if ($scope.loginData.useNphZmsForEvents) {
NVRDataModel.log("Use ZMS stream to save to phone");
+
saveEventImageToPhoneZms(onlyAlarms);
} else {
@@ -587,13 +626,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 = [];
@@ -706,24 +745,33 @@ 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");
var canvas, context, imageDataUrl, imageData;
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));
+
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') {
@@ -867,68 +915,141 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
text: '',
type: 'button-positive button-small ion-checkmark-round',
onTap: function (e) {
- saveNow();
+ saveNow("image");
}
}
]
});
- 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);
-
- 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);
- }
- } else {
- 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();
- });
+ }
+
+ function saveNow(t) {
+
+ var fname = "zmninja.jpg";
+ var fn = "cordova.plugins.photoLibrary.saveImage";
+ var loginData = NVRDataModel.getLogin();
+
+ $ionicLoading.show({
+ template: $translate.instant('kPleaseWait') + "...",
+ noBackdrop: true,
+ duration: zm.httpTimeout
+ });
+
+ if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '' && t != "image") {
+ $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");
+ 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) {
+ NVRDataModel.log("error downloading:" + JSON.stringify(err));
+ SaveError();
+ }, !loginData.enableStrictSSL, {});
+
+
+
+
+ // 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
}
- };
- try {
- img.src = url;
- // console.log ("SAVING IMAGE SOURCE");
- } catch (e) {
- SaveError(e.message);
- }
+ );
+
+ } else {
+ //desktop
+
+ $ionicLoading.hide();
+
+ $rootScope.zmPopup = SecuredPopups.show('alert', {
+ title: $translate.instant('kNote'),
+ template: $translate.instant('kDownloadVideoImage')+"<br/><br/><center><a href='" + url + "' class='button button-assertive icon ion-android-download' download>"+" "+$translate.instant('kDownload')+"</a></center>",
+ okText: $translate.instant('kDismiss'),
+ okType:'button-stable'
+ });
+
+
+
}
+
}
$scope.reloadView = function () {
@@ -946,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) {
@@ -971,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;
@@ -1166,7 +1287,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());
@@ -1184,10 +1305,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");
@@ -1429,7 +1550,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));
@@ -1459,8 +1581,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')]);
@@ -1810,8 +1932,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,
@@ -1819,7 +1940,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
});
ts = data.event.Frame[i].TimeStamp;
}
-
+
}