From 65e2077162fd45e972f59e4d624100989e07068b Mon Sep 17 00:00:00 2001 From: maymaymay Date: Sat, 3 Oct 2020 08:06:03 +0200 Subject: add xsmall thumbs --- www/lang/locale-pl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/www/lang/locale-pl.json b/www/lang/locale-pl.json index ccf94dc6..e0c95ea9 100644 --- a/www/lang/locale-pl.json +++ b/www/lang/locale-pl.json @@ -115,9 +115,10 @@ "kEventStillRecording" :"nadal nagrywam - wyświetlam przekaz na żywo", "kEvents" :"zdarzenia", "kEventsCap" :"Zdarzenia", + "kEventViewThumbsLarge" :"duży", "kEventViewThumbsSize" :"rozmiar podglądu", "kEventViewThumbsSmall" :"mały", - "kEventViewThumbsLarge" :"duży", + "kEventViewThumbsXSmall" :"b.mały", "kExampleServer" :"np. Mój Dom", "kExit" :"wyjdź", "kExitAppBackground" :"wyjdź z aplikacji w tle", -- cgit v1.2.3 From 8377aff450f97b6b2b12f81d189d84b15652033d Mon Sep 17 00:00:00 2001 From: florie1706 <26010442+florie1706@users.noreply.github.com> Date: Sat, 3 Oct 2020 09:43:32 +0200 Subject: add xsmall thumbs --- www/lang/locale-de.json | 1 + 1 file changed, 1 insertion(+) diff --git a/www/lang/locale-de.json b/www/lang/locale-de.json index 9877563d..a528ea21 100644 --- a/www/lang/locale-de.json +++ b/www/lang/locale-de.json @@ -114,6 +114,7 @@ "kEventSingleImageScale" :"Ereignis Einzelbild Maßstab", "kEventStillRecording" :"Aufnahme aktiv", "kEventViewThumbsSize" :"Vorschaugröße", + "kEventViewThumbsXSmall" :"x-klein", "kEventViewThumbsSmall" :"klein", "kEventViewThumbsLarge" :"groß", "kEvents" :"Ereignisse", -- cgit v1.2.3 From 55c247f6d38594d31afd0ecbeb111e34b42ee405 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Sun, 4 Oct 2020 07:27:40 -0400 Subject: change logging to add ms --- www/js/NVR.js | 4 ++++ www/js/app.js | 9 ++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/www/js/NVR.js b/www/js/NVR.js index ff438892..301091a6 100644 --- a/www/js/NVR.js +++ b/www/js/NVR.js @@ -2643,6 +2643,10 @@ angular.module('zmApp.controllers') return (loginData.use24hr ? "HH:mm:ss" : "hh:mm:ss a"); }, + getTimeFormatMilliSec: function() { + return (loginData.use24hr ? "HH:mm:ss:sss" : "hh:mm:ss:sss a"); + + }, //------------------------------------------------------------------ // switches screen to 'always on' or 'auto' //------------------------------------------------------------------ diff --git a/www/js/app.js b/www/js/app.js index 57eb9a3f..c6ed9644 100755 --- a/www/js/app.js +++ b/www/js/app.js @@ -1119,12 +1119,12 @@ angular.module('zmApp', [ $ionicPlatform.ready(function () { + //console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>INSIDE RUN"); NVR.log("******* app .run device ready"); - $fileLogger.setStorageFilename(zm.logFile); - $fileLogger.setTimestampFormat('MMM d, y ' + NVR.getTimeFormatSec()); + $fileLogger.setTimestampFormat('MMM d, y ' + NVR.getTimeFormatMilliSec()); $fileLogger.checkFile().then(function (resp) { if (parseInt(resp.size) > zm.logFileMaxSize) { @@ -1480,7 +1480,6 @@ angular.module('zmApp', [ // http://stackoverflow.com/questions/1649086/detect-rotation-of-android-phone-in-the-browser-with-javascript var checkOrientation = function () { - // give rotation time to actually rotate, or width/height will be bogus $timeout ( function() { @@ -1945,6 +1944,8 @@ angular.module('zmApp', [ NVR.log ("-->Re-registering online/offine"); document.addEventListener("offline", onOffline, false); document.addEventListener("online", onOnline, false); + window.addEventListener("resize", checkOrientation, false); + $rootScope.isDownloading = false; @@ -1998,6 +1999,8 @@ angular.module('zmApp', [ NVR.log ("-->Clearing online/offine"); document.removeEventListener("offline", onOffline, false); document.removeEventListener("online", onOnline, false); + window.removeEventListener("resize", checkOrientation, false); + NVR.setBackground(true); NVR.setJustResumed(false); -- cgit v1.2.3 From 05d6ccd17d8f5d592104bd7eff5661ab78dea110 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Sun, 4 Oct 2020 19:14:42 -0400 Subject: switch to browser fetch to download media for desktops, use timestamped filenames - should also resolve #989 --- www/js/EventCtrl.js | 54 ++++++++++++++----- www/js/EventModalCtrl.js | 106 ++++++++++++++++++++------------------ www/js/MonitorModalCtrl.js | 52 ++++++++++++++----- www/lang/locale-en.json | 2 +- www/templates/events-modal.html | 6 +-- www/templates/monitors-modal.html | 2 +- 6 files changed, 144 insertions(+), 78 deletions(-) diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js index a3f86425..3d4146af 100644 --- a/www/js/EventCtrl.js +++ b/www/js/EventCtrl.js @@ -723,13 +723,15 @@ angular.module('zmApp.controllers') } - function saveNow(imgsrc) { + function saveNow(imgsrc,eid) { + + NVR.debug ("saveNow in EventCtrl called with "+imgsrc+" and "+ eid); + var fname; + //var timestamp=moment().format('-MMM-Do-YY-HH-mm-ss'); - var fname = "zmninja.jpg"; var fn = "cordova.plugins.photoLibrary.saveImage"; var loginData = NVR.getLogin(); - - + fname = "zmNinja-eid-"+eid+".jpg"; $ionicLoading.show({ template: $translate.instant('kSavingSnapshot') + "...", noBackdrop: true, @@ -770,7 +772,7 @@ angular.module('zmApp.controllers') function (entry) { NVR.debug("local download complete: " + entry.toURL()); NVR.debug("Now trying to move it to album"); - var pluginName = (fname == "zmNinja.mp4" ? "saveVideo" : "saveImage"); + var pluginName = ((fname.indexOf('.mp4') != -1) ? "saveVideo" : "saveImage"); cordova.plugins.photoLibrary[pluginName](entry.toURL(), album, @@ -824,12 +826,39 @@ angular.module('zmApp.controllers') //desktop $ionicLoading.hide(); + $ionicLoading.show({ + template: $translate.instant('kPleaseWait') + "...", + noBackdrop: true + }); - $rootScope.zmPopup = SecuredPopups.show('alert', { - title: $translate.instant('kNote'), - template: $translate.instant('kDownloadVideoImage') + "

