diff --git a/appinfo/info.xml b/appinfo/info.xml
index 33726d20..c45c0aa9 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.10.2
+ 4.10.3
agpl
Varun Patil
Memories
diff --git a/l10n/bg.js b/l10n/bg.js
index 6e12f31e..d633782d 100644
--- a/l10n/bg.js
+++ b/l10n/bg.js
@@ -41,6 +41,7 @@ OC.L10N.register(
"Edit Date/Time" : "Редактиране на Дата/Час",
"Edit EXIF Data" : "Редактиране на EXIF данни",
"View in folder" : "Преглед в папката",
+ "Move to folder" : "Преместване в папка",
"Add to album" : "Добавяне към албум",
"Move to another person" : "Преминаване към друго лице",
"Remove from person" : "Премахване от лице",
@@ -112,6 +113,7 @@ OC.L10N.register(
"Label" : "Име",
"Camera Make" : "Марка на камера",
"Camera Model" : "Модел на камера",
+ "Lens Model" : "Модел на обектива",
"Copyright" : "Авторско право",
"Remove person" : "Премахване на лице",
"Are you sure you want to remove {name}?" : "Сигурни ли сте, че искате премахване на {name}?",
@@ -131,6 +133,8 @@ OC.L10N.register(
"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." : "Ако създадете публично споделяне на връзка, щракнете върху Опресняване и съответна връзка към приложението Спомени ще бъде показана по-долу.",
"Refresh" : "Опресняване",
+ "Choose a folder" : "Избор на папка",
+ "_{n} item moved to folder_::_{n} items moved to folder_" : ["{n} елементa са преместени в папката","{n} елементa са преместени в папката"],
"Remove" : "Премахване",
"Add Path" : "Добавяне на път",
"Add a root to your timeline" : "Избо на основа /начало/ към вашата времева линия ",
@@ -140,6 +144,8 @@ OC.L10N.register(
"Merge with different person" : "Обединяване с различно лице",
"Mark person in preview" : "Маркиране на лице в предварителен преглед",
"Share folder" : "Споделяне на папка",
+ "Folder View" : "Изглед на папка",
+ "Timeline View" : "Изглед на времева линия",
"Move left" : "Преместване наляво",
"Move right" : "Преместване надясно",
"Failed to get Exif data. Metadata may be lost!" : "Неуспешно получаване на Exif данни. Възможно е метаданните да са загубени!",
@@ -246,12 +252,16 @@ OC.L10N.register(
"Direct" : "Директно",
"Auto" : "Автоматично",
"Shared Folder" : "Споделена папка",
+ "Shared Album" : "Споделен албум",
"Failed to create {albumName}." : "Неуспешно създаване на {albumName}.",
"Failed to rename {currentAlbumName} to {newAlbumName}." : "Неуспешно преименуване от {currentAlbumName} на {newAlbumName}.",
"General Failure" : "Грешка от общ характер",
"Error: {msg}" : "Грешка: {msg}",
"Failed to delete files." : "Неуспешно изтриване на файлове.",
"Failed to delete {fileName}." : "Неуспешно изтриване на {fileName}.",
+ "Failed to move files." : "Неуспешно преместване на файлове.",
+ "Could not move {fileName}, target exists." : "Файлът {fileName} не може да бъде преместен, дестинацията съществува.",
+ "Failed to move {fileName}." : "Неуспешно преместване на {fileName}.",
"Failed to download files" : "Неуспешно изтегляне на файлове",
"Failed to favorite files." : "Неуспешно добавяне на файлове в любими.",
"Failed to favorite some files." : "Неуспешно добавяне на някой файлове в любими.",
diff --git a/l10n/bg.json b/l10n/bg.json
index 59903ada..5098090e 100644
--- a/l10n/bg.json
+++ b/l10n/bg.json
@@ -39,6 +39,7 @@
"Edit Date/Time" : "Редактиране на Дата/Час",
"Edit EXIF Data" : "Редактиране на EXIF данни",
"View in folder" : "Преглед в папката",
+ "Move to folder" : "Преместване в папка",
"Add to album" : "Добавяне към албум",
"Move to another person" : "Преминаване към друго лице",
"Remove from person" : "Премахване от лице",
@@ -110,6 +111,7 @@
"Label" : "Име",
"Camera Make" : "Марка на камера",
"Camera Model" : "Модел на камера",
+ "Lens Model" : "Модел на обектива",
"Copyright" : "Авторско право",
"Remove person" : "Премахване на лице",
"Are you sure you want to remove {name}?" : "Сигурни ли сте, че искате премахване на {name}?",
@@ -129,6 +131,8 @@
"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." : "Ако създадете публично споделяне на връзка, щракнете върху Опресняване и съответна връзка към приложението Спомени ще бъде показана по-долу.",
"Refresh" : "Опресняване",
+ "Choose a folder" : "Избор на папка",
+ "_{n} item moved to folder_::_{n} items moved to folder_" : ["{n} елементa са преместени в папката","{n} елементa са преместени в папката"],
"Remove" : "Премахване",
"Add Path" : "Добавяне на път",
"Add a root to your timeline" : "Избо на основа /начало/ към вашата времева линия ",
@@ -138,6 +142,8 @@
"Merge with different person" : "Обединяване с различно лице",
"Mark person in preview" : "Маркиране на лице в предварителен преглед",
"Share folder" : "Споделяне на папка",
+ "Folder View" : "Изглед на папка",
+ "Timeline View" : "Изглед на времева линия",
"Move left" : "Преместване наляво",
"Move right" : "Преместване надясно",
"Failed to get Exif data. Metadata may be lost!" : "Неуспешно получаване на Exif данни. Възможно е метаданните да са загубени!",
@@ -244,12 +250,16 @@
"Direct" : "Директно",
"Auto" : "Автоматично",
"Shared Folder" : "Споделена папка",
+ "Shared Album" : "Споделен албум",
"Failed to create {albumName}." : "Неуспешно създаване на {albumName}.",
"Failed to rename {currentAlbumName} to {newAlbumName}." : "Неуспешно преименуване от {currentAlbumName} на {newAlbumName}.",
"General Failure" : "Грешка от общ характер",
"Error: {msg}" : "Грешка: {msg}",
"Failed to delete files." : "Неуспешно изтриване на файлове.",
"Failed to delete {fileName}." : "Неуспешно изтриване на {fileName}.",
+ "Failed to move files." : "Неуспешно преместване на файлове.",
+ "Could not move {fileName}, target exists." : "Файлът {fileName} не може да бъде преместен, дестинацията съществува.",
+ "Failed to move {fileName}." : "Неуспешно преместване на {fileName}.",
"Failed to download files" : "Неуспешно изтегляне на файлове",
"Failed to favorite files." : "Неуспешно добавяне на файлове в любими.",
"Failed to favorite some files." : "Неуспешно добавяне на някой файлове в любими.",
diff --git a/l10n/es.js b/l10n/es.js
index 6c6e2435..1c69e95f 100644
--- a/l10n/es.js
+++ b/l10n/es.js
@@ -113,6 +113,7 @@ OC.L10N.register(
"Label" : "Etiqueta",
"Camera Make" : "Marca de la cámara",
"Camera Model" : "Modelo de la cámara",
+ "Lens Model" : "Modelo del lente",
"Copyright" : "Derechos de autor",
"Remove person" : "Eliminar persona",
"Are you sure you want to remove {name}?" : "¿Está seguro de que quiere quitar {name}?",
@@ -133,6 +134,7 @@ OC.L10N.register(
"If you create a public link share, click on refresh and a corresponding link to Memories will be shown below." : "Si crea un enlace público de compartición, haga click en refrescar y se mostrará abajo el enlace correspondiente a Memories.",
"Refresh" : "Actualizar",
"Choose a folder" : "Elige una carpeta",
+ "_{n} item moved to folder_::_{n} items moved to folder_" : ["{n} ítem movidos a la carpeta","{n} ítems movidos a la carpeta","{n} ítems movidos a la carpeta"],
"Remove" : "Quitar",
"Add Path" : "Añadir ruta",
"Add a root to your timeline" : "Añadir una raíz a su línea de tiempo",
@@ -142,6 +144,8 @@ OC.L10N.register(
"Merge with different person" : "Unir con una persona diferente",
"Mark person in preview" : "Marcar persona en vista previa",
"Share folder" : "Compartir carpeta",
+ "Folder View" : "Vista de Carpetas",
+ "Timeline View" : "Vista de línea de tiempo",
"Move left" : "Mover a la izquierda",
"Move right" : "Mover a la derecha",
"Failed to get Exif data. Metadata may be lost!" : "Fallo al obtener los datos Exif. ¡Podrían haberse perdido los metadatos!",
@@ -256,6 +260,8 @@ OC.L10N.register(
"Failed to delete files." : "Fallo al eliminar archivos.",
"Failed to delete {fileName}." : "Fallo al eliminar {fileName}.",
"Failed to move files." : "Error al mover archivos.",
+ "Could not move {fileName}, target exists." : "No fue posible mover {fileName}, el destino existe.",
+ "Failed to move {fileName}." : "Fallo al mover {fileName}.",
"Failed to download files" : "Fallo al descargar archivos",
"Failed to favorite files." : "Fallo al marcar archivos como favoritos.",
"Failed to favorite some files." : "Fallo al marcar algunos archivos como favoritos.",
diff --git a/l10n/es.json b/l10n/es.json
index dcd7c392..0f2a75c5 100644
--- a/l10n/es.json
+++ b/l10n/es.json
@@ -111,6 +111,7 @@
"Label" : "Etiqueta",
"Camera Make" : "Marca de la cámara",
"Camera Model" : "Modelo de la cámara",
+ "Lens Model" : "Modelo del lente",
"Copyright" : "Derechos de autor",
"Remove person" : "Eliminar persona",
"Are you sure you want to remove {name}?" : "¿Está seguro de que quiere quitar {name}?",
@@ -131,6 +132,7 @@
"If you create a public link share, click on refresh and a corresponding link to Memories will be shown below." : "Si crea un enlace público de compartición, haga click en refrescar y se mostrará abajo el enlace correspondiente a Memories.",
"Refresh" : "Actualizar",
"Choose a folder" : "Elige una carpeta",
+ "_{n} item moved to folder_::_{n} items moved to folder_" : ["{n} ítem movidos a la carpeta","{n} ítems movidos a la carpeta","{n} ítems movidos a la carpeta"],
"Remove" : "Quitar",
"Add Path" : "Añadir ruta",
"Add a root to your timeline" : "Añadir una raíz a su línea de tiempo",
@@ -140,6 +142,8 @@
"Merge with different person" : "Unir con una persona diferente",
"Mark person in preview" : "Marcar persona en vista previa",
"Share folder" : "Compartir carpeta",
+ "Folder View" : "Vista de Carpetas",
+ "Timeline View" : "Vista de línea de tiempo",
"Move left" : "Mover a la izquierda",
"Move right" : "Mover a la derecha",
"Failed to get Exif data. Metadata may be lost!" : "Fallo al obtener los datos Exif. ¡Podrían haberse perdido los metadatos!",
@@ -254,6 +258,8 @@
"Failed to delete files." : "Fallo al eliminar archivos.",
"Failed to delete {fileName}." : "Fallo al eliminar {fileName}.",
"Failed to move files." : "Error al mover archivos.",
+ "Could not move {fileName}, target exists." : "No fue posible mover {fileName}, el destino existe.",
+ "Failed to move {fileName}." : "Fallo al mover {fileName}.",
"Failed to download files" : "Fallo al descargar archivos",
"Failed to favorite files." : "Fallo al marcar archivos como favoritos.",
"Failed to favorite some files." : "Fallo al marcar algunos archivos como favoritos.",
diff --git a/l10n/es_MX.js b/l10n/es_MX.js
index 47179de7..24623c93 100644
--- a/l10n/es_MX.js
+++ b/l10n/es_MX.js
@@ -1,10 +1,12 @@
OC.L10N.register(
"memories",
{
+ "Memories" : "Recuerdos",
"Settings" : "Ajustes",
"Folders" : "Carpetas",
"Favorites" : "Favoritos",
"Videos" : "Videos",
+ "Albums" : "Álbumes",
"Archive" : "Archivar",
"Tags" : "Etiquetas",
"Maps" : "Mapas",
@@ -45,6 +47,7 @@ OC.L10N.register(
"Text" : "Texto",
"Size" : "Tamaño",
"Position" : "Posición",
- "Name is required." : "Nombre es requerido."
+ "Name is required." : "Nombre es requerido.",
+ "Quality" : "Calidad"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/l10n/es_MX.json b/l10n/es_MX.json
index 955270bc..4f502a77 100644
--- a/l10n/es_MX.json
+++ b/l10n/es_MX.json
@@ -1,8 +1,10 @@
{ "translations": {
+ "Memories" : "Recuerdos",
"Settings" : "Ajustes",
"Folders" : "Carpetas",
"Favorites" : "Favoritos",
"Videos" : "Videos",
+ "Albums" : "Álbumes",
"Archive" : "Archivar",
"Tags" : "Etiquetas",
"Maps" : "Mapas",
@@ -43,6 +45,7 @@
"Text" : "Texto",
"Size" : "Tamaño",
"Position" : "Posición",
- "Name is required." : "Nombre es requerido."
+ "Name is required." : "Nombre es requerido.",
+ "Quality" : "Calidad"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}
\ No newline at end of file
diff --git a/l10n/hu.js b/l10n/hu.js
index 7b4b2af4..a5a44735 100644
--- a/l10n/hu.js
+++ b/l10n/hu.js
@@ -113,6 +113,7 @@ OC.L10N.register(
"Label" : "Címke",
"Camera Make" : "Kamera gyártmánya",
"Camera Model" : "Kamera modellje",
+ "Lens Model" : "Lencse modellje",
"Copyright" : "Szerzői jog",
"Remove person" : "Személy eltávolítása",
"Are you sure you want to remove {name}?" : "Biztos, hogy eltávolítja a következőt: {name}?",
@@ -133,6 +134,7 @@ OC.L10N.register(
"If you create a public link share, click on refresh and a corresponding link to Memories will be shown below." : "Ha nyilvános hivatkozásos megosztást hoz létre, kattintson a frissítésre, és lent megjelenik az Emlékeknek megfelelő hivatkozás.",
"Refresh" : "Frissítés",
"Choose a folder" : "Válasszon mappát",
+ "_{n} item moved to folder_::_{n} items moved to folder_" : ["{n} elem áthelyezve a mappába","{n} elem áthelyezve a mappába"],
"Remove" : "Eltávolítás",
"Add Path" : "Útvonal hozzáadása",
"Add a root to your timeline" : "Gyökér hozzáadása az idővonalához",
diff --git a/l10n/hu.json b/l10n/hu.json
index cb294df7..95154ed7 100644
--- a/l10n/hu.json
+++ b/l10n/hu.json
@@ -111,6 +111,7 @@
"Label" : "Címke",
"Camera Make" : "Kamera gyártmánya",
"Camera Model" : "Kamera modellje",
+ "Lens Model" : "Lencse modellje",
"Copyright" : "Szerzői jog",
"Remove person" : "Személy eltávolítása",
"Are you sure you want to remove {name}?" : "Biztos, hogy eltávolítja a következőt: {name}?",
@@ -131,6 +132,7 @@
"If you create a public link share, click on refresh and a corresponding link to Memories will be shown below." : "Ha nyilvános hivatkozásos megosztást hoz létre, kattintson a frissítésre, és lent megjelenik az Emlékeknek megfelelő hivatkozás.",
"Refresh" : "Frissítés",
"Choose a folder" : "Válasszon mappát",
+ "_{n} item moved to folder_::_{n} items moved to folder_" : ["{n} elem áthelyezve a mappába","{n} elem áthelyezve a mappába"],
"Remove" : "Eltávolítás",
"Add Path" : "Útvonal hozzáadása",
"Add a root to your timeline" : "Gyökér hozzáadása az idővonalához",
diff --git a/l10n/nl.js b/l10n/nl.js
index 0e4a5f10..023f4b0c 100644
--- a/l10n/nl.js
+++ b/l10n/nl.js
@@ -1,6 +1,8 @@
OC.L10N.register(
"memories",
{
+ "Memories" : "Herinneringen",
+ "Fast, modern and advanced photo management suite" : "Snelle, moderne en geavanceerde suite voor fotobeheer",
"Settings" : "Instellingen",
"People" : "Mensen",
"Timeline" : "Tijdlijn",
@@ -8,62 +10,169 @@ OC.L10N.register(
"Favorites" : "Favorieten",
"Videos" : "Videos",
"Albums" : "Albums",
- "Archive" : "Archiveren",
+ "Archive" : "Archief",
"On this day" : "Vandaag",
"Tags" : "Tags",
"Maps" : "Kaarten",
+ "A better photos experience awaits you" : "Een betere foto-ervaring wacht op je",
+ "Choose the root folder of your timeline to begin" : "Kies de hoofdmap van je tijdlijn om te beginnen",
+ "If you just installed Memories, run:" : "Als je Herinneringen net hebt geïnstalleerd, voer je het volgende uit:",
+ "Continue to Memories" : "Doorgaan naar Herinneringen",
+ "Choose again" : "Opnieuw kiezen",
+ "Click here to start" : "Klik hier om te beginnen",
+ "You can always change this later in settings" : "Je kunt dit later altijd nog wijzigen in de instellingen",
+ "Choose the root of your timeline" : "Kies de hoofdmap van je tijdlijn",
+ "_Found {n} item in {path}_::_Found {n} items in {path}_" : ["{n} items gevonden in {path}","{n} items gevonden in {path}"],
"Edit" : "Bewerk",
+ "No title" : "Geen titel",
+ "No description" : "Geen beschrijving",
"Loading …" : "Laden …",
"Cancel" : "Annuleren",
"Delete" : "Verwijder",
+ "Remove from album" : "Verwijderen uit album",
"Download" : "Download",
"Favorite" : "Favoriet",
"Unarchive" : "Terugzetten uit archief",
+ "Edit Date/Time" : "Datum/tijd bewerken",
+ "Edit EXIF Data" : "Bewerk EXIF gegevens",
"View in folder" : "Bekijken in map",
+ "Move to folder" : "Verplaatsen naar map",
+ "Add to album" : "Toevoegen aan album",
+ "Your Timeline" : "Je tijdlijn",
+ "Processing … {n}/{m}" : "Verwerken … {n}/{m}",
+ "_{n} item added to album_::_{n} items added to album_" : ["{n} items toegevoegd aan album","{n} items toegevoegd aan album"],
+ "Search for collaborators" : "Zoeken naar bijdragers",
+ "Search people or groups" : "Zoek mensen of groepen",
+ "Add {collaboratorLabel} to the collaborators list" : "Voeg {collaboratorLabel} toe aan de bijdragerslijst",
+ "No collaborators available" : "Geen bijdragers beschikbaar",
+ "Remove {collaboratorLabel} from the collaborators list" : "Verwijder {collaboratorLabel} van de bijdragerslijst",
+ "Copy the public link" : "Kopieer de openbare link",
+ "Delete the public link" : "Verwijder de openbare link",
+ "Add people or groups who can edit your album" : "Voeg mensen of groepen toe die je album kunnen bewerken",
+ "Public link copied!" : "Openbare link gekopieerd!",
"Copy public link" : "Kopieer openbare link",
- "Public link" : "Openbare Link",
+ "Share via public link" : "Deel via openbare link",
+ "Failed to fetch collaborators list." : "Ophalen van bijdragerslijst is mislukt.",
+ "Public link" : "Openbare link",
+ "Failed to fetch album." : "Ophalen van album mislukt.",
+ "Failed to update album." : "Bijwerken van album mislukt.",
+ "New album" : "Nieuw album",
+ "Create new album" : "Maak nieuw album",
+ "Edit album details" : "Bewerk albumdetails",
+ "Could not load the selected album" : "Kon het geselecteerde album niet laden",
+ "Remove Album" : "Verwijder album",
+ "Failed to delete {name}." : "Verwijderen van {name} mislukt.",
+ "Name of the album" : "Naam van het album",
+ "Location of the album" : "Locatie van het album",
+ "Go back to the previous view." : "Ga terug naar de vorige weergave.",
+ "Go to the add collaborators view." : "Ga naar de bijdragers toevoegen weergave.",
+ "Back to the new album form." : "Terug naar het formulier voor nieuw album.",
"Back" : "Terug",
+ "Add collaborators" : "Bijdragers toevoegen",
"Save" : "Opslaan",
+ "Create album" : "Maak album",
+ "Add selection to album {albumName}" : "Selectie toevoegen aan album {albumName}",
+ "Create a new album." : "Maak een nieuw album.",
+ "_Share with %n user_::_Share with %n users_" : ["Delen met %n gebruiker","Delen met %n gebruikers"],
+ "Save collaborators for this album." : "Bewaar bijdragers voor dit album.",
"Year" : "Jaar",
"Month" : "Maand",
"Day" : "Dag",
"Time" : "Tijd",
"Hour" : "Uur",
"Minute" : "Minuut",
+ "Update Exif" : "Exif bijwerken",
"Title" : "Titel",
"Description" : "Beschrijving",
+ "Date Taken" : "Datum gemaakt",
"Label" : "Label",
+ "Camera Make" : "Cameramerk",
+ "Camera Model" : "Cameramodel",
+ "Lens Model" : "Lensmodel",
"Copyright" : "Auteursrecht",
+ "Remove person" : "Verwijder persoon",
"Name" : "Naam",
+ "Rename person" : "Hernoem persoon",
"Update" : "Update",
+ "Share Folder" : "Map delen",
+ "You cannot share the root folder" : "Je kunt de hoofdmap niet delen",
+ "Use the sidebar to share this folder." : "Gebruik de zijbalk om deze map te delen.",
+ "If you create a public link share, click on refresh and a corresponding link to Memories will be shown below." : "Als je een openbare deellink maakt, klik op vernieuwen en een bijbehorende link naar Herinneringen wordt hieronder weergegeven.",
"Refresh" : "Verversen",
"Remove" : "Verwijderen",
+ "Share album" : "Album delen",
+ "Download album" : "Album downloaden",
+ "Delete album" : "Album verwijderen",
+ "Merge with different person" : "Samenvoegen met ander persoon",
"Share folder" : "Map delen",
+ "Folder View" : "Mapweergave",
+ "Timeline View" : "Tijdlijnweergave",
+ "No Exif data found! Continue?" : "Geen Exif gegevens gevonden! Doorgaan?",
"Unsaved changes" : "Niet opgeslagen veranderingen",
"Share" : "Delen",
+ "Sidebar" : "Zijbalk",
+ "Slideshow" : "Diavoorstelling",
"Close" : "Sluit",
"Previous" : "Vorige",
"Next" : "Volgende",
"Are you sure you want to delete?" : "Weet je zeker dat je wilt verwijderen?",
"Reset" : "Herstellen",
+ "All changes will be lost." : "Alle aanpassingen zullen verloren gaan.",
+ "Are you sure you want to continue?" : "Weet je zeker dat je wilt doorgaan?",
"Continue" : "Doorgaan",
"Undo" : "Ongedaan maken",
"Redo" : "Opnieuw doen",
- "Zoom in" : "Zoom in",
- "Draw" : "Teken",
+ "Show original image" : "Toon originele afbeelding",
+ "Zoom in" : "Inzoomen",
+ "Zoom out" : "Uitzoomen",
+ "Toggle zoom menu" : "Toon/verberg zoommenu",
+ "Adjust" : "Aanpassen",
+ "Filters" : "Filters",
+ "Draw" : "Tekenen",
"Original" : "Origineel",
- "Custom" : "Maatwerk",
- "Un-flip X" : "Ontspiegelen X",
+ "Custom" : "Aangepast",
+ "Landscape" : "Landschap",
+ "Portrait" : "Portret",
+ "Ellipse" : "Ovaal",
+ "Arrow" : "Pijl",
+ "Blur" : "Vervagen",
+ "Brightness" : "Helderheid",
+ "Contrast" : "Contrast",
+ "Un-flip X" : "Ontspiegel X",
+ "Flip X" : "Spiegel X",
+ "Un-flip Y" : "Spiegel Y",
+ "Flip Y" : "Ontspiegel Y",
+ "HSV" : "HSV",
+ "Hue" : "Tint",
+ "Saturation" : "Verzadiging",
"Value" : "Waarden",
"Image" : "Afbeelding",
+ "+ Add image" : "+ Afbeelding toevoegen",
"Line" : "Lijn",
+ "Polygon" : "Veelhoek",
+ "Rectangle" : "Rechthoek",
+ "Corner Radius" : "Hoekradius",
+ "Height in pixels" : "Hoogte in pixels",
+ "Toggle ratio lock" : "In-/uitschakelen ratio vergrendeling",
+ "Rotate" : "Draaien",
"Text" : "Tekst",
"Size" : "Omvang",
+ "Line height" : "Regelhoogte",
+ "Warmth" : "Warmte",
+ "Shadow" : "Schaduw",
+ "Opacity" : "Doorzichtigheid",
"Position" : "Positie",
+ "Stroke" : "Rand",
"Extension" : "Extensie",
"Name is required." : "Naam is verplicht.",
"Quality" : "Kwaliteit",
+ "Saved image size (width x height)" : "Grootte van opgeslagen afbeelding (breedte x hoogte)",
+ "Actual size (100%)" : "Ware grootte (100%)",
+ "Fit size" : "Passend maken",
"Direct" : "Direct",
- "Auto" : "Automatisch"
+ "Auto" : "Automatisch",
+ "Failed to create {albumName}." : "Het maken van {albumName} is mislukt.",
+ "Failed to rename {currentAlbumName} to {newAlbumName}." : "Hernoemen van {currentAlbumName} naar {newAlbumName} mislukt.",
+ "Failed to delete {fileName}." : "Verwijderen van {fileName} mislukt."
},
"nplurals=2; plural=(n != 1);");
diff --git a/l10n/nl.json b/l10n/nl.json
index b48626b5..88f0b1e7 100644
--- a/l10n/nl.json
+++ b/l10n/nl.json
@@ -1,4 +1,6 @@
{ "translations": {
+ "Memories" : "Herinneringen",
+ "Fast, modern and advanced photo management suite" : "Snelle, moderne en geavanceerde suite voor fotobeheer",
"Settings" : "Instellingen",
"People" : "Mensen",
"Timeline" : "Tijdlijn",
@@ -6,62 +8,169 @@
"Favorites" : "Favorieten",
"Videos" : "Videos",
"Albums" : "Albums",
- "Archive" : "Archiveren",
+ "Archive" : "Archief",
"On this day" : "Vandaag",
"Tags" : "Tags",
"Maps" : "Kaarten",
+ "A better photos experience awaits you" : "Een betere foto-ervaring wacht op je",
+ "Choose the root folder of your timeline to begin" : "Kies de hoofdmap van je tijdlijn om te beginnen",
+ "If you just installed Memories, run:" : "Als je Herinneringen net hebt geïnstalleerd, voer je het volgende uit:",
+ "Continue to Memories" : "Doorgaan naar Herinneringen",
+ "Choose again" : "Opnieuw kiezen",
+ "Click here to start" : "Klik hier om te beginnen",
+ "You can always change this later in settings" : "Je kunt dit later altijd nog wijzigen in de instellingen",
+ "Choose the root of your timeline" : "Kies de hoofdmap van je tijdlijn",
+ "_Found {n} item in {path}_::_Found {n} items in {path}_" : ["{n} items gevonden in {path}","{n} items gevonden in {path}"],
"Edit" : "Bewerk",
+ "No title" : "Geen titel",
+ "No description" : "Geen beschrijving",
"Loading …" : "Laden …",
"Cancel" : "Annuleren",
"Delete" : "Verwijder",
+ "Remove from album" : "Verwijderen uit album",
"Download" : "Download",
"Favorite" : "Favoriet",
"Unarchive" : "Terugzetten uit archief",
+ "Edit Date/Time" : "Datum/tijd bewerken",
+ "Edit EXIF Data" : "Bewerk EXIF gegevens",
"View in folder" : "Bekijken in map",
+ "Move to folder" : "Verplaatsen naar map",
+ "Add to album" : "Toevoegen aan album",
+ "Your Timeline" : "Je tijdlijn",
+ "Processing … {n}/{m}" : "Verwerken … {n}/{m}",
+ "_{n} item added to album_::_{n} items added to album_" : ["{n} items toegevoegd aan album","{n} items toegevoegd aan album"],
+ "Search for collaborators" : "Zoeken naar bijdragers",
+ "Search people or groups" : "Zoek mensen of groepen",
+ "Add {collaboratorLabel} to the collaborators list" : "Voeg {collaboratorLabel} toe aan de bijdragerslijst",
+ "No collaborators available" : "Geen bijdragers beschikbaar",
+ "Remove {collaboratorLabel} from the collaborators list" : "Verwijder {collaboratorLabel} van de bijdragerslijst",
+ "Copy the public link" : "Kopieer de openbare link",
+ "Delete the public link" : "Verwijder de openbare link",
+ "Add people or groups who can edit your album" : "Voeg mensen of groepen toe die je album kunnen bewerken",
+ "Public link copied!" : "Openbare link gekopieerd!",
"Copy public link" : "Kopieer openbare link",
- "Public link" : "Openbare Link",
+ "Share via public link" : "Deel via openbare link",
+ "Failed to fetch collaborators list." : "Ophalen van bijdragerslijst is mislukt.",
+ "Public link" : "Openbare link",
+ "Failed to fetch album." : "Ophalen van album mislukt.",
+ "Failed to update album." : "Bijwerken van album mislukt.",
+ "New album" : "Nieuw album",
+ "Create new album" : "Maak nieuw album",
+ "Edit album details" : "Bewerk albumdetails",
+ "Could not load the selected album" : "Kon het geselecteerde album niet laden",
+ "Remove Album" : "Verwijder album",
+ "Failed to delete {name}." : "Verwijderen van {name} mislukt.",
+ "Name of the album" : "Naam van het album",
+ "Location of the album" : "Locatie van het album",
+ "Go back to the previous view." : "Ga terug naar de vorige weergave.",
+ "Go to the add collaborators view." : "Ga naar de bijdragers toevoegen weergave.",
+ "Back to the new album form." : "Terug naar het formulier voor nieuw album.",
"Back" : "Terug",
+ "Add collaborators" : "Bijdragers toevoegen",
"Save" : "Opslaan",
+ "Create album" : "Maak album",
+ "Add selection to album {albumName}" : "Selectie toevoegen aan album {albumName}",
+ "Create a new album." : "Maak een nieuw album.",
+ "_Share with %n user_::_Share with %n users_" : ["Delen met %n gebruiker","Delen met %n gebruikers"],
+ "Save collaborators for this album." : "Bewaar bijdragers voor dit album.",
"Year" : "Jaar",
"Month" : "Maand",
"Day" : "Dag",
"Time" : "Tijd",
"Hour" : "Uur",
"Minute" : "Minuut",
+ "Update Exif" : "Exif bijwerken",
"Title" : "Titel",
"Description" : "Beschrijving",
+ "Date Taken" : "Datum gemaakt",
"Label" : "Label",
+ "Camera Make" : "Cameramerk",
+ "Camera Model" : "Cameramodel",
+ "Lens Model" : "Lensmodel",
"Copyright" : "Auteursrecht",
+ "Remove person" : "Verwijder persoon",
"Name" : "Naam",
+ "Rename person" : "Hernoem persoon",
"Update" : "Update",
+ "Share Folder" : "Map delen",
+ "You cannot share the root folder" : "Je kunt de hoofdmap niet delen",
+ "Use the sidebar to share this folder." : "Gebruik de zijbalk om deze map te delen.",
+ "If you create a public link share, click on refresh and a corresponding link to Memories will be shown below." : "Als je een openbare deellink maakt, klik op vernieuwen en een bijbehorende link naar Herinneringen wordt hieronder weergegeven.",
"Refresh" : "Verversen",
"Remove" : "Verwijderen",
+ "Share album" : "Album delen",
+ "Download album" : "Album downloaden",
+ "Delete album" : "Album verwijderen",
+ "Merge with different person" : "Samenvoegen met ander persoon",
"Share folder" : "Map delen",
+ "Folder View" : "Mapweergave",
+ "Timeline View" : "Tijdlijnweergave",
+ "No Exif data found! Continue?" : "Geen Exif gegevens gevonden! Doorgaan?",
"Unsaved changes" : "Niet opgeslagen veranderingen",
"Share" : "Delen",
+ "Sidebar" : "Zijbalk",
+ "Slideshow" : "Diavoorstelling",
"Close" : "Sluit",
"Previous" : "Vorige",
"Next" : "Volgende",
"Are you sure you want to delete?" : "Weet je zeker dat je wilt verwijderen?",
"Reset" : "Herstellen",
+ "All changes will be lost." : "Alle aanpassingen zullen verloren gaan.",
+ "Are you sure you want to continue?" : "Weet je zeker dat je wilt doorgaan?",
"Continue" : "Doorgaan",
"Undo" : "Ongedaan maken",
"Redo" : "Opnieuw doen",
- "Zoom in" : "Zoom in",
- "Draw" : "Teken",
+ "Show original image" : "Toon originele afbeelding",
+ "Zoom in" : "Inzoomen",
+ "Zoom out" : "Uitzoomen",
+ "Toggle zoom menu" : "Toon/verberg zoommenu",
+ "Adjust" : "Aanpassen",
+ "Filters" : "Filters",
+ "Draw" : "Tekenen",
"Original" : "Origineel",
- "Custom" : "Maatwerk",
- "Un-flip X" : "Ontspiegelen X",
+ "Custom" : "Aangepast",
+ "Landscape" : "Landschap",
+ "Portrait" : "Portret",
+ "Ellipse" : "Ovaal",
+ "Arrow" : "Pijl",
+ "Blur" : "Vervagen",
+ "Brightness" : "Helderheid",
+ "Contrast" : "Contrast",
+ "Un-flip X" : "Ontspiegel X",
+ "Flip X" : "Spiegel X",
+ "Un-flip Y" : "Spiegel Y",
+ "Flip Y" : "Ontspiegel Y",
+ "HSV" : "HSV",
+ "Hue" : "Tint",
+ "Saturation" : "Verzadiging",
"Value" : "Waarden",
"Image" : "Afbeelding",
+ "+ Add image" : "+ Afbeelding toevoegen",
"Line" : "Lijn",
+ "Polygon" : "Veelhoek",
+ "Rectangle" : "Rechthoek",
+ "Corner Radius" : "Hoekradius",
+ "Height in pixels" : "Hoogte in pixels",
+ "Toggle ratio lock" : "In-/uitschakelen ratio vergrendeling",
+ "Rotate" : "Draaien",
"Text" : "Tekst",
"Size" : "Omvang",
+ "Line height" : "Regelhoogte",
+ "Warmth" : "Warmte",
+ "Shadow" : "Schaduw",
+ "Opacity" : "Doorzichtigheid",
"Position" : "Positie",
+ "Stroke" : "Rand",
"Extension" : "Extensie",
"Name is required." : "Naam is verplicht.",
"Quality" : "Kwaliteit",
+ "Saved image size (width x height)" : "Grootte van opgeslagen afbeelding (breedte x hoogte)",
+ "Actual size (100%)" : "Ware grootte (100%)",
+ "Fit size" : "Passend maken",
"Direct" : "Direct",
- "Auto" : "Automatisch"
+ "Auto" : "Automatisch",
+ "Failed to create {albumName}." : "Het maken van {albumName} is mislukt.",
+ "Failed to rename {currentAlbumName} to {newAlbumName}." : "Hernoemen van {currentAlbumName} naar {newAlbumName} mislukt.",
+ "Failed to delete {fileName}." : "Verwijderen van {fileName} mislukt."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
\ No newline at end of file
diff --git a/l10n/ru.js b/l10n/ru.js
index 7aa0caa4..7cde7542 100644
--- a/l10n/ru.js
+++ b/l10n/ru.js
@@ -19,6 +19,8 @@ OC.L10N.register(
"Click here to start" : "Нажмите здесь чтобы начать",
"You can always change this later in settings" : "Эти параметры могут быть позднее изменены в разделе «Настройки»",
"Edit" : "Редактировать",
+ "No title" : "Без названия",
+ "No description" : "Нет описания",
"Loading …" : "Загрузка …",
"Cancel" : "Отменить",
"Delete" : "Удалить",
@@ -27,20 +29,26 @@ OC.L10N.register(
"Favorite" : "В избранное",
"Unarchive" : "Восстановить из архива",
"Edit Date/Time" : "Изменить дату и время",
+ "Edit EXIF Data" : "Редактировать EXIF",
"View in folder" : "Посмотреть в каталоге",
+ "Move to folder" : "Переместить в папку",
"Add to album" : "Добавить в альбом",
"Move to another person" : "Объединить с другой меткой лица",
"Remove from person" : "Снять отметку лица",
"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 touch a large number of files. Are you sure?" : "Подтвердите выполнение действия для большого числа файлов.",
+ "_{n} selected_::_{n} selected_" : ["Выбран: {n}","Выбрано: {n}","Выбрано: {n}","Выбрано: {n}"],
"Timeline Path" : "Расположение",
"Folders Path" : "Верхний уровень для папок",
"Show hidden folders" : "Показывать скрытые файлы",
"Square grid mode" : "Квадратные миниатюры",
"Choose Timeline Paths" : "Расположение для истории",
"Your Timeline" : "Ваша история",
+ "You will find your friends soon. Please, be patient." : "Скоро вы найдете своих друзей. Пожалуйста, наберитесь терпения.",
+ "Face Recognition is disabled. Enable in settings to find your friends." : "Распознавание лиц отключено. Включите его в настройках для поиска своих друзей.",
"Failed to load some photos" : "Не удалось загрузить некоторые фотографии",
+ "Processing … {n}/{m}" : "Обработка... {n}/{m}",
"Search for collaborators" : "Поиск людей и групп для добавления в соавторы",
"Search people or groups" : "Введите имя пользователя или название группы…",
"Add {collaboratorLabel} to the collaborators list" : "Добавить {collaboratorLabel} в соавторы",
@@ -83,9 +91,15 @@ OC.L10N.register(
"Hour" : "Час",
"Minute" : "Минута",
"Update Exif" : "Обновить EXIF",
+ "Newest" : "Более новые",
+ "Oldest" : "Более старые",
+ "Loading data … {n}/{m}" : "Загрузка данных... {n}/{m}",
"Title" : "Название",
"Description" : "Описание",
+ "Date Taken" : "Дата съемки",
"Label" : "Метка",
+ "Camera Model" : "Модель камеры",
+ "Lens Model" : "Модель линз",
"Copyright" : "Авторские права",
"Remove person" : "Удалить",
"Name" : "Имя",
@@ -98,12 +112,17 @@ OC.L10N.register(
"You cannot share the root folder" : "Корневая папка не может быть опубликована",
"Use the sidebar to share this folder." : "Чтобы опубликовать эту папку, воспользуйтесь боковым меню. ",
"Refresh" : "Обновить",
+ "Choose a folder" : "Выберите папку",
"Remove" : "Удалить",
"Add Path" : "Добавть путь",
"Share album" : "Опубликовать альбом",
+ "Download album" : "Скачать альбом",
"Delete album" : "Удалить альбом",
"Merge with different person" : "Объединить с другой меткой",
+ "Mark person in preview" : "Отметить человека в предварительном просмотре",
"Share folder" : "Поделиться папкой",
+ "Folder View" : "Просмотр в виде папок",
+ "Timeline View" : "Просмотр в виде шкалы времени",
"Move left" : "Переместить влево",
"Move right" : "Переместить вправо",
"Failed to get Exif data. Metadata may be lost!" : "Не удалось получить данные EXIF. Метаданные могут быть утеряны.",
@@ -115,9 +134,13 @@ OC.L10N.register(
"Share" : "Поделиться",
"Sidebar" : "Боковая панель",
"Download Video" : "Скачать видео",
+ "Slideshow" : "Слайд шоу",
"Close" : "Закрыть",
"Previous" : "Назад",
"Next" : "Далее",
+ "Video sharing not supported yet" : "Публикация видео пока не поддерживается",
+ "Cannot share this type of data" : "Невозможно опубликовать такой тип данных",
+ "Are you sure you want to delete?" : "Вы уверены, что хотите удалить?",
"Save as" : "Сохранить как",
"Reset" : "Сброс",
"All changes will be lost." : "Изменения не будут сохранены.",
@@ -205,13 +228,20 @@ OC.L10N.register(
"Transcoding failed." : "Ошибка транскодирования.",
"Direct" : "Личное",
"Auto" : "Автоматически",
+ "Shared Folder" : "Опубликованная Папка",
+ "Shared Album" : "Опубликованный альбом",
"Failed to create {albumName}." : "Не удалось создать альбом «{albumName}».",
"Failed to rename {currentAlbumName} to {newAlbumName}." : "Не удалось переименовать альбом «{currentAlbumName}» в «{newAlbumName}».",
"General Failure" : "Общий сбой",
"Error: {msg}" : "Ошибка: {msg}",
"Failed to delete files." : "Ошибка удаления файлов.",
"Failed to delete {fileName}." : "Ошибка удаления файла «{fileName}».",
+ "Failed to move files." : "Не удалось переместить файлы.",
+ "Could not move {fileName}, target exists." : "Ошибка перемещения {fileName}, файл уже существует",
+ "Failed to move {fileName}." : "Не удалось переместить {fileName}",
+ "Failed to download files" : "Не удалось скачать файлы",
"Failed to favorite files." : "Не удалось добавить файлы в избранное.",
+ "Failed to favorite some files." : "Некоторые файлы не удалось добавить в избранное ",
"Failed to favorite {fileName}." : "Не удалось добавить файл «{fileName}» в избранное."
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
diff --git a/l10n/ru.json b/l10n/ru.json
index 224108f1..7eb91ae9 100644
--- a/l10n/ru.json
+++ b/l10n/ru.json
@@ -17,6 +17,8 @@
"Click here to start" : "Нажмите здесь чтобы начать",
"You can always change this later in settings" : "Эти параметры могут быть позднее изменены в разделе «Настройки»",
"Edit" : "Редактировать",
+ "No title" : "Без названия",
+ "No description" : "Нет описания",
"Loading …" : "Загрузка …",
"Cancel" : "Отменить",
"Delete" : "Удалить",
@@ -25,20 +27,26 @@
"Favorite" : "В избранное",
"Unarchive" : "Восстановить из архива",
"Edit Date/Time" : "Изменить дату и время",
+ "Edit EXIF Data" : "Редактировать EXIF",
"View in folder" : "Посмотреть в каталоге",
+ "Move to folder" : "Переместить в папку",
"Add to album" : "Добавить в альбом",
"Move to another person" : "Объединить с другой меткой лица",
"Remove from person" : "Снять отметку лица",
"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 touch a large number of files. Are you sure?" : "Подтвердите выполнение действия для большого числа файлов.",
+ "_{n} selected_::_{n} selected_" : ["Выбран: {n}","Выбрано: {n}","Выбрано: {n}","Выбрано: {n}"],
"Timeline Path" : "Расположение",
"Folders Path" : "Верхний уровень для папок",
"Show hidden folders" : "Показывать скрытые файлы",
"Square grid mode" : "Квадратные миниатюры",
"Choose Timeline Paths" : "Расположение для истории",
"Your Timeline" : "Ваша история",
+ "You will find your friends soon. Please, be patient." : "Скоро вы найдете своих друзей. Пожалуйста, наберитесь терпения.",
+ "Face Recognition is disabled. Enable in settings to find your friends." : "Распознавание лиц отключено. Включите его в настройках для поиска своих друзей.",
"Failed to load some photos" : "Не удалось загрузить некоторые фотографии",
+ "Processing … {n}/{m}" : "Обработка... {n}/{m}",
"Search for collaborators" : "Поиск людей и групп для добавления в соавторы",
"Search people or groups" : "Введите имя пользователя или название группы…",
"Add {collaboratorLabel} to the collaborators list" : "Добавить {collaboratorLabel} в соавторы",
@@ -81,9 +89,15 @@
"Hour" : "Час",
"Minute" : "Минута",
"Update Exif" : "Обновить EXIF",
+ "Newest" : "Более новые",
+ "Oldest" : "Более старые",
+ "Loading data … {n}/{m}" : "Загрузка данных... {n}/{m}",
"Title" : "Название",
"Description" : "Описание",
+ "Date Taken" : "Дата съемки",
"Label" : "Метка",
+ "Camera Model" : "Модель камеры",
+ "Lens Model" : "Модель линз",
"Copyright" : "Авторские права",
"Remove person" : "Удалить",
"Name" : "Имя",
@@ -96,12 +110,17 @@
"You cannot share the root folder" : "Корневая папка не может быть опубликована",
"Use the sidebar to share this folder." : "Чтобы опубликовать эту папку, воспользуйтесь боковым меню. ",
"Refresh" : "Обновить",
+ "Choose a folder" : "Выберите папку",
"Remove" : "Удалить",
"Add Path" : "Добавть путь",
"Share album" : "Опубликовать альбом",
+ "Download album" : "Скачать альбом",
"Delete album" : "Удалить альбом",
"Merge with different person" : "Объединить с другой меткой",
+ "Mark person in preview" : "Отметить человека в предварительном просмотре",
"Share folder" : "Поделиться папкой",
+ "Folder View" : "Просмотр в виде папок",
+ "Timeline View" : "Просмотр в виде шкалы времени",
"Move left" : "Переместить влево",
"Move right" : "Переместить вправо",
"Failed to get Exif data. Metadata may be lost!" : "Не удалось получить данные EXIF. Метаданные могут быть утеряны.",
@@ -113,9 +132,13 @@
"Share" : "Поделиться",
"Sidebar" : "Боковая панель",
"Download Video" : "Скачать видео",
+ "Slideshow" : "Слайд шоу",
"Close" : "Закрыть",
"Previous" : "Назад",
"Next" : "Далее",
+ "Video sharing not supported yet" : "Публикация видео пока не поддерживается",
+ "Cannot share this type of data" : "Невозможно опубликовать такой тип данных",
+ "Are you sure you want to delete?" : "Вы уверены, что хотите удалить?",
"Save as" : "Сохранить как",
"Reset" : "Сброс",
"All changes will be lost." : "Изменения не будут сохранены.",
@@ -203,13 +226,20 @@
"Transcoding failed." : "Ошибка транскодирования.",
"Direct" : "Личное",
"Auto" : "Автоматически",
+ "Shared Folder" : "Опубликованная Папка",
+ "Shared Album" : "Опубликованный альбом",
"Failed to create {albumName}." : "Не удалось создать альбом «{albumName}».",
"Failed to rename {currentAlbumName} to {newAlbumName}." : "Не удалось переименовать альбом «{currentAlbumName}» в «{newAlbumName}».",
"General Failure" : "Общий сбой",
"Error: {msg}" : "Ошибка: {msg}",
"Failed to delete files." : "Ошибка удаления файлов.",
"Failed to delete {fileName}." : "Ошибка удаления файла «{fileName}».",
+ "Failed to move files." : "Не удалось переместить файлы.",
+ "Could not move {fileName}, target exists." : "Ошибка перемещения {fileName}, файл уже существует",
+ "Failed to move {fileName}." : "Не удалось переместить {fileName}",
+ "Failed to download files" : "Не удалось скачать файлы",
"Failed to favorite files." : "Не удалось добавить файлы в избранное.",
+ "Failed to favorite some files." : "Некоторые файлы не удалось добавить в избранное ",
"Failed to favorite {fileName}." : "Не удалось добавить файл «{fileName}» в избранное."
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
}
\ No newline at end of file
diff --git a/l10n/sl.js b/l10n/sl.js
index 3867112f..bdfc1fb5 100644
--- a/l10n/sl.js
+++ b/l10n/sl.js
@@ -1,9 +1,12 @@
OC.L10N.register(
"memories",
{
+ "Memories" : "Spomini",
"Fast, modern and advanced photo management suite" : "Hiter, sodoben in zmogljiv urejevalnik fotografij",
"Settings" : "Nastavitve",
+ "People (Recognize)" : "Ljudje (prepoznava)",
"People" : "Osebe",
+ "People (Face Recognition)" : "Ljudje (prepoznava obraza)",
"EXIF" : "EXIF",
"Timeline" : "Časovnica",
"Folders" : "Mape",
@@ -14,17 +17,27 @@ OC.L10N.register(
"On this day" : "Na današnji dan",
"Tags" : "Oznake",
"Maps" : "Zemljevidi",
+ "Continue to Memories" : "Nadaljujte med Spomine",
+ "Choose again" : "Ponovni izobor",
+ "Click here to start" : "Kliknite za začetek",
"Edit" : "Uredi",
"No title" : "Ni naslova",
"No description" : "Ni opisa",
"Loading …" : "Poteka nalaganje …",
"Cancel" : "Prekliči",
"Delete" : "Izbriši",
+ "Remove from album" : "Odstrani iz albuma",
"Download" : "Prejmi",
"Favorite" : "Priljubljeno",
"Unarchive" : "Odpri iz arhiva",
+ "Edit Date/Time" : "Uredi datum in čas",
+ "Edit EXIF Data" : "Uredi podatke EXIF",
"View in folder" : "Pokaži v mapi",
+ "Move to folder" : "Premakni v mapo",
"Add to album" : "Dodaj album",
+ "Folders Path" : "Pot map",
+ "Show hidden folders" : "Pokaži skrite mape",
+ "Square grid mode" : "Način kvadratne mreže",
"Search for collaborators" : "Iskanje sodelujočih",
"Search people or groups" : "Iskanje oseb in skupin",
"Add {collaboratorLabel} to the collaborators list" : "Dodaj {collaboratorLabel} na seznam sodelujočih",
@@ -61,9 +74,17 @@ OC.L10N.register(
"Time" : "Čas",
"Hour" : "Ura",
"Minute" : "Minuta",
+ "Update Exif" : "Posodobi EXIF",
+ "Newest" : "Najnovejše",
+ "Oldest" : "Najstarejše",
+ "Loading data … {n}/{m}" : "Poteka nalaganje podatkov … {n}/{m}",
"Title" : "Naziv",
"Description" : "Opis",
+ "Date Taken" : "Datum zajema",
"Label" : "Oznaka",
+ "Camera Make" : "Vrsta fotoaparata",
+ "Camera Model" : "Model fotoaparata",
+ "Lens Model" : "Model leče",
"Copyright" : "Avtorske pravice",
"Remove person" : "Odstrani osebo",
"Name" : "Ime",
@@ -71,14 +92,23 @@ OC.L10N.register(
"Update" : "Posodobi",
"Refresh" : "Osveži",
"Remove" : "Odstrani",
+ "Add Path" : "Dodaj pot",
+ "Download album" : "Prejmi album",
"Delete album" : "Izbriši album",
"Merge with different person" : "Združi z obstoječo osebo",
"Share folder" : "Omogoči souporabo mape",
+ "Folder View" : "Pogled mape",
+ "Timeline View" : "Časovni pogled",
+ "Move left" : "Premakni levo",
+ "Move right" : "Premakni desno",
+ "Image saved successfully" : "Slika je uspešno shranjena",
"Error saving image" : "Napaka shranjevanja slike",
"Unsaved changes" : "Neshranjene spremembe",
"Drop changes" : "Opusti spremembe",
"Share" : "Souporaba",
"Sidebar" : "Bočno okno",
+ "Download Video" : "Prejmi posnetek",
+ "Slideshow" : "Projekcija",
"Close" : "Zapri",
"Previous" : "Predhodni",
"Next" : "Naslednji",
@@ -95,9 +125,10 @@ OC.L10N.register(
"Zoom out" : "Oddalji",
"Toggle zoom menu" : "Meni preklopa približevanja",
"Adjust" : "Prilagodi",
+ "Fine-tune" : "Podrobno prilagajanje",
"Filters" : "Filtri",
"Watermark" : "Vodni žig",
- "Draw" : "Risba",
+ "Draw" : "Nariši",
"Resize" : "Spremeni velikost",
"Invalid image." : "Neveljavna slika",
"Crop" : "Obreži",
@@ -107,20 +138,68 @@ OC.L10N.register(
"Landscape" : "Pokrajina",
"Portrait" : "Portret",
"Ellipse" : "Elipsa",
+ "Classic TV" : "Klasični TV",
"Arrow" : "Puščica",
+ "Blur" : "Zameglitev",
"Brightness" : "Svetlost",
+ "Contrast" : "Kontrast",
+ "Un-flip X" : "Prekliči zrcaljenje po osi X",
+ "Flip X" : "Zrcali po osi X",
+ "Un-flip Y" : "Prekliči zrcaljenje po osi Y",
+ "Flip Y" : "Zrcali po osi Y",
+ "HSV" : "HSV",
+ "Saturation" : "Nasičenost",
"Value" : "Vrednost",
"Image" : "Slika",
- "Line" : "Črtni diagram",
+ "Importing …" : "Poteka uvažanje ...",
+ "+ Add image" : "+ Dodaj sliko",
+ "Line" : "Črta",
+ "Pen" : "Pisalo",
+ "Polygon" : "Mnogokotnik",
+ "Sides" : "Drsnicew",
+ "Rectangle" : "Pravokotnik",
+ "Corner Radius" : "Radij robu",
+ "Width in pixels" : "Širina v točkah",
+ "Height in pixels" : "Višina v točkah",
+ "Toggle ratio lock" : "Preklopi zaklep razmerja",
+ "Reset to original image size" : "Ponastavi na izvorno velikost slike",
+ "Rotate" : "Zavrti",
"Text" : "Besedilo",
+ "Text spacing" : "Razmik besedila",
+ "Text alignment" : "Poravnava besedila",
+ "Font family" : "Družina pisave",
"Size" : "Velikost",
+ "Letter spacing" : "Razmik med črkami",
+ "Line height" : "Višina vrstice",
+ "Warmth" : "Toplota",
+ "+ Add watermark" : "+ Dodaj vodni žig",
+ "Choose watermark type" : "Izbor vrste vodnega žiga",
+ "Upload watermark" : "Pošlji vodni žig",
+ "Add as text" : "Dodaj kot besedilo",
+ "Padding" : "Blazinjenje",
+ "Shadow" : "Senca",
+ "Horizontal" : "Vodoravno",
+ "Vertical" : "Navpično",
+ "Opacity" : "Prosojnost",
"Position" : "Položaj",
+ "Save image as" : "Shrani sliko kot",
"Extension" : "Pripona",
"Name is required." : "Ime mora biti vpisano.",
"Quality" : "Kakovost",
- "Direct" : "Neposredno izbranim",
+ "Actual size (100%)" : "Prava velikost (100%)",
+ "Fit size" : "Prilagodi velikosti",
+ "Transcoding failed." : "Prekodiranje je spodletelo.",
+ "Direct" : "Neposredno",
"Auto" : "Samodejno",
+ "Shared Folder" : "Mapa v souporabi",
"Failed to create {albumName}." : "Ustvarjanje albuma {albumName} je spodletelo.",
- "Failed to delete {fileName}." : "Brisanje datoteke {fileName} je spodletelo."
+ "General Failure" : "Splošna napaka",
+ "Error: {msg}" : "Napaka: {msg}",
+ "Failed to delete files." : "Brisanje datotek je spodletelo.",
+ "Failed to delete {fileName}." : "Brisanje datoteke {fileName} je spodletelo.",
+ "Failed to move files." : "Premikanje datotek je spodletelo.",
+ "Could not move {fileName}, target exists." : "Datoteke {fileName} ni mogoče premakniti, ker cilj že obstaja.",
+ "Failed to move {fileName}." : "Premikanje datoteke {fileName} je spodletelo.",
+ "Failed to download files" : "Prejemanje datotek je spodletelo."
},
"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
diff --git a/l10n/sl.json b/l10n/sl.json
index fd269495..2c7b1c56 100644
--- a/l10n/sl.json
+++ b/l10n/sl.json
@@ -1,7 +1,10 @@
{ "translations": {
+ "Memories" : "Spomini",
"Fast, modern and advanced photo management suite" : "Hiter, sodoben in zmogljiv urejevalnik fotografij",
"Settings" : "Nastavitve",
+ "People (Recognize)" : "Ljudje (prepoznava)",
"People" : "Osebe",
+ "People (Face Recognition)" : "Ljudje (prepoznava obraza)",
"EXIF" : "EXIF",
"Timeline" : "Časovnica",
"Folders" : "Mape",
@@ -12,17 +15,27 @@
"On this day" : "Na današnji dan",
"Tags" : "Oznake",
"Maps" : "Zemljevidi",
+ "Continue to Memories" : "Nadaljujte med Spomine",
+ "Choose again" : "Ponovni izobor",
+ "Click here to start" : "Kliknite za začetek",
"Edit" : "Uredi",
"No title" : "Ni naslova",
"No description" : "Ni opisa",
"Loading …" : "Poteka nalaganje …",
"Cancel" : "Prekliči",
"Delete" : "Izbriši",
+ "Remove from album" : "Odstrani iz albuma",
"Download" : "Prejmi",
"Favorite" : "Priljubljeno",
"Unarchive" : "Odpri iz arhiva",
+ "Edit Date/Time" : "Uredi datum in čas",
+ "Edit EXIF Data" : "Uredi podatke EXIF",
"View in folder" : "Pokaži v mapi",
+ "Move to folder" : "Premakni v mapo",
"Add to album" : "Dodaj album",
+ "Folders Path" : "Pot map",
+ "Show hidden folders" : "Pokaži skrite mape",
+ "Square grid mode" : "Način kvadratne mreže",
"Search for collaborators" : "Iskanje sodelujočih",
"Search people or groups" : "Iskanje oseb in skupin",
"Add {collaboratorLabel} to the collaborators list" : "Dodaj {collaboratorLabel} na seznam sodelujočih",
@@ -59,9 +72,17 @@
"Time" : "Čas",
"Hour" : "Ura",
"Minute" : "Minuta",
+ "Update Exif" : "Posodobi EXIF",
+ "Newest" : "Najnovejše",
+ "Oldest" : "Najstarejše",
+ "Loading data … {n}/{m}" : "Poteka nalaganje podatkov … {n}/{m}",
"Title" : "Naziv",
"Description" : "Opis",
+ "Date Taken" : "Datum zajema",
"Label" : "Oznaka",
+ "Camera Make" : "Vrsta fotoaparata",
+ "Camera Model" : "Model fotoaparata",
+ "Lens Model" : "Model leče",
"Copyright" : "Avtorske pravice",
"Remove person" : "Odstrani osebo",
"Name" : "Ime",
@@ -69,14 +90,23 @@
"Update" : "Posodobi",
"Refresh" : "Osveži",
"Remove" : "Odstrani",
+ "Add Path" : "Dodaj pot",
+ "Download album" : "Prejmi album",
"Delete album" : "Izbriši album",
"Merge with different person" : "Združi z obstoječo osebo",
"Share folder" : "Omogoči souporabo mape",
+ "Folder View" : "Pogled mape",
+ "Timeline View" : "Časovni pogled",
+ "Move left" : "Premakni levo",
+ "Move right" : "Premakni desno",
+ "Image saved successfully" : "Slika je uspešno shranjena",
"Error saving image" : "Napaka shranjevanja slike",
"Unsaved changes" : "Neshranjene spremembe",
"Drop changes" : "Opusti spremembe",
"Share" : "Souporaba",
"Sidebar" : "Bočno okno",
+ "Download Video" : "Prejmi posnetek",
+ "Slideshow" : "Projekcija",
"Close" : "Zapri",
"Previous" : "Predhodni",
"Next" : "Naslednji",
@@ -93,9 +123,10 @@
"Zoom out" : "Oddalji",
"Toggle zoom menu" : "Meni preklopa približevanja",
"Adjust" : "Prilagodi",
+ "Fine-tune" : "Podrobno prilagajanje",
"Filters" : "Filtri",
"Watermark" : "Vodni žig",
- "Draw" : "Risba",
+ "Draw" : "Nariši",
"Resize" : "Spremeni velikost",
"Invalid image." : "Neveljavna slika",
"Crop" : "Obreži",
@@ -105,20 +136,68 @@
"Landscape" : "Pokrajina",
"Portrait" : "Portret",
"Ellipse" : "Elipsa",
+ "Classic TV" : "Klasični TV",
"Arrow" : "Puščica",
+ "Blur" : "Zameglitev",
"Brightness" : "Svetlost",
+ "Contrast" : "Kontrast",
+ "Un-flip X" : "Prekliči zrcaljenje po osi X",
+ "Flip X" : "Zrcali po osi X",
+ "Un-flip Y" : "Prekliči zrcaljenje po osi Y",
+ "Flip Y" : "Zrcali po osi Y",
+ "HSV" : "HSV",
+ "Saturation" : "Nasičenost",
"Value" : "Vrednost",
"Image" : "Slika",
- "Line" : "Črtni diagram",
+ "Importing …" : "Poteka uvažanje ...",
+ "+ Add image" : "+ Dodaj sliko",
+ "Line" : "Črta",
+ "Pen" : "Pisalo",
+ "Polygon" : "Mnogokotnik",
+ "Sides" : "Drsnicew",
+ "Rectangle" : "Pravokotnik",
+ "Corner Radius" : "Radij robu",
+ "Width in pixels" : "Širina v točkah",
+ "Height in pixels" : "Višina v točkah",
+ "Toggle ratio lock" : "Preklopi zaklep razmerja",
+ "Reset to original image size" : "Ponastavi na izvorno velikost slike",
+ "Rotate" : "Zavrti",
"Text" : "Besedilo",
+ "Text spacing" : "Razmik besedila",
+ "Text alignment" : "Poravnava besedila",
+ "Font family" : "Družina pisave",
"Size" : "Velikost",
+ "Letter spacing" : "Razmik med črkami",
+ "Line height" : "Višina vrstice",
+ "Warmth" : "Toplota",
+ "+ Add watermark" : "+ Dodaj vodni žig",
+ "Choose watermark type" : "Izbor vrste vodnega žiga",
+ "Upload watermark" : "Pošlji vodni žig",
+ "Add as text" : "Dodaj kot besedilo",
+ "Padding" : "Blazinjenje",
+ "Shadow" : "Senca",
+ "Horizontal" : "Vodoravno",
+ "Vertical" : "Navpično",
+ "Opacity" : "Prosojnost",
"Position" : "Položaj",
+ "Save image as" : "Shrani sliko kot",
"Extension" : "Pripona",
"Name is required." : "Ime mora biti vpisano.",
"Quality" : "Kakovost",
- "Direct" : "Neposredno izbranim",
+ "Actual size (100%)" : "Prava velikost (100%)",
+ "Fit size" : "Prilagodi velikosti",
+ "Transcoding failed." : "Prekodiranje je spodletelo.",
+ "Direct" : "Neposredno",
"Auto" : "Samodejno",
+ "Shared Folder" : "Mapa v souporabi",
"Failed to create {albumName}." : "Ustvarjanje albuma {albumName} je spodletelo.",
- "Failed to delete {fileName}." : "Brisanje datoteke {fileName} je spodletelo."
+ "General Failure" : "Splošna napaka",
+ "Error: {msg}" : "Napaka: {msg}",
+ "Failed to delete files." : "Brisanje datotek je spodletelo.",
+ "Failed to delete {fileName}." : "Brisanje datoteke {fileName} je spodletelo.",
+ "Failed to move files." : "Premikanje datotek je spodletelo.",
+ "Could not move {fileName}, target exists." : "Datoteke {fileName} ni mogoče premakniti, ker cilj že obstaja.",
+ "Failed to move {fileName}." : "Premikanje datoteke {fileName} je spodletelo.",
+ "Failed to download files" : "Prejemanje datotek je spodletelo."
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
}
\ No newline at end of file
diff --git a/l10n/th.js b/l10n/th.js
index deaba7ff..7896062e 100644
--- a/l10n/th.js
+++ b/l10n/th.js
@@ -42,7 +42,7 @@ OC.L10N.register(
"Close" : "ปิด",
"Previous" : "ก่อนหน้า",
"Next" : "ถัดไป",
- "Reset" : "ตั้งค่าใหม่",
+ "Reset" : "รีเซ็ต",
"Continue" : "ดำเนินการต่อ",
"Undo" : "เลิกทำ",
"Custom" : "กำหนดเอง",
diff --git a/l10n/th.json b/l10n/th.json
index 255a6e3f..7d251fdc 100644
--- a/l10n/th.json
+++ b/l10n/th.json
@@ -40,7 +40,7 @@
"Close" : "ปิด",
"Previous" : "ก่อนหน้า",
"Next" : "ถัดไป",
- "Reset" : "ตั้งค่าใหม่",
+ "Reset" : "รีเซ็ต",
"Continue" : "ดำเนินการต่อ",
"Undo" : "เลิกทำ",
"Custom" : "กำหนดเอง",
diff --git a/l10n/zh_TW.js b/l10n/zh_TW.js
index 4749fda4..ec802b76 100644
--- a/l10n/zh_TW.js
+++ b/l10n/zh_TW.js
@@ -41,6 +41,7 @@ OC.L10N.register(
"Edit Date/Time" : "編輯日期/時間",
"Edit EXIF Data" : "編輯 EXIF 資料",
"View in folder" : "在資料夾中檢視",
+ "Move to folder" : "移動至資料夾",
"Add to album" : "新增至相簿",
"Move to another person" : "移動到其他人",
"Remove from person" : "從人中移除",
@@ -112,6 +113,7 @@ OC.L10N.register(
"Label" : "標籤",
"Camera Make" : "相機品牌",
"Camera Model" : "相機型號",
+ "Lens Model" : "鏡頭型號",
"Copyright" : "著作權",
"Remove person" : "移除人",
"Are you sure you want to remove {name}?" : "您確定您想要移除 {name} 嗎?",
@@ -131,6 +133,8 @@ OC.L10N.register(
"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." : "若您建立公開連結分享,請點擊「重新整理」,下方將會顯示對應的 Memories 連結。",
"Refresh" : "重新整理",
+ "Choose a folder" : "選擇資料夾",
+ "_{n} item moved to folder_::_{n} items moved to folder_" : ["已移動 {n} 個項目至資料夾"],
"Remove" : "移除",
"Add Path" : "新增路徑",
"Add a root to your timeline" : "新增您時間軸的根",
@@ -140,6 +144,8 @@ OC.L10N.register(
"Merge with different person" : "與其他人合併",
"Mark person in preview" : "在預覽中標記人",
"Share folder" : "分享資料夾",
+ "Folder View" : "資料夾檢視",
+ "Timeline View" : "時間軸檢視",
"Move left" : "向左移動",
"Move right" : "向右移動",
"Failed to get Exif data. Metadata may be lost!" : "取得 Exif 資料失敗。詮釋資料可能會遺失!",
@@ -253,6 +259,9 @@ OC.L10N.register(
"Error: {msg}" : "錯誤:{msg}",
"Failed to delete files." : "刪除檔案失敗",
"Failed to delete {fileName}." : "刪除 {fileName} 失敗。",
+ "Failed to move files." : "移動檔案失敗。",
+ "Could not move {fileName}, target exists." : "無法移動 {fileName},目標已存在。",
+ "Failed to move {fileName}." : "移動 {fileName} 失敗",
"Failed to download files" : "下載檔案失敗",
"Failed to favorite files." : "加入最愛檔案失敗。",
"Failed to favorite some files." : "將部份檔案加入最愛失敗。",
diff --git a/l10n/zh_TW.json b/l10n/zh_TW.json
index fe812739..ca6642ad 100644
--- a/l10n/zh_TW.json
+++ b/l10n/zh_TW.json
@@ -39,6 +39,7 @@
"Edit Date/Time" : "編輯日期/時間",
"Edit EXIF Data" : "編輯 EXIF 資料",
"View in folder" : "在資料夾中檢視",
+ "Move to folder" : "移動至資料夾",
"Add to album" : "新增至相簿",
"Move to another person" : "移動到其他人",
"Remove from person" : "從人中移除",
@@ -110,6 +111,7 @@
"Label" : "標籤",
"Camera Make" : "相機品牌",
"Camera Model" : "相機型號",
+ "Lens Model" : "鏡頭型號",
"Copyright" : "著作權",
"Remove person" : "移除人",
"Are you sure you want to remove {name}?" : "您確定您想要移除 {name} 嗎?",
@@ -129,6 +131,8 @@
"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." : "若您建立公開連結分享,請點擊「重新整理」,下方將會顯示對應的 Memories 連結。",
"Refresh" : "重新整理",
+ "Choose a folder" : "選擇資料夾",
+ "_{n} item moved to folder_::_{n} items moved to folder_" : ["已移動 {n} 個項目至資料夾"],
"Remove" : "移除",
"Add Path" : "新增路徑",
"Add a root to your timeline" : "新增您時間軸的根",
@@ -138,6 +142,8 @@
"Merge with different person" : "與其他人合併",
"Mark person in preview" : "在預覽中標記人",
"Share folder" : "分享資料夾",
+ "Folder View" : "資料夾檢視",
+ "Timeline View" : "時間軸檢視",
"Move left" : "向左移動",
"Move right" : "向右移動",
"Failed to get Exif data. Metadata may be lost!" : "取得 Exif 資料失敗。詮釋資料可能會遺失!",
@@ -251,6 +257,9 @@
"Error: {msg}" : "錯誤:{msg}",
"Failed to delete files." : "刪除檔案失敗",
"Failed to delete {fileName}." : "刪除 {fileName} 失敗。",
+ "Failed to move files." : "移動檔案失敗。",
+ "Could not move {fileName}, target exists." : "無法移動 {fileName},目標已存在。",
+ "Failed to move {fileName}." : "移動 {fileName} 失敗",
"Failed to download files" : "下載檔案失敗",
"Failed to favorite files." : "加入最愛檔案失敗。",
"Failed to favorite some files." : "將部份檔案加入最愛失敗。",
diff --git a/lib/Command/Index.php b/lib/Command/Index.php
index 244b14ed..b2722d31 100644
--- a/lib/Command/Index.php
+++ b/lib/Command/Index.php
@@ -33,6 +33,7 @@ use OCP\Files\IRootFolder;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\IPreview;
+use OCP\ITempManager;
use OCP\IUser;
use OCP\IUserManager;
use Symfony\Component\Console\Command\Command;
@@ -68,6 +69,7 @@ class Index extends Command
protected IDBConnection $connection;
protected Connection $connectionForSchema;
protected TimelineWrite $timelineWrite;
+ protected ITempManager $tempManager;
// Stats
private int $nUser = 0;
@@ -85,7 +87,8 @@ class Index extends Command
IPreview $preview,
IConfig $config,
IDBConnection $connection,
- Connection $connectionForSchema
+ Connection $connectionForSchema,
+ ITempManager $tempManager
) {
parent::__construct();
@@ -95,6 +98,7 @@ class Index extends Command
$this->config = $config;
$this->connection = $connection;
$this->connectionForSchema = $connectionForSchema;
+ $this->tempManager = $tempManager;
$this->timelineWrite = new TimelineWrite($connection);
}
@@ -306,6 +310,7 @@ class Index extends Command
$progress = (float) (($progress_i / $progress_n) * 100);
$this->outputSection->overwrite(sprintf('%.2f%%', $progress).' scanning '.$node->getPath());
$this->parseFile($node, $opts);
+ $this->tempManager->clean();
}
}
} catch (\Exception $e) {
diff --git a/lib/Controller/DownloadController.php b/lib/Controller/DownloadController.php
index 5ddb5924..4d82bf6e 100644
--- a/lib/Controller/DownloadController.php
+++ b/lib/Controller/DownloadController.php
@@ -27,6 +27,7 @@ use bantu\IniGetWrapper\IniGetWrapper;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\JSONResponse;
use OCP\ISession;
+use OCP\ITempManager;
use OCP\Security\ISecureRandom;
class DownloadController extends ApiBase
@@ -193,6 +194,9 @@ class DownloadController extends ApiBase
// So we need to add a number to the end of the name
$nameCounts = [];
+ /** @var ITempManager for clearing temp files */
+ $tempManager = \OC::$server->get(ITempManager::class);
+
// Send each file
foreach ($fileIds as $fileId) {
if (connection_aborted()) {
@@ -265,6 +269,9 @@ class DownloadController extends ApiBase
if (false !== $handle) {
fclose($handle);
}
+
+ // Clear any temp files
+ $tempManager->clean();
}
}
diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php
index c6d5ff35..b38fc5d5 100644
--- a/lib/Controller/PageController.php
+++ b/lib/Controller/PageController.php
@@ -142,6 +142,7 @@ class PageController extends Controller
// Video configuration
$initialState->provideInitialState('notranscode', $config->getSystemValue('memories.no_transcode', 'UNSET'));
+ $initialState->provideInitialState('video_default_quality', $config->getSystemValue('memories.video_default_quality', '0'));
}
/**
diff --git a/lib/Controller/VideoController.php b/lib/Controller/VideoController.php
index 0e97ecb7..a58d9a65 100644
--- a/lib/Controller/VideoController.php
+++ b/lib/Controller/VideoController.php
@@ -139,6 +139,15 @@ class VideoController extends ApiBase
} catch (\Exception $e) {
return new JSONResponse(['message' => 'Embedded video not found'], Http::STATUS_NOT_FOUND);
}
+ } elseif (str_starts_with($liveid, 'self__traileroffset=')) {
+ // Remove prefix
+ $offset = (int) substr($liveid, \strlen('self__traileroffset='));
+ if ($offset <= 0) {
+ return new JSONResponse(['message' => 'Invalid offset'], Http::STATUS_BAD_REQUEST);
+ }
+
+ // Read file from offset to end
+ $blob = file_get_contents($path, false, null, $offset);
} else {
// Get stored video file (Apple MOV)
$lp = $this->timelineQuery->getLivePhoto($fileid);
@@ -213,29 +222,45 @@ class VideoController extends ApiBase
}
// Check for environment variables
- $env = '';
+ $env = [];
// QSV with VAAPI
- $vaapi = $this->config->getSystemValue('memories.qsv', false);
- if ($vaapi) {
- $env .= 'VAAPI=1 ';
+ if ($this->config->getSystemValue('memories.qsv', false)) {
+ $env[] = 'VAAPI=1';
}
// NVENC
- $nvenc = $this->config->getSystemValue('memories.nvenc', false);
- if ($nvenc) {
- $env .= 'NVENC=1 ';
+ if ($this->config->getSystemValue('memories.nvenc', false)) {
+ $env[] = 'NVENC=1';
}
+ // Bind address / port
+ $port = $this->config->getSystemValue('memories.govod_port', 47788);
+ $env[] = "GOVOD_BIND='127.0.0.1:{$port}'";
+
// Paths
$ffmpegPath = $this->config->getSystemValue('memories.ffmpeg_path', 'ffmpeg');
$ffprobePath = $this->config->getSystemValue('memories.ffprobe_path', 'ffprobe');
- $tmpPath = $this->config->getSystemValue('memories.tmp_path', sys_get_temp_dir());
- $env .= "FFMPEG='{$ffmpegPath}' FFPROBE='{$ffprobePath}' GOVOD_TEMPDIR='{$tmpPath}/go-vod' ";
+ $env[] = "FFMPEG='{$ffmpegPath}'";
+ $env[] = "FFPROBE='{$ffprobePath}'";
- // Check if already running
+ // (Re-)create Temp dir
+ $instanceId = $this->config->getSystemValue('instanceid', 'default');
+ $defaultTmp = sys_get_temp_dir().'/go-vod/'.$instanceId;
+ $tmpPath = $this->config->getSystemValue('memories.tmp_path', $defaultTmp);
+ shell_exec("rm -rf '{$tmpPath}'");
+ mkdir($tmpPath, 0755, true);
+
+ // Remove trailing slash from temp path if present
+ if ('/' === substr($tmpPath, -1)) {
+ $tmpPath = substr($tmpPath, 0, -1);
+ }
+ $env[] = "GOVOD_TEMPDIR='{$tmpPath}'";
+
+ // Kill already running and start new
\OCA\Memories\Util::pkill($transcoder);
- shell_exec("{$env} nohup {$transcoder} > {$tmpPath}/go-vod.log 2>&1 & > /dev/null");
+ $env = implode(' ', $env);
+ shell_exec("{$env} nohup {$transcoder} > '{$tmpPath}.log' 2>&1 & > /dev/null");
// wait for 1s and try again
sleep(1);
@@ -249,7 +274,8 @@ class VideoController extends ApiBase
// Make sure query params are repeated
// For example, in folder sharing, we need the params on every request
- $url = "http://127.0.0.1:47788/{$client}{$path}/{$profile}";
+ $port = $this->config->getSystemValue('memories.govod_port', 47788);
+ $url = "http://127.0.0.1:{$port}/{$client}{$path}/{$profile}";
if ($params = $_SERVER['QUERY_STRING']) {
$url .= "?{$params}";
}
diff --git a/lib/Db/LivePhoto.php b/lib/Db/LivePhoto.php
index e0d1d2c5..0af0053a 100644
--- a/lib/Db/LivePhoto.php
+++ b/lib/Db/LivePhoto.php
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace OCA\Memories\Db;
+use OCA\Memories\Exif;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\Files\File;
use OCP\IDBConnection;
@@ -26,7 +27,7 @@ class LivePhoto
}
/** Get liveid from photo part */
- public function getLivePhotoId(array &$exif)
+ public function getLivePhotoId(File &$file, array &$exif)
{
// Apple JPEG (MOV has ContentIdentifier)
if (\array_key_exists('MediaGroupUUID', $exif)) {
@@ -41,7 +42,36 @@ class LivePhoto
// Google JPEG and Samsung HEIC (Apple?)
if (\array_key_exists('MotionPhoto', $exif)) {
if ('image/jpeg' === $exif['MIMEType']) {
- // Google JPEG -- image should hopefully be in trailer
+ // Google Motion Photo JPEG
+
+ // We need to read the DirectoryItemLength key to get the length of the video
+ // These keys are duplicate, one for the image and one for the video
+ // With exiftool -G4, we get the following:
+ //
+ // "Unknown:DirectoryItemSemantic": "Primary"
+ // "Unknown:DirectoryItemLength": 0
+ // "Copy1:DirectoryItemSemantic": "MotionPhoto"
+ // "Copy1:DirectoryItemLength": 3011435 // <-- this is the length of the video
+ //
+ // The video is then located at the end of the file, so we can get the offset.
+ // Match each DirectoryItemSemantic to find MotionPhoto, then get the length.
+ $path = $file->getStorage()->getLocalFile($file->getInternalPath());
+ $extExif = Exif::getExifWithDuplicates($path);
+
+ foreach ($extExif as $key => $value) {
+ if (str_ends_with($key, ':DirectoryItemSemantic')) {
+ if ('MotionPhoto' === $value) {
+ $videoLength = $extExif[str_replace('Semantic', 'Length', $key)];
+ if (\is_int($videoLength) && $videoLength > 0) {
+ $videoOffset = $file->getSize() - $videoLength;
+
+ return 'self__traileroffset='.((string) $videoOffset);
+ }
+ }
+ }
+ }
+
+ // Fallback: video should hopefully be in trailer
return 'self__trailer';
}
if ('image/heic' === $exif['MIMEType']) {
diff --git a/lib/Db/TimelineWrite.php b/lib/Db/TimelineWrite.php
index 2593ca08..27d14679 100644
--- a/lib/Db/TimelineWrite.php
+++ b/lib/Db/TimelineWrite.php
@@ -120,7 +120,7 @@ class TimelineWrite
$dayId = floor($dateTaken / 86400);
$dateTaken = gmdate('Y-m-d H:i:s', $dateTaken);
[$w, $h] = Exif::getDimensions($exif);
- $liveid = $this->livePhoto->getLivePhotoId($exif);
+ $liveid = $this->livePhoto->getLivePhotoId($file, $exif);
// Video parameters
$videoDuration = 0;
@@ -129,20 +129,21 @@ class TimelineWrite
}
// Clean up EXIF to keep only useful metadata
- foreach ($exif as $key => &$value) {
+ $filteredExif = [];
+ foreach ($exif as $key => $value) {
// Truncate any fields > 2048 chars
if (\is_string($value) && \strlen($value) > 2048) {
- $exif[$key] = substr($value, 0, 2048);
+ $value = substr($value, 0, 2048);
}
- // These are huge and not needed
- if (!EXIF_FIELDS_LIST[$key] ?? false) {
- unset($exif[$key]);
+ // Only keep fields in the whitelist
+ if (\array_key_exists($key, EXIF_FIELDS_LIST)) {
+ $filteredExif[$key] = $value;
}
}
// Store JSON string
- $exifJson = json_encode($exif);
+ $exifJson = json_encode($filteredExif);
// Store error if data > 64kb
if (\is_string($exifJson)) {
diff --git a/lib/Exif.php b/lib/Exif.php
index fab6f75f..85dc60de 100644
--- a/lib/Exif.php
+++ b/lib/Exif.php
@@ -282,6 +282,11 @@ class Exif
}
}
+ public static function getExifWithDuplicates(string $path)
+ {
+ return self::getExifFromLocalPathWithSeparateProc($path, ['-G4']);
+ }
+
/** Get path to exiftool binary */
private static function getExiftool()
{
@@ -407,10 +412,10 @@ class Exif
}
}
- private static function getExifFromLocalPathWithSeparateProc(string &$path)
+ private static function getExifFromLocalPathWithSeparateProc(string &$path, array $extraArgs = [])
{
$pipes = [];
- $proc = proc_open(array_merge(self::getExiftool(), ['-api', 'QuickTimeUTC=1', '-n', '-U', '-json', '--b', $path]), [
+ $proc = proc_open(array_merge(self::getExiftool(), ['-api', 'QuickTimeUTC=1', '-n', '-U', '-json', '--b'], $extraArgs, [$path]), [
1 => ['pipe', 'w'],
2 => ['pipe', 'w'],
], $pipes);
diff --git a/scripts/get-exiftool.sh b/scripts/get-exiftool.sh
index 8827f4b8..3e2b2a7a 100755
--- a/scripts/get-exiftool.sh
+++ b/scripts/get-exiftool.sh
@@ -20,7 +20,7 @@ mv "exiftool-$exifver" exiftool
rm -rf *.zip exiftool/t exiftool/html
chmod 755 exiftool/exiftool
-govod="0.0.24"
+govod="0.0.25"
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"
diff --git a/src/components/viewer/PsVideo.ts b/src/components/viewer/PsVideo.ts
index bf522f03..812407e4 100644
--- a/src/components/viewer/PsVideo.ts
+++ b/src/components/viewer/PsVideo.ts
@@ -14,6 +14,10 @@ const config_noTranscode = loadState(
"UNSET"
) as boolean | string;
+const config_video_default_quality = Number(
+ loadState("memories", "video_default_quality", "0") as string
+);
+
/**
* Check if slide has video content
*
@@ -271,26 +275,31 @@ class VideoContentSetup {
let qualityNums: number[];
if (qualityList && qualityList.length > 1) {
const s = new Set();
+ let hasMax = false;
for (let i = 0; i < qualityList?.length; i++) {
const { width, height, label } = qualityList[i];
s.add(Math.min(width, height));
if (label?.includes("max.m3u8")) {
- s.add(999999999);
+ hasMax = true;
}
}
+
qualityNums = Array.from(s).sort((a, b) => b - a);
qualityNums.unshift(0);
- qualityNums.unshift(-1);
+ if (hasMax) {
+ qualityNums.unshift(-1);
+ }
+ qualityNums.unshift(-2);
}
// Create the plyr instance
const opts: Plyr.Options = {
i18n: {
qualityLabel: {
- "-1": t("memories", "Direct"),
- 0: t("memories", "Auto"),
- 999999999: t("memories", "Original"),
+ "-2": t("memories", "Direct"),
+ "-1": t("memories", "Original"),
+ "0": t("memories", "Auto"),
},
},
fullscreen: {
@@ -304,14 +313,14 @@ class VideoContentSetup {
if (qualityNums) {
opts.quality = {
- default: 0,
+ default: config_video_default_quality,
options: qualityNums,
forced: true,
onChange: (quality: number) => {
qualityList = content.videojs?.qualityLevels();
if (!qualityList || !content.videojs) return;
- if (quality === -1) {
+ if (quality === -2) {
// Direct playback
// Prevent any useless transcodes
for (let i = 0; i < qualityList.length; ++i) {
@@ -340,7 +349,7 @@ class VideoContentSetup {
qualityList[i].enabled =
!quality || // auto
pixels === quality || // exact match
- (label?.includes("max.m3u8") && quality === 999999999); // max
+ (label?.includes("max.m3u8") && quality === -1); // max
}
},
};