From 822a4fba30022e1448249a5a6178111fefeea939 Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Tue, 22 Nov 2022 10:45:42 -0800 Subject: [PATCH 01/18] livephoto: remove contain --- src/App.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/src/App.vue b/src/App.vue index d6682632..5cf2a77e 100644 --- a/src/App.vue +++ b/src/App.vue @@ -369,7 +369,6 @@ aside.app-sidebar { .memories-livephoto { position: relative; overflow: hidden; - contain: strict; img, video { From 83484ba52a7b69eb8ecec760e854e905f0f652fb Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Tue, 22 Nov 2022 11:57:42 -0800 Subject: [PATCH 02/18] Disable slide transition --- src/components/Viewer.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/Viewer.vue b/src/components/Viewer.vue index 038038a3..4e386d86 100644 --- a/src/components/Viewer.vue +++ b/src/components/Viewer.vue @@ -914,7 +914,9 @@ export default class Viewer extends Mixins(GlobalMixin) { .fullyOpened :deep .pswp__container { @media (min-width: 1024px) { - transition: transform var(--pswp-transition-duration) ease !important; + // Animate transitions + // Disabled because this makes you sick if moving fast + // transition: transform var(--pswp-transition-duration) ease !important; } } From 7860406c69f9002704447e62c56a7a3275347c63 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Wed, 23 Nov 2022 03:24:05 +0000 Subject: [PATCH 03/18] [tx-robot] updated from transifex Signed-off-by: Nextcloud bot --- l10n/af.js | 3 + l10n/af.json | 3 + l10n/an.js | 1 + l10n/an.json | 1 + l10n/ar.js | 3 + l10n/ar.json | 3 + l10n/ast.js | 3 + l10n/ast.json | 3 + l10n/az.js | 3 + l10n/az.json | 3 + l10n/bg.js | 3 + l10n/bg.json | 3 + l10n/bn_BD.js | 3 + l10n/bn_BD.json | 3 + l10n/br.js | 2 + l10n/br.json | 2 + l10n/bs.js | 3 + l10n/bs.json | 3 + l10n/ca.js | 3 + l10n/ca.json | 3 + l10n/cs.js | 1 + l10n/cs.json | 1 + l10n/cy_GB.js | 1 + l10n/cy_GB.json | 1 + l10n/da.js | 1 + l10n/da.json | 1 + l10n/de.js | 3 +- l10n/de.json | 3 +- l10n/de_DE.js | 1 + l10n/de_DE.json | 1 + l10n/el.js | 15 +++- l10n/el.json | 15 +++- l10n/en_GB.js | 201 ++++++++++++++++++++++++++++++++++++++++++++++- l10n/en_GB.json | 201 ++++++++++++++++++++++++++++++++++++++++++++++- l10n/eo.js | 1 + l10n/eo.json | 1 + l10n/es.js | 1 + l10n/es.json | 1 + l10n/es_419.js | 1 + l10n/es_419.json | 1 + l10n/es_AR.js | 1 + l10n/es_AR.json | 1 + l10n/es_CL.js | 1 + l10n/es_CL.json | 1 + l10n/es_CO.js | 1 + l10n/es_CO.json | 1 + l10n/hu.js | 2 +- l10n/hu.json | 2 +- l10n/sv.js | 2 + l10n/sv.json | 2 + 50 files changed, 512 insertions(+), 8 deletions(-) diff --git a/l10n/af.js b/l10n/af.js index 1a1bb496..3ac88ec3 100644 --- a/l10n/af.js +++ b/l10n/af.js @@ -17,6 +17,9 @@ OC.L10N.register( "Favorite" : "Gunsteling", "View in folder" : "Vertoon in gids", "Share" : "Deel", + "Close" : "Sluit", + "Previous" : "Vorige", + "Next" : "Volgende", "Public link" : "Openbare skakel", "Back" : "Terug", "Save" : "Bewaar", diff --git a/l10n/af.json b/l10n/af.json index 9901a9c3..2c08f729 100644 --- a/l10n/af.json +++ b/l10n/af.json @@ -15,6 +15,9 @@ "Favorite" : "Gunsteling", "View in folder" : "Vertoon in gids", "Share" : "Deel", + "Close" : "Sluit", + "Previous" : "Vorige", + "Next" : "Volgende", "Public link" : "Openbare skakel", "Back" : "Terug", "Save" : "Bewaar", diff --git a/l10n/an.js b/l10n/an.js index 4002b983..4db1a681 100644 --- a/l10n/an.js +++ b/l10n/an.js @@ -9,6 +9,7 @@ OC.L10N.register( "Download" : "Escargar", "Favorite" : "Favorito", "Share" : "Compartir", + "Close" : "Zarrar", "Back" : "Ta zaga", "Name" : "Nombre", "Continue" : "Continar", diff --git a/l10n/an.json b/l10n/an.json index 05dfad44..c8fc68ff 100644 --- a/l10n/an.json +++ b/l10n/an.json @@ -7,6 +7,7 @@ "Download" : "Escargar", "Favorite" : "Favorito", "Share" : "Compartir", + "Close" : "Zarrar", "Back" : "Ta zaga", "Name" : "Nombre", "Continue" : "Continar", diff --git a/l10n/ar.js b/l10n/ar.js index 1aaf5102..9619d1db 100644 --- a/l10n/ar.js +++ b/l10n/ar.js @@ -17,6 +17,9 @@ OC.L10N.register( "Favorite" : "المفضلة", "View in folder" : "اعرض في المجلد", "Share" : "مشاركة", + "Close" : "إغلاق", + "Previous" : "السابق", + "Next" : "التالي", "Copy public link" : "نسخ الرابط العام", "Back" : "العودة", "Save" : "Save", diff --git a/l10n/ar.json b/l10n/ar.json index c637ca8a..416ba736 100644 --- a/l10n/ar.json +++ b/l10n/ar.json @@ -15,6 +15,9 @@ "Favorite" : "المفضلة", "View in folder" : "اعرض في المجلد", "Share" : "مشاركة", + "Close" : "إغلاق", + "Previous" : "السابق", + "Next" : "التالي", "Copy public link" : "نسخ الرابط العام", "Back" : "العودة", "Save" : "Save", diff --git a/l10n/ast.js b/l10n/ast.js index 109535fc..2dd6f8df 100644 --- a/l10n/ast.js +++ b/l10n/ast.js @@ -16,6 +16,9 @@ OC.L10N.register( "Favorite" : "Marcar como favoritu", "View in folder" : "Ver na carpeta", "Share" : "Share", + "Close" : "Zarrar", + "Previous" : "Anterior", + "Next" : "Siguiente", "Back" : "Atrás", "Save" : "Guardar", "Month" : "Mes", diff --git a/l10n/ast.json b/l10n/ast.json index f3aa9e19..2ddc6f13 100644 --- a/l10n/ast.json +++ b/l10n/ast.json @@ -14,6 +14,9 @@ "Favorite" : "Marcar como favoritu", "View in folder" : "Ver na carpeta", "Share" : "Share", + "Close" : "Zarrar", + "Previous" : "Anterior", + "Next" : "Siguiente", "Back" : "Atrás", "Save" : "Guardar", "Month" : "Mes", diff --git a/l10n/az.js b/l10n/az.js index bb1e996f..52cb51ef 100644 --- a/l10n/az.js +++ b/l10n/az.js @@ -12,6 +12,9 @@ OC.L10N.register( "Download" : "Yüklə", "Favorite" : "İstəkli", "Share" : "Paylaş", + "Close" : "Bağla", + "Previous" : "Əvvələ", + "Next" : "Növbəti", "Save" : "Saxla", "Month" : "Ay", "Day" : "Gün", diff --git a/l10n/az.json b/l10n/az.json index e1ff1f80..5c922c06 100644 --- a/l10n/az.json +++ b/l10n/az.json @@ -10,6 +10,9 @@ "Download" : "Yüklə", "Favorite" : "İstəkli", "Share" : "Paylaş", + "Close" : "Bağla", + "Previous" : "Əvvələ", + "Next" : "Növbəti", "Save" : "Saxla", "Month" : "Ay", "Day" : "Gün", diff --git a/l10n/bg.js b/l10n/bg.js index f84ab3c4..55f95693 100644 --- a/l10n/bg.js +++ b/l10n/bg.js @@ -56,6 +56,9 @@ OC.L10N.register( "Failed to load some photos" : "Неуспешно зареждане на някои снимки", "Share" : "Споделяне", "Sidebar" : "Странична лента", + "Close" : "Затваряне", + "Previous" : "Предишно", + "Next" : "Следващо", "Video sharing not supported yet" : "Видео споделянето все още не се поддържа", "Cannot share this type of data" : "Този тип данни не може да се споделят", "Processing … {n}/{m}" : "Обработва се ... {n}/{m}", diff --git a/l10n/bg.json b/l10n/bg.json index faf5df29..469ba6c5 100644 --- a/l10n/bg.json +++ b/l10n/bg.json @@ -54,6 +54,9 @@ "Failed to load some photos" : "Неуспешно зареждане на някои снимки", "Share" : "Споделяне", "Sidebar" : "Странична лента", + "Close" : "Затваряне", + "Previous" : "Предишно", + "Next" : "Следващо", "Video sharing not supported yet" : "Видео споделянето все още не се поддържа", "Cannot share this type of data" : "Този тип данни не може да се споделят", "Processing … {n}/{m}" : "Обработва се ... {n}/{m}", diff --git a/l10n/bn_BD.js b/l10n/bn_BD.js index ef124955..ff86700d 100644 --- a/l10n/bn_BD.js +++ b/l10n/bn_BD.js @@ -11,6 +11,9 @@ OC.L10N.register( "Download" : "ডাউনলোড", "Favorite" : "প্রিয়জন", "Share" : "ভাগাভাগি কর", + "Close" : "বন্ধ", + "Previous" : "পূর্ববর্তী", + "Next" : "পরবর্তী", "Back" : "পেছনে যাও", "Save" : "সংরক্ষণ", "Month" : "মাস", diff --git a/l10n/bn_BD.json b/l10n/bn_BD.json index 31348c2f..f6fba6bb 100644 --- a/l10n/bn_BD.json +++ b/l10n/bn_BD.json @@ -9,6 +9,9 @@ "Download" : "ডাউনলোড", "Favorite" : "প্রিয়জন", "Share" : "ভাগাভাগি কর", + "Close" : "বন্ধ", + "Previous" : "পূর্ববর্তী", + "Next" : "পরবর্তী", "Back" : "পেছনে যাও", "Save" : "সংরক্ষণ", "Month" : "মাস", diff --git a/l10n/br.js b/l10n/br.js index 2e65aef0..a7c50b1d 100644 --- a/l10n/br.js +++ b/l10n/br.js @@ -14,6 +14,8 @@ OC.L10N.register( "Favorite" : "Pennrollañ", "View in folder" : "Diskwel en teuliad", "Share" : "Rannan", + "Close" : "Seriñ", + "Next" : "Da heul", "Copy public link" : "Eilañ al liamm foran", "Public link" : "Liamm publik", "Back" : "Distro", diff --git a/l10n/br.json b/l10n/br.json index 838c7f72..933e9197 100644 --- a/l10n/br.json +++ b/l10n/br.json @@ -12,6 +12,8 @@ "Favorite" : "Pennrollañ", "View in folder" : "Diskwel en teuliad", "Share" : "Rannan", + "Close" : "Seriñ", + "Next" : "Da heul", "Copy public link" : "Eilañ al liamm foran", "Public link" : "Liamm publik", "Back" : "Distro", diff --git a/l10n/bs.js b/l10n/bs.js index afbb0d06..0b46c311 100644 --- a/l10n/bs.js +++ b/l10n/bs.js @@ -9,6 +9,9 @@ OC.L10N.register( "Download" : "Preuzmi", "Favorite" : "Favorit", "Share" : "Podjeli", + "Close" : "Zatvori", + "Previous" : "Prethodno", + "Next" : "Sljedeće", "Save" : "Spremi", "Month" : "Mjesec", "Day" : "Dan", diff --git a/l10n/bs.json b/l10n/bs.json index 28d02b6d..06c3b72f 100644 --- a/l10n/bs.json +++ b/l10n/bs.json @@ -7,6 +7,9 @@ "Download" : "Preuzmi", "Favorite" : "Favorit", "Share" : "Podjeli", + "Close" : "Zatvori", + "Previous" : "Prethodno", + "Next" : "Sljedeće", "Save" : "Spremi", "Month" : "Mjesec", "Day" : "Dan", diff --git a/l10n/ca.js b/l10n/ca.js index 4ab2afe6..59acc828 100644 --- a/l10n/ca.js +++ b/l10n/ca.js @@ -24,6 +24,9 @@ OC.L10N.register( "Unarchive" : "Desbloquejar", "View in folder" : "Visualitza-ho a la carpeta", "Share" : "Compartir", + "Close" : "Tanca", + "Previous" : "Anterior", + "Next" : "Següent", "Copy public link" : "Copia l'enllaç públic", "Public link" : "Enllaç públic", "Back" : "Torna", diff --git a/l10n/ca.json b/l10n/ca.json index 2e50b2b7..3c92f8d9 100644 --- a/l10n/ca.json +++ b/l10n/ca.json @@ -22,6 +22,9 @@ "Unarchive" : "Desbloquejar", "View in folder" : "Visualitza-ho a la carpeta", "Share" : "Compartir", + "Close" : "Tanca", + "Previous" : "Anterior", + "Next" : "Següent", "Copy public link" : "Copia l'enllaç públic", "Public link" : "Enllaç públic", "Back" : "Torna", diff --git a/l10n/cs.js b/l10n/cs.js index ffeba3dc..ce74fabc 100644 --- a/l10n/cs.js +++ b/l10n/cs.js @@ -60,6 +60,7 @@ OC.L10N.register( "Failed to load some photos" : "Některé fotky se nepodařilo načíst", "Share" : "Sdílet", "Sidebar" : "Postranní panel", + "Close" : "Zavřít", "Previous" : "Předchozí", "Next" : "Další", "Video sharing not supported yet" : "Sdílení videí zatím není podporováno", diff --git a/l10n/cs.json b/l10n/cs.json index 3cb49dfc..0df56739 100644 --- a/l10n/cs.json +++ b/l10n/cs.json @@ -58,6 +58,7 @@ "Failed to load some photos" : "Některé fotky se nepodařilo načíst", "Share" : "Sdílet", "Sidebar" : "Postranní panel", + "Close" : "Zavřít", "Previous" : "Předchozí", "Next" : "Další", "Video sharing not supported yet" : "Sdílení videí zatím není podporováno", diff --git a/l10n/cy_GB.js b/l10n/cy_GB.js index b1da0ba9..11ab9ce6 100644 --- a/l10n/cy_GB.js +++ b/l10n/cy_GB.js @@ -13,6 +13,7 @@ OC.L10N.register( "Download" : "Llwytho i lawr", "Favorite" : "Ffefryn", "Share" : "Rhannu", + "Close" : "Cau", "Previous" : "Blaenorol", "Next" : "Nesaf", "Copy public link" : "Copïo dolen gyhoeddus", diff --git a/l10n/cy_GB.json b/l10n/cy_GB.json index 9de8f7bf..1b762fec 100644 --- a/l10n/cy_GB.json +++ b/l10n/cy_GB.json @@ -11,6 +11,7 @@ "Download" : "Llwytho i lawr", "Favorite" : "Ffefryn", "Share" : "Rhannu", + "Close" : "Cau", "Previous" : "Blaenorol", "Next" : "Nesaf", "Copy public link" : "Copïo dolen gyhoeddus", diff --git a/l10n/da.js b/l10n/da.js index 24f9bd21..ac27f683 100644 --- a/l10n/da.js +++ b/l10n/da.js @@ -29,6 +29,7 @@ OC.L10N.register( "Show hidden folders" : "Vis skjulte mapper", "Failed to load some photos" : "Kunne ikke indlæse nogle billeder", "Share" : "Del", + "Close" : "Luk", "Previous" : "Tidligere", "Next" : "Næste", "Copy public link" : "Kopier offentligt link", diff --git a/l10n/da.json b/l10n/da.json index c8606945..5fb053ba 100644 --- a/l10n/da.json +++ b/l10n/da.json @@ -27,6 +27,7 @@ "Show hidden folders" : "Vis skjulte mapper", "Failed to load some photos" : "Kunne ikke indlæse nogle billeder", "Share" : "Del", + "Close" : "Luk", "Previous" : "Tidligere", "Next" : "Næste", "Copy public link" : "Kopier offentligt link", diff --git a/l10n/de.js b/l10n/de.js index 0070a06d..5e63dbd0 100644 --- a/l10n/de.js +++ b/l10n/de.js @@ -60,7 +60,8 @@ OC.L10N.register( "Failed to load some photos" : "Laden einiger Fotos fehlgeschlagen", "Share" : "Teilen", "Sidebar" : "Seitenleiste", - "Previous" : "Benötigt keine Übersetzung. Hier wird nur die formelle Übersetzung verwendet (de_DE).", + "Close" : "Schließen", + "Previous" : "Vorherige", "Next" : "Nächste", "Video sharing not supported yet" : "Teilen von Videos wird bislang nicht unterstützt", "Cannot share this type of data" : "Diese Art von Daten kann nicht geteilt werden", diff --git a/l10n/de.json b/l10n/de.json index 63761ca5..1255851e 100644 --- a/l10n/de.json +++ b/l10n/de.json @@ -58,7 +58,8 @@ "Failed to load some photos" : "Laden einiger Fotos fehlgeschlagen", "Share" : "Teilen", "Sidebar" : "Seitenleiste", - "Previous" : "Benötigt keine Übersetzung. Hier wird nur die formelle Übersetzung verwendet (de_DE).", + "Close" : "Schließen", + "Previous" : "Vorherige", "Next" : "Nächste", "Video sharing not supported yet" : "Teilen von Videos wird bislang nicht unterstützt", "Cannot share this type of data" : "Diese Art von Daten kann nicht geteilt werden", diff --git a/l10n/de_DE.js b/l10n/de_DE.js index baf5a6bc..3f21dd60 100644 --- a/l10n/de_DE.js +++ b/l10n/de_DE.js @@ -60,6 +60,7 @@ OC.L10N.register( "Failed to load some photos" : "Laden einiger Fotos fehlgeschlagen", "Share" : "Teilen", "Sidebar" : "Seitenleiste", + "Close" : "Schließen", "Previous" : "Zurück", "Next" : "Nächste", "Video sharing not supported yet" : "Teilen von Videos wird bislang nicht unterstützt", diff --git a/l10n/de_DE.json b/l10n/de_DE.json index 656d20f6..dd5a2c9c 100644 --- a/l10n/de_DE.json +++ b/l10n/de_DE.json @@ -58,6 +58,7 @@ "Failed to load some photos" : "Laden einiger Fotos fehlgeschlagen", "Share" : "Teilen", "Sidebar" : "Seitenleiste", + "Close" : "Schließen", "Previous" : "Zurück", "Next" : "Nächste", "Video sharing not supported yet" : "Teilen von Videos wird bislang nicht unterstützt", diff --git a/l10n/el.js b/l10n/el.js index e1706236..02a94378 100644 --- a/l10n/el.js +++ b/l10n/el.js @@ -21,13 +21,21 @@ OC.L10N.register( "Favorite" : "Αγαπημένο", "Unarchive" : "Αναίρεση αρχειοθέτησης", "View in folder" : "Προβολή στον φάκελο", + "Add to album" : "Προσθήκη στο άλμπουμ", "Share" : "Διαμοιρασμός", + "Close" : "Κλείσιμο", "Previous" : "Προηγούμενο", "Next" : "Επόμενο", "Copy public link" : "Αντιγραφή δημόσιου συνδέσμου", "Public link" : "Δημόσιος σύνδεσμος", + "New album" : "Νέο άλμπουμ", + "Create new album" : "Δημιουργία νέου άλμπουμ. ", + "Name of the album" : "Όνομα του άλμπουμ", + "Location of the album" : "Τοποθεσία του άλμπουμ", "Back" : "Πίσω", "Save" : "Αποθήκευση", + "Create album" : "Δημιουργία άλμπουμ", + "Create a new album." : "Δημιουργήστε ένα νέο άλμπουμ.", "Year" : "Έτος", "Month" : "Μήνας", "Day" : "Ημέρα", @@ -35,9 +43,11 @@ OC.L10N.register( "Hour" : "Ώρα", "Minute" : "Λεπτά", "Name" : "Όνομα", + "Rename person" : "Μετονομασία ατόμου", "Update" : "Ενημέρωση", "Refresh" : "Ανανέωση", "Remove" : "Αφαίρεση", + "Delete album" : "Διαγραφή άλμπουμ", "Share folder" : "Διαμοιρασμός φακέλου", "Reset" : "Επαναφορά", "Continue" : "Συνεχίστε", @@ -54,6 +64,9 @@ OC.L10N.register( "Extension" : "Επέκταση", "Name is required." : "Απαιτείται όνομα.", "Quality" : "Ποιότητα", - "Auto" : "Αυτόματα" + "Auto" : "Αυτόματα", + "Failed to create {albumName}." : "Απέτυχε η δημιουργία {albumName}", + "Failed to rename {currentAlbumName} to {newAlbumName}." : "Απέτυχε η μετονομασία του {currentAlbumName} σε {newAlbumName}.", + "Failed to delete {fileName}." : "Απέτυχε η διαγραφή {fileName}." }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/el.json b/l10n/el.json index bf693e8b..9509266a 100644 --- a/l10n/el.json +++ b/l10n/el.json @@ -19,13 +19,21 @@ "Favorite" : "Αγαπημένο", "Unarchive" : "Αναίρεση αρχειοθέτησης", "View in folder" : "Προβολή στον φάκελο", + "Add to album" : "Προσθήκη στο άλμπουμ", "Share" : "Διαμοιρασμός", + "Close" : "Κλείσιμο", "Previous" : "Προηγούμενο", "Next" : "Επόμενο", "Copy public link" : "Αντιγραφή δημόσιου συνδέσμου", "Public link" : "Δημόσιος σύνδεσμος", + "New album" : "Νέο άλμπουμ", + "Create new album" : "Δημιουργία νέου άλμπουμ. ", + "Name of the album" : "Όνομα του άλμπουμ", + "Location of the album" : "Τοποθεσία του άλμπουμ", "Back" : "Πίσω", "Save" : "Αποθήκευση", + "Create album" : "Δημιουργία άλμπουμ", + "Create a new album." : "Δημιουργήστε ένα νέο άλμπουμ.", "Year" : "Έτος", "Month" : "Μήνας", "Day" : "Ημέρα", @@ -33,9 +41,11 @@ "Hour" : "Ώρα", "Minute" : "Λεπτά", "Name" : "Όνομα", + "Rename person" : "Μετονομασία ατόμου", "Update" : "Ενημέρωση", "Refresh" : "Ανανέωση", "Remove" : "Αφαίρεση", + "Delete album" : "Διαγραφή άλμπουμ", "Share folder" : "Διαμοιρασμός φακέλου", "Reset" : "Επαναφορά", "Continue" : "Συνεχίστε", @@ -52,6 +62,9 @@ "Extension" : "Επέκταση", "Name is required." : "Απαιτείται όνομα.", "Quality" : "Ποιότητα", - "Auto" : "Αυτόματα" + "Auto" : "Αυτόματα", + "Failed to create {albumName}." : "Απέτυχε η δημιουργία {albumName}", + "Failed to rename {currentAlbumName} to {newAlbumName}." : "Απέτυχε η μετονομασία του {currentAlbumName} σε {newAlbumName}.", + "Failed to delete {fileName}." : "Απέτυχε η διαγραφή {fileName}." },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/en_GB.js b/l10n/en_GB.js index 1b013e77..cfb3dbb3 100644 --- a/l10n/en_GB.js +++ b/l10n/en_GB.js @@ -1,45 +1,244 @@ OC.L10N.register( "memories", { + "Memories" : "Memories", + "Yet another photo management app" : "Yet another photo management app", + "# Memories\n\nMemories is a *batteries-included* photo management solution for Nextcloud with advanced features including:\n\n- **📸 Timeline**: Sort photos and videos by date taken, parsed from Exif data.\n- **⏪ Rewind**: Jump to any time in the past instantly and relive your memories.\n- **🤖 AI Tagging**: Group photos by people and objects using AI, powered by [recognize](https://github.com/nextcloud/recognize).\n- **🖼️ Albums**: Create albums to group photos and videos together. Then share these albums with others.\n- **🫱🏻‍🫲🏻 External Sharing**: Share photos and videos with people outside of your Nextcloud instance.\n- **📱 Mobile Support**: Works on devices of any shape and size through the web app.\n- **✏️ Edit Metadata**: Edit dates on photos quickly and easily.\n- **📦 Archive**: Store photos you don't want to see in your timeline in a separate folder.\n- **📹 Video Transcoding**: Memories transcodes videos and uses HLS for maximal performance.\n- **⚡️ Performance**: In general, Memories is extremely fast.\n\n## 🌐 Online Demo\n\n- To get an idea of what memories looks and feels like, check out the [public demo](https://memories-demo.radialapps.com/apps/memories/).\n- The demo is read-only and may be slow (free tier VM from [Oracle Cloud](https://www.oracle.com/cloud/free/)).\n- Photo credits go to [Unsplash](https://unsplash.com/) (for individual credits, refer to each folder).\n\n## 🚀 Installation\n\n1. Install the app from the Nextcloud app store.\n1. Perform the recommended [configuration steps](https://github.com/pulsejet/memories/wiki/Extra-Configuration).\n1. Run `php ./occ memories:index` to generate metadata indices for existing photos.\n1. Open the 📷 Memories app in Nextcloud and set the directory containing your photos." : "# Memories\n\nMemories is a *batteries-included* photo management solution for Nextcloud with advanced features including:\n\n- **📸 Timeline**: Sort photos and videos by date taken, parsed from Exif data.\n- **⏪ Rewind**: Jump to any time in the past instantly and relive your memories.\n- **🤖 AI Tagging**: Group photos by people and objects using AI, powered by [recognize](https://github.com/nextcloud/recognize).\n- **🖼️ Albums**: Create albums to group photos and videos together. Then share these albums with others.\n- **🫱🏻‍🫲🏻 External Sharing**: Share photos and videos with people outside of your Nextcloud instance.\n- **📱 Mobile Support**: Works on devices of any shape and size through the web app.\n- **✏️ Edit Metadata**: Edit dates on photos quickly and easily.\n- **📦 Archive**: Store photos you don't want to see in your timeline in a separate folder.\n- **📹 Video Transcoding**: Memories transcodes videos and uses HLS for maximal performance.\n- **⚡️ Performance**: In general, Memories is extremely fast.\n\n## 🌐 Online Demo\n\n- To get an idea of what memories looks and feels like, check out the [public demo](https://memories-demo.radialapps.com/apps/memories/).\n- The demo is read-only and may be slow (free tier VM from [Oracle Cloud](https://www.oracle.com/cloud/free/)).\n- Photo credits go to [Unsplash](https://unsplash.com/) (for individual credits, refer to each folder).\n\n## 🚀 Installation\n\n1. Install the app from the Nextcloud app store.\n1. Perform the recommended [configuration steps](https://github.com/pulsejet/memories/wiki/Extra-Configuration).\n1. Run `php ./occ memories:index` to generate metadata indices for existing photos.\n1. Open the 📷 Memories app in Nextcloud and set the directory containing your photos.", "Settings" : "Settings", + "Timeline" : "Timeline", "Folders" : "Folders", "Favorites" : "Favourites", "Videos" : "Videos", + "Albums" : "Albums", + "People" : "People", "Archive" : "Archive", + "On this day" : "On this day", "Tags" : "Tags", "Maps" : "Maps", + "EXIF" : "EXIF", + "A better photos experience awaits you" : "A better photos experience awaits you", + "Choose the root folder of your timeline to begin" : "Choose the root folder of your timeline to begin", + "If you just installed Memories, run:" : "If you just installed Memories, run:", + "Continue to Memories" : "Continue to Memories", + "Choose again" : "Choose again", + "Click here to start" : "Click here to start", + "You can always change this later in settings" : "You can always change this later in settings", + "Choose the root of your timeline" : "Choose the root of your timeline", + "The selected folder does not seem to be valid. Try again." : "The selected folder does not seem to be valid. Try again.", + "Found {total} photos in {path}" : "Found {total} photos in {path}", + "Failed to get Exif data. Metadata may be lost!" : "Failed to get Exif data. Metadata may be lost!", + "No Exif data found! Continue?" : "No Exif data found! Continue?", + "Image saved successfully" : "Image saved successfully", + "Error saving image" : "Error saving image", "Unsaved changes" : "Unsaved changes", + "Drop changes" : "Drop changes", "Edit" : "Edit", "Loading …" : "Loading …", "Cancel" : "Cancel", "Delete" : "Delete", + "Remove from album" : "Remove from album", "Download" : "Download", "Favorite" : "Favourite", "Unarchive" : "Unarchive", + "Edit Date/Time" : "Edit Date/Time", "View in folder" : "View in folder", + "Add to album" : "Add to album", + "Move to another person" : "Move to another person", + "Remove from person" : "Remove from person", + "You are about to download a large number of files. Are you sure?" : "You are about to download a large number of files. Are you sure?", + "You are about to delete a large number of files. Are you sure?" : "You are about to delete a large number of files. Are you sure?", + "You are about to touch a large number of files. Are you sure?" : "You are about to touch a large number of files. Are you sure?", + "Could not remove photos from album" : "Could not remove photos from album", + "_{n} selected_::_{n} selected_" : ["{n} selected","{n} selected"], + "Timeline Path" : "Timeline Path", + "Folders Path" : "Folders Path", + "Show hidden folders" : "Show hidden folders", + "Square grid mode" : "Square grid mode", + "Choose Timeline Paths" : "Choose Timeline Paths", + "Choose the root for the folders view" : "Choose the root for the folders view", + "Your Timeline" : "Your Timeline", + "Failed to load some photos" : "Failed to load some photos", "Share" : "Share", + "Sidebar" : "Sidebar", + "Close" : "Close", "Previous" : "Previous", "Next" : "Next", + "Video sharing not supported yet" : "Video sharing not supported yet", + "Cannot share this type of data" : "Cannot share this type of data", + "Processing … {n}/{m}" : "Processing … {n}/{m}", + "{n} photos added to album" : "{n} photos added to album", + "Search for collaborators" : "Search for collaborators", + "Search people or groups" : "Search people or groups", + "Add {collaboratorLabel} to the collaborators list" : "Add {collaboratorLabel} to the collaborators list", + "No collaborators available" : "No collaborators available", + "Remove {collaboratorLabel} from the collaborators list" : "Remove {collaboratorLabel} from the collaborators list", + "Copy the public link" : "Copy the public link", + "Delete the public link" : "Delete the public link", + "Add people or groups who can edit your album" : "Add people or groups who can edit your album", + "Public link copied!" : "Public link copied!", + "Copy public link" : "Copy public link", + "Share via public link" : "Share via public link", + "Failed to fetch collaborators list." : "Failed to fetch collaborators list.", "Public link" : "Public link", + "Failed to fetch album." : "Failed to fetch album.", + "Failed to update album." : "Failed to update album.", + "New album" : "New album", + "Create new album" : "Create new album", + "Edit album details" : "Edit album details", + "Could not load the selected album" : "Could not load the selected album", + "Remove Album" : "Remove Album", + "Failed to delete {name}." : "Failed to delete {name}.", + "Name of the album" : "Name of the album", + "Location of the album" : "Location of the album", + "Go back to the previous view." : "Go back to the previous view.", + "Go to the add collaborators view." : "Go to the add collaborators view.", + "Back to the new album form." : "Back to the new album form.", "Back" : "Back", + "Add collaborators" : "Add collaborators", "Save" : "Save", + "Create album" : "Create album", + "Add selection to album {albumName}" : "Add selection to album {albumName}", + "Create a new album." : "Create a new album.", + "_Share with %n user_::_Share with %n users_" : ["Share with %n user","Share with %n users"], + "_%n item_::_%n items_" : ["%n item","%n items"], + "Save collaborators for this album." : "Save collaborators for this album.", + "Share Album" : "Share Album", + "Year" : "Year", "Month" : "Month", "Day" : "Day", "Time" : "Time", "Hour" : "Hour", + "Minute" : "Minute", + "Update Exif" : "Update Exif", + "Newest" : "Newest", + "Oldest" : "Oldest", + "This feature modifies files in your storage to update Exif data." : "This feature modifies files in your storage to update Exif data.", + "Exercise caution and make sure you have backups." : "Exercise caution and make sure you have backups.", + "Loading data … {n}/{m}" : "Loading data … {n}/{m}", + "Remove person" : "Remove person", + "Are you sure you want to remove {name}?" : "Are you sure you want to remove {name}?", "Name" : "Surname", + "Rename person" : "Rename person", "Update" : "Update", + "Failed to rename {oldName} to {name}." : "Failed to rename {oldName} to {name}.", + "Merge {name} with person" : "Merge {name} with person", + "Are you sure you want to merge {name} with {newName}?" : "Are you sure you want to merge {name} with {newName}?", + "Too many failures, aborting" : "Too many failures, aborting", + "Error while moving {basename}" : "Error while moving {basename}", + "Failed to move {name}." : "Failed to move {name}.", + "Move selected photos to person" : "Move selected photos to person", + "Are you sure you want to move the selected photos from {name} to {newName}?" : "Are you sure you want to move the selected photos from {name} to {newName}?", + "Share Folder" : "Share Folder", + "You cannot share the root folder" : "You cannot share the root folder", + "Use the sidebar to share this folder." : "Use the sidebar to share this folder.", + "If you create a public link share, click on refresh and a corresponding link to Memories will be shown below." : "If you create a public link share, click on refresh and a corresponding link to Memories will be shown below.", "Refresh" : "Refresh", "Remove" : "Remove", + "Add Path" : "Add Path", + "Add a root to your timeline" : "Add a root to your timeline", + "Share album" : "Share album", + "Delete album" : "Delete album", + "Merge with different person" : "Merge with different person", + "Mark person in preview" : "Mark person in preview", + "Share folder" : "Share folder", + "Move left" : "Move left", + "Move right" : "Move right", + "Save as" : "Save as", "Reset" : "Reset", + "All changes will be lost." : "All changes will be lost.", + "Are you sure you want to continue?" : "Are you sure you want to continue?", "Continue" : "Continue", "Undo" : "Undo", + "Redo" : "Redo", + "Show original image" : "Show original image", + "Zoom in" : "Zoom in", + "Zoom out" : "Zoom out", + "Toggle zoom menu" : "Toggle zoom menu", + "Adjust" : "Adjust", + "Fine-tune" : "Fine-tune", + "Filters" : "Filters", + "Watermark" : "Watermark", + "Draw" : "Draw", + "Resize" : "Resize", + "Invalid image." : "Invalid image.", + "Error while uploading the image." : "Error while uploading the image.", + "are not images" : "are not images", + "is not an image" : "is not an image", + "to be uploaded" : "to be uploaded", + "Crop" : "Crop", "Original" : "Original", "Custom" : "Custom", + "Square" : "Square", + "Landscape" : "Landscape", + "Portrait" : "Portrait", + "Ellipse" : "Ellipse", + "Classic TV" : "Classic TV", + "CinemaScope" : "CinemaScope", + "Arrow" : "Arrow", + "Blur" : "Blur", + "Brightness" : "Brightness", + "Contrast" : "Contrast", + "Un-flip X" : "Un-flip X", + "Flip X" : "Flip X", + "Un-flip Y" : "Un-flip Y", + "Flip Y" : "Flip Y", + "HSV" : "HSV", + "Hue" : "Hue", + "Saturation" : "Saturation", "Value" : "Value", "Image" : "Image", + "Importing …" : "Importing …", + "+ Add image" : "+ Add image", + "Line" : "Line", + "Pen" : "Pen", + "Polygon" : "Polygon", + "Sides" : "Sides", + "Rectangle" : "Rectangle", + "Corner Radius" : "Corner Radius", + "Width in pixels" : "Width in pixels", + "Height in pixels" : "Height in pixels", + "Toggle ratio lock" : "Toggle ratio lock", + "Reset to original image size" : "Reset to original image size", + "Rotate" : "Rotate", "Text" : "Text", + "Text spacing" : "Text spacing", + "Text alignment" : "Text alignment", + "Font family" : "Font family", "Size" : "Size", - "Position" : "Position" + "Letter spacing" : "Letter spacing", + "Line height" : "Line height", + "Warmth" : "Warmth", + "+ Add watermark" : "+ Add watermark", + "Choose watermark type" : "Choose watermark type", + "Upload watermark" : "Upload watermark", + "Add as text" : "Add as text", + "Padding" : "Padding", + "Shadow" : "Shadow", + "Horizontal" : "Horizontal", + "Vertical" : "Vertical", + "Opacity" : "Opacity", + "Position" : "Position", + "Stroke" : "Stroke", + "Save image as" : "Save image as", + "Extension" : "Extension", + "Name is required." : "Name is required.", + "Quality" : "Quality", + "Saved image size (width x height)" : "Saved image size (width x height)", + "Note that the selected crop area is lower than the applied resize which might cause quality decrease" : "Note that the selected crop area is lower than the applied resize which might cause quality decrease", + "Actual size (100%)" : "Actual size (100%)", + "Fit size" : "Fit size", + "Transcoding failed." : "Transcoding failed.", + "Auto" : "Auto", + "Shared Folder" : "Shared Folder", + "Failed to create {albumName}." : "Failed to create {albumName}.", + "Failed to rename {currentAlbumName} to {newAlbumName}." : "Failed to rename {currentAlbumName} to {newAlbumName}.", + "General Failure" : "General Failure", + "Error: {msg}" : "Error: {msg}", + "Failed to delete files." : "Failed to delete files.", + "Failed to delete {fileName}." : "Failed to delete {fileName}.", + "Failed to download some files." : "Failed to download some files.", + "Failed to favorite files." : "Failed to favorite files.", + "Failed to favorite some files." : "Failed to favorite some files.", + "Failed to favorite {fileName}." : "Failed to favorite {fileName}." }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/en_GB.json b/l10n/en_GB.json index 200cbedc..5a6fb0e9 100644 --- a/l10n/en_GB.json +++ b/l10n/en_GB.json @@ -1,43 +1,242 @@ { "translations": { + "Memories" : "Memories", + "Yet another photo management app" : "Yet another photo management app", + "# Memories\n\nMemories is a *batteries-included* photo management solution for Nextcloud with advanced features including:\n\n- **📸 Timeline**: Sort photos and videos by date taken, parsed from Exif data.\n- **⏪ Rewind**: Jump to any time in the past instantly and relive your memories.\n- **🤖 AI Tagging**: Group photos by people and objects using AI, powered by [recognize](https://github.com/nextcloud/recognize).\n- **🖼️ Albums**: Create albums to group photos and videos together. Then share these albums with others.\n- **🫱🏻‍🫲🏻 External Sharing**: Share photos and videos with people outside of your Nextcloud instance.\n- **📱 Mobile Support**: Works on devices of any shape and size through the web app.\n- **✏️ Edit Metadata**: Edit dates on photos quickly and easily.\n- **📦 Archive**: Store photos you don't want to see in your timeline in a separate folder.\n- **📹 Video Transcoding**: Memories transcodes videos and uses HLS for maximal performance.\n- **⚡️ Performance**: In general, Memories is extremely fast.\n\n## 🌐 Online Demo\n\n- To get an idea of what memories looks and feels like, check out the [public demo](https://memories-demo.radialapps.com/apps/memories/).\n- The demo is read-only and may be slow (free tier VM from [Oracle Cloud](https://www.oracle.com/cloud/free/)).\n- Photo credits go to [Unsplash](https://unsplash.com/) (for individual credits, refer to each folder).\n\n## 🚀 Installation\n\n1. Install the app from the Nextcloud app store.\n1. Perform the recommended [configuration steps](https://github.com/pulsejet/memories/wiki/Extra-Configuration).\n1. Run `php ./occ memories:index` to generate metadata indices for existing photos.\n1. Open the 📷 Memories app in Nextcloud and set the directory containing your photos." : "# Memories\n\nMemories is a *batteries-included* photo management solution for Nextcloud with advanced features including:\n\n- **📸 Timeline**: Sort photos and videos by date taken, parsed from Exif data.\n- **⏪ Rewind**: Jump to any time in the past instantly and relive your memories.\n- **🤖 AI Tagging**: Group photos by people and objects using AI, powered by [recognize](https://github.com/nextcloud/recognize).\n- **🖼️ Albums**: Create albums to group photos and videos together. Then share these albums with others.\n- **🫱🏻‍🫲🏻 External Sharing**: Share photos and videos with people outside of your Nextcloud instance.\n- **📱 Mobile Support**: Works on devices of any shape and size through the web app.\n- **✏️ Edit Metadata**: Edit dates on photos quickly and easily.\n- **📦 Archive**: Store photos you don't want to see in your timeline in a separate folder.\n- **📹 Video Transcoding**: Memories transcodes videos and uses HLS for maximal performance.\n- **⚡️ Performance**: In general, Memories is extremely fast.\n\n## 🌐 Online Demo\n\n- To get an idea of what memories looks and feels like, check out the [public demo](https://memories-demo.radialapps.com/apps/memories/).\n- The demo is read-only and may be slow (free tier VM from [Oracle Cloud](https://www.oracle.com/cloud/free/)).\n- Photo credits go to [Unsplash](https://unsplash.com/) (for individual credits, refer to each folder).\n\n## 🚀 Installation\n\n1. Install the app from the Nextcloud app store.\n1. Perform the recommended [configuration steps](https://github.com/pulsejet/memories/wiki/Extra-Configuration).\n1. Run `php ./occ memories:index` to generate metadata indices for existing photos.\n1. Open the 📷 Memories app in Nextcloud and set the directory containing your photos.", "Settings" : "Settings", + "Timeline" : "Timeline", "Folders" : "Folders", "Favorites" : "Favourites", "Videos" : "Videos", + "Albums" : "Albums", + "People" : "People", "Archive" : "Archive", + "On this day" : "On this day", "Tags" : "Tags", "Maps" : "Maps", + "EXIF" : "EXIF", + "A better photos experience awaits you" : "A better photos experience awaits you", + "Choose the root folder of your timeline to begin" : "Choose the root folder of your timeline to begin", + "If you just installed Memories, run:" : "If you just installed Memories, run:", + "Continue to Memories" : "Continue to Memories", + "Choose again" : "Choose again", + "Click here to start" : "Click here to start", + "You can always change this later in settings" : "You can always change this later in settings", + "Choose the root of your timeline" : "Choose the root of your timeline", + "The selected folder does not seem to be valid. Try again." : "The selected folder does not seem to be valid. Try again.", + "Found {total} photos in {path}" : "Found {total} photos in {path}", + "Failed to get Exif data. Metadata may be lost!" : "Failed to get Exif data. Metadata may be lost!", + "No Exif data found! Continue?" : "No Exif data found! Continue?", + "Image saved successfully" : "Image saved successfully", + "Error saving image" : "Error saving image", "Unsaved changes" : "Unsaved changes", + "Drop changes" : "Drop changes", "Edit" : "Edit", "Loading …" : "Loading …", "Cancel" : "Cancel", "Delete" : "Delete", + "Remove from album" : "Remove from album", "Download" : "Download", "Favorite" : "Favourite", "Unarchive" : "Unarchive", + "Edit Date/Time" : "Edit Date/Time", "View in folder" : "View in folder", + "Add to album" : "Add to album", + "Move to another person" : "Move to another person", + "Remove from person" : "Remove from person", + "You are about to download a large number of files. Are you sure?" : "You are about to download a large number of files. Are you sure?", + "You are about to delete a large number of files. Are you sure?" : "You are about to delete a large number of files. Are you sure?", + "You are about to touch a large number of files. Are you sure?" : "You are about to touch a large number of files. Are you sure?", + "Could not remove photos from album" : "Could not remove photos from album", + "_{n} selected_::_{n} selected_" : ["{n} selected","{n} selected"], + "Timeline Path" : "Timeline Path", + "Folders Path" : "Folders Path", + "Show hidden folders" : "Show hidden folders", + "Square grid mode" : "Square grid mode", + "Choose Timeline Paths" : "Choose Timeline Paths", + "Choose the root for the folders view" : "Choose the root for the folders view", + "Your Timeline" : "Your Timeline", + "Failed to load some photos" : "Failed to load some photos", "Share" : "Share", + "Sidebar" : "Sidebar", + "Close" : "Close", "Previous" : "Previous", "Next" : "Next", + "Video sharing not supported yet" : "Video sharing not supported yet", + "Cannot share this type of data" : "Cannot share this type of data", + "Processing … {n}/{m}" : "Processing … {n}/{m}", + "{n} photos added to album" : "{n} photos added to album", + "Search for collaborators" : "Search for collaborators", + "Search people or groups" : "Search people or groups", + "Add {collaboratorLabel} to the collaborators list" : "Add {collaboratorLabel} to the collaborators list", + "No collaborators available" : "No collaborators available", + "Remove {collaboratorLabel} from the collaborators list" : "Remove {collaboratorLabel} from the collaborators list", + "Copy the public link" : "Copy the public link", + "Delete the public link" : "Delete the public link", + "Add people or groups who can edit your album" : "Add people or groups who can edit your album", + "Public link copied!" : "Public link copied!", + "Copy public link" : "Copy public link", + "Share via public link" : "Share via public link", + "Failed to fetch collaborators list." : "Failed to fetch collaborators list.", "Public link" : "Public link", + "Failed to fetch album." : "Failed to fetch album.", + "Failed to update album." : "Failed to update album.", + "New album" : "New album", + "Create new album" : "Create new album", + "Edit album details" : "Edit album details", + "Could not load the selected album" : "Could not load the selected album", + "Remove Album" : "Remove Album", + "Failed to delete {name}." : "Failed to delete {name}.", + "Name of the album" : "Name of the album", + "Location of the album" : "Location of the album", + "Go back to the previous view." : "Go back to the previous view.", + "Go to the add collaborators view." : "Go to the add collaborators view.", + "Back to the new album form." : "Back to the new album form.", "Back" : "Back", + "Add collaborators" : "Add collaborators", "Save" : "Save", + "Create album" : "Create album", + "Add selection to album {albumName}" : "Add selection to album {albumName}", + "Create a new album." : "Create a new album.", + "_Share with %n user_::_Share with %n users_" : ["Share with %n user","Share with %n users"], + "_%n item_::_%n items_" : ["%n item","%n items"], + "Save collaborators for this album." : "Save collaborators for this album.", + "Share Album" : "Share Album", + "Year" : "Year", "Month" : "Month", "Day" : "Day", "Time" : "Time", "Hour" : "Hour", + "Minute" : "Minute", + "Update Exif" : "Update Exif", + "Newest" : "Newest", + "Oldest" : "Oldest", + "This feature modifies files in your storage to update Exif data." : "This feature modifies files in your storage to update Exif data.", + "Exercise caution and make sure you have backups." : "Exercise caution and make sure you have backups.", + "Loading data … {n}/{m}" : "Loading data … {n}/{m}", + "Remove person" : "Remove person", + "Are you sure you want to remove {name}?" : "Are you sure you want to remove {name}?", "Name" : "Surname", + "Rename person" : "Rename person", "Update" : "Update", + "Failed to rename {oldName} to {name}." : "Failed to rename {oldName} to {name}.", + "Merge {name} with person" : "Merge {name} with person", + "Are you sure you want to merge {name} with {newName}?" : "Are you sure you want to merge {name} with {newName}?", + "Too many failures, aborting" : "Too many failures, aborting", + "Error while moving {basename}" : "Error while moving {basename}", + "Failed to move {name}." : "Failed to move {name}.", + "Move selected photos to person" : "Move selected photos to person", + "Are you sure you want to move the selected photos from {name} to {newName}?" : "Are you sure you want to move the selected photos from {name} to {newName}?", + "Share Folder" : "Share Folder", + "You cannot share the root folder" : "You cannot share the root folder", + "Use the sidebar to share this folder." : "Use the sidebar to share this folder.", + "If you create a public link share, click on refresh and a corresponding link to Memories will be shown below." : "If you create a public link share, click on refresh and a corresponding link to Memories will be shown below.", "Refresh" : "Refresh", "Remove" : "Remove", + "Add Path" : "Add Path", + "Add a root to your timeline" : "Add a root to your timeline", + "Share album" : "Share album", + "Delete album" : "Delete album", + "Merge with different person" : "Merge with different person", + "Mark person in preview" : "Mark person in preview", + "Share folder" : "Share folder", + "Move left" : "Move left", + "Move right" : "Move right", + "Save as" : "Save as", "Reset" : "Reset", + "All changes will be lost." : "All changes will be lost.", + "Are you sure you want to continue?" : "Are you sure you want to continue?", "Continue" : "Continue", "Undo" : "Undo", + "Redo" : "Redo", + "Show original image" : "Show original image", + "Zoom in" : "Zoom in", + "Zoom out" : "Zoom out", + "Toggle zoom menu" : "Toggle zoom menu", + "Adjust" : "Adjust", + "Fine-tune" : "Fine-tune", + "Filters" : "Filters", + "Watermark" : "Watermark", + "Draw" : "Draw", + "Resize" : "Resize", + "Invalid image." : "Invalid image.", + "Error while uploading the image." : "Error while uploading the image.", + "are not images" : "are not images", + "is not an image" : "is not an image", + "to be uploaded" : "to be uploaded", + "Crop" : "Crop", "Original" : "Original", "Custom" : "Custom", + "Square" : "Square", + "Landscape" : "Landscape", + "Portrait" : "Portrait", + "Ellipse" : "Ellipse", + "Classic TV" : "Classic TV", + "CinemaScope" : "CinemaScope", + "Arrow" : "Arrow", + "Blur" : "Blur", + "Brightness" : "Brightness", + "Contrast" : "Contrast", + "Un-flip X" : "Un-flip X", + "Flip X" : "Flip X", + "Un-flip Y" : "Un-flip Y", + "Flip Y" : "Flip Y", + "HSV" : "HSV", + "Hue" : "Hue", + "Saturation" : "Saturation", "Value" : "Value", "Image" : "Image", + "Importing …" : "Importing …", + "+ Add image" : "+ Add image", + "Line" : "Line", + "Pen" : "Pen", + "Polygon" : "Polygon", + "Sides" : "Sides", + "Rectangle" : "Rectangle", + "Corner Radius" : "Corner Radius", + "Width in pixels" : "Width in pixels", + "Height in pixels" : "Height in pixels", + "Toggle ratio lock" : "Toggle ratio lock", + "Reset to original image size" : "Reset to original image size", + "Rotate" : "Rotate", "Text" : "Text", + "Text spacing" : "Text spacing", + "Text alignment" : "Text alignment", + "Font family" : "Font family", "Size" : "Size", - "Position" : "Position" + "Letter spacing" : "Letter spacing", + "Line height" : "Line height", + "Warmth" : "Warmth", + "+ Add watermark" : "+ Add watermark", + "Choose watermark type" : "Choose watermark type", + "Upload watermark" : "Upload watermark", + "Add as text" : "Add as text", + "Padding" : "Padding", + "Shadow" : "Shadow", + "Horizontal" : "Horizontal", + "Vertical" : "Vertical", + "Opacity" : "Opacity", + "Position" : "Position", + "Stroke" : "Stroke", + "Save image as" : "Save image as", + "Extension" : "Extension", + "Name is required." : "Name is required.", + "Quality" : "Quality", + "Saved image size (width x height)" : "Saved image size (width x height)", + "Note that the selected crop area is lower than the applied resize which might cause quality decrease" : "Note that the selected crop area is lower than the applied resize which might cause quality decrease", + "Actual size (100%)" : "Actual size (100%)", + "Fit size" : "Fit size", + "Transcoding failed." : "Transcoding failed.", + "Auto" : "Auto", + "Shared Folder" : "Shared Folder", + "Failed to create {albumName}." : "Failed to create {albumName}.", + "Failed to rename {currentAlbumName} to {newAlbumName}." : "Failed to rename {currentAlbumName} to {newAlbumName}.", + "General Failure" : "General Failure", + "Error: {msg}" : "Error: {msg}", + "Failed to delete files." : "Failed to delete files.", + "Failed to delete {fileName}." : "Failed to delete {fileName}.", + "Failed to download some files." : "Failed to download some files.", + "Failed to favorite files." : "Failed to favorite files.", + "Failed to favorite some files." : "Failed to favorite some files.", + "Failed to favorite {fileName}." : "Failed to favorite {fileName}." },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/eo.js b/l10n/eo.js index ca9e9753..c269b342 100644 --- a/l10n/eo.js +++ b/l10n/eo.js @@ -18,6 +18,7 @@ OC.L10N.register( "Favorite" : "Pliŝatati", "View in folder" : "Vidi en dosierujo", "Share" : "Kunhavigi", + "Close" : "Malfermi", "Previous" : "Antaŭa", "Next" : "Sekva", "Public link" : "Publika ligilo", diff --git a/l10n/eo.json b/l10n/eo.json index 3377a888..521ef0cd 100644 --- a/l10n/eo.json +++ b/l10n/eo.json @@ -16,6 +16,7 @@ "Favorite" : "Pliŝatati", "View in folder" : "Vidi en dosierujo", "Share" : "Kunhavigi", + "Close" : "Malfermi", "Previous" : "Antaŭa", "Next" : "Sekva", "Public link" : "Publika ligilo", diff --git a/l10n/es.js b/l10n/es.js index d003223b..5f8b5c54 100644 --- a/l10n/es.js +++ b/l10n/es.js @@ -60,6 +60,7 @@ OC.L10N.register( "Failed to load some photos" : "Fallo al cargar algunas fotos", "Share" : "Compartir", "Sidebar" : "Barra lateral", + "Close" : "Cerrar", "Previous" : "Anterior", "Next" : "Siguiente", "Video sharing not supported yet" : "Compartir videos no es soportado todavía", diff --git a/l10n/es.json b/l10n/es.json index 99f2ac04..0aa2511b 100644 --- a/l10n/es.json +++ b/l10n/es.json @@ -58,6 +58,7 @@ "Failed to load some photos" : "Fallo al cargar algunas fotos", "Share" : "Compartir", "Sidebar" : "Barra lateral", + "Close" : "Cerrar", "Previous" : "Anterior", "Next" : "Siguiente", "Video sharing not supported yet" : "Compartir videos no es soportado todavía", diff --git a/l10n/es_419.js b/l10n/es_419.js index 0d013d37..3dfd0405 100644 --- a/l10n/es_419.js +++ b/l10n/es_419.js @@ -17,6 +17,7 @@ OC.L10N.register( "Unarchive" : "Desarchivar", "View in folder" : "Ver en la carpeta", "Share" : "Compartir", + "Close" : "Cerrar", "Previous" : "Anterior", "Next" : "Siguiente", "Back" : "Atrás", diff --git a/l10n/es_419.json b/l10n/es_419.json index 356cf341..fb40c65f 100644 --- a/l10n/es_419.json +++ b/l10n/es_419.json @@ -15,6 +15,7 @@ "Unarchive" : "Desarchivar", "View in folder" : "Ver en la carpeta", "Share" : "Compartir", + "Close" : "Cerrar", "Previous" : "Anterior", "Next" : "Siguiente", "Back" : "Atrás", diff --git a/l10n/es_AR.js b/l10n/es_AR.js index f3d30932..62c94689 100644 --- a/l10n/es_AR.js +++ b/l10n/es_AR.js @@ -18,6 +18,7 @@ OC.L10N.register( "Unarchive" : "Desarchivar", "View in folder" : "Ver en la carpeta", "Share" : "Compartir", + "Close" : "Cerrar", "Previous" : "Anterior", "Next" : "Siguiente", "Copy public link" : "Copiar link publico", diff --git a/l10n/es_AR.json b/l10n/es_AR.json index 176f5d55..73b503ea 100644 --- a/l10n/es_AR.json +++ b/l10n/es_AR.json @@ -16,6 +16,7 @@ "Unarchive" : "Desarchivar", "View in folder" : "Ver en la carpeta", "Share" : "Compartir", + "Close" : "Cerrar", "Previous" : "Anterior", "Next" : "Siguiente", "Copy public link" : "Copiar link publico", diff --git a/l10n/es_CL.js b/l10n/es_CL.js index 0c24893d..29080238 100644 --- a/l10n/es_CL.js +++ b/l10n/es_CL.js @@ -18,6 +18,7 @@ OC.L10N.register( "Unarchive" : "Desarchivar", "View in folder" : "Ver en la carpeta", "Share" : "Compartir", + "Close" : "Cerrar", "Previous" : "Previo", "Next" : "Siguiente", "Public link" : "Liga pública", diff --git a/l10n/es_CL.json b/l10n/es_CL.json index 740bb173..3c80756d 100644 --- a/l10n/es_CL.json +++ b/l10n/es_CL.json @@ -16,6 +16,7 @@ "Unarchive" : "Desarchivar", "View in folder" : "Ver en la carpeta", "Share" : "Compartir", + "Close" : "Cerrar", "Previous" : "Previo", "Next" : "Siguiente", "Public link" : "Liga pública", diff --git a/l10n/es_CO.js b/l10n/es_CO.js index 75bfefb3..40cfb159 100644 --- a/l10n/es_CO.js +++ b/l10n/es_CO.js @@ -17,6 +17,7 @@ OC.L10N.register( "Unarchive" : "Desarchivar", "View in folder" : "Ver en la carpeta", "Share" : "Compartir", + "Close" : "Cerrar", "Previous" : "Previo", "Next" : "Siguiente", "Public link" : "Liga pública", diff --git a/l10n/es_CO.json b/l10n/es_CO.json index e1a60323..3058a5d0 100644 --- a/l10n/es_CO.json +++ b/l10n/es_CO.json @@ -15,6 +15,7 @@ "Unarchive" : "Desarchivar", "View in folder" : "Ver en la carpeta", "Share" : "Compartir", + "Close" : "Cerrar", "Previous" : "Previo", "Next" : "Siguiente", "Public link" : "Liga pública", diff --git a/l10n/hu.js b/l10n/hu.js index 38434d91..534bec0b 100644 --- a/l10n/hu.js +++ b/l10n/hu.js @@ -172,7 +172,7 @@ OC.L10N.register( "Extension" : "Kiterjesztés", "Name is required." : "A név kötelező.", "Quality" : "Minőség", - "Saved image size (width x height)" : "Mentett kép mérete (szélesség×magasság)", + "Saved image size (width x height)" : "Mentett kép mérete (szélesség × magasság)", "Note that the selected crop area is lower than the applied resize which might cause quality decrease" : "Vegye figyelembe, hogy a kijelölt levágási terület kisebb mint az alkalmazott átméretezés, amely minőségcsökkenést okozhat", "Actual size (100%)" : "Tényleges méret (100%)", "Fit size" : "Illeszkedő méret", diff --git a/l10n/hu.json b/l10n/hu.json index ebb04390..18ae65fc 100644 --- a/l10n/hu.json +++ b/l10n/hu.json @@ -170,7 +170,7 @@ "Extension" : "Kiterjesztés", "Name is required." : "A név kötelező.", "Quality" : "Minőség", - "Saved image size (width x height)" : "Mentett kép mérete (szélesség×magasság)", + "Saved image size (width x height)" : "Mentett kép mérete (szélesség × magasság)", "Note that the selected crop area is lower than the applied resize which might cause quality decrease" : "Vegye figyelembe, hogy a kijelölt levágási terület kisebb mint az alkalmazott átméretezés, amely minőségcsökkenést okozhat", "Actual size (100%)" : "Tényleges méret (100%)", "Fit size" : "Illeszkedő méret", diff --git a/l10n/sv.js b/l10n/sv.js index 9ff5cc3e..09e735ea 100644 --- a/l10n/sv.js +++ b/l10n/sv.js @@ -39,6 +39,8 @@ OC.L10N.register( "Copy public link" : "Kopiera publik länk", "Share via public link" : "Dela via offentlig länk", "Public link" : "Publik länk", + "Failed to fetch album." : "Misslyckades att hämta album.", + "Failed to update album." : "Misslyckades att uppdatera album.", "New album" : "Nytt album", "Create new album" : "Skapa nytt album", "Back" : "Tillbaka", diff --git a/l10n/sv.json b/l10n/sv.json index 3bcf7bc9..40e30b2d 100644 --- a/l10n/sv.json +++ b/l10n/sv.json @@ -37,6 +37,8 @@ "Copy public link" : "Kopiera publik länk", "Share via public link" : "Dela via offentlig länk", "Public link" : "Publik länk", + "Failed to fetch album." : "Misslyckades att hämta album.", + "Failed to update album." : "Misslyckades att uppdatera album.", "New album" : "Nytt album", "Create new album" : "Skapa nytt album", "Back" : "Tillbaka", From 776758bd684932fda8d43524e1f4e5bee55ef713 Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Wed, 23 Nov 2022 01:25:07 -0800 Subject: [PATCH 04/18] cmd: make parseFolder args float (#238) --- lib/Command/Index.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/Command/Index.php b/lib/Command/Index.php index 3208ff16..59ce08c9 100644 --- a/lib/Command/Index.php +++ b/lib/Command/Index.php @@ -251,16 +251,14 @@ class Index extends Command $uid = $user->getUID(); $userFolder = $this->rootFolder->getUserFolder($uid); $this->outputSection = $this->output->section(); - $this->parseFolder($userFolder, $refresh, $this->nUser, $this->userManager->countSeenUsers()); + $this->parseFolder($userFolder, $refresh, (float) $this->nUser, (float) $this->userManager->countSeenUsers()); $this->outputSection->overwrite('Scanned '.$userFolder->getPath()); ++$this->nUser; } - private function parseFolder(Folder &$folder, bool &$refresh, int $progress_i, int $progress_n): void + private function parseFolder(Folder &$folder, bool $refresh, float $progress_i, float $progress_n): void { try { - $folderPath = $folder->getPath(); - // Respect the '.nomedia' file. If present don't traverse the folder if ($folder->nodeExists('.nomedia')) { ++$this->nNoMedia; @@ -272,9 +270,12 @@ class Index extends Command foreach ($nodes as $i => &$node) { if ($node instanceof Folder) { - $this->parseFolder($node, $refresh, $progress_i * \count($nodes) + $i, $progress_n * \count($nodes)); + $new_progress_i = (float) ($progress_i * \count($nodes) + $i); + $new_progress_n = (float) ($progress_n * \count($nodes)); + $this->parseFolder($node, $refresh, $new_progress_i, $new_progress_n); } elseif ($node instanceof File) { - $this->outputSection->overwrite(sprintf('%.2f%%', $progress_i / $progress_n * 100).' scanning '.$node->getPath()); + $progress = (float) (($progress_i / $progress_n) * 100); + $this->outputSection->overwrite(sprintf('%.2f%%', $progress).' scanning '.$node->getPath()); $this->parseFile($node, $refresh); } } From 92d6d9a5e2f5a51da9122132dcdba84533ff08c9 Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Wed, 23 Nov 2022 01:38:36 -0800 Subject: [PATCH 05/18] Fix video-setup checks (fix #223) --- lib/Command/VideoSetup.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/Command/VideoSetup.php b/lib/Command/VideoSetup.php index a827226d..6907d7f7 100644 --- a/lib/Command/VideoSetup.php +++ b/lib/Command/VideoSetup.php @@ -90,18 +90,17 @@ class VideoSetup extends Command $output->writeln('Checking for go-vod binary'); $goVodPath = $this->config->getSystemValue('memories.transcoder', false); - if (false === $goVodPath) { + if (!\is_string($goVodPath) || !file_exists($goVodPath)) { // Detect architecture $arch = \OCA\Memories\Util::getArch(); + $goVodPath = realpath(__DIR__."/../../exiftool-bin/go-vod-{$arch}"); - if (!$arch) { + if (!$goVodPath) { $output->writeln('Compatible go-vod binary not found'); $this->suggestGoVod($output); return $this->suggestDisable($output); } - - $goVodPath = realpath(__DIR__."/../../exiftool-bin/go-vod-{$arch}"); } $output->writeln("Trying go-vod from {$goVodPath}"); From 573f5c3fadecf8eee3d145e5d11258fd298a5552 Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Wed, 23 Nov 2022 01:49:00 -0800 Subject: [PATCH 06/18] Truncate livephoto on clear --- lib/Db/TimelineWrite.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/Db/TimelineWrite.php b/lib/Db/TimelineWrite.php index 927f048f..33025472 100644 --- a/lib/Db/TimelineWrite.php +++ b/lib/Db/TimelineWrite.php @@ -213,7 +213,9 @@ class TimelineWrite */ public function clear() { - $sql = $this->connection->getDatabasePlatform()->getTruncateTableSQL('`*PREFIX*memories`', false); - $this->connection->executeStatement($sql); + $p = $this->connection->getDatabasePlatform(); + $t1 = $p->getTruncateTableSQL('`*PREFIX*memories`', false); + $t2 = $p->getTruncateTableSQL('`*PREFIX*memories_livephoto`', false); + $this->connection->executeStatement("$t1; $t2"); } } From d954c9422f3bfccc691759cdf1094c194cf7d773 Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Wed, 23 Nov 2022 01:49:43 -0800 Subject: [PATCH 07/18] refactor: video controller live --- lib/Controller/VideoController.php | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/lib/Controller/VideoController.php b/lib/Controller/VideoController.php index 0c86e18c..a194ad11 100644 --- a/lib/Controller/VideoController.php +++ b/lib/Controller/VideoController.php @@ -218,19 +218,20 @@ class VideoController extends ApiBase } } - // Make and send response - if ($blob) { - $response = new DataDisplayResponse($blob, Http::STATUS_OK, []); - $response->setHeaders([ - 'Content-Type' => $mime, - 'Content-Disposition' => "attachment; filename=\"{$name}\"", - ]); - $response->cacheFor(3600 * 24, false, false); - - return $response; + // Data not found + if (!$blob) { + return new JSONResponse(['message' => 'Live file not found'], Http::STATUS_NOT_FOUND); } - return new JSONResponse(['message' => 'Live file not found'], Http::STATUS_NOT_FOUND); + // Make and send response + $response = new DataDisplayResponse($blob, Http::STATUS_OK, []); + $response->setHeaders([ + 'Content-Type' => $mime, + 'Content-Disposition' => "attachment; filename=\"{$name}\"", + ]); + $response->cacheFor(3600 * 24, false, false); + + return $response; } private function getUpstream($client, $path, $profile) From b42f49e1b2105461ec1b58fa9b247d9a85f4fc52 Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Wed, 23 Nov 2022 02:10:00 -0800 Subject: [PATCH 08/18] scroller: fix init key --- src/components/ScrollerManager.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ScrollerManager.vue b/src/components/ScrollerManager.vue index 1bb35a23..d508026a 100644 --- a/src/components/ScrollerManager.vue +++ b/src/components/ScrollerManager.vue @@ -95,7 +95,7 @@ export default class ScrollerManager extends Mixins(GlobalMixin) { /** Get the visible ticks */ get visibleTicks() { - let key = 999900; + let key = 9999999900; return this.ticks .filter((tick) => tick.s) .map((tick) => { From 29dfb834de8b3e0769f0e3977008090245fce696 Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Wed, 23 Nov 2022 02:48:28 -0800 Subject: [PATCH 09/18] viewer: adjust transition speed --- src/components/Viewer.vue | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/components/Viewer.vue b/src/components/Viewer.vue index 4e386d86..584f51c5 100644 --- a/src/components/Viewer.vue +++ b/src/components/Viewer.vue @@ -304,6 +304,12 @@ export default class Viewer extends Mixins(GlobalMixin) { bgOpacity: 1, appendToEl: this.$refs.inner as HTMLElement, preload: [2, 2], + + easing: "cubic-bezier(.22,.51,.48,1.01)", + showHideAnimationType: "zoom", + showAnimationDuration: 250, + hideAnimationDuration: 250, + closeTitle: this.t("memories", "Close"), arrowPrevTitle: this.t("memories", "Previous"), arrowNextTitle: this.t("memories", "Next"), From bf11924dfde8132f9e9a19424368186ef81557ea Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Wed, 23 Nov 2022 03:03:06 -0800 Subject: [PATCH 10/18] Don't put classes on body --- src/components/SelectionManager.vue | 4 ++-- src/components/frame/Photo.vue | 6 +++--- src/main.ts | 3 +++ 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/components/SelectionManager.vue b/src/components/SelectionManager.vue index 8f6b93a9..eaf6216e 100644 --- a/src/components/SelectionManager.vue +++ b/src/components/SelectionManager.vue @@ -298,7 +298,7 @@ export default class SelectionManager extends Mixins(GlobalMixin, UserConfig) { this.rows[rowIdx].virtualSticky = true; this.resetTouchParams(); - document.body.classList.add("vue-touching"); + globalThis.touchingPhoto = true; this.touchAnchor = photo; this.prevOver = photo; @@ -320,7 +320,7 @@ export default class SelectionManager extends Mixins(GlobalMixin, UserConfig) { this.resetTouchParams(); window.setTimeout(() => { - if (!this.touchAnchor) document.body.classList.remove("vue-touching"); + if (!this.touchAnchor) globalThis.touchingPhoto = false; }, 1000); } diff --git a/src/components/frame/Photo.vue b/src/components/frame/Photo.vue index ef0cb47b..b29c5bb4 100644 --- a/src/components/frame/Photo.vue +++ b/src/components/frame/Photo.vue @@ -232,7 +232,7 @@ export default class Photo extends Mixins(GlobalMixin) { contextmenu(e: Event) { // user is trying to select the photo - if (document.body.classList.contains("vue-touching")) { + if (globalThis.touchingPhoto) { e.preventDefault(); e.stopPropagation(); } @@ -298,7 +298,7 @@ $icon-size: $icon-half-size * 2; cursor: pointer; display: none; - body:not(.vue-touching) .p-outer:hover > & { + .p-outer:hover > & { display: flex; } @@ -411,7 +411,7 @@ div.img-outer { display: none; transition: border-radius 0.1s ease-in; - body:not(.vue-touching) .p-outer:not(.selected):hover > & { + .p-outer:not(.selected):hover > & { display: block; } } diff --git a/src/main.ts b/src/main.ts index a59d656d..bea31e0d 100644 --- a/src/main.ts +++ b/src/main.ts @@ -39,8 +39,11 @@ declare global { var editDate: (photo: IPhoto) => void; var currentViewerPhoto: IPhoto; + + var touchingPhoto: boolean; } globalThis.vuerouter = router; +globalThis.touchingPhoto = false; Vue.use(VueVirtualScroller); From d11e463203ba82ecb9947741af95d7eb8f143e76 Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Wed, 23 Nov 2022 03:16:45 -0800 Subject: [PATCH 11/18] Cache inner width and height --- src/App.vue | 2 +- src/components/ScrollerManager.vue | 2 +- src/components/SelectionManager.vue | 5 +++-- src/components/Timeline.vue | 9 +++++++-- src/components/Viewer.vue | 8 ++++---- src/components/top-matter/OnThisDay.vue | 2 +- src/main.ts | 6 ++++++ 7 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/App.vue b/src/App.vue index 5cf2a77e..cc010939 100644 --- a/src/App.vue +++ b/src/App.vue @@ -255,7 +255,7 @@ export default class App extends Mixins(GlobalMixin, UserConfig) { linkClick() { const nav: any = this.$refs.nav; - if (window.innerWidth <= 1024) nav?.toggleNavigation(false); + if (globalThis.windowInnerWidth <= 1024) nav?.toggleNavigation(false); } doRouteChecks() { diff --git a/src/components/ScrollerManager.vue b/src/components/ScrollerManager.vue index d508026a..fbdc67d5 100644 --- a/src/components/ScrollerManager.vue +++ b/src/components/ScrollerManager.vue @@ -320,7 +320,7 @@ export default class ScrollerManager extends Mixins(GlobalMixin) { const fontSizePx = parseFloat( getComputedStyle(this.$refs.cursorSt as any).fontSize ); - const minGap = fontSizePx + (window.innerWidth <= 768 ? 5 : 2); + const minGap = fontSizePx + (globalThis.windowInnerWidth <= 768 ? 5 : 2); let prevShow = -9999; for (const [idx, tick] of this.ticks.entries()) { // Conservative diff --git a/src/components/SelectionManager.vue b/src/components/SelectionManager.vue index eaf6216e..04463542 100644 --- a/src/components/SelectionManager.vue +++ b/src/components/SelectionManager.vue @@ -364,12 +364,13 @@ export default class SelectionManager extends Mixins(GlobalMixin, UserConfig) { // Scroll if at top or bottom const scrollUp = touch.clientY > 50 && touch.clientY < 110; // 50 topbar - const scrollDown = touch.clientY > window.innerHeight - 60; + const scrollDown = touch.clientY > globalThis.windowInnerHeight - 60; if (scrollUp || scrollDown) { if (scrollUp) { this.touchScrollDelta = (-1 * (110 - touch.clientY)) / 3; } else { - this.touchScrollDelta = (touch.clientY - window.innerHeight + 60) / 3; + this.touchScrollDelta = + (touch.clientY - globalThis.windowInnerHeight + 60) / 3; } if (this.touchAnchor && !this.touchScrollInterval) { diff --git a/src/components/Timeline.vue b/src/components/Timeline.vue index 9cb0693f..012f69a3 100644 --- a/src/components/Timeline.vue +++ b/src/components/Timeline.vue @@ -313,11 +313,11 @@ export default class Timeline extends Mixins(GlobalMixin, UserConfig) { } isMobile() { - return window.innerWidth <= 768; + return globalThis.windowInnerWidth <= 768; } isMobileLayout() { - return window.innerWidth <= 600; + return globalThis.windowInnerWidth <= 600; } get isMonthView() { @@ -378,6 +378,11 @@ export default class Timeline extends Mixins(GlobalMixin, UserConfig) { /** Do resize after some time */ handleResizeWithDelay() { + // Update global vars + globalThis.windowInnerWidth = window.innerWidth; + globalThis.windowInnerHeight = window.innerHeight; + + // Reflow after timer if (this.resizeTimer) { clearTimeout(this.resizeTimer); } diff --git a/src/components/Viewer.vue b/src/components/Viewer.vue index 584f51c5..145d4b69 100644 --- a/src/components/Viewer.vue +++ b/src/components/Viewer.vue @@ -212,7 +212,7 @@ export default class Viewer extends Mixins(GlobalMixin) { if (this.canShare) base++; if (this.canEdit) base++; - if (window.innerWidth < 768) { + if (globalThis.windowInnerWidth < 768) { return Math.min(base, 3); } else { return Math.min(base, 5); @@ -317,8 +317,8 @@ export default class Viewer extends Mixins(GlobalMixin) { const sidebarWidth = this.sidebarOpen ? this.sidebarWidth : 0; this.outerWidth = `calc(100vw - ${sidebarWidth}px)`; return { - x: window.innerWidth - sidebarWidth, - y: window.innerHeight, + x: globalThis.windowInnerWidth - sidebarWidth, + y: globalThis.windowInnerHeight, }; }, ...args, @@ -556,7 +556,7 @@ export default class Viewer extends Mixins(GlobalMixin) { const thumb = this.thumbElem(e.slide.data?.photo); if (thumb && this.fullyOpened) { const rect = thumb.getBoundingClientRect(); - if (rect.bottom < 50 || rect.top > window.innerHeight - 50) { + if (rect.bottom < 50 || rect.top > globalThis.windowInnerHeight - 50) { thumb.scrollIntoView({ block: "center", }); diff --git a/src/components/top-matter/OnThisDay.vue b/src/components/top-matter/OnThisDay.vue index d0e78e35..fc160e16 100644 --- a/src/components/top-matter/OnThisDay.vue +++ b/src/components/top-matter/OnThisDay.vue @@ -147,7 +147,7 @@ export default class OnThisDay extends Mixins(GlobalMixin) { // Choose preview photo for (const year of this.years) { // Try to prioritize landscape photos on desktop - if (window.innerWidth <= 600) { + if (globalThis.windowInnerWidth <= 600) { const landscape = year.photos.filter((p) => p.w > p.h); year.preview = utils.randomChoice(landscape); } diff --git a/src/main.ts b/src/main.ts index bea31e0d..366fbc6b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -41,9 +41,15 @@ declare global { var currentViewerPhoto: IPhoto; var touchingPhoto: boolean; + var windowInnerWidth: number; // cache + var windowInnerHeight: number; // cache } + globalThis.vuerouter = router; + globalThis.touchingPhoto = false; +globalThis.windowInnerWidth = window.innerWidth; +globalThis.windowInnerHeight = window.innerHeight; Vue.use(VueVirtualScroller); From 92f5d5bd55f4c5fe37d03be4b5f33d4645048f98 Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Wed, 23 Nov 2022 03:47:37 -0800 Subject: [PATCH 12/18] Add contain to pswp --- src/components/Viewer.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/Viewer.vue b/src/components/Viewer.vue index 145d4b69..15ad04fb 100644 --- a/src/components/Viewer.vue +++ b/src/components/Viewer.vue @@ -947,6 +947,8 @@ export default class Viewer extends Mixins(GlobalMixin) { } :deep .pswp { + contain: strict; + .pswp__zoom-wrap { width: 100%; } From 271dd5b2300e247dc7ee14e390c45fb581ee9b3b Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Wed, 23 Nov 2022 04:53:16 -0800 Subject: [PATCH 13/18] PHP lint fix --- lib/Db/TimelineWrite.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Db/TimelineWrite.php b/lib/Db/TimelineWrite.php index 33025472..1d5dc88e 100644 --- a/lib/Db/TimelineWrite.php +++ b/lib/Db/TimelineWrite.php @@ -216,6 +216,6 @@ class TimelineWrite $p = $this->connection->getDatabasePlatform(); $t1 = $p->getTruncateTableSQL('`*PREFIX*memories`', false); $t2 = $p->getTruncateTableSQL('`*PREFIX*memories_livephoto`', false); - $this->connection->executeStatement("$t1; $t2"); + $this->connection->executeStatement("{$t1}; {$t2}"); } } From 952f63e77c796cd8b6523d164f00c14d6087d91b Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Wed, 23 Nov 2022 05:07:48 -0800 Subject: [PATCH 14/18] viewer: keep ui on click --- src/components/Viewer.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/Viewer.vue b/src/components/Viewer.vue index 15ad04fb..992667e2 100644 --- a/src/components/Viewer.vue +++ b/src/components/Viewer.vue @@ -18,6 +18,7 @@ ref="inner" v-show="!editorOpen" @pointermove.passive="setUiVisible" + @pointerdown.passive="setUiVisible" >
Date: Wed, 23 Nov 2022 09:58:54 -0800 Subject: [PATCH 15/18] Fail build on get-exiftool failure --- scripts/get-exiftool.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/get-exiftool.sh b/scripts/get-exiftool.sh index d6d2efdc..6e22e15a 100755 --- a/scripts/get-exiftool.sh +++ b/scripts/get-exiftool.sh @@ -1,10 +1,13 @@ #!/bin/sh +set -e + exifver="12.49" rm -rf exiftool-bin mkdir -p exiftool-bin cd exiftool-bin +echo "Getting exiftool $exifver" wget -q "https://github.com/pulsejet/exiftool-bin/releases/download/$exifver/exiftool-amd64-musl" wget -q "https://github.com/pulsejet/exiftool-bin/releases/download/$exifver/exiftool-amd64-glibc" wget -q "https://github.com/pulsejet/exiftool-bin/releases/download/$exifver/exiftool-aarch64-musl" @@ -17,7 +20,8 @@ mv "exiftool-$exifver" exiftool rm -rf *.zip exiftool/t exiftool/html chmod 755 exiftool/exiftool -govod="0.0.17" +govod="0.0.18" +echo "Getting go-vod $govod" wget -q "https://github.com/pulsejet/go-vod/releases/download/$govod/go-vod-amd64" wget -q "https://github.com/pulsejet/go-vod/releases/download/$govod/go-vod-aarch64" chmod 755 go-vod-* From ced6e1380d03282de766f753daf01ed1943bb42c Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Wed, 23 Nov 2022 10:03:29 -0800 Subject: [PATCH 16/18] Update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7cd5f149..0264b6dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ This file is manually updated. Please file an issue if something is missing. -## v4.8.0, v3.8.0 +## v4.8.0, v3.8.0 (2022-11-22) - **Feature**: Support for Live Photos ([#124](https://github.com/pulsejet/memories/issues/124)) - You need to run `occ memories:index --clear` to reindex live photos From b81d9c1df68d8d3956702b631a84c89076a0e927 Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Wed, 23 Nov 2022 10:40:41 -0800 Subject: [PATCH 17/18] Delete livephoto entries on deletion --- lib/Db/TimelineWrite.php | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/Db/TimelineWrite.php b/lib/Db/TimelineWrite.php index 1d5dc88e..4265ea65 100644 --- a/lib/Db/TimelineWrite.php +++ b/lib/Db/TimelineWrite.php @@ -199,11 +199,15 @@ class TimelineWrite */ public function deleteFile(File &$file) { - $query = $this->connection->getQueryBuilder(); - $query->delete('memories') - ->where($query->expr()->eq('fileid', $query->createNamedParameter($file->getId(), IQueryBuilder::PARAM_INT))) - ; - $query->executeStatement(); + $deleteFrom = function ($table) use (&$file) { + $query = $this->connection->getQueryBuilder(); + $query->delete($table) + ->where($query->expr()->eq('fileid', $query->createNamedParameter($file->getId(), IQueryBuilder::PARAM_INT))) + ; + $query->executeStatement(); + }; + $deleteFrom('memories'); + $deleteFrom('memories_livephoto'); } /** From f7e171f8847cb88b263eb4f46087c77f6c6e09ca Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Wed, 23 Nov 2022 10:44:12 -0800 Subject: [PATCH 18/18] release: v4.8.2 --- appinfo/info.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appinfo/info.xml b/appinfo/info.xml index b3b8bdfa..d091b04f 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -33,7 +33,7 @@ Memories is a *batteries-included* photo management solution for Nextcloud with 1. Run `php ./occ memories:index` to generate metadata indices for existing photos. 1. Open the 📷 Memories app in Nextcloud and set the directory containing your photos. ]]> - 4.8.1 + 4.8.2 agpl Varun Patil Memories