" + " " + $translate.instant('kDownload') + "
", - okText: $translate.instant('kDismiss'), - okType: 'button-stable' + fname = "zmninja-eid-"+eid+".jpg"; + fetch(url).then(function (resp) { + return resp.blob(); + }).then(function (blob) { + $ionicLoading.hide(); + var url = window.URL.createObjectURL(blob); + $rootScope.zmPopup = SecuredPopups.show('alert', { + title: $translate.instant('kNote'), + template: $translate.instant('kDownloadVideoImage') + "

" + " " + $translate.instant('kDownload') + "
", + okText: $translate.instant('kDismiss'), + okType: 'button-stable' + }); + + $rootScope.zmPopup.then (function (res) { + //console.log ('DONE RELEASE'); + NVR.debug ('download successful'); + window.URL.revokeObjectURL(url); + $ionicLoading.hide(); + + + }); + }).catch(function () { + $ionicLoading.hide(); + $ionicLoading.show({ + template: $translate.instant('kErrorSave'), + noBackdrop: true, + duration: 2000 + }); }); @@ -1080,7 +1109,7 @@ angular.module('zmApp.controllers') }; $scope.showImage = function (p, f, fid, e, imode, id, parray, ndx) { - var img; + var eid = e; // console.log ("P="+p+" F="+f+" E="+e+" imode="+imode+" id="+id+" parray="+JSON.stringify(parray)+" ndx="+ndx); @@ -1140,7 +1169,7 @@ angular.module('zmApp.controllers') type: 'button-assertive button-small ion-camera', onTap: function (e) { e.preventDefault(); - saveNow($scope.imgsrc); + saveNow($scope.imgsrc,eid); } }, @@ -3193,6 +3222,7 @@ angular.module('zmApp.controllers') if (now - loadMoreTime > 1500) { NVR.debug("$scope.loadMore > loadMore() ... delta: " + (now - loadMoreTime)); loadMore(); + loadMoreTime = Date.now(); $scope.$broadcast('scroll.infiniteScrollComplete'); } else { diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js index a6dd87e8..20d24531 100644 --- a/www/js/EventModalCtrl.js +++ b/www/js/EventModalCtrl.js @@ -544,10 +544,10 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro }; - $scope.saveEventVideoToPhoneWithPerms = function () { + $scope.saveEventVideoWithPerms = function (eid) { if ($rootScope.platformOS != 'android') { - saveNow(); + saveEvent("video", eid); return; } @@ -563,7 +563,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro } function succ(s) { - saveNow(); + saveEvent("video", eid); } function err(e) { @@ -577,10 +577,10 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro // Saves a snapshot of the monitor image to phone storage //----------------------------------------------------------------------- - $scope.saveEventImageToPhoneWithPerms = function (onlyAlarms) { + $scope.saveEventImageWithPerms = function (onlyAlarms,eid) { if ($rootScope.platformOS != 'android') { - processSaveEventImageToPhone(onlyAlarms); + saveEventImage(onlyAlarms, eid); return; } @@ -597,7 +597,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro } function succ(s) { - processSaveEventImageToPhone(onlyAlarms); + saveEventImage(onlyAlarms, eid); } function err(e) { @@ -605,32 +605,18 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro } }; - function processSaveEventImageToPhone(onlyAlarms) { - - + function saveEventImage(onlyAlarms, eid) { if ($scope.isSnapShot()) { - - $scope.selectEventUrl = $scope.constructStream(); NVR.debug("just saving current snapshot:" + $scope.selectEventUrl); - saveNow("image"); - return; - - } - - if ($scope.loginData.useNphZmsForEvents) { - NVR.log("Use ZMS stream to save to phone"); - - saveEventImageToPhoneZms(onlyAlarms); - + saveEvent("image", eid); } else { - saveEventImageToPhone(onlyAlarms); + selectFrameAndSave(onlyAlarms,eid); } - } - function saveEventImageToPhoneZms(onlyAlarms) { + function selectFrameAndSave(onlyAlarms, eid) { // 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 @@ -645,7 +631,7 @@ 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; @@ -735,7 +721,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro //console.log ("I PUSHED:" + p+" BUT SLIDE LENGHT BEFORE DISPLAY:"+$scope.slides.length); // console.log ("STEP 2 : calling Save Event To Phone"); $ionicLoading.hide(); - saveEventImageToPhone(onlyAlarms); + saveEventImageToPhone(onlyAlarms, eid); }, function (err) { @@ -760,8 +746,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro } // don't think this is used anymore - function saveEventImageToPhone(onlyAlarms) { - // console.log ("________________UNUSED?_______________________"); + function saveEventImageToPhone(onlyAlarms, eid) { var curState = carouselUtils.getStop(); carouselUtils.setStop(true); var url; @@ -772,7 +757,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro - NVR.debug("ModalCtrl: SaveEventImageToPhone called"); + NVR.debug("EventModalCtrl: SaveEventImageToPhone called"); var canvas, context, imageDataUrl, imageData; var loginData = NVR.getLogin(); @@ -780,12 +765,6 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro if (onlyAlarms || ($scope.defaultVideo !== undefined && $scope.defaultVideo != '')) $scope.mycarousel.index = 1; - - - - 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 + $rootScope.authSession; @@ -908,7 +887,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro text: '', type: 'button-positive button-small ion-checkmark-round', onTap: function (e) { - saveNow("image"); + saveEvent("image",eid); } } @@ -919,9 +898,10 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro } - function saveNow(t) { + function saveEvent(t,eid) { - var fname = "zmninja.jpg"; + NVR.debug ("saveEvent in EventModalCtrl called with "+t+" and "+ eid); + var fname; var fn = "cordova.plugins.photoLibrary.saveImage"; var loginData = NVR.getLogin(); @@ -933,17 +913,17 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '' && t != "image") { $scope.selectEventUrl = $scope.video_url; - fname = "zmNinja.mp4"; + fname = "zmNinja-eid-"+eid+".mp4"; fn = "cordova.plugins.photoLibrary.saveVideo"; - - + } else { + fname = "zmNinja-eid-"+eid+".jpg"; } NVR.debug("-->Going to try and download " + $scope.selectEventUrl); var url = $scope.selectEventUrl; - NVR.log(">>saveNow: File path to grab is " + url); + NVR.log(">>saveEvent: File path to grab is " + url); if ($rootScope.platformOS != 'desktop') { @@ -977,7 +957,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro function (entry) { NVR.debug("local download complete: " + entry.toURL()); NVR.debug("Now trying to move it to album"); - var pluginName = (fname == "zmNinja.mp4" ? "saveVideo" : "saveImage"); + var pluginName = ((fname.indexOf('.mp4') != -1) ? "saveVideo" : "saveImage"); cordova.plugins.photoLibrary[pluginName](entry.toURL(), album, @@ -1031,14 +1011,42 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro //desktop $ionicLoading.hide(); - - $rootScope.zmPopup = SecuredPopups.show('alert', { - title: $translate.instant('kNote'), - template: $translate.instant('kDownloadVideoImage') + "

" + " " + $translate.instant('kDownload') + "
", - okText: $translate.instant('kDismiss'), - okType: 'button-stable' + $ionicLoading.show({ + template: $translate.instant('kPleaseWait') + "...", + noBackdrop: true }); + fetch(url).then(function (resp) { + return resp.blob(); + }).then(function (blob) { + $ionicLoading.hide(); + + // console.log (blob); + var url = window.URL.createObjectURL(blob); + $rootScope.zmPopup = SecuredPopups.show('alert', { + title: $translate.instant('kNote'), + template: $translate.instant('kDownloadVideoImage') + "

" + " " + $translate.instant('kDownload') + "
", + okText: $translate.instant('kDismiss'), + okType: 'button-stable' + }); + + $rootScope.zmPopup.then (function (res) { + //console.log ('DONE RELEASE'); + NVR.debug ('download successful'); + window.URL.revokeObjectURL(url); + $ionicLoading.hide(); + + + }); + }).catch(function () { + $ionicLoading.hide(); + $ionicLoading.show({ + template: $translate.instant('kErrorSave'), + noBackdrop: true, + duration: 2000 + }); + }); + } diff --git a/www/js/MonitorModalCtrl.js b/www/js/MonitorModalCtrl.js index 4b58de4f..b9812a67 100644 --- a/www/js/MonitorModalCtrl.js +++ b/www/js/MonitorModalCtrl.js @@ -1181,9 +1181,9 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ // Saves a snapshot of the monitor image to phone storage //----------------------------------------------------------------------- - $scope.saveImageToPhoneWithPerms = function (mid) { + $scope.saveLiveImageToPhoneWithPerms = function (mid) { if ($rootScope.platformOS != 'android') { - saveImageToPhone(mid); + saveLiveImageToPhone(mid); return; } @@ -1199,7 +1199,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ } function succ(s) { - saveImageToPhone(mid); + saveLiveImageToPhone(mid); } function err(e) { @@ -1207,14 +1207,14 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ } }; - function saveImageToPhone(mid) { + function saveLiveImageToPhone(mid) { $ionicLoading.show({ template: $translate.instant('kSavingSnapshot') + '...', noBackdrop: true, duration: zm.httpTimeout }); - NVR.debug("ModalCtrl: SaveImageToPhone called"); + NVR.debug("ModalCtrl: SaveLiveImageToPhone called"); var canvas, context, imageDataUrl, imageData; var loginData = NVR.getLogin(); var url = loginData.streamingurl + @@ -1235,8 +1235,9 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ var fileTransfer = new FileTransfer(); var urle = encodeURI(url); - var fname = "zmninja.jpg"; - + var timestamp=moment().format('MMM-Do-YY-HH-mm-ss'); + var fname = "zmninja-mid-"+mid+'-'+timestamp+".jpg"; + fileTransfer.download(urle, cordova.file.dataDirectory + fname, function (entry) { NVR.debug("local download complete: " + entry.toURL()); @@ -1289,13 +1290,40 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ $ionicLoading.hide(); //SaveSuccess(); - $rootScope.zmPopup = SecuredPopups.show('alert', { - title: $translate.instant('kNote'), - template: $translate.instant('kDownloadVideoImage') + "

" + " " + $translate.instant('kDownload') + "
", - okText: $translate.instant('kDismiss'), - okType: 'button-stable' + $ionicLoading.show({ + template: $translate.instant('kPleaseWait') + "...", + noBackdrop: true }); + var timestamp=moment().format('MMM-Do-YY-HH-mm-ss'); + var fname = "zmninja-mid-"+mid+'-'+timestamp+".jpg"; + fetch(url).then(function (resp) { + return resp.blob(); + }).then(function (blob) { + console.log (blob); + var url = window.URL.createObjectURL(blob); + $rootScope.zmPopup = SecuredPopups.show('alert', { + title: $translate.instant('kNote'), + template: $translate.instant('kDownloadVideoImage') + "

" + " " + $translate.instant('kDownload') + "
", + okText: $translate.instant('kDismiss'), + okType: 'button-stable' + }); + + $rootScope.zmPopup.then (function (res) { + //console.log ('DONE RELEASE'); + NVR.debug ('download successful'); + $ionicLoading.hide(); + window.URL.revokeObjectURL(url); + }); + }).catch(function () { + $ionicLoading.hide(); + $ionicLoading.show({ + template: $translate.instant('kErrorSave'), + noBackdrop: true, + duration: 2000 + }); + }); + } } diff --git a/www/lang/locale-en.json b/www/lang/locale-en.json index e23d44a8..6dcf1e53 100644 --- a/www/lang/locale-en.json +++ b/www/lang/locale-en.json @@ -80,7 +80,7 @@ "kDismiss" :"Dismiss", "kDone" :"done", "kDownload" :"Download", - "kDownloadVideoImage" :"Tap the button below to download. If you are downloading a video, there is no progress indication, so please monitor file size", + "kDownloadVideoImage" :"Tap button to save media", "kEmailNotConfigured" :"Email not configured", "kEnable24hr" :"enable 24hr time format", "kEnableDebug" :"Enable debug logs", diff --git a/www/templates/events-modal.html b/www/templates/events-modal.html index 24df4b1e..de0f74c9 100644 --- a/www/templates/events-modal.html +++ b/www/templates/events-modal.html @@ -201,7 +201,7 @@ -{{loginData.gapless? ('kOn' | translate): ('kOff' | translate)}}
  • - +
  • @@ -209,14 +209,14 @@
  • - +
  • - +
  • diff --git a/www/templates/monitors-modal.html b/www/templates/monitors-modal.html index 84c9049a..0da43cfd 100644 --- a/www/templates/monitors-modal.html +++ b/www/templates/monitors-modal.html @@ -98,7 +98,7 @@
  • - +
  • -- cgit v1.2.3 From b07887e3470f1642b9be18f6d96a0625bd338938 Mon Sep 17 00:00:00 2001 From: maymaymay Date: Mon, 5 Oct 2020 07:37:34 +0200 Subject: =?UTF-8?q?switch=20to=20browser=20fetch=20to=20download=20media?= =?UTF-8?q?=20for=20desktops,=20use=20timestamp=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- www/lang/locale-pl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/lang/locale-pl.json b/www/lang/locale-pl.json index e0c95ea9..65627263 100644 --- a/www/lang/locale-pl.json +++ b/www/lang/locale-pl.json @@ -80,7 +80,7 @@ "kDismiss" :"Anuluj", "kDone" :"gotowe", "kDownload" :"Pobierz", - "kDownloadVideoImage" :"Aby pobrać wciśnij poniższy przycisk. Jeśli pobierasz Video, nie ma paska postępu, monitoruj więc wielkość pliku.", + "kDownloadVideoImage" :"Wciśnij przycisk aby pobrać nagranie.", "kEmailNotConfigured" :"Email nie został skonfigurowany", "kEnable24hr" :"Włącz format czasu 24 godz.", "kEnableDebug" :"Włącz dzienniki debugowania", -- cgit v1.2.3 From e41f7e670be99ba0dc101aac3cfba2a05a9a81d2 Mon Sep 17 00:00:00 2001 From: florie1706 <26010442+florie1706@users.noreply.github.com> Date: Mon, 5 Oct 2020 18:54:49 +0200 Subject: =?UTF-8?q?switch=20to=20browser=20fetch=20to=20download=20media?= =?UTF-8?q?=20for=20desktops,=20use=20timestamp=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- www/lang/locale-de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/lang/locale-de.json b/www/lang/locale-de.json index a528ea21..6ca53c3b 100644 --- a/www/lang/locale-de.json +++ b/www/lang/locale-de.json @@ -80,7 +80,7 @@ "kDismiss" :"verwerfen", "kDone" :"Erledigt", "kDownload" :"Herunterladen", - "kDownloadVideoImage" :"Drücke den Knopf um das Video herunterzuladen. Bitte achte auf die Dateigröße, da es kein Fortschrittsbalken während des Downloads gibt.", + "kDownloadVideoImage" :"Drücke den Knopf um das Video herunterzuladen.", "kEmailNotConfigured" :"Email nicht eingerichtet", "kEnable24hr" :"24-Stunden Zeitformat aktivieren", "kEnableDebug" :"Aktiviere Debug Logs", -- cgit v1.2.3