merge main
This commit is contained in:
+1
-1
@@ -1,3 +1,3 @@
|
||||
{
|
||||
"flutter": "3.19.6"
|
||||
"flutter": "3.22.0"
|
||||
}
|
||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"dart.flutterSdkPath": ".fvm/versions/3.19.3",
|
||||
"dart.flutterSdkPath": ".fvm/versions/3.22.0",
|
||||
"search.exclude": {
|
||||
"**/.fvm": true
|
||||
},
|
||||
|
||||
@@ -10,16 +10,16 @@ GEM
|
||||
artifactory (3.0.17)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.3.0)
|
||||
aws-partitions (1.925.0)
|
||||
aws-sdk-core (3.194.1)
|
||||
aws-partitions (1.932.0)
|
||||
aws-sdk-core (3.196.1)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.651.0)
|
||||
aws-sigv4 (~> 1.8)
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
aws-sdk-kms (1.80.0)
|
||||
aws-sdk-kms (1.81.0)
|
||||
aws-sdk-core (~> 3, >= 3.193.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.149.1)
|
||||
aws-sdk-s3 (1.151.0)
|
||||
aws-sdk-core (~> 3, >= 3.194.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.8)
|
||||
@@ -155,7 +155,7 @@ GEM
|
||||
mini_magick (4.12.0)
|
||||
mini_mime (1.1.5)
|
||||
multi_json (1.15.0)
|
||||
multipart-post (2.4.0)
|
||||
multipart-post (2.4.1)
|
||||
nanaimo (0.3.0)
|
||||
naturally (2.2.1)
|
||||
nkf (0.2.0)
|
||||
@@ -169,7 +169,8 @@ GEM
|
||||
trailblazer-option (>= 0.1.1, < 0.2.0)
|
||||
uber (< 0.2.0)
|
||||
retriable (3.1.2)
|
||||
rexml (3.2.6)
|
||||
rexml (3.2.8)
|
||||
strscan (>= 3.0.9)
|
||||
rouge (2.0.7)
|
||||
ruby2_keywords (0.0.5)
|
||||
rubyzip (2.3.2)
|
||||
@@ -182,6 +183,7 @@ GEM
|
||||
simctl (1.6.10)
|
||||
CFPropertyList
|
||||
naturally
|
||||
strscan (3.1.0)
|
||||
terminal-notifier (2.0.0)
|
||||
terminal-table (1.8.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
|
||||
@@ -81,8 +81,8 @@ flutter {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
def kotlin_version = '1.9.23'
|
||||
def kotlin_coroutines_version = '1.8.0'
|
||||
def kotlin_version = '1.9.24'
|
||||
def kotlin_coroutines_version = '1.8.1'
|
||||
def work_version = '2.9.0'
|
||||
def concurrent_version = '1.1.0'
|
||||
def guava_version = '33.2.0-android'
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
allprojects {
|
||||
ext.kotlin_version = '1.9.24'
|
||||
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
|
||||
@@ -35,8 +35,8 @@ platform :android do
|
||||
task: 'bundle',
|
||||
build_type: 'Release',
|
||||
properties: {
|
||||
"android.injected.version.code" => 137,
|
||||
"android.injected.version.name" => "1.103.1",
|
||||
"android.injected.version.code" => 140,
|
||||
"android.injected.version.name" => "1.105.1",
|
||||
}
|
||||
)
|
||||
upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab')
|
||||
|
||||
@@ -5,17 +5,17 @@
|
||||
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000261">
|
||||
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000374">
|
||||
|
||||
</testcase>
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="1: bundleRelease" time="32.48099">
|
||||
<testcase classname="fastlane.lanes" name="1: bundleRelease" time="84.292464">
|
||||
|
||||
</testcase>
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="2: upload_to_play_store" time="30.236974">
|
||||
<testcase classname="fastlane.lanes" name="2: upload_to_play_store" time="33.336934">
|
||||
|
||||
</testcase>
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@ pluginManagement {
|
||||
plugins {
|
||||
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
||||
id "com.android.application" version "7.4.2" apply false
|
||||
id "org.jetbrains.kotlin.android" version "1.9.23" apply false
|
||||
id "org.jetbrains.kotlin.kapt" version "1.9.23" apply false
|
||||
id "org.jetbrains.kotlin.android" version "1.9.24" apply false
|
||||
id "org.jetbrains.kotlin.kapt" version "1.9.24" apply false
|
||||
}
|
||||
|
||||
include ":app"
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "يضيف",
|
||||
"share_add_photos": "إضافة الصور",
|
||||
"share_add_title": "إضافة عنوان",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "إنشاء ألبوم",
|
||||
"shared_album_activities_input_disable": "التعليق معطل",
|
||||
"shared_album_activities_input_hint": "قل شيئا",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Přidat",
|
||||
"share_add_photos": "Přidat fotografie",
|
||||
"share_add_title": "Přidat název",
|
||||
"share_assets_selected": "{} vybráno",
|
||||
"share_create_album": "Vytvořit album",
|
||||
"shared_album_activities_input_disable": "Komentář je vypnutý",
|
||||
"shared_album_activities_input_hint": "Řekněte něco",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Tilføj",
|
||||
"share_add_photos": "Tilføj billeder",
|
||||
"share_add_title": "Tilføj en titel",
|
||||
"share_assets_selected": "{} valgt",
|
||||
"share_create_album": "Opret album",
|
||||
"shared_album_activities_input_disable": "Kommentarer er deaktiveret",
|
||||
"shared_album_activities_input_hint": "Skriv noget",
|
||||
|
||||
@@ -391,6 +391,7 @@
|
||||
"setting_image_viewer_original_title": "Original laden",
|
||||
"setting_image_viewer_preview_subtitle": "Aktivieren, um ein Bild mit mittlerer Auflösung zu laden. Deaktivieren, um entweder das Original direkt zu laden oder nur die Miniaturansicht zu verwenden.",
|
||||
"setting_image_viewer_preview_title": "Vorschaubild laden",
|
||||
"setting_image_viewer_title": "Bilder",
|
||||
"setting_languages_apply": "Anwenden",
|
||||
"setting_languages_title": "Sprachen",
|
||||
"setting_notifications_notify_failures_grace_period": "Benachrichtigung über Fehler bei der Hintergrundsicherung: {}",
|
||||
@@ -406,10 +407,14 @@
|
||||
"setting_notifications_total_progress_subtitle": "Gesamter Upload-Fortschritt (abgeschlossen/Anzahl Elemente)",
|
||||
"setting_notifications_total_progress_title": "Zeige Gesamtfortschritt bei der Hintergrundsicherung",
|
||||
"setting_pages_app_bar_settings": "Einstellungen",
|
||||
"setting_video_viewer_looping_subtitle": "Aktivieren, damit sich ein Video in der Detailansicht automatisch wiederholt.",
|
||||
"setting_video_viewer_looping_title": "Wiederholen",
|
||||
"setting_video_viewer_title": "Videos",
|
||||
"settings_require_restart": "Bitte starte Immich neu, um diese Einstellung anzuwenden.",
|
||||
"share_add": "Hinzufügen",
|
||||
"share_add_photos": "Fotos hinzufügen",
|
||||
"share_add_title": "Titel hinzufügen",
|
||||
"share_assets_selected": "{} ausgewählt",
|
||||
"share_create_album": "Album erstellen",
|
||||
"shared_album_activities_input_disable": "Kommentare sind deaktiviert.",
|
||||
"shared_album_activities_input_hint": "Sag etwas",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Add",
|
||||
"share_add_photos": "Add photos",
|
||||
"share_add_title": "Add a title",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Create album",
|
||||
"shared_album_activities_input_disable": "Το σχόλιο είναι απενεργοποιημένο",
|
||||
"shared_album_activities_input_hint": "Say something",
|
||||
|
||||
@@ -391,6 +391,7 @@
|
||||
"setting_image_viewer_original_title": "Load original image",
|
||||
"setting_image_viewer_preview_subtitle": "Enable to load a medium-resolution image. Disable to either directly load the original or only use the thumbnail.",
|
||||
"setting_image_viewer_preview_title": "Load preview image",
|
||||
"setting_image_viewer_title": "Images",
|
||||
"setting_languages_apply": "Apply",
|
||||
"setting_languages_title": "Languages",
|
||||
"setting_notifications_notify_failures_grace_period": "Notify background backup failures: {}",
|
||||
@@ -406,12 +407,15 @@
|
||||
"setting_notifications_total_progress_subtitle": "Overall upload progress (done/total assets)",
|
||||
"setting_notifications_total_progress_title": "Show background backup total progress",
|
||||
"setting_pages_app_bar_settings": "Settings",
|
||||
"setting_video_viewer_looping_subtitle": "Enable to automatically loop a video in the detail viewer.",
|
||||
"setting_video_viewer_looping_title": "Looping",
|
||||
"setting_video_viewer_title": "Videos",
|
||||
"settings_require_restart": "Please restart Immich to apply this setting",
|
||||
"share_add": "Add",
|
||||
"share_add_photos": "Add photos",
|
||||
"share_add_title": "Add a title",
|
||||
"share_create_album": "Create album",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Create album",
|
||||
"shared_album_activities_input_disable": "Comment is disabled",
|
||||
"shared_album_activities_input_hint": "Say something",
|
||||
"shared_album_activity_remove_content": "Do you want to delete this activity?",
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"add_to_album_bottom_sheet_added": "Agregado a {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}",
|
||||
"advanced_settings_log_level_title": "Nivel de registro: {}",
|
||||
"advanced_settings_prefer_remote_subtitle": "Algunos dispositivos tardan mucho en cargar las miniaturas de recursos encontrados el dispositivo. Activa esta opción para cargar imágenes remotas en su lugar.",
|
||||
"advanced_settings_prefer_remote_subtitle": "Algunos dispositivos tardan mucho en cargar las miniaturas de los elementos encontrados en el dispositivo. Activa esta opción para cargar imágenes remotas en su lugar.",
|
||||
"advanced_settings_prefer_remote_title": "Preferir imágenes remotas",
|
||||
"advanced_settings_self_signed_ssl_subtitle": "Omitir verificación del certificado SSL del servidor. Requerido para certificados autofirmados",
|
||||
"advanced_settings_self_signed_ssl_title": "Permitir certificados autofirmados",
|
||||
@@ -26,7 +26,7 @@
|
||||
"album_viewer_appbar_share_delete": "Eliminar álbum ",
|
||||
"album_viewer_appbar_share_err_delete": "No ha podido eliminar el álbum",
|
||||
"album_viewer_appbar_share_err_leave": "No se ha podido abandonar el álbum",
|
||||
"album_viewer_appbar_share_err_remove": "Hay problemas para eliminar los archivos del álbum",
|
||||
"album_viewer_appbar_share_err_remove": "Hay problemas para eliminar los elementos del álbum",
|
||||
"album_viewer_appbar_share_err_title": "Error al cambiar el título del álbum ",
|
||||
"album_viewer_appbar_share_leave": "Abandonar álbum ",
|
||||
"album_viewer_appbar_share_remove": "Eliminar del álbum ",
|
||||
@@ -37,14 +37,14 @@
|
||||
"app_bar_signout_dialog_content": "¿Estás seguro que quieres cerrar sesión?",
|
||||
"app_bar_signout_dialog_ok": "Sí",
|
||||
"app_bar_signout_dialog_title": "Cerrar sesión",
|
||||
"archive_page_no_archived_assets": "No se encontraron recursos archivados",
|
||||
"archive_page_no_archived_assets": "No se encontraron elementos archivados",
|
||||
"archive_page_title": "Archivo ({})",
|
||||
"asset_action_delete_err_read_only": "No se pueden borrar el archivo(s) de solo lectura, omitiendo",
|
||||
"asset_action_share_err_offline": "No se pudo obtener el archivo(s) sin conexión, omitiendo",
|
||||
"asset_list_group_by_sub_title": "Agrupar por",
|
||||
"asset_list_layout_settings_dynamic_layout_title": "Diseño dinámico",
|
||||
"asset_list_layout_settings_group_automatically": "Automatico",
|
||||
"asset_list_layout_settings_group_by": "Agrupar recursos por",
|
||||
"asset_list_layout_settings_group_by": "Agrupar elementos por",
|
||||
"asset_list_layout_settings_group_by_month": "Mes",
|
||||
"asset_list_layout_settings_group_by_month_day": "Mes + día",
|
||||
"asset_list_layout_sub_title": "Disposición",
|
||||
@@ -53,17 +53,17 @@
|
||||
"asset_viewer_settings_title": "Visor de Archivos",
|
||||
"backup_album_selection_page_albums_device": "Álbumes en el dispositivo ({})",
|
||||
"backup_album_selection_page_albums_tap": "Toque para incluir, doble toque para excluir",
|
||||
"backup_album_selection_page_assets_scatter": "Los archivos pueden dispersarse en varios álbumes. De este modo, los álbumes pueden ser incluidos o excluidos durante el proceso de copia de seguridad.",
|
||||
"backup_album_selection_page_assets_scatter": "Los elementos pueden dispersarse en varios álbumes. De este modo, los álbumes pueden ser incluidos o excluidos durante el proceso de copia de seguridad.",
|
||||
"backup_album_selection_page_select_albums": "Seleccionar Álbumes",
|
||||
"backup_album_selection_page_selection_info": "Información sobre la Selección",
|
||||
"backup_album_selection_page_total_assets": "Total de archivos únicos",
|
||||
"backup_album_selection_page_total_assets": "Total de elementos únicos",
|
||||
"backup_all": "Todos",
|
||||
"backup_background_service_backup_failed_message": "Error al copiar archivos. Reintentando...",
|
||||
"backup_background_service_backup_failed_message": "Error al copiar elementos. Reintentando...",
|
||||
"backup_background_service_connection_failed_message": "Error al conectar con el servidor. Reintentando...",
|
||||
"backup_background_service_current_upload_notification": "Cargando {}",
|
||||
"backup_background_service_default_notification": "Verificando si hay nuevos archivos",
|
||||
"backup_background_service_default_notification": "Verificando si hay nuevos elementos",
|
||||
"backup_background_service_error_title": "Error de copia de seguridad",
|
||||
"backup_background_service_in_progress_notification": "Creando copia de seguridad de tus archivos...",
|
||||
"backup_background_service_in_progress_notification": "Creando copia de seguridad de tus elementos...",
|
||||
"backup_background_service_upload_failure_notification": "Error al cargar {}",
|
||||
"backup_controller_page_albums": "Álbumes de copia de seguridad",
|
||||
"backup_controller_page_background_app_refresh_disabled_content": "Activa la actualización en segundo plano de la aplicación en Configuración > General > Actualización en segundo plano para usar la copia de seguridad en segundo plano.",
|
||||
@@ -76,7 +76,7 @@
|
||||
"backup_controller_page_background_charging": "Solo mientras se carga",
|
||||
"backup_controller_page_background_configure_error": "Error al configurar el servicio en segundo plano",
|
||||
"backup_controller_page_background_delay": "Retraso en la copia de seguridad de nuevos elementos: {}",
|
||||
"backup_controller_page_background_description": "Activa el servicio en segundo plano para copiar automáticamente cualquier nuevos archivos sin necesidad de abrir la aplicación.",
|
||||
"backup_controller_page_background_description": "Activa el servicio en segundo plano para copiar automáticamente cualquier nuevos elementos sin necesidad de abrir la aplicación.",
|
||||
"backup_controller_page_background_is_off": "La copia de seguridad en segundo plano automática está desactivada",
|
||||
"backup_controller_page_background_is_on": "La copia de seguridad en segundo plano automática está activada",
|
||||
"backup_controller_page_background_turn_off": "Desactivar el servicio en segundo plano",
|
||||
@@ -109,28 +109,28 @@
|
||||
"backup_controller_page_turn_on": "Activar la copia de seguridad",
|
||||
"backup_controller_page_uploading_file_info": "Cargando información del archivo",
|
||||
"backup_err_only_album": "No se puede eliminar el único álbum",
|
||||
"backup_info_card_assets": "archivos",
|
||||
"backup_info_card_assets": "elementos",
|
||||
"backup_manual_cancelled": "Cancelado",
|
||||
"backup_manual_failed": "Fallido",
|
||||
"backup_manual_in_progress": "Subida en progreso. Espere",
|
||||
"backup_manual_success": "Éxito",
|
||||
"backup_manual_title": "Estado de la subida",
|
||||
"backup_options_page_title": "Opciones de Copia de Seguridad",
|
||||
"cache_settings_album_thumbnails": "Miniaturas de la página de la biblioteca ({} archivos)",
|
||||
"cache_settings_album_thumbnails": "Miniaturas de la página de la biblioteca ({} elementos)",
|
||||
"cache_settings_clear_cache_button": "Borrar caché",
|
||||
"cache_settings_clear_cache_button_title": "Borra la caché de la aplicación. Esto afectará significativamente el rendimiento de la aplicación hasta que se reconstruya la caché.",
|
||||
"cache_settings_duplicated_assets_clear_button": "LIMPIAR",
|
||||
"cache_settings_duplicated_assets_subtitle": "Fotos y vídeos en la lista negra de la app",
|
||||
"cache_settings_duplicated_assets_title": "Archivos duplicados ({})",
|
||||
"cache_settings_image_cache_size": "Tamaño de la caché de imágenes ({} archivos)",
|
||||
"cache_settings_duplicated_assets_title": "Elementos duplicados ({})",
|
||||
"cache_settings_image_cache_size": "Tamaño de la caché de imágenes ({} elementos)",
|
||||
"cache_settings_statistics_album": "Miniaturas de la biblioteca",
|
||||
"cache_settings_statistics_assets": "{} archivos ({})",
|
||||
"cache_settings_statistics_assets": "{} elementos ({})",
|
||||
"cache_settings_statistics_full": "Imágenes completas",
|
||||
"cache_settings_statistics_shared": "Miniaturas de álbumes compartidos",
|
||||
"cache_settings_statistics_thumbnail": "Miniaturas",
|
||||
"cache_settings_statistics_title": "Uso de caché",
|
||||
"cache_settings_subtitle": "Controla el comportamiento del almacenamiento en caché de la aplicación móvil Immich",
|
||||
"cache_settings_thumbnail_size": "Tamaño de la caché de miniaturas ({} archivos)",
|
||||
"cache_settings_thumbnail_size": "Tamaño de la caché de miniaturas ({} elementos)",
|
||||
"cache_settings_tile_subtitle": "Controla el comportamiento del almacenamiento local",
|
||||
"cache_settings_tile_title": "Almacenamiento local",
|
||||
"cache_settings_title": "Configuración de la caché",
|
||||
@@ -165,7 +165,7 @@
|
||||
"create_album_page_untitled": "Sin título",
|
||||
"create_shared_album_page_create": "Crear",
|
||||
"create_shared_album_page_share": "Compartir",
|
||||
"create_shared_album_page_share_add_assets": "AGREGAR ARCHIVOS",
|
||||
"create_shared_album_page_share_add_assets": "AGREGAR ELEMENTOS",
|
||||
"create_shared_album_page_share_select_photos": "Seleccionar Fotos",
|
||||
"curated_location_page_title": "Lugares",
|
||||
"curated_object_page_title": "Objetos",
|
||||
@@ -199,26 +199,26 @@
|
||||
"experimental_settings_new_asset_list_title": "Habilitar cuadrícula fotográfica experimental",
|
||||
"experimental_settings_subtitle": "Úsalo bajo tu responsabilidad",
|
||||
"experimental_settings_title": "Experimental",
|
||||
"favorites_page_no_favorites": "No se encontraron recursos marcados como favoritos",
|
||||
"favorites_page_no_favorites": "No se encontraron elementos marcados como favoritos",
|
||||
"favorites_page_title": "Favoritos",
|
||||
"haptic_feedback_switch": "Activar respuesta háptica",
|
||||
"haptic_feedback_title": "Respuesta Háptica",
|
||||
"home_page_add_to_album_conflicts": "{added} elementos agregados al álbum {album}.{failed} elementos ya existen en el álbum.",
|
||||
"home_page_add_to_album_err_local": "Aún no se pueden agregar recursos locales a álbumes, omitiendo",
|
||||
"home_page_add_to_album_err_local": "Aún no se pueden agregar elementos locales a álbumes, omitiendo",
|
||||
"home_page_add_to_album_success": "{added} elementos agregados al álbum {album}. ",
|
||||
"home_page_album_err_partner": "Aún no se pueden agregar activos a un album de un compañero, omitiendo",
|
||||
"home_page_archive_err_local": "Los recursos locales no pueden ser archivados, omitiendo",
|
||||
"home_page_archive_err_partner": "No se pueden archivar activos de un compañero, omitiendo",
|
||||
"home_page_album_err_partner": "Aún no se pueden agregar elementos a un álbum de un compañero, omitiendo",
|
||||
"home_page_archive_err_local": "Los elementos locales no pueden ser archivados, omitiendo",
|
||||
"home_page_archive_err_partner": "No se pueden archivar elementos de un compañero, omitiendo",
|
||||
"home_page_building_timeline": "Construyendo la línea de tiempo",
|
||||
"home_page_delete_err_partner": "No se pueden eliminar activos de un compañero, omitiendo",
|
||||
"home_page_delete_remote_err_local": "Archivos locales en eliminación de selección remota, omitiendo",
|
||||
"home_page_favorite_err_local": "Aún no se pueden archivar recursos locales, omitiendo",
|
||||
"home_page_favorite_err_partner": "Aún no se pueden marcar recursos de compañeros como favoritos, omitiendo",
|
||||
"home_page_delete_err_partner": "No se pueden eliminar elementos de un compañero, omitiendo",
|
||||
"home_page_delete_remote_err_local": "Elementos locales en la selección de eliminación remota, omitiendo",
|
||||
"home_page_favorite_err_local": "Aún no se pueden archivar elementos locales, omitiendo",
|
||||
"home_page_favorite_err_partner": "Aún no se pueden marcar elementos de compañeros como favoritos, omitiendo",
|
||||
"home_page_first_time_notice": "Si esta es la primera vez que usas la app, por favor, asegúrate de elegir un álbum de respaldo para que la línea de tiempo pueda cargar fotos y videos en los álbumes.",
|
||||
"home_page_share_err_local": "No se pueden compartir activos locales a través de un enlace, omitiendo",
|
||||
"home_page_share_err_local": "No se pueden compartir elementos locales a través de un enlace, omitiendo",
|
||||
"home_page_upload_err_limit": "Solo se pueden subir 30 elementos simultáneamente, omitiendo",
|
||||
"image_viewer_page_state_provider_download_error": "Error de descarga",
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_started": "Descarga Iniciada",
|
||||
"image_viewer_page_state_provider_download_success": "Descarga exitosa",
|
||||
"image_viewer_page_state_provider_share_error": "Error al compartir",
|
||||
"library_page_albums": "Álbumes",
|
||||
@@ -227,7 +227,7 @@
|
||||
"library_page_favorites": "Favoritos",
|
||||
"library_page_new_album": "Nuevo álbum",
|
||||
"library_page_sharing": "Compartiendo",
|
||||
"library_page_sort_asset_count": "Número de archivos",
|
||||
"library_page_sort_asset_count": "Número de elementos",
|
||||
"library_page_sort_created": "Creado más recientemente",
|
||||
"library_page_sort_last_modified": "Última modificación",
|
||||
"library_page_sort_most_oldest_photo": "Foto más antigua",
|
||||
@@ -299,7 +299,7 @@
|
||||
"motion_photos_page_title": "Foto en Movimiento",
|
||||
"multiselect_grid_edit_date_time_err_read_only": "No se puede cambiar la fecha del archivo(s) de solo lectura, omitiendo",
|
||||
"multiselect_grid_edit_gps_err_read_only": "No se puede cambiar la localización de archivos de solo lectura. Saltando.",
|
||||
"no_assets_to_show": "No assets to show",
|
||||
"no_assets_to_show": "No hay elementos a mostrar",
|
||||
"notification_permission_dialog_cancel": "Cancelar",
|
||||
"notification_permission_dialog_content": "Para activar las notificaciones, ve a Configuración y selecciona permitir.",
|
||||
"notification_permission_dialog_settings": "Ajustes",
|
||||
@@ -403,13 +403,14 @@
|
||||
"setting_notifications_single_progress_title": "Mostrar progreso detallado de copia de seguridad en segundo plano",
|
||||
"setting_notifications_subtitle": "Ajusta tus preferencias de notificación",
|
||||
"setting_notifications_title": "Notificaciones",
|
||||
"setting_notifications_total_progress_subtitle": "Progreso general de subida (archivos completados/total)",
|
||||
"setting_notifications_total_progress_subtitle": "Progreso general de subida (elementos completados/total)",
|
||||
"setting_notifications_total_progress_title": "Mostrar progreso total de copia de seguridad en segundo plano",
|
||||
"setting_pages_app_bar_settings": "Ajustes",
|
||||
"settings_require_restart": "Por favor, reinicia Immich para aplicar este ajuste",
|
||||
"share_add": "Agregar",
|
||||
"share_add_photos": "Agregar fotos",
|
||||
"share_add_title": "Agregar un título",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Crear álbum",
|
||||
"shared_album_activities_input_disable": "Los comentarios están deshabilitados",
|
||||
"shared_album_activities_input_hint": "Comenta algo",
|
||||
@@ -462,7 +463,7 @@
|
||||
"shared_link_expires_never": "Caduca ∞",
|
||||
"shared_link_expires_second": "Caduca en {} segundo",
|
||||
"shared_link_expires_seconds": "Caduca en {} segundos",
|
||||
"shared_link_individual_shared": "Individual shared",
|
||||
"shared_link_individual_shared": "Compartido individualmente",
|
||||
"shared_link_info_chip_download": "Descargar",
|
||||
"shared_link_info_chip_metadata": "EXIF",
|
||||
"shared_link_info_chip_upload": "Subir",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Agregar",
|
||||
"share_add_photos": "Agregar fotos",
|
||||
"share_add_title": "Agregar un título",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Crear álbum",
|
||||
"shared_album_activities_input_disable": "Los comentarios están deshabilitados",
|
||||
"shared_album_activities_input_hint": "Say something",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Agregar",
|
||||
"share_add_photos": "Agregar fotos",
|
||||
"share_add_title": "Agregar un título",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Crear álbum",
|
||||
"shared_album_activities_input_disable": "Los comentarios están deshabilitados",
|
||||
"shared_album_activities_input_hint": "Comenta algo",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Agregar",
|
||||
"share_add_photos": "Agregar fotos",
|
||||
"share_add_title": "Agregar un título",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Crear álbum",
|
||||
"shared_album_activities_input_disable": "Los comentarios están deshabilitados",
|
||||
"shared_album_activities_input_hint": "Di algo",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Lisää",
|
||||
"share_add_photos": "Lisää kuvia",
|
||||
"share_add_title": "Lisää nimi",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Luo albumi",
|
||||
"shared_album_activities_input_disable": "Kommentointi on kytketty pois päältä",
|
||||
"shared_album_activities_input_hint": "Sano jotain",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Ajouter",
|
||||
"share_add_photos": "Ajouter des photos",
|
||||
"share_add_title": "Ajouter un titre",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Créer un album",
|
||||
"shared_album_activities_input_disable": "Les commentaires sont désactivés",
|
||||
"shared_album_activities_input_hint": "Dire quelque chose",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Ajouter",
|
||||
"share_add_photos": "Ajouter des photos",
|
||||
"share_add_title": "Ajouter un titre",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Créer un album",
|
||||
"shared_album_activities_input_disable": "Les commentaires sont désactivés",
|
||||
"shared_album_activities_input_hint": "Dire quelque chose",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "הוסף",
|
||||
"share_add_photos": "הוסף תמונות",
|
||||
"share_add_title": "הוסף כותרת",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "צור אלבום",
|
||||
"shared_album_activities_input_disable": "התגובה מושבתת",
|
||||
"shared_album_activities_input_hint": "הגב/י משהו",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Add",
|
||||
"share_add_photos": "Add photos",
|
||||
"share_add_title": "Add a title",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Create album",
|
||||
"shared_album_activities_input_disable": "कॉमेंट डिजेबल्ड है",
|
||||
"shared_album_activities_input_hint": "कुछ कहें",
|
||||
|
||||
+281
-280
@@ -1,28 +1,28 @@
|
||||
{
|
||||
"action_common_back": "Back",
|
||||
"action_common_back": "Vissza",
|
||||
"action_common_cancel": "Mégsem",
|
||||
"action_common_clear": "Clear",
|
||||
"action_common_confirm": "Confirm",
|
||||
"action_common_clear": "Kitöröl",
|
||||
"action_common_confirm": "Jóváhagy",
|
||||
"action_common_update": "Frissít",
|
||||
"add_to_album_bottom_sheet_added": "Hozzáadva a(z) {album} nevű albumhoz",
|
||||
"add_to_album_bottom_sheet_already_exists": "Már eleme a(z) {album} nevű albumnak",
|
||||
"add_to_album_bottom_sheet_added": "Hozzáadva a(z) \"{album}\" albumhoz",
|
||||
"add_to_album_bottom_sheet_already_exists": "Már benne van a(z) \"{album}\" albumban",
|
||||
"advanced_settings_log_level_title": "Naplózás szintje: {}",
|
||||
"advanced_settings_prefer_remote_subtitle": "Néhány eszköz fájdalmasan lassan tölti be az eszközön lévő elemeket. Ezzel a beállítással inkább a távoli képeket töltjük be helyette.",
|
||||
"advanced_settings_prefer_remote_title": "Távoli képek preferálása",
|
||||
"advanced_settings_self_signed_ssl_subtitle": "SSL tanúsítvány ellenőrzésének kihagyása a szerver végponthoz. Ehhez saját aláírt tanúsítványok szükségesek.",
|
||||
"advanced_settings_self_signed_ssl_title": "Saját aláírt SSL tanúsítványok engedélyezése",
|
||||
"advanced_settings_prefer_remote_subtitle": "Néhány eszköz fájdalmasan lassan tölti be az eszközön lévő bélyegképeket. Ezzel a beállítással inkább a távoli képeket töltjük be helyette.",
|
||||
"advanced_settings_prefer_remote_title": "Távoli képek előnyben részesítése",
|
||||
"advanced_settings_self_signed_ssl_subtitle": "Nem ellenőrzi a szerver SSL tanúsítványát. Önaláírt tanúsítvány esetén szükséges beállítás.",
|
||||
"advanced_settings_self_signed_ssl_title": "Önaláírt SSL tanúsítványok engedélyezése",
|
||||
"advanced_settings_tile_subtitle": "Haladó felhasználói beállítások",
|
||||
"advanced_settings_tile_title": "Haladó",
|
||||
"advanced_settings_troubleshooting_subtitle": "További funkciók engedélyezése hibaelhárítás céljából",
|
||||
"advanced_settings_troubleshooting_title": "Hibaelhárítás",
|
||||
"album_info_card_backup_album_excluded": "KIZÁRVA",
|
||||
"album_info_card_backup_album_excluded": "KIHAGYVA",
|
||||
"album_info_card_backup_album_included": "BELEÉRTVE",
|
||||
"album_thumbnail_card_item": "1 elem",
|
||||
"album_thumbnail_card_items": "{} elem",
|
||||
"album_thumbnail_card_shared": "· Megosztott",
|
||||
"album_thumbnail_owned": "Tulajdonos",
|
||||
"album_thumbnail_shared_by": "Megosztotta: {}",
|
||||
"album_viewer_appbar_delete_confirm": "Are you sure you want to delete this album from your account?",
|
||||
"album_viewer_appbar_delete_confirm": "Biztos, hogy törölni szeretnéd ezt az albumot?",
|
||||
"album_viewer_appbar_share_delete": "Album törlése",
|
||||
"album_viewer_appbar_share_err_delete": "Nem sikerült törölni az albumot",
|
||||
"album_viewer_appbar_share_err_leave": "Nem sikerült kilépni az albumból",
|
||||
@@ -39,18 +39,18 @@
|
||||
"app_bar_signout_dialog_title": "Kijelentkezés",
|
||||
"archive_page_no_archived_assets": "Nem található archivált elem",
|
||||
"archive_page_title": "Archívum ({})",
|
||||
"asset_action_delete_err_read_only": "Nem sikerült törölni a csak-olvasható elem(ek)et, így ezeket átugorjuk",
|
||||
"asset_action_share_err_offline": "Nem sikerült betölteni az offline elem(ek)et, így ezeket kihagyjuk",
|
||||
"asset_list_group_by_sub_title": "Group by",
|
||||
"asset_action_delete_err_read_only": "Csak-olvasható elem(ek)et nem lehet törölni, így ezeket átugorjuk",
|
||||
"asset_action_share_err_offline": "Nem sikerült betölteni a kapcsolat nélküli elem(ek)et, így ezeket kihagyjuk",
|
||||
"asset_list_group_by_sub_title": "Csoportosítás",
|
||||
"asset_list_layout_settings_dynamic_layout_title": "Dinamikus elrendezés",
|
||||
"asset_list_layout_settings_group_automatically": "Automatikus",
|
||||
"asset_list_layout_settings_group_by": "Elemek csoportosítása",
|
||||
"asset_list_layout_settings_group_by_month": "hónapok szerint",
|
||||
"asset_list_layout_settings_group_by_month_day": "hónap és nap szerint",
|
||||
"asset_list_layout_sub_title": "Layout",
|
||||
"asset_list_layout_sub_title": "Elrendezés",
|
||||
"asset_list_settings_subtitle": "Fotórács elrendezése",
|
||||
"asset_list_settings_title": "Fotórács",
|
||||
"asset_viewer_settings_title": "Asset Viewer",
|
||||
"asset_viewer_settings_title": "Elem Megjelenítő",
|
||||
"backup_album_selection_page_albums_device": "Ezen az eszközön lévő albumok ({})",
|
||||
"backup_album_selection_page_albums_tap": "Koppincs a hozzáadáshoz, duplán koppincs az eltávolításhoz",
|
||||
"backup_album_selection_page_assets_scatter": "Egy elem több albumban is lehet. Ezért a mentéshez albumokat lehet hozzáadni vagy azokat a mentésből kihagyni.",
|
||||
@@ -58,13 +58,13 @@
|
||||
"backup_album_selection_page_selection_info": "Összegzés",
|
||||
"backup_album_selection_page_total_assets": "Összes egyedi elem",
|
||||
"backup_all": "Összes",
|
||||
"backup_background_service_backup_failed_message": "HIba a mentés közben. Újrapróbálkozás...",
|
||||
"backup_background_service_connection_failed_message": "HIba a szerverhez való csatlakozás közben. Újrapróbálkozás...",
|
||||
"backup_background_service_backup_failed_message": "Hiba a mentés közben. Újrapróbálkozás...",
|
||||
"backup_background_service_connection_failed_message": "Hiba a szerverhez való csatlakozás közben. Újrapróbálkozás...",
|
||||
"backup_background_service_current_upload_notification": "Feltöltés {}",
|
||||
"backup_background_service_default_notification": "Új elemek keresése...",
|
||||
"backup_background_service_error_title": "Hiba mentés közben",
|
||||
"backup_background_service_in_progress_notification": "Elemek mentés alatt..",
|
||||
"backup_background_service_upload_failure_notification": "Hiba feltöltés közben {}",
|
||||
"backup_background_service_in_progress_notification": "Elemek mentése folyamatban…",
|
||||
"backup_background_service_upload_failure_notification": "Hiba a feltöltés közben {}",
|
||||
"backup_controller_page_albums": "Albumok Mentése",
|
||||
"backup_controller_page_background_app_refresh_disabled_content": "Engedélyezd a háttérben történő frissítést a Beállítások > Általános > Háttérben Frissítés menüpontban.",
|
||||
"backup_controller_page_background_app_refresh_disabled_title": "Háttérben frissítés kikapcsolva",
|
||||
@@ -78,9 +78,9 @@
|
||||
"backup_controller_page_background_delay": "Új elemek mentésének késleltetése: {}",
|
||||
"backup_controller_page_background_description": "Kapcsold be a háttérfolyamatot, hogy automatikusan mentsen elemeket az applikáció megnyitása nélkül",
|
||||
"backup_controller_page_background_is_off": "Automatikus mentés a háttérben ki van kapcsolva",
|
||||
"backup_controller_page_background_is_on": "Automatikus mentés a háttérben bekapcsolva",
|
||||
"backup_controller_page_background_turn_off": "Háttérfolyamat kikapcsolása",
|
||||
"backup_controller_page_background_turn_on": "Háttérfolyamat bekapcsolása",
|
||||
"backup_controller_page_background_is_on": "Automatikus mentés a háttérben be van kapcsolva",
|
||||
"backup_controller_page_background_turn_off": "Háttérszolgáltatás kikapcsolása",
|
||||
"backup_controller_page_background_turn_on": "Háttérszolgáltatás bekapcsolása",
|
||||
"backup_controller_page_background_wifi": "Csak WiFi-n",
|
||||
"backup_controller_page_backup": "Mentés",
|
||||
"backup_controller_page_backup_selected": "Kiválasztva:",
|
||||
@@ -92,15 +92,15 @@
|
||||
"backup_controller_page_failed": "Sikertelen ({})",
|
||||
"backup_controller_page_filename": "Fájlnév: {}[{}]",
|
||||
"backup_controller_page_id": "Azonosító: {}",
|
||||
"backup_controller_page_info": "Mentésinformációk",
|
||||
"backup_controller_page_info": "Mentési Információk",
|
||||
"backup_controller_page_none_selected": "Egy sincs kiválasztva",
|
||||
"backup_controller_page_remainder": "Hátralévő",
|
||||
"backup_controller_page_remainder_sub": "Hátralévő fotók és videók a kijelöltek közül",
|
||||
"backup_controller_page_select": "Kiválaszt",
|
||||
"backup_controller_page_server_storage": "Szerver Tárhely",
|
||||
"backup_controller_page_start_backup": "Mentés Elindítása",
|
||||
"backup_controller_page_status_off": "Automatikus mentés az előtérben kikapcsolva",
|
||||
"backup_controller_page_status_on": "Automatikus mentés az előtérben bekapcsolva",
|
||||
"backup_controller_page_start_backup": "Mentés Indítása",
|
||||
"backup_controller_page_status_off": "Automatikus mentés az előtérben ki van kapcsolva",
|
||||
"backup_controller_page_status_on": "Automatikus mentés az előtérben be van kapcsolva",
|
||||
"backup_controller_page_storage_format": "{} / {} felhasználva",
|
||||
"backup_controller_page_to_backup": "Mentésre kijelölt albumok",
|
||||
"backup_controller_page_total": "Összesen",
|
||||
@@ -115,15 +115,15 @@
|
||||
"backup_manual_in_progress": "Feltöltés már folyamatban. Próbáld meg később",
|
||||
"backup_manual_success": "Sikeres",
|
||||
"backup_manual_title": "Feltöltés állapota",
|
||||
"backup_options_page_title": "Backup options",
|
||||
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
||||
"backup_options_page_title": "Biztonági mentés beállításai",
|
||||
"cache_settings_album_thumbnails": "Képtár oldalankénti bélyegképei ({} elem)",
|
||||
"cache_settings_clear_cache_button": "Gyorsítótár kiürítése",
|
||||
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
||||
"cache_settings_clear_cache_button_title": "Kiüríti az alkalmazás gyorsítótárát. Ez jelentősen kihat az alkalmazás teljesítményére, amíg a gyorsítótár újra nem épül.",
|
||||
"cache_settings_duplicated_assets_clear_button": "KIÜRÍT",
|
||||
"cache_settings_duplicated_assets_subtitle": "Fotók és videók, amiket az alkalmazás fekete listára tett",
|
||||
"cache_settings_duplicated_assets_title": "Duplikált Elemek ({})",
|
||||
"cache_settings_image_cache_size": "Kép gyorsítótár mérete ({} elem)",
|
||||
"cache_settings_statistics_album": "Mappa bélyegképei",
|
||||
"cache_settings_statistics_album": "Képtár bélyegképei",
|
||||
"cache_settings_statistics_assets": "{} elem ({})",
|
||||
"cache_settings_statistics_full": "Teljes méretű képek",
|
||||
"cache_settings_statistics_shared": "Megosztott album bélyegképei",
|
||||
@@ -135,20 +135,20 @@
|
||||
"cache_settings_tile_title": "Helyi Tárhely",
|
||||
"cache_settings_title": "Gyorsítótár Beállítások",
|
||||
"change_password_form_confirm_password": "Jelszó Megerősítése",
|
||||
"change_password_form_description": "Kedves {name}!\n\nMost jelentkezel be először a rendszerbe vagy más okból szükséges a jelszavad meváltoztatása. Kérjük, add meg új jelszavad.",
|
||||
"change_password_form_description": "Szia {name}!\n\nMost jelentkezel be először a rendszerbe vagy más okból szükséges a jelszavad meváltoztatása. Kérjük, add meg új jelszavad.",
|
||||
"change_password_form_new_password": "Új Jelszó",
|
||||
"change_password_form_password_mismatch": "A két beírt jelszó nem egyezik",
|
||||
"change_password_form_password_mismatch": "A beírt jelszavak nem egyeznek",
|
||||
"change_password_form_reenter_new_password": "Jelszó (még egyszer)",
|
||||
"common_add_to_album": "Albumhoz ad",
|
||||
"common_change_password": "Jelszócsere",
|
||||
"common_create_new_album": "Új album létrehozása",
|
||||
"common_server_error": "Kérjük, ellenőrizd a hálózati kapcsolatot, gondoskodj róla, hogy a szerver elérhető legyen, valamint az alkalmazás és a szerver kompatibilis verziójú legyen.",
|
||||
"common_shared": "Megosztva",
|
||||
"control_bottom_app_bar_add_to_album": "Hozzáadás az albumhoz",
|
||||
"control_bottom_app_bar_add_to_album": "Albumhoz ad",
|
||||
"control_bottom_app_bar_album_info": "{} elem",
|
||||
"control_bottom_app_bar_album_info_shared": "{} elemek· Megosztva",
|
||||
"control_bottom_app_bar_album_info_shared": "{} elemek · Megosztva",
|
||||
"control_bottom_app_bar_archive": "Archivál",
|
||||
"control_bottom_app_bar_create_new_album": "Album létrehozása",
|
||||
"control_bottom_app_bar_create_new_album": "Új album létrehozása",
|
||||
"control_bottom_app_bar_delete": "Törlés",
|
||||
"control_bottom_app_bar_delete_from_immich": "Törlés az Immich-ből",
|
||||
"control_bottom_app_bar_delete_from_local": "Törlés az eszközről",
|
||||
@@ -157,7 +157,7 @@
|
||||
"control_bottom_app_bar_favorite": "Kedvenc",
|
||||
"control_bottom_app_bar_share": "Megosztás",
|
||||
"control_bottom_app_bar_share_to": "Megosztás Ide",
|
||||
"control_bottom_app_bar_stack": "Stack",
|
||||
"control_bottom_app_bar_stack": "Fotók csoportosítása",
|
||||
"control_bottom_app_bar_trash_from_immich": "Lomtárba Helyez",
|
||||
"control_bottom_app_bar_unarchive": "Nem Archivált",
|
||||
"control_bottom_app_bar_unfavorite": "Nem Kedvenc",
|
||||
@@ -169,93 +169,93 @@
|
||||
"create_shared_album_page_share_select_photos": "Fotók választása",
|
||||
"curated_location_page_title": "Helyek",
|
||||
"curated_object_page_title": "Dolgok",
|
||||
"daily_title_text_date": "E, MMM dd",
|
||||
"daily_title_text_date_year": "E, MMM dd, yyyy",
|
||||
"date_format": "E, LLL d, y • h:mm a",
|
||||
"daily_title_text_date": "MMM dd (E)",
|
||||
"daily_title_text_date_year": "yyyy MMM dd (E)",
|
||||
"date_format": "y LLL d (E) • HH:mm",
|
||||
"delete_dialog_alert": "Ezek az elemek véglegesen törölve lesznek Immich-ről és az eszközödről is",
|
||||
"delete_dialog_alert_local": "These items will be permanently removed from your device but still be available on the Immich server",
|
||||
"delete_dialog_alert_local_non_backed_up": "Some of the items aren't backed up to Immich and will be permanently removed from your device",
|
||||
"delete_dialog_alert_remote": "These items will be permanently deleted from the Immich server",
|
||||
"delete_dialog_cancel": "Mégse",
|
||||
"delete_dialog_alert_local": "Ezek az elemek véglegesen törölve lesznek az eszközödről, de továbbra is elérhetőek maradnak az Immich szerveren",
|
||||
"delete_dialog_alert_local_non_backed_up": "Néhány elem nem lett elmentve az Immich szerverre és most véglegesen törölve lesznek az eszközödről is",
|
||||
"delete_dialog_alert_remote": "Ezek az elemek véglegesen törlésre kerülnek az Immich szerverről",
|
||||
"delete_dialog_cancel": "Mégsem",
|
||||
"delete_dialog_ok": "Törlés",
|
||||
"delete_dialog_ok_force": "Delete Anyway",
|
||||
"delete_dialog_title": "Törlés véglegesen",
|
||||
"delete_local_dialog_ok_backed_up_only": "Delete Backed Up Only",
|
||||
"delete_local_dialog_ok_force": "Delete Anyway",
|
||||
"delete_shared_link_dialog_content": "Are you sure you want to delete this shared link?",
|
||||
"delete_shared_link_dialog_title": "Delete Shared Link",
|
||||
"delete_dialog_ok_force": "Törlés Mindenképp",
|
||||
"delete_dialog_title": "Végleges Törlés",
|
||||
"delete_local_dialog_ok_backed_up_only": "Csak a Biztonsági Mentés Törlése",
|
||||
"delete_local_dialog_ok_force": "Törlés Mindenképp",
|
||||
"delete_shared_link_dialog_content": "Biztos, hogy törlöd ezt a megosztott linket?",
|
||||
"delete_shared_link_dialog_title": "Megosztott Link Törlése",
|
||||
"description_input_hint_text": "Leírás hozzáadása...",
|
||||
"description_input_submit_error": "Nem sikerült frissíteni a leírást. További információért kérjük, nézd meg az eseménynaplót",
|
||||
"edit_date_time_dialog_date_time": "Date and Time",
|
||||
"edit_date_time_dialog_timezone": "Timezone",
|
||||
"edit_location_dialog_title": "Location",
|
||||
"exif_bottom_sheet_description": "Leírás hozzáadása...",
|
||||
"edit_date_time_dialog_date_time": "Dátum és Idő",
|
||||
"edit_date_time_dialog_timezone": "Időzóna",
|
||||
"edit_location_dialog_title": "Hely",
|
||||
"exif_bottom_sheet_description": "Leírás Hozzáadása...",
|
||||
"exif_bottom_sheet_details": "RÉSZLETEK",
|
||||
"exif_bottom_sheet_location": "HELYSZÍN",
|
||||
"exif_bottom_sheet_location_add": "Add a location",
|
||||
"exif_bottom_sheet_people": "PEOPLE",
|
||||
"exif_bottom_sheet_person_add_person": "Add name",
|
||||
"exif_bottom_sheet_location": "HELY",
|
||||
"exif_bottom_sheet_location_add": "Hely hozzáadása",
|
||||
"exif_bottom_sheet_people": "EMBEREK",
|
||||
"exif_bottom_sheet_person_add_person": "Név hozzáadása",
|
||||
"experimental_settings_new_asset_list_subtitle": "Fejlesztés alatt",
|
||||
"experimental_settings_new_asset_list_title": "Enable experimental photo grid",
|
||||
"experimental_settings_subtitle": "Csak saját felelősségre használd",
|
||||
"experimental_settings_new_asset_list_title": "Kisérleti képrács engedélyezése",
|
||||
"experimental_settings_subtitle": "Csak saját felelősségre használd!",
|
||||
"experimental_settings_title": "Kísérleti",
|
||||
"favorites_page_no_favorites": "Nem található kedvencnek jelölt média",
|
||||
"favorites_page_no_favorites": "Nem található kedvencnek jelölt elem",
|
||||
"favorites_page_title": "Kedvencek",
|
||||
"haptic_feedback_switch": "Enable haptic feedback",
|
||||
"haptic_feedback_title": "Haptic Feedback",
|
||||
"home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.",
|
||||
"home_page_add_to_album_err_local": "Helyi médiát még nem lehet albumba tenni. Kihagyjuk.",
|
||||
"home_page_add_to_album_success": "Added {added} assets to album {album}.",
|
||||
"home_page_album_err_partner": "Can not add partner assets to an album yet, skipping",
|
||||
"home_page_archive_err_local": "Helyi média archiválása még nem támogatott, úgyhogy kihagyjuk",
|
||||
"home_page_archive_err_partner": "Can not archive partner assets, skipping",
|
||||
"home_page_building_timeline": "Building the timeline",
|
||||
"home_page_delete_err_partner": "Can not delete partner assets, skipping",
|
||||
"home_page_delete_remote_err_local": "Local assets in delete remote selection, skipping",
|
||||
"home_page_favorite_err_local": "Helyi médiát még nem lehet a kedvencek közé tenni. Kihagyjuk.",
|
||||
"home_page_favorite_err_partner": "Can not favorite partner assets yet, skipping",
|
||||
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
||||
"home_page_share_err_local": "Can not share local assets via link, skipping",
|
||||
"home_page_upload_err_limit": "Csak 30 elemet tudsz egyszerre feltölteni, átugrás",
|
||||
"haptic_feedback_switch": "Rezgéses visszajelzés engedélyezése",
|
||||
"haptic_feedback_title": "Rezgéses Visszajelzés",
|
||||
"home_page_add_to_album_conflicts": "{added} elem hozzáadva a(z) \"{album}\" albumhoz. {failed} elem már eleve az albumban volt.",
|
||||
"home_page_add_to_album_err_local": "Helyi elemeket még nem lehet albumba tenni. Kihagyjuk.",
|
||||
"home_page_add_to_album_success": "{added} elem hozzáadva a(z) \"{album}\" albumhoz.",
|
||||
"home_page_album_err_partner": "Még nem lehet a partner elemeit albumokhoz adni, úghogy kihagyjuk.",
|
||||
"home_page_archive_err_local": "Helyi elemek archiválása még nem támogatott, úgyhogy kihagyjuk",
|
||||
"home_page_archive_err_partner": "Partner elemeit nem lehet archiválni, úgyhogy kihagyjuk",
|
||||
"home_page_building_timeline": "Idővonal összeállítása",
|
||||
"home_page_delete_err_partner": "Partner elemeit nem lehet törölni, úgyhogy kihagyjuk",
|
||||
"home_page_delete_remote_err_local": "Helyi elemek vannak távoli törlésre kiválasztva, úgyhogy ezeket kihagyjuk",
|
||||
"home_page_favorite_err_local": "Helyi elemeket még nem lehet a kedvencek közé tenni, úgyhogy ezeket kihagyjuk",
|
||||
"home_page_favorite_err_partner": "Partner elemeit még nem lehet a kedvencek közé tenni, úgyhogy ezeket kihagyjuk",
|
||||
"home_page_first_time_notice": "Ha most használod először az alkalmazást, akkor ahhoz, hogy megjelenjenek a fotók és a videók az idővonaladon, állítsd be, hogy melyik albumaidról készüljön biztonsági mentés.",
|
||||
"home_page_share_err_local": "Helyi elemekről nem lehet megosztási linket készíteni, úgyhogy kihagyjuk",
|
||||
"home_page_upload_err_limit": "Csak 30 elemet tudsz egyszerre feltölteni, úgyhogy kihagyjuk",
|
||||
"image_viewer_page_state_provider_download_error": "Letöltési Hiba",
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_started": "Letöltés Megkezdődött",
|
||||
"image_viewer_page_state_provider_download_success": "Letöltés Sikeres",
|
||||
"image_viewer_page_state_provider_share_error": "Share Error",
|
||||
"image_viewer_page_state_provider_share_error": "Megosztási Hiba",
|
||||
"library_page_albums": "Albumok",
|
||||
"library_page_archive": "Archívum",
|
||||
"library_page_device_albums": "Albumok az Eszközön",
|
||||
"library_page_favorites": "Kedvencek",
|
||||
"library_page_new_album": "Új album",
|
||||
"library_page_sharing": "Megosztás\n",
|
||||
"library_page_sort_asset_count": "Number of assets",
|
||||
"library_page_sort_created": "Legutoljára létrehozott",
|
||||
"library_page_sort_last_modified": "Last modified",
|
||||
"library_page_sort_most_oldest_photo": "Oldest photo",
|
||||
"library_page_sort_most_recent_photo": "Most recent photo",
|
||||
"library_page_sharing": "Megosztás",
|
||||
"library_page_sort_asset_count": "Eszközök száma",
|
||||
"library_page_sort_created": "Létrehozás ideje",
|
||||
"library_page_sort_last_modified": "Utolsó módosítás ideje",
|
||||
"library_page_sort_most_oldest_photo": "Legrégebbi fotó",
|
||||
"library_page_sort_most_recent_photo": "Legújabb fotó",
|
||||
"library_page_sort_title": "Album címe",
|
||||
"location_picker_choose_on_map": "Choose on map",
|
||||
"location_picker_latitude": "Latitude",
|
||||
"location_picker_latitude_error": "Enter a valid latitude",
|
||||
"location_picker_latitude_hint": "Enter your latitude here",
|
||||
"location_picker_longitude": "Longitude",
|
||||
"location_picker_longitude_error": "Enter a valid longitude",
|
||||
"location_picker_longitude_hint": "Enter your longitude here",
|
||||
"location_picker_choose_on_map": "Válassz a térképen",
|
||||
"location_picker_latitude": "Szélességi kör",
|
||||
"location_picker_latitude_error": "Érvényes szélességi kört írj be",
|
||||
"location_picker_latitude_hint": "Ide írd a szélességi kört",
|
||||
"location_picker_longitude": "Hosszúsági kör",
|
||||
"location_picker_longitude_error": "Érvényes hosszúsági kört írj be",
|
||||
"location_picker_longitude_hint": "Ide írd a hosszúsági kört",
|
||||
"login_disabled": "A bejelentkezés letiltva",
|
||||
"login_form_api_exception": "API hiba. Kérljük, ellenőrid a szerver címét, majd próbáld újra.",
|
||||
"login_form_back_button_text": "Back",
|
||||
"login_form_back_button_text": "Vissza",
|
||||
"login_form_button_text": "Bejelentkezés",
|
||||
"login_form_email_hint": "email@cimed.hu",
|
||||
"login_form_endpoint_hint": "http://szerver-címe:port/api",
|
||||
"login_form_endpoint_hint": "http(s)://szerver-címe:port/api",
|
||||
"login_form_endpoint_url": "Szerver címe",
|
||||
"login_form_err_http": "Kérem, adjon meg egy http:// vagy https:// címet",
|
||||
"login_form_err_http": "Kérjük, adj meg egy http:// vagy https:// címet",
|
||||
"login_form_err_invalid_email": "Érvénytelen email cím",
|
||||
"login_form_err_invalid_url": "Érvénytelen cím",
|
||||
"login_form_err_leading_whitespace": "Az első karakter szóköz",
|
||||
"login_form_err_trailing_whitespace": "Az utolsó karakter szóköz",
|
||||
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",
|
||||
"login_form_failed_get_oauth_server_disable": "OAuth feature is not available on this server",
|
||||
"login_form_failed_get_oauth_server_config": "Nem sikerült az OAuth bejelentkezés. Ellenőrizd a szerver címét.",
|
||||
"login_form_failed_get_oauth_server_disable": "OAuth bejelentkezés nem elérhető ezen a szerveren",
|
||||
"login_form_failed_login": "Hiba bejelentkezés közben, ellenőrizd a címet, email-t és a jelszót",
|
||||
"login_form_handshake_exception": "There was an Handshake Exception with the server. Enable self-signed certificate support in the settings if you are using a self-signed certificate.",
|
||||
"login_form_handshake_exception": "SSL Kézfogási Hiba törént. Engedélyezd az önaláírt tanúsítvényokat a beállításokban, hogy ha önaláírt tanúsítványt használsz.",
|
||||
"login_form_label_email": "Email",
|
||||
"login_form_label_password": "Jelszó",
|
||||
"login_form_next_button": "Következő",
|
||||
@@ -263,61 +263,61 @@
|
||||
"login_form_save_login": "Maradjon bejelentkezve",
|
||||
"login_form_server_empty": "Add meg a szerver címét.",
|
||||
"login_form_server_error": "Nem sikerült kapcsolódni a szerverhez.",
|
||||
"login_password_changed_error": "There was an error updating your password",
|
||||
"login_password_changed_success": "Password updated successfully",
|
||||
"map_assets_in_bound": "{} photo",
|
||||
"map_assets_in_bounds": "{} photos",
|
||||
"map_cannot_get_user_location": "Cannot get user's location",
|
||||
"map_location_dialog_cancel": "Cancel",
|
||||
"map_location_dialog_yes": "Yes",
|
||||
"map_location_picker_page_use_location": "Use this location",
|
||||
"map_location_service_disabled_content": "Location service needs to be enabled to display assets from your current location. Do you want to enable it now?",
|
||||
"map_location_service_disabled_title": "Location Service disabled",
|
||||
"map_no_assets_in_bounds": "No photos in this area",
|
||||
"map_no_location_permission_content": "Location permission is needed to display assets from your current location. Do you want to allow it now?",
|
||||
"map_no_location_permission_title": "Location Permission denied",
|
||||
"map_settings_dark_mode": "Dark mode",
|
||||
"map_settings_date_range_option_all": "All",
|
||||
"map_settings_date_range_option_day": "Past 24 hours",
|
||||
"map_settings_date_range_option_days": "Past {} days",
|
||||
"map_settings_date_range_option_year": "Past year",
|
||||
"map_settings_date_range_option_years": "Past {} years",
|
||||
"map_settings_dialog_cancel": "Cancel",
|
||||
"map_settings_dialog_save": "Save",
|
||||
"map_settings_dialog_title": "Map Settings",
|
||||
"map_settings_include_show_archived": "Include Archived",
|
||||
"map_settings_include_show_partners": "Include Partners",
|
||||
"map_settings_only_relative_range": "Date range",
|
||||
"map_settings_only_show_favorites": "Show Favorite Only",
|
||||
"map_settings_theme_settings": "Map Theme",
|
||||
"map_zoom_to_see_photos": "Zoom out to see photos",
|
||||
"memories_all_caught_up": "All caught up",
|
||||
"memories_check_back_tomorrow": "Check back tomorrow for more memories",
|
||||
"memories_start_over": "Start Over",
|
||||
"memories_swipe_to_close": "Swipe up to close",
|
||||
"monthly_title_text_date_format": "MMMM y",
|
||||
"login_password_changed_error": "Nem sikerült módosítani a jelszót",
|
||||
"login_password_changed_success": "Jelszó sikeresen módosítva",
|
||||
"map_assets_in_bound": "{} fotó",
|
||||
"map_assets_in_bounds": "{} fotó",
|
||||
"map_cannot_get_user_location": "A helymeghatározás nem sikerült",
|
||||
"map_location_dialog_cancel": "Mégsem",
|
||||
"map_location_dialog_yes": "Igen",
|
||||
"map_location_picker_page_use_location": "Kiválasztott hely használata",
|
||||
"map_location_service_disabled_content": "A helymeghatározás szolgáltatást engedélyezni kell a jelenlegi helyednél lévő elemek megjelenítéséhez. Szeretnéd most engedélyezni?",
|
||||
"map_location_service_disabled_title": "Helymeghatározás Szolgáltatás letiltva",
|
||||
"map_no_assets_in_bounds": "Nincsenek fotók a környéken",
|
||||
"map_no_location_permission_content": "A helymeghatározást engedélyezni kell a jelenlegi helyednél lévő elemek megjelenítéséhez. Szeretnéd most engedélyezni?",
|
||||
"map_no_location_permission_title": "Helymeghatározás letiltva",
|
||||
"map_settings_dark_mode": "Sötét mód",
|
||||
"map_settings_date_range_option_all": "Összes",
|
||||
"map_settings_date_range_option_day": "Elmúlt 24 óra",
|
||||
"map_settings_date_range_option_days": "Elmúlt {} nap",
|
||||
"map_settings_date_range_option_year": "Elmúlt év",
|
||||
"map_settings_date_range_option_years": "Elmúlt {} év",
|
||||
"map_settings_dialog_cancel": "Mégsem",
|
||||
"map_settings_dialog_save": "Mentés",
|
||||
"map_settings_dialog_title": "Térkép Beállítások",
|
||||
"map_settings_include_show_archived": "Archívokkal Együtt",
|
||||
"map_settings_include_show_partners": "Partnerével Együtt",
|
||||
"map_settings_only_relative_range": "Dátum intervallum",
|
||||
"map_settings_only_show_favorites": "Csak Kedvencek Mutatása",
|
||||
"map_settings_theme_settings": "Térkép Témája",
|
||||
"map_zoom_to_see_photos": "Kicsinyíts, hogy láss fényképeket",
|
||||
"memories_all_caught_up": "Naprakész vagy",
|
||||
"memories_check_back_tomorrow": "Nézz vissza holnap újabb emlékekért",
|
||||
"memories_start_over": "Újrakezdés",
|
||||
"memories_swipe_to_close": "Bezáráshoz söpörd ki felfelé",
|
||||
"monthly_title_text_date_format": "y MMMM",
|
||||
"motion_photos_page_title": "Mozgó Fotók",
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
|
||||
"no_assets_to_show": "No assets to show",
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Csak-olvasható elem(ek) dátuma nem módosítható, ezért kihagyjuk",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Csak-olvasható elem(ek) helyszíne nem módosítható, ezért kihagyjuk",
|
||||
"no_assets_to_show": "Nincs megjeleníthető elem",
|
||||
"notification_permission_dialog_cancel": "Mégsem",
|
||||
"notification_permission_dialog_content": "Az értesítések bekapcsolásához a Beállítások menüben válaszd ki az Engedélyezés-t.",
|
||||
"notification_permission_dialog_settings": "Beállítások",
|
||||
"notification_permission_list_tile_content": "Értesítések engedélyezése",
|
||||
"notification_permission_list_tile_enable_button": "Értesítések Bekapcsolása",
|
||||
"notification_permission_list_tile_title": "Engedély az Értesítésekhez",
|
||||
"partner_list_user_photos": "{user}'s photos",
|
||||
"partner_list_view_all": "View all",
|
||||
"partner_page_add_partner": "Add partner",
|
||||
"partner_page_empty_message": "Your photos are not yet shared with any partner.",
|
||||
"partner_page_no_more_users": "No more users to add",
|
||||
"partner_page_partner_add_failed": "Failed to add partner",
|
||||
"partner_page_select_partner": "Select partner",
|
||||
"partner_page_shared_to_title": "Shared to",
|
||||
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
|
||||
"partner_page_stop_sharing_title": "Stop sharing your photos?",
|
||||
"partner_list_user_photos": "{user} fényképei",
|
||||
"partner_list_view_all": "Összes mutatása",
|
||||
"partner_page_add_partner": "Partner hozzáadása",
|
||||
"partner_page_empty_message": "Még senkivel nem osztottad meg a fényképeidet.",
|
||||
"partner_page_no_more_users": "Nincs hozzáadható felhasználó",
|
||||
"partner_page_partner_add_failed": "Nem sikerült hozzáadni a felhasználót",
|
||||
"partner_page_select_partner": "Partner kiválasztása",
|
||||
"partner_page_shared_to_title": "Megosztva: ",
|
||||
"partner_page_stop_sharing_content": "{} nem fog többé hozzáférni a fotóidhoz.",
|
||||
"partner_page_stop_sharing_title": "Fotók megosztásának megszűntetése?",
|
||||
"partner_page_title": "Partner",
|
||||
"permission_onboarding_back": "Back",
|
||||
"permission_onboarding_back": "Vissza",
|
||||
"permission_onboarding_continue_anyway": "Folytatás mindenképp",
|
||||
"permission_onboarding_get_started": "Kezdjük el",
|
||||
"permission_onboarding_go_to_settings": "Beállítások megnyitása",
|
||||
@@ -327,47 +327,47 @@
|
||||
"permission_onboarding_permission_granted": "Hozzáférés engedélyezve! Minden készen áll.",
|
||||
"permission_onboarding_permission_limited": "Korlátozott hozzáférés. Ha szeretnéd, hogy az Immich a teljes galéria gyűjteményedet mentse és kezelje, akkor a Beállításokban engedélyezd a fotó és videó jogosultságokat.",
|
||||
"permission_onboarding_request": "Engedélyezni kell, hogy az Immich hozzáférjen a képekhez és videókhoz",
|
||||
"preferences_settings_title": "Preferences",
|
||||
"preferences_settings_title": "Beállítások",
|
||||
"profile_drawer_app_logs": "Naplók",
|
||||
"profile_drawer_client_out_of_date_major": "Mobile App is out of date. Please update to the latest major version.",
|
||||
"profile_drawer_client_out_of_date_minor": "Mobile App is out of date. Please update to the latest minor version.",
|
||||
"profile_drawer_client_out_of_date_major": "A mobilalkalmazás elavult. Kérjük, frissítsd a legfrisebb főverzióra.",
|
||||
"profile_drawer_client_out_of_date_minor": "A mobilalkalmazás elavult. Kérjük, frissítsd a legfrisebb alverzióra.",
|
||||
"profile_drawer_client_server_up_to_date": "Kliens és a szerver is naprakész",
|
||||
"profile_drawer_documentation": "Documentation",
|
||||
"profile_drawer_documentation": "Dokumentáció",
|
||||
"profile_drawer_github": "GitHub",
|
||||
"profile_drawer_server_out_of_date_major": "Server is out of date. Please update to the latest major version.",
|
||||
"profile_drawer_server_out_of_date_minor": "Server is out of date. Please update to the latest minor version.",
|
||||
"profile_drawer_server_out_of_date_major": "A szerver elavult. Kérjük, frissítsd a legfrisebb főverzióra.",
|
||||
"profile_drawer_server_out_of_date_minor": "A szerver elavult. Kérjük, frissítsd a legfrisebb alverzióra.",
|
||||
"profile_drawer_settings": "Beállítások",
|
||||
"profile_drawer_sign_out": "Kijelentkezés",
|
||||
"profile_drawer_trash": "Trash",
|
||||
"profile_drawer_trash": "Lomtár",
|
||||
"recently_added_page_title": "Nemrég Hozzáadott",
|
||||
"scaffold_body_error_occurred": "Error occurred",
|
||||
"search_bar_hint": "Keress a fotóid között",
|
||||
"search_filter_apply": "Apply filter",
|
||||
"search_filter_camera_make": "Make",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_display_option_archive": "Archive",
|
||||
"search_filter_display_option_favorite": "Favorite",
|
||||
"search_filter_display_option_not_in_album": "Not in album",
|
||||
"search_filter_location_city": "City",
|
||||
"search_filter_location_country": "Country",
|
||||
"search_filter_location_state": "State",
|
||||
"search_filter_media_type_all": "All",
|
||||
"search_filter_media_type_image": "Image",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"scaffold_body_error_occurred": "Hiba történt",
|
||||
"search_bar_hint": "Fotók keresése",
|
||||
"search_filter_apply": "Szűrő alkalmazása",
|
||||
"search_filter_camera_make": "Gyártó",
|
||||
"search_filter_camera_model": "Modell",
|
||||
"search_filter_display_option_archive": "Archivált",
|
||||
"search_filter_display_option_favorite": "Kedvenc",
|
||||
"search_filter_display_option_not_in_album": "Nincs albumban",
|
||||
"search_filter_location_city": "Város",
|
||||
"search_filter_location_country": "Ország",
|
||||
"search_filter_location_state": "Állam",
|
||||
"search_filter_media_type_all": "Összes",
|
||||
"search_filter_media_type_image": "Kép",
|
||||
"search_filter_media_type_video": "Videó",
|
||||
"search_page_categories": "Kategóriák",
|
||||
"search_page_favorites": "Kedvencek",
|
||||
"search_page_motion_photos": "Mozgó Fotók",
|
||||
"search_page_no_objects": "No Objects Info Available",
|
||||
"search_page_no_places": "Helyinformáció nem érhető el",
|
||||
"search_page_no_objects": "Nincs Információ a Tárgyakról",
|
||||
"search_page_no_places": "Nincs Információ a Helyszínekről",
|
||||
"search_page_people": "Emberek",
|
||||
"search_page_person_add_name_dialog_cancel": "Cancel",
|
||||
"search_page_person_add_name_dialog_hint": "Name",
|
||||
"search_page_person_add_name_dialog_save": "Save",
|
||||
"search_page_person_add_name_dialog_title": "Add a name",
|
||||
"search_page_person_add_name_subtitle": "Find them fast by name with search",
|
||||
"search_page_person_add_name_title": "Add a name",
|
||||
"search_page_person_edit_name": "Edit name",
|
||||
"search_page_places": "Helyszínek",
|
||||
"search_page_person_add_name_dialog_cancel": "Mégsem",
|
||||
"search_page_person_add_name_dialog_hint": "Név",
|
||||
"search_page_person_add_name_dialog_save": "Mentés",
|
||||
"search_page_person_add_name_dialog_title": "Név hozzáadása",
|
||||
"search_page_person_add_name_subtitle": "Név szerint gyorsan megtalálhatod a keresőben",
|
||||
"search_page_person_add_name_title": "Név hozzáadása",
|
||||
"search_page_person_edit_name": "Név módosítása",
|
||||
"search_page_places": "Helyek",
|
||||
"search_page_recently_added": "Nemrég hozzáadott",
|
||||
"search_page_screenshots": "Képernyőképek",
|
||||
"search_page_selfies": "Szelfik",
|
||||
@@ -375,7 +375,7 @@
|
||||
"search_page_videos": "Videók",
|
||||
"search_page_view_all_button": "Összes mutatása",
|
||||
"search_page_your_activity": "Tevékenységeid",
|
||||
"search_page_your_map": "Your Map",
|
||||
"search_page_your_map": "Térképed",
|
||||
"search_result_page_new_search_hint": "Új keresés",
|
||||
"search_suggestion_list_smart_search_hint_1": "Az intelligens keresés alapértelmezetten be van kapcsolva, metaadatokat így kereshetsz",
|
||||
"search_suggestion_list_smart_search_hint_2": "m:keresési-kifejezés",
|
||||
@@ -383,137 +383,138 @@
|
||||
"select_user_for_sharing_page_err_album": "Nem sikerült létrehozni az albumot",
|
||||
"select_user_for_sharing_page_share_suggestions": "Javaslatok",
|
||||
"server_info_box_app_version": "Alkalmazás Verzió",
|
||||
"server_info_box_latest_release": "Latest Version",
|
||||
"server_info_box_server_url": "Server URL",
|
||||
"server_info_box_latest_release": "Legfrissebb Verzió",
|
||||
"server_info_box_server_url": "Szerver Címe",
|
||||
"server_info_box_server_version": "Szerver Verzió",
|
||||
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
|
||||
"setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).",
|
||||
"setting_image_viewer_original_title": "Load original image",
|
||||
"setting_image_viewer_preview_subtitle": "Enable to load a medium-resolution image. Disable to either directly load the original or only use the thumbnail.",
|
||||
"setting_image_viewer_preview_title": "Load preview image",
|
||||
"setting_languages_apply": "Apply",
|
||||
"setting_languages_title": "Languages",
|
||||
"setting_notifications_notify_failures_grace_period": "Notify background backup failures: {}",
|
||||
"setting_image_viewer_help": "A képnézegető először a kis bélyegképet tölti be, aztán a közepes méretű előnézetet (ha elérhető), végül az eredetit (ha elérhető).",
|
||||
"setting_image_viewer_original_subtitle": "Engedélyezi az eredeti teljes felbontású kép betöltését (nagy!). Kikapcsolva csökkenti az adathasználatot (a neten és az eszköz gyorsítótárán is).",
|
||||
"setting_image_viewer_original_title": "Eredeti kép betöltése",
|
||||
"setting_image_viewer_preview_subtitle": "Engedélyezi a közepes felbontású kép betöltését. Kikapcsolva vagy az eredeti kép töltődik be, vagy csak a bélyegkép.",
|
||||
"setting_image_viewer_preview_title": "Előnézet betöltése",
|
||||
"setting_languages_apply": "Alkalmaz",
|
||||
"setting_languages_title": "Nyelvek",
|
||||
"setting_notifications_notify_failures_grace_period": "Értesítés a háttérben történő mentés hibáiról: {}",
|
||||
"setting_notifications_notify_hours": "{} óra",
|
||||
"setting_notifications_notify_immediately": "azonnal",
|
||||
"setting_notifications_notify_minutes": "{} perc",
|
||||
"setting_notifications_notify_never": "soha",
|
||||
"setting_notifications_notify_seconds": "{} másodperc",
|
||||
"setting_notifications_single_progress_subtitle": "Detailed upload progress information per asset",
|
||||
"setting_notifications_single_progress_title": "Show background backup detail progress",
|
||||
"setting_notifications_subtitle": "Adjust your notification preferences",
|
||||
"setting_notifications_single_progress_subtitle": "Részletes feltöltési folyamat információ minden elemről",
|
||||
"setting_notifications_single_progress_title": "Mutassa a háttérben történő mentés részletes folyamatát",
|
||||
"setting_notifications_subtitle": "Értesítési beállítások módosítása",
|
||||
"setting_notifications_title": "Értesítések",
|
||||
"setting_notifications_total_progress_subtitle": "Overall upload progress (done/total assets)",
|
||||
"setting_notifications_total_progress_title": "Show background backup total progress",
|
||||
"setting_notifications_total_progress_subtitle": "Átfogó feltöltési folyamat (kész/összes elem)",
|
||||
"setting_notifications_total_progress_title": "Mutassa a háttérben történő mentés teljes folyamatát",
|
||||
"setting_pages_app_bar_settings": "Beállítások",
|
||||
"settings_require_restart": "Kérlek indítsd újra az Immich-et hogy alkalmazd ezt a beállítást",
|
||||
"settings_require_restart": "Ennek a beállításnak az érvénybe lépéséhez indítsd újra az Immich-et",
|
||||
"share_add": "Hozzáadás",
|
||||
"share_add_photos": "Fotók hozzáadása",
|
||||
"share_add_title": "Album neve",
|
||||
"share_assets_selected": "{} kiválasztva",
|
||||
"share_create_album": "Album létrehozása",
|
||||
"shared_album_activities_input_disable": "Comment is disabled",
|
||||
"shared_album_activities_input_hint": "Say something",
|
||||
"shared_album_activity_remove_content": "Do you want to delete this activity?",
|
||||
"shared_album_activity_remove_title": "Delete Activity",
|
||||
"shared_album_activity_setting_subtitle": "Let others respond",
|
||||
"shared_album_activity_setting_title": "Comments & likes",
|
||||
"shared_album_section_people_action_error": "Error leaving/removing from album",
|
||||
"shared_album_section_people_action_leave": "Remove user from album",
|
||||
"shared_album_section_people_action_remove_user": "Remove user from album",
|
||||
"shared_album_section_people_owner_label": "Owner",
|
||||
"shared_album_section_people_title": "PEOPLE",
|
||||
"shared_album_activities_input_disable": "Hozzászólások kikapcsolva",
|
||||
"shared_album_activities_input_hint": "Szólj hozzá",
|
||||
"shared_album_activity_remove_content": "Törölni szeretnéd ezt a tevékenységet?",
|
||||
"shared_album_activity_remove_title": "Tevékenység Törlése",
|
||||
"shared_album_activity_setting_subtitle": "Engedd, hogy mások reagáljanak",
|
||||
"shared_album_activity_setting_title": "Hozzászólások és lájkok",
|
||||
"shared_album_section_people_action_error": "Hiba az albummal kapcsolatos kilépés/eltávolítás közben",
|
||||
"shared_album_section_people_action_leave": "Felhasználó eltávolítása az albumból",
|
||||
"shared_album_section_people_action_remove_user": "Felhasználó eltávolítása az albumból",
|
||||
"shared_album_section_people_owner_label": "Tulajdonos",
|
||||
"shared_album_section_people_title": "EMBEREK",
|
||||
"share_dialog_preparing": "Előkészítés...",
|
||||
"shared_link_app_bar_title": "Shared Links",
|
||||
"shared_link_clipboard_copied_massage": "Copied to clipboard",
|
||||
"shared_link_clipboard_text": "Link: {}\nPassword: {}",
|
||||
"shared_link_create_app_bar_title": "Create link to share",
|
||||
"shared_link_create_error": "Error while creating shared link",
|
||||
"shared_link_create_info": "Let anyone with the link see the selected photo(s)",
|
||||
"shared_link_create_submit_button": "Create link",
|
||||
"shared_link_edit_allow_download": "Allow public user to download",
|
||||
"shared_link_edit_allow_upload": "Allow public user to upload",
|
||||
"shared_link_edit_app_bar_title": "Edit link",
|
||||
"shared_link_edit_change_expiry": "Change expiration time",
|
||||
"shared_link_edit_description": "Description",
|
||||
"shared_link_edit_description_hint": "Enter the share description",
|
||||
"shared_link_edit_expire_after": "Expire after",
|
||||
"shared_link_edit_expire_after_option_day": "1 day",
|
||||
"shared_link_edit_expire_after_option_days": "{} days",
|
||||
"shared_link_edit_expire_after_option_hour": "1 hour",
|
||||
"shared_link_edit_expire_after_option_hours": "{} hours",
|
||||
"shared_link_edit_expire_after_option_minute": "1 minute",
|
||||
"shared_link_edit_expire_after_option_minutes": "{} minutes",
|
||||
"shared_link_edit_expire_after_option_months": "{} months",
|
||||
"shared_link_edit_expire_after_option_never": "Never",
|
||||
"shared_link_edit_expire_after_option_year": "{} year",
|
||||
"shared_link_edit_password": "Password",
|
||||
"shared_link_edit_password_hint": "Enter the share password",
|
||||
"shared_link_edit_show_meta": "Show metadata",
|
||||
"shared_link_edit_submit_button": "Update link",
|
||||
"shared_link_empty": "You don't have any shared links",
|
||||
"shared_link_error_server_url_fetch": "Cannot fetch the server url",
|
||||
"shared_link_expired": "Expired",
|
||||
"shared_link_expires_day": "Expires in {} day",
|
||||
"shared_link_expires_days": "Expires in {} days",
|
||||
"shared_link_expires_hour": "Expires in {} hour",
|
||||
"shared_link_expires_hours": "Expires in {} hours",
|
||||
"shared_link_expires_minute": "Expires in {} minute",
|
||||
"shared_link_expires_minutes": "Expires in {} minutes",
|
||||
"shared_link_expires_never": "Expires ∞",
|
||||
"shared_link_expires_second": "Expires in {} second",
|
||||
"shared_link_expires_seconds": "Expires in {} seconds",
|
||||
"shared_link_individual_shared": "Individual shared",
|
||||
"shared_link_info_chip_download": "Download",
|
||||
"shared_link_app_bar_title": "Megosztott Linkek",
|
||||
"shared_link_clipboard_copied_massage": "Vágólapra másolva",
|
||||
"shared_link_clipboard_text": "Link: {}\nJelszó: {}",
|
||||
"shared_link_create_app_bar_title": "Megosztási link létrehozása",
|
||||
"shared_link_create_error": "Hiba a megosztási link létrehozásakor",
|
||||
"shared_link_create_info": "A linket használva bárki megnézheti a kiválasztott kép(ek)et",
|
||||
"shared_link_create_submit_button": "Link létrehozása",
|
||||
"shared_link_edit_allow_download": "Letöltés engedélyezése",
|
||||
"shared_link_edit_allow_upload": "Feltöltés engedélyezése",
|
||||
"shared_link_edit_app_bar_title": "Link módosítása",
|
||||
"shared_link_edit_change_expiry": "Lejárati idő megváltoztatása",
|
||||
"shared_link_edit_description": "Leírás",
|
||||
"shared_link_edit_description_hint": "Add meg a megosztás leírását",
|
||||
"shared_link_edit_expire_after": "Lejárati idő",
|
||||
"shared_link_edit_expire_after_option_day": "1 nap",
|
||||
"shared_link_edit_expire_after_option_days": "{} nap",
|
||||
"shared_link_edit_expire_after_option_hour": "1 óra",
|
||||
"shared_link_edit_expire_after_option_hours": "{} óra",
|
||||
"shared_link_edit_expire_after_option_minute": "1 perc",
|
||||
"shared_link_edit_expire_after_option_minutes": "{} perc",
|
||||
"shared_link_edit_expire_after_option_months": "{} hónap",
|
||||
"shared_link_edit_expire_after_option_never": "Soha",
|
||||
"shared_link_edit_expire_after_option_year": "{} év",
|
||||
"shared_link_edit_password": "Jelszó",
|
||||
"shared_link_edit_password_hint": "Add meg a megosztási jelszót",
|
||||
"shared_link_edit_show_meta": "Metaadatok mutatása",
|
||||
"shared_link_edit_submit_button": "Link frissítése",
|
||||
"shared_link_empty": "Nincsenek megosztási linkek",
|
||||
"shared_link_error_server_url_fetch": "A szerver címét nem sikerült betölteni",
|
||||
"shared_link_expired": "Lejárt",
|
||||
"shared_link_expires_day": "{} nap múlva lejár",
|
||||
"shared_link_expires_days": "{} nap múlva lejár",
|
||||
"shared_link_expires_hour": "{} óra múlva lejár",
|
||||
"shared_link_expires_hours": "{} óra múlva lejár",
|
||||
"shared_link_expires_minute": "{} perc múlva lejár",
|
||||
"shared_link_expires_minutes": "{} perc múlva lejár",
|
||||
"shared_link_expires_never": "Nem jár le",
|
||||
"shared_link_expires_second": "{} másodperc múlva lejár",
|
||||
"shared_link_expires_seconds": "{} másodperc múlva lejár",
|
||||
"shared_link_individual_shared": "Egyénileg megosztva",
|
||||
"shared_link_info_chip_download": "Letöltés",
|
||||
"shared_link_info_chip_metadata": "EXIF",
|
||||
"shared_link_info_chip_upload": "Upload",
|
||||
"shared_link_manage_links": "Manage Shared links",
|
||||
"shared_link_public_album": "Public album",
|
||||
"share_done": "Done",
|
||||
"shared_link_info_chip_upload": "Feltöltés",
|
||||
"shared_link_manage_links": "Megosztási linkek kezelése",
|
||||
"shared_link_public_album": "Nyilvános album",
|
||||
"share_done": "Kész",
|
||||
"share_invite": "Meghívás az albumba",
|
||||
"sharing_page_album": "Megosztott albumok",
|
||||
"sharing_page_description": "Megosztott albumok létrehozásával fényképeket és videókatoszthatsz meg a hálózatodban lévő emberekkel.",
|
||||
"sharing_page_description": "Megosztott albumok létrehozásával fényképeket és videókat oszthatsz meg a hálózatodban lévő emberekkel.",
|
||||
"sharing_page_empty_list": "ÜRES LISTA",
|
||||
"sharing_silver_appbar_create_shared_album": "Megosztott album létrehozása",
|
||||
"sharing_silver_appbar_shared_links": "Shared links",
|
||||
"sharing_silver_appbar_create_shared_album": "Új megosztott album",
|
||||
"sharing_silver_appbar_shared_links": "Megosztási linkek",
|
||||
"sharing_silver_appbar_share_partner": "Megosztás partnerrel",
|
||||
"tab_controller_nav_library": "Könyvtár",
|
||||
"tab_controller_nav_library": "Képtár",
|
||||
"tab_controller_nav_photos": "Képek",
|
||||
"tab_controller_nav_search": "Keresés",
|
||||
"tab_controller_nav_sharing": "Megosztás",
|
||||
"theme_setting_asset_list_storage_indicator_title": "Show storage indicator on asset tiles",
|
||||
"theme_setting_asset_list_tiles_per_row_title": "Number of assets per row ({})",
|
||||
"theme_setting_asset_list_storage_indicator_title": "Tárhely ikon mutatása az elemeken",
|
||||
"theme_setting_asset_list_tiles_per_row_title": "Elemek száma soronként ({})",
|
||||
"theme_setting_dark_mode_switch": "Sötét mód",
|
||||
"theme_setting_image_viewer_quality_subtitle": "Adjust the quality of the detail image viewer",
|
||||
"theme_setting_image_viewer_quality_title": "Image viewer quality",
|
||||
"theme_setting_image_viewer_quality_subtitle": "Részletes képmegjelenítő minőségének beállítása",
|
||||
"theme_setting_image_viewer_quality_title": "Képmegjelenítő minősége",
|
||||
"theme_setting_system_theme_switch": "Automatikus (követi a rendszer témáját)",
|
||||
"theme_setting_theme_subtitle": "Choose the app's theme setting",
|
||||
"theme_setting_theme_subtitle": "Alkalmazás témájának választása",
|
||||
"theme_setting_theme_title": "Téma",
|
||||
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
||||
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
||||
"translated_text_options": "Options",
|
||||
"trash_page_delete": "Delete",
|
||||
"trash_page_delete_all": "Delete All",
|
||||
"trash_page_empty_trash_btn": "Empty trash",
|
||||
"trash_page_empty_trash_dialog_content": "Do you want to empty your trashed assets? These items will be permanently removed from Immich",
|
||||
"theme_setting_three_stage_loading_subtitle": "A háromlépcsős betöltés javíthatja a betöltési teljesítményt, de jelentősen növeli a hálózati forgalmat",
|
||||
"theme_setting_three_stage_loading_title": "Háromlépcsős betöltés engedélyezése",
|
||||
"translated_text_options": "Beállítások",
|
||||
"trash_page_delete": "Töröl",
|
||||
"trash_page_delete_all": "Mindet Töröl",
|
||||
"trash_page_empty_trash_btn": "Lomtár Ürítése",
|
||||
"trash_page_empty_trash_dialog_content": "Ki szeretnéd üríteni a lomtárban lévő elemeket? Ezeket véglegesen eltávolítjuk az Immich-ből",
|
||||
"trash_page_empty_trash_dialog_ok": "Ok",
|
||||
"trash_page_info": "Trashed items will be permanently deleted after {} days",
|
||||
"trash_page_no_assets": "No trashed assets",
|
||||
"trash_page_restore": "Restore",
|
||||
"trash_page_restore_all": "Restore All",
|
||||
"trash_page_select_assets_btn": "Select assets",
|
||||
"trash_page_select_btn": "Select",
|
||||
"trash_page_title": "Trash ({})",
|
||||
"upload_dialog_cancel": "Mégse",
|
||||
"upload_dialog_info": "Akarod menteni a kiválasztott eleme(ke)t a szerverre?",
|
||||
"trash_page_info": "A Lomátrba helyezett elemek {} nap után véglegesen törlődnek",
|
||||
"trash_page_no_assets": "Nincsen semmi a Lomtárban",
|
||||
"trash_page_restore": "Visszaállít",
|
||||
"trash_page_restore_all": "Mindet Visszaállítja",
|
||||
"trash_page_select_assets_btn": "Elemek kiválasztása",
|
||||
"trash_page_select_btn": "Kiválaszt",
|
||||
"trash_page_title": "Lomtár ({})",
|
||||
"upload_dialog_cancel": "Mégsem",
|
||||
"upload_dialog_info": "Szeretnél mentést készíteni a kiválasztott elem(ek)ről a szerverre?",
|
||||
"upload_dialog_ok": "Feltöltés",
|
||||
"upload_dialog_title": "Elem feltöltése",
|
||||
"upload_dialog_title": "Elem Feltöltése",
|
||||
"version_announcement_overlay_ack": "Megértettem",
|
||||
"version_announcement_overlay_release_notes": "a változtatások listáját elolvasd",
|
||||
"version_announcement_overlay_text_1": "Szia, egy új verzió érhető el",
|
||||
"version_announcement_overlay_text_2": "kérlek szánj időt arra, hogy ",
|
||||
"version_announcement_overlay_text_3": "és gyöződj meg róla, hogy a docker-compose és .env beállításai naprakészek és pontosak, különösen akkor, ha használsz watchtower-t vagy bármi olyan megoldást ami automatikusan frissíti a szervert.",
|
||||
"version_announcement_overlay_title": "Új szerververzió érhető el \uD83C\uDF89",
|
||||
"viewer_remove_from_stack": "Remove from Stack",
|
||||
"viewer_stack_use_as_main_asset": "Use as Main Asset",
|
||||
"viewer_unstack": "Un-Stack"
|
||||
"version_announcement_overlay_text_3": "és gyöződj meg róla, hogy a docker-compose és .env beállításai naprakészek és pontosak, különösen akkor, ha watchtower-t vagy bármi olyan megoldást használsz, ami automatikusan frissíti a szervert.",
|
||||
"version_announcement_overlay_title": "Új Szerververzió Érhető El \uD83C\uDF89",
|
||||
"viewer_remove_from_stack": "Eltávolít a Csoportból",
|
||||
"viewer_stack_use_as_main_asset": "Fő Elemnek Beállít",
|
||||
"viewer_unstack": "Csoport Megszűntetése"
|
||||
}
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Aggiungi",
|
||||
"share_add_photos": "Aggiungi foto",
|
||||
"share_add_title": "Aggiungi un titolo ",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Crea album",
|
||||
"shared_album_activities_input_disable": "I commenti sono disabilitati",
|
||||
"shared_album_activities_input_hint": "Dici qualcosa",
|
||||
|
||||
@@ -218,7 +218,7 @@
|
||||
"home_page_share_err_local": "ローカルのみの項目をリンクで共有はできません。スキップします",
|
||||
"home_page_upload_err_limit": "1回でアップロードできる写真の数は30枚です。スキップします",
|
||||
"image_viewer_page_state_provider_download_error": "ダウンロード失敗",
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_started": "ダウンロードが始まります",
|
||||
"image_viewer_page_state_provider_download_success": "ダウンロード成功",
|
||||
"image_viewer_page_state_provider_share_error": "共有エラー",
|
||||
"library_page_albums": "アルバム",
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "追加",
|
||||
"share_add_photos": "写真を追加",
|
||||
"share_add_title": "タイトルを追加",
|
||||
"share_assets_selected": "{}選択されました",
|
||||
"share_create_album": "アルバムを作成",
|
||||
"shared_album_activities_input_disable": "コメントはオフになってます",
|
||||
"shared_album_activities_input_hint": "何か書き込みましょう",
|
||||
|
||||
@@ -218,7 +218,7 @@
|
||||
"home_page_share_err_local": "링크를 통해 로컬 미디어를 공유할 수 없으므로 건너뜁니다",
|
||||
"home_page_upload_err_limit": "한번에 최대 30개의 미디어만 업로드할 수 있습니다",
|
||||
"image_viewer_page_state_provider_download_error": "다운로드 에러",
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_started": "다운로드 시작",
|
||||
"image_viewer_page_state_provider_download_success": "다운로드 완료",
|
||||
"image_viewer_page_state_provider_share_error": "공유 오류",
|
||||
"library_page_albums": "앨범",
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "추가",
|
||||
"share_add_photos": "사진 추가",
|
||||
"share_add_title": "새 앨범제목",
|
||||
"share_assets_selected": "{} 선택됨",
|
||||
"share_create_album": "앨범 만들기",
|
||||
"shared_album_activities_input_disable": "댓글이 비활성화되었습니다.",
|
||||
"shared_album_activities_input_hint": "말하기",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Add",
|
||||
"share_add_photos": "Add photos",
|
||||
"share_add_title": "Add a title",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Create album",
|
||||
"shared_album_activities_input_disable": "Comment is disabled",
|
||||
"shared_album_activities_input_hint": "Say something",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Pievienot",
|
||||
"share_add_photos": "Pievienot fotoattēlus",
|
||||
"share_add_title": "Pievienot virsrakstu",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Izveidot albumu",
|
||||
"shared_album_activities_input_disable": "Comment is disabled",
|
||||
"shared_album_activities_input_hint": "Say something",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Add",
|
||||
"share_add_photos": "Add photos",
|
||||
"share_add_title": "Add a title",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Create album",
|
||||
"shared_album_activities_input_disable": "Comment is disabled",
|
||||
"shared_album_activities_input_hint": "Say something",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Legg til",
|
||||
"share_add_photos": "Legg til bilder",
|
||||
"share_add_title": "Legg til tittel",
|
||||
"share_assets_selected": "{} valgt",
|
||||
"share_create_album": "Opprett album",
|
||||
"shared_album_activities_input_disable": "Kommenterer er deaktivert",
|
||||
"shared_album_activities_input_hint": "Si noe",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Toevoegen",
|
||||
"share_add_photos": "Foto's toevoegen",
|
||||
"share_add_title": "Titel toevoegen",
|
||||
"share_assets_selected": "{} geselecteerd",
|
||||
"share_create_album": "Album aanmaken",
|
||||
"shared_album_activities_input_disable": "Reactie is uitgeschakeld",
|
||||
"shared_album_activities_input_hint": "Zeg iets",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Dodaj",
|
||||
"share_add_photos": "Dodaj zdjęcia",
|
||||
"share_add_title": "Dodaj tytuł",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Utwórz album",
|
||||
"shared_album_activities_input_disable": "Komentarz jest wyłączony",
|
||||
"shared_album_activities_input_hint": "Powiedz coś",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Adicionar",
|
||||
"share_add_photos": "Adicionar fotos",
|
||||
"share_add_title": "Adicione um título",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Criar álbum",
|
||||
"shared_album_activities_input_disable": "Comentários desativados",
|
||||
"shared_album_activities_input_hint": "Dizer alguma coisa",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Adaugă",
|
||||
"share_add_photos": "Adaugă fotografii",
|
||||
"share_add_title": "Adaugă un titlu",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Creează album",
|
||||
"shared_album_activities_input_disable": "Cometariile sunt dezactivate",
|
||||
"shared_album_activities_input_hint": "Spune ceva",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Добавить",
|
||||
"share_add_photos": "Добавить фото",
|
||||
"share_add_title": "Добавить название",
|
||||
"share_assets_selected": "{} выбрано",
|
||||
"share_create_album": "Создать альбом",
|
||||
"shared_album_activities_input_disable": "Комментирование отключено",
|
||||
"shared_album_activities_input_hint": "Скажите что-нибудь",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Pridať",
|
||||
"share_add_photos": "Pridať fotografie",
|
||||
"share_add_title": "Pridať názov",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Vytvoriť album",
|
||||
"shared_album_activities_input_disable": "Komentár je zakázaný",
|
||||
"shared_album_activities_input_hint": "Napíšte niečo",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Dodaj",
|
||||
"share_add_photos": "Dodaj fotografije",
|
||||
"share_add_title": "Dodaj naslov",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Ustvari album",
|
||||
"shared_album_activities_input_disable": "Komentiranje je onemogočeno",
|
||||
"shared_album_activities_input_hint": "Reci kaj",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Add",
|
||||
"share_add_photos": "Add photos",
|
||||
"share_add_title": "Add a title",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Create album",
|
||||
"shared_album_activities_input_disable": "Comment is disabled",
|
||||
"shared_album_activities_input_hint": "Say something",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Dodaj",
|
||||
"share_add_photos": "Dodaj fotografije",
|
||||
"share_add_title": "Dodaj naslov",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Napravi album",
|
||||
"shared_album_activities_input_disable": "Comment is disabled",
|
||||
"shared_album_activities_input_hint": "Say something",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Add",
|
||||
"share_add_photos": "Add photos",
|
||||
"share_add_title": "Add a title",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Create album",
|
||||
"shared_album_activities_input_disable": "Comment is disabled",
|
||||
"shared_album_activities_input_hint": "Say something",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Lägg till",
|
||||
"share_add_photos": "Lägg till foton",
|
||||
"share_add_title": "Lägg till en titel",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Skapa album",
|
||||
"shared_album_activities_input_disable": "Comment is disabled",
|
||||
"shared_album_activities_input_hint": "Say something",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "เพิ่ม",
|
||||
"share_add_photos": "เพิ่มรูปภาพ",
|
||||
"share_add_title": "เพิ่มชื่อ",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "สร้างอัลบั้ม",
|
||||
"shared_album_activities_input_disable": "คอมเมนต์ถูกปิด",
|
||||
"shared_album_activities_input_hint": "พูดอะไรสักอย่าง",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Додати",
|
||||
"share_add_photos": "Додати знімки",
|
||||
"share_add_title": "Додати назву",
|
||||
"share_assets_selected": "{} обрано",
|
||||
"share_create_album": "Створити альбом",
|
||||
"shared_album_activities_input_disable": "Коментування вимкнено",
|
||||
"shared_album_activities_input_hint": "Скажіть що-небудь",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Thêm",
|
||||
"share_add_photos": "Thêm ảnh",
|
||||
"share_add_title": "Thêm tiêu đề",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Tạo album",
|
||||
"shared_album_activities_input_disable": "Nhận xét hiện đã tắt",
|
||||
"shared_album_activities_input_hint": "Nói điều gì đó",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "添加",
|
||||
"share_add_photos": "添加项目",
|
||||
"share_add_title": "添加标题",
|
||||
"share_assets_selected": "{}已选择",
|
||||
"share_create_album": "创建相册",
|
||||
"shared_album_activities_input_disable": "评论已禁用",
|
||||
"shared_album_activities_input_hint": "说些什么",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "添加",
|
||||
"share_add_photos": "添加项目",
|
||||
"share_add_title": "添加标题",
|
||||
"share_assets_selected": "{}已选择",
|
||||
"share_create_album": "创建相册",
|
||||
"shared_album_activities_input_disable": "评论已禁用",
|
||||
"shared_album_activities_input_hint": "说些什么",
|
||||
|
||||
@@ -410,6 +410,7 @@
|
||||
"share_add": "Add",
|
||||
"share_add_photos": "Add photos",
|
||||
"share_add_title": "Add a title",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Create album",
|
||||
"shared_album_activities_input_disable": "Comment is disabled",
|
||||
"shared_album_activities_input_hint": "Say something",
|
||||
|
||||
@@ -10,16 +10,16 @@ GEM
|
||||
artifactory (3.0.17)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.3.0)
|
||||
aws-partitions (1.925.0)
|
||||
aws-sdk-core (3.194.1)
|
||||
aws-partitions (1.932.0)
|
||||
aws-sdk-core (3.196.1)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.651.0)
|
||||
aws-sigv4 (~> 1.8)
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
aws-sdk-kms (1.80.0)
|
||||
aws-sdk-kms (1.81.0)
|
||||
aws-sdk-core (~> 3, >= 3.193.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.149.1)
|
||||
aws-sdk-s3 (1.151.0)
|
||||
aws-sdk-core (~> 3, >= 3.194.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.8)
|
||||
@@ -155,7 +155,7 @@ GEM
|
||||
mini_magick (4.12.0)
|
||||
mini_mime (1.1.5)
|
||||
multi_json (1.15.0)
|
||||
multipart-post (2.4.0)
|
||||
multipart-post (2.4.1)
|
||||
nanaimo (0.3.0)
|
||||
naturally (2.2.1)
|
||||
nkf (0.2.0)
|
||||
@@ -169,7 +169,8 @@ GEM
|
||||
trailblazer-option (>= 0.1.1, < 0.2.0)
|
||||
uber (< 0.2.0)
|
||||
retriable (3.1.2)
|
||||
rexml (3.2.6)
|
||||
rexml (3.2.8)
|
||||
strscan (>= 3.0.9)
|
||||
rouge (2.0.7)
|
||||
ruby2_keywords (0.0.5)
|
||||
rubyzip (2.3.2)
|
||||
@@ -182,6 +183,7 @@ GEM
|
||||
simctl (1.6.10)
|
||||
CFPropertyList
|
||||
naturally
|
||||
strscan (3.1.0)
|
||||
terminal-notifier (2.0.0)
|
||||
terminal-table (1.8.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
|
||||
@@ -159,7 +159,7 @@ SPEC CHECKSUMS:
|
||||
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
||||
geolocator_apple: 9157311f654584b9bb72686c55fc02a97b73f461
|
||||
image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5
|
||||
integration_test: 13825b8a9334a850581300559b8839134b124670
|
||||
integration_test: ce0a3ffa1de96d1a89ca0ac26fca7ea18a749ef4
|
||||
isar_flutter_libs: b69f437aeab9c521821c3f376198c4371fa21073
|
||||
MapLibre: 620fc933c1d6029b33738c905c1490d024e5d4ef
|
||||
maplibre_gl: a2efec727dd340e4c65e26d2b03b584f14881fd9
|
||||
|
||||
@@ -383,7 +383,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/RunnerProfile.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
CURRENT_PROJECT_VERSION = 157;
|
||||
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
@@ -525,7 +525,7 @@
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
CURRENT_PROJECT_VERSION = 157;
|
||||
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
@@ -553,7 +553,7 @@
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
CURRENT_PROJECT_VERSION = 157;
|
||||
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
|
||||
@@ -58,11 +58,11 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.103.0</string>
|
||||
<string>1.105.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>155</string>
|
||||
<string>157</string>
|
||||
<key>FLTEnableImpeller</key>
|
||||
<true />
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
|
||||
@@ -19,7 +19,7 @@ platform :ios do
|
||||
desc "iOS Beta"
|
||||
lane :beta do
|
||||
increment_version_number(
|
||||
version_number: "1.103.1"
|
||||
version_number: "1.105.1"
|
||||
)
|
||||
increment_build_number(
|
||||
build_number: latest_testflight_build_number + 1,
|
||||
|
||||
@@ -5,32 +5,32 @@
|
||||
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.00023">
|
||||
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.020864">
|
||||
|
||||
</testcase>
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="1: increment_version_number" time="0.206092">
|
||||
<testcase classname="fastlane.lanes" name="1: increment_version_number" time="0.917777">
|
||||
|
||||
</testcase>
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="2: latest_testflight_build_number" time="24.02871">
|
||||
<testcase classname="fastlane.lanes" name="2: latest_testflight_build_number" time="5.283943">
|
||||
|
||||
</testcase>
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="3: increment_build_number" time="0.191253">
|
||||
<testcase classname="fastlane.lanes" name="3: increment_build_number" time="0.944748">
|
||||
|
||||
</testcase>
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="4: build_app" time="171.741828">
|
||||
<testcase classname="fastlane.lanes" name="4: build_app" time="215.971639">
|
||||
|
||||
</testcase>
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="5: upload_to_testflight" time="110.963505">
|
||||
<testcase classname="fastlane.lanes" name="5: upload_to_testflight" time="76.674601">
|
||||
|
||||
</testcase>
|
||||
|
||||
|
||||
@@ -145,9 +145,10 @@ class Album {
|
||||
.remoteIdEqualTo(dto.albumThumbnailAssetId)
|
||||
.findFirst();
|
||||
}
|
||||
if (dto.sharedUsers.isNotEmpty) {
|
||||
final users = await db.users
|
||||
.getAllById(dto.sharedUsers.map((e) => e.id).toList(growable: false));
|
||||
if (dto.albumUsers.isNotEmpty) {
|
||||
final users = await db.users.getAllById(
|
||||
dto.albumUsers.map((e) => e.user.id).toList(growable: false),
|
||||
);
|
||||
a.sharedUsers.addAll(users.cast());
|
||||
}
|
||||
if (dto.assets.isNotEmpty) {
|
||||
|
||||
@@ -182,6 +182,7 @@ enum StoreKey<T> {
|
||||
advancedTroubleshooting<bool>(114, type: bool),
|
||||
logLevel<int>(115, type: int),
|
||||
preferRemoteImage<bool>(116, type: bool),
|
||||
loopVideo<bool>(117, type: bool),
|
||||
// map related settings
|
||||
mapShowFavoriteOnly<bool>(118, type: bool),
|
||||
mapRelativeDate<int>(119, type: int),
|
||||
|
||||
@@ -16,7 +16,7 @@ import 'package:immich_mobile/entities/backup_album.entity.dart';
|
||||
import 'package:immich_mobile/entities/duplicated_asset.entity.dart';
|
||||
import 'package:immich_mobile/routing/router.dart';
|
||||
import 'package:immich_mobile/routing/tab_navigation_observer.dart';
|
||||
import 'package:immich_mobile/shared/cache/widgets_binding.dart';
|
||||
import 'package:immich_mobile/utils/cache/widgets_binding.dart';
|
||||
import 'package:immich_mobile/entities/album.entity.dart';
|
||||
import 'package:immich_mobile/entities/android_device_asset.entity.dart';
|
||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||
|
||||
@@ -32,7 +32,7 @@ class ServerDiskInfo {
|
||||
return 'ServerDiskInfo(diskAvailable: $diskAvailable, diskSize: $diskSize, diskUse: $diskUse, diskUsagePercentage: $diskUsagePercentage)';
|
||||
}
|
||||
|
||||
ServerDiskInfo.fromDto(ServerInfoResponseDto dto)
|
||||
ServerDiskInfo.fromDto(ServerStorageResponseDto dto)
|
||||
: diskAvailable = dto.diskAvailable,
|
||||
diskSize = dto.diskSize,
|
||||
diskUse = dto.diskUse,
|
||||
|
||||
@@ -54,7 +54,7 @@ class AlbumPreviewPage extends HookConsumerWidget {
|
||||
],
|
||||
),
|
||||
leading: IconButton(
|
||||
onPressed: () => context.popRoute(),
|
||||
onPressed: () => context.maybePop(),
|
||||
icon: const Icon(Icons.arrow_back_ios_new_rounded),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -191,7 +191,7 @@ class BackupAlbumSelectionPage extends HookConsumerWidget {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
leading: IconButton(
|
||||
onPressed: () => context.popRoute(),
|
||||
onPressed: () => context.maybePop(),
|
||||
icon: const Icon(Icons.arrow_back_ios_rounded),
|
||||
),
|
||||
title: const Text(
|
||||
|
||||
@@ -7,16 +7,16 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
||||
import 'package:immich_mobile/models/backup/backup_state.model.dart';
|
||||
import 'package:immich_mobile/providers/album/album.provider.dart';
|
||||
import 'package:immich_mobile/providers/backup/backup.provider.dart';
|
||||
import 'package:immich_mobile/providers/backup/error_backup_list.provider.dart';
|
||||
import 'package:immich_mobile/providers/backup/ios_background_settings.provider.dart';
|
||||
import 'package:immich_mobile/providers/backup/manual_upload.provider.dart';
|
||||
import 'package:immich_mobile/widgets/backup/current_backup_asset_info_box.dart';
|
||||
import 'package:immich_mobile/models/backup/backup_state.model.dart';
|
||||
import 'package:immich_mobile/providers/backup/backup.provider.dart';
|
||||
import 'package:immich_mobile/routing/router.dart';
|
||||
import 'package:immich_mobile/providers/websocket.provider.dart';
|
||||
import 'package:immich_mobile/routing/router.dart';
|
||||
import 'package:immich_mobile/widgets/backup/backup_info_card.dart';
|
||||
import 'package:immich_mobile/widgets/backup/current_backup_asset_info_box.dart';
|
||||
|
||||
@RoutePage()
|
||||
class BackupControllerPage extends HookConsumerWidget {
|
||||
@@ -260,7 +260,7 @@ class BackupControllerPage extends HookConsumerWidget {
|
||||
leading: IconButton(
|
||||
onPressed: () {
|
||||
ref.watch(websocketProvider.notifier).listenUploadEvent();
|
||||
context.popRoute(true);
|
||||
context.maybePop(true);
|
||||
},
|
||||
splashRadius: 24,
|
||||
icon: const Icon(
|
||||
|
||||
@@ -13,7 +13,7 @@ class BackupOptionsPage extends StatelessWidget {
|
||||
elevation: 0,
|
||||
title: const Text("backup_options_page_title").tr(),
|
||||
leading: IconButton(
|
||||
onPressed: () => context.popRoute(true),
|
||||
onPressed: () => context.maybePop(true),
|
||||
splashRadius: 24,
|
||||
icon: const Icon(
|
||||
Icons.arrow_back_ios_rounded,
|
||||
|
||||
@@ -23,7 +23,7 @@ class FailedBackupStatusPage extends HookConsumerWidget {
|
||||
),
|
||||
leading: IconButton(
|
||||
onPressed: () {
|
||||
context.popRoute(true);
|
||||
context.maybePop(true);
|
||||
},
|
||||
splashRadius: 24,
|
||||
icon: const Icon(
|
||||
|
||||
@@ -26,7 +26,7 @@ class AlbumAdditionalSharedUserSelectionPage extends HookConsumerWidget {
|
||||
final sharedUsersList = useState<Set<User>>({});
|
||||
|
||||
addNewUsersHandler() {
|
||||
context.popRoute(sharedUsersList.value.map((e) => e.id).toList());
|
||||
context.maybePop(sharedUsersList.value.map((e) => e.id).toList());
|
||||
}
|
||||
|
||||
buildTileIcon(User user) {
|
||||
@@ -55,10 +55,9 @@ class AlbumAdditionalSharedUserSelectionPage extends HookConsumerWidget {
|
||||
child: Chip(
|
||||
backgroundColor: context.primaryColor.withOpacity(0.15),
|
||||
label: Text(
|
||||
user.email,
|
||||
user.name,
|
||||
style: const TextStyle(
|
||||
fontSize: 12,
|
||||
color: Colors.black87,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
@@ -88,13 +87,20 @@ class AlbumAdditionalSharedUserSelectionPage extends HookConsumerWidget {
|
||||
itemBuilder: ((context, index) {
|
||||
return ListTile(
|
||||
leading: buildTileIcon(users[index]),
|
||||
dense: true,
|
||||
title: Text(
|
||||
users[index].email,
|
||||
users[index].name,
|
||||
style: const TextStyle(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
subtitle: Text(
|
||||
users[index].email,
|
||||
style: const TextStyle(
|
||||
fontSize: 12,
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
if (sharedUsersList.value.contains(users[index])) {
|
||||
sharedUsersList.value = sharedUsersList.value
|
||||
@@ -127,7 +133,7 @@ class AlbumAdditionalSharedUserSelectionPage extends HookConsumerWidget {
|
||||
leading: IconButton(
|
||||
icon: const Icon(Icons.close_rounded),
|
||||
onPressed: () {
|
||||
context.popRoute(null);
|
||||
context.maybePop(null);
|
||||
},
|
||||
),
|
||||
actions: [
|
||||
|
||||
@@ -184,7 +184,7 @@ class AlbumOptionsPage extends HookConsumerWidget {
|
||||
appBar: AppBar(
|
||||
leading: IconButton(
|
||||
icon: const Icon(Icons.arrow_back_ios_new_rounded),
|
||||
onPressed: () => context.popRoute(null),
|
||||
onPressed: () => context.maybePop(null),
|
||||
),
|
||||
centerTitle: true,
|
||||
title: Text("translated_text_options".tr()),
|
||||
|
||||
@@ -36,7 +36,7 @@ class AlbumSharedUserSelectionPage extends HookConsumerWidget {
|
||||
await ref.watch(sharedAlbumProvider.notifier).getAllSharedAlbums();
|
||||
// ref.watch(assetSelectionProvider.notifier).removeAll();
|
||||
ref.watch(albumTitleProvider.notifier).clearAlbumTitle();
|
||||
context.popRoute(true);
|
||||
context.maybePop(true);
|
||||
context
|
||||
.navigateTo(const TabControllerRoute(children: [SharingRoute()]));
|
||||
}
|
||||
@@ -152,7 +152,7 @@ class AlbumSharedUserSelectionPage extends HookConsumerWidget {
|
||||
leading: IconButton(
|
||||
icon: const Icon(Icons.close_rounded),
|
||||
onPressed: () async {
|
||||
context.popRoute();
|
||||
context.maybePop();
|
||||
},
|
||||
),
|
||||
actions: [
|
||||
|
||||
@@ -105,7 +105,7 @@ class AppLogPage extends HookConsumerWidget {
|
||||
],
|
||||
leading: IconButton(
|
||||
onPressed: () {
|
||||
context.popRoute();
|
||||
context.maybePop();
|
||||
},
|
||||
icon: const Icon(
|
||||
Icons.arrow_back_ios_new_rounded,
|
||||
|
||||
@@ -3,16 +3,16 @@ import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
||||
import 'package:immich_mobile/models/albums/asset_selection_page_result.model.dart';
|
||||
import 'package:immich_mobile/providers/album/album.provider.dart';
|
||||
import 'package:immich_mobile/providers/album/album_title.provider.dart';
|
||||
import 'package:immich_mobile/providers/asset.provider.dart';
|
||||
import 'package:immich_mobile/routing/router.dart';
|
||||
import 'package:immich_mobile/widgets/album/album_action_outlined_button.dart';
|
||||
import 'package:immich_mobile/widgets/album/album_title_text_field.dart';
|
||||
import 'package:immich_mobile/widgets/album/shared_album_thumbnail_image.dart';
|
||||
import 'package:immich_mobile/routing/router.dart';
|
||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||
import 'package:immich_mobile/providers/asset.provider.dart';
|
||||
|
||||
@RoutePage()
|
||||
// ignore: must_be_immutable
|
||||
@@ -216,7 +216,7 @@ class CreateAlbumPage extends HookConsumerWidget {
|
||||
leading: IconButton(
|
||||
onPressed: () {
|
||||
selectedAssets.value = {};
|
||||
context.popRoute();
|
||||
context.maybePop();
|
||||
},
|
||||
icon: const Icon(Icons.close_rounded),
|
||||
),
|
||||
|
||||
@@ -2,32 +2,33 @@ import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'dart:math';
|
||||
import 'dart:ui' as ui;
|
||||
|
||||
import 'package:auto_route/auto_route.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_hooks/flutter_hooks.dart' hide Store;
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
||||
import 'package:immich_mobile/providers/image/immich_remote_image_provider.dart';
|
||||
import 'package:immich_mobile/pages/common/video_viewer.page.dart';
|
||||
import 'package:immich_mobile/providers/app_settings.provider.dart';
|
||||
import 'package:immich_mobile/providers/asset_viewer/asset_stack.provider.dart';
|
||||
import 'package:immich_mobile/providers/asset_viewer/current_asset.provider.dart';
|
||||
import 'package:immich_mobile/providers/asset_viewer/show_controls.provider.dart';
|
||||
import 'package:immich_mobile/providers/asset_viewer/video_player_value_provider.dart';
|
||||
import 'package:immich_mobile/providers/haptic_feedback.provider.dart';
|
||||
import 'package:immich_mobile/providers/image/immich_remote_image_provider.dart';
|
||||
import 'package:immich_mobile/services/app_settings.service.dart';
|
||||
import 'package:immich_mobile/widgets/asset_viewer/advanced_bottom_sheet.dart';
|
||||
import 'package:immich_mobile/widgets/asset_viewer/bottom_gallery_bar.dart';
|
||||
import 'package:immich_mobile/widgets/asset_viewer/exif_sheet/exif_bottom_sheet.dart';
|
||||
import 'package:immich_mobile/widgets/asset_viewer/gallery_app_bar.dart';
|
||||
import 'package:immich_mobile/providers/app_settings.provider.dart';
|
||||
import 'package:immich_mobile/pages/common/video_viewer.page.dart';
|
||||
import 'package:immich_mobile/services/app_settings.service.dart';
|
||||
import 'package:immich_mobile/providers/haptic_feedback.provider.dart';
|
||||
import 'package:immich_mobile/widgets/common/immich_image.dart';
|
||||
import 'package:immich_mobile/widgets/common/immich_thumbnail.dart';
|
||||
import 'package:immich_mobile/widgets/photo_view/photo_view_gallery.dart';
|
||||
import 'package:immich_mobile/widgets/photo_view/src/photo_view_computed_scale.dart';
|
||||
import 'package:immich_mobile/widgets/photo_view/src/photo_view_scale_state.dart';
|
||||
import 'package:immich_mobile/widgets/photo_view/src/utils/photo_view_hero_attributes.dart';
|
||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||
import 'package:isar/isar.dart';
|
||||
import 'package:openapi/api.dart' show ThumbnailFormat;
|
||||
|
||||
@@ -59,6 +60,7 @@ class GalleryViewerPage extends HookConsumerWidget {
|
||||
final settings = ref.watch(appSettingsServiceProvider);
|
||||
final isLoadPreview = useState(AppSettingsEnum.loadPreview.defaultValue);
|
||||
final isLoadOriginal = useState(AppSettingsEnum.loadOriginal.defaultValue);
|
||||
final shouldLoopVideo = useState(AppSettingsEnum.loopVideo.defaultValue);
|
||||
final isZoomed = useState(false);
|
||||
final isPlayingVideo = useState(false);
|
||||
final localPosition = useState<Offset?>(null);
|
||||
@@ -101,6 +103,8 @@ class GalleryViewerPage extends HookConsumerWidget {
|
||||
settings.getSetting<bool>(AppSettingsEnum.loadPreview);
|
||||
isLoadOriginal.value =
|
||||
settings.getSetting<bool>(AppSettingsEnum.loadOriginal);
|
||||
shouldLoopVideo.value =
|
||||
settings.getSetting<bool>(AppSettingsEnum.loopVideo);
|
||||
return null;
|
||||
},
|
||||
[],
|
||||
@@ -174,7 +178,7 @@ class GalleryViewerPage extends HookConsumerWidget {
|
||||
|
||||
final ratio = d.dy / max(d.dx.abs(), 1);
|
||||
if (d.dy > sensitivity && ratio > ratioThreshold) {
|
||||
context.popRoute();
|
||||
context.maybePop();
|
||||
} else if (d.dy < -sensitivity && ratio < -ratioThreshold) {
|
||||
showInfo();
|
||||
}
|
||||
@@ -261,12 +265,9 @@ class GalleryViewerPage extends HookConsumerWidget {
|
||||
}
|
||||
|
||||
return PopScope(
|
||||
canPop: false,
|
||||
onPopInvoked: (_) {
|
||||
// Change immersive mode back to normal "edgeToEdge" mode
|
||||
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
|
||||
context.pop();
|
||||
},
|
||||
// Change immersive mode back to normal "edgeToEdge" mode
|
||||
onPopInvoked: (_) =>
|
||||
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge),
|
||||
child: Scaffold(
|
||||
backgroundColor: Colors.black,
|
||||
body: Stack(
|
||||
@@ -370,6 +371,7 @@ class GalleryViewerPage extends HookConsumerWidget {
|
||||
key: ValueKey(a),
|
||||
asset: a,
|
||||
isMotionVideo: a.livePhotoVideoId != null,
|
||||
loopVideo: shouldLoopVideo.value,
|
||||
placeholder: Image(
|
||||
image: provider,
|
||||
fit: BoxFit.contain,
|
||||
|
||||
@@ -5,8 +5,8 @@ import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
||||
import 'package:immich_mobile/widgets/settings/advanced_settings.dart';
|
||||
import 'package:immich_mobile/widgets/settings/asset_list_settings/asset_list_settings.dart';
|
||||
import 'package:immich_mobile/widgets/settings/asset_viewer_settings/asset_viewer_settings.dart';
|
||||
import 'package:immich_mobile/widgets/settings/backup_settings/backup_settings.dart';
|
||||
import 'package:immich_mobile/widgets/settings/image_viewer_quality_setting.dart';
|
||||
import 'package:immich_mobile/widgets/settings/language_settings.dart';
|
||||
import 'package:immich_mobile/widgets/settings/notification_setting.dart';
|
||||
import 'package:immich_mobile/widgets/settings/preference_settings/preference_setting.dart';
|
||||
@@ -33,7 +33,7 @@ enum SettingSection {
|
||||
SettingSection.preferences => const PreferenceSetting(),
|
||||
SettingSection.backup => const BackupSettings(),
|
||||
SettingSection.timeline => const AssetListSettings(),
|
||||
SettingSection.viewer => const ImageViewerQualitySetting(),
|
||||
SettingSection.viewer => const AssetViewerSettings(),
|
||||
SettingSection.advanced => const AdvancedSettings(),
|
||||
};
|
||||
|
||||
|
||||
@@ -1,18 +1,15 @@
|
||||
import 'package:auto_route/auto_route.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||
import 'package:immich_mobile/providers/asset_viewer/show_controls.provider.dart';
|
||||
import 'package:immich_mobile/providers/asset_viewer/video_player_controller_provider.dart';
|
||||
import 'package:immich_mobile/providers/asset_viewer/video_player_controls_provider.dart';
|
||||
import 'package:immich_mobile/providers/asset_viewer/video_player_value_provider.dart';
|
||||
import 'package:immich_mobile/widgets/asset_viewer/video_player.dart';
|
||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||
import 'package:immich_mobile/widgets/common/delayed_loading_indicator.dart';
|
||||
import 'package:wakelock_plus/wakelock_plus.dart';
|
||||
|
||||
@RoutePage()
|
||||
// ignore: must_be_immutable
|
||||
class VideoViewerPage extends HookConsumerWidget {
|
||||
final Asset asset;
|
||||
final bool isMotionVideo;
|
||||
@@ -20,6 +17,7 @@ class VideoViewerPage extends HookConsumerWidget {
|
||||
final Duration hideControlsTimer;
|
||||
final bool showControls;
|
||||
final bool showDownloadingIndicator;
|
||||
final bool loopVideo;
|
||||
|
||||
const VideoViewerPage({
|
||||
super.key,
|
||||
@@ -29,6 +27,7 @@ class VideoViewerPage extends HookConsumerWidget {
|
||||
this.showControls = true,
|
||||
this.hideControlsTimer = const Duration(seconds: 5),
|
||||
this.showDownloadingIndicator = true,
|
||||
this.loopVideo = false,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -76,7 +75,9 @@ class VideoViewerPage extends HookConsumerWidget {
|
||||
// Also sets the error if there is an error in the playback
|
||||
void updateVideoPlayback() {
|
||||
final videoPlayback = VideoPlaybackValue.fromController(controller);
|
||||
ref.read(videoPlaybackValueProvider.notifier).value = videoPlayback;
|
||||
if (!loopVideo) {
|
||||
ref.read(videoPlaybackValueProvider.notifier).value = videoPlayback;
|
||||
}
|
||||
final state = videoPlayback.state;
|
||||
|
||||
// Enable the WakeLock while the video is playing
|
||||
@@ -156,6 +157,7 @@ class VideoViewerPage extends HookConsumerWidget {
|
||||
hideControlsTimer: hideControlsTimer,
|
||||
showControls: showControls,
|
||||
showDownloadingIndicator: showDownloadingIndicator,
|
||||
loopVideo: loopVideo,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
@@ -17,7 +17,7 @@ class ArchivePage extends HookConsumerWidget {
|
||||
final count = archivedAssets.value?.totalAssets.toString() ?? "?";
|
||||
return AppBar(
|
||||
leading: IconButton(
|
||||
onPressed: () => context.popRoute(),
|
||||
onPressed: () => context.maybePop(),
|
||||
icon: const Icon(Icons.arrow_back_ios_rounded),
|
||||
),
|
||||
centerTitle: true,
|
||||
|
||||
@@ -15,7 +15,7 @@ class FavoritesPage extends HookConsumerWidget {
|
||||
AppBar buildAppBar() {
|
||||
return AppBar(
|
||||
leading: IconButton(
|
||||
onPressed: () => context.popRoute(),
|
||||
onPressed: () => context.maybePop(),
|
||||
icon: const Icon(Icons.arrow_back_ios_rounded),
|
||||
),
|
||||
centerTitle: true,
|
||||
|
||||
@@ -143,7 +143,7 @@ class TrashPage extends HookConsumerWidget {
|
||||
return AppBar(
|
||||
leading: IconButton(
|
||||
onPressed: !selectionEnabledHook.value
|
||||
? () => context.popRoute()
|
||||
? () => context.maybePop()
|
||||
: () {
|
||||
selectionEnabledHook.value = false;
|
||||
selection.value = {};
|
||||
|
||||
@@ -176,7 +176,7 @@ class PermissionOnboardingPage extends HookConsumerWidget {
|
||||
),
|
||||
TextButton(
|
||||
child: const Text('permission_onboarding_back').tr(),
|
||||
onPressed: () => context.popRoute(),
|
||||
onPressed: () => context.maybePop(),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -3,14 +3,14 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||
import 'package:immich_mobile/models/memories/memory.model.dart';
|
||||
import 'package:immich_mobile/providers/haptic_feedback.provider.dart';
|
||||
import 'package:immich_mobile/widgets/common/immich_image.dart';
|
||||
import 'package:immich_mobile/widgets/memories/memory_bottom_info.dart';
|
||||
import 'package:immich_mobile/widgets/memories/memory_card.dart';
|
||||
import 'package:immich_mobile/widgets/memories/memory_epilogue.dart';
|
||||
import 'package:immich_mobile/widgets/memories/memory_progress_indicator.dart';
|
||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||
import 'package:immich_mobile/providers/haptic_feedback.provider.dart';
|
||||
import 'package:immich_mobile/widgets/common/immich_image.dart';
|
||||
|
||||
@RoutePage()
|
||||
class MemoryPage extends HookConsumerWidget {
|
||||
@@ -153,7 +153,7 @@ class MemoryPage extends HookConsumerWidget {
|
||||
final offset = notification.metrics.pixels;
|
||||
if (isEpiloguePage &&
|
||||
(offset > notification.metrics.maxScrollExtent + 150)) {
|
||||
context.popRoute();
|
||||
context.maybePop();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -256,7 +256,7 @@ class MemoryPage extends HookConsumerWidget {
|
||||
// auto_route doesn't invoke pop scope, so
|
||||
// turn off full screen mode here
|
||||
// https://github.com/Milad-Akarie/auto_route_library/issues/1799
|
||||
context.popRoute();
|
||||
context.maybePop();
|
||||
SystemChrome.setEnabledSystemUIMode(
|
||||
SystemUiMode.edgeToEdge,
|
||||
);
|
||||
|
||||
@@ -33,7 +33,6 @@ class PhotosPage extends HookConsumerWidget {
|
||||
() {
|
||||
ref.read(websocketProvider.notifier).connect();
|
||||
Future(() => ref.read(assetProvider.notifier).getAllAsset());
|
||||
ref.read(assetProvider.notifier).getPartnerAssets();
|
||||
ref.read(albumProvider.notifier).getAllAlbums();
|
||||
ref.read(sharedAlbumProvider.notifier).getAllSharedAlbums();
|
||||
ref.read(serverInfoProvider.notifier).getServerInfo();
|
||||
@@ -85,9 +84,6 @@ class PhotosPage extends HookConsumerWidget {
|
||||
Future<void> refreshAssets() async {
|
||||
final fullRefresh = refreshCount.value > 0;
|
||||
await ref.read(assetProvider.notifier).getAllAsset(clear: fullRefresh);
|
||||
if (timelineUsers.length > 1) {
|
||||
await ref.read(assetProvider.notifier).getPartnerAssets();
|
||||
}
|
||||
if (fullRefresh) {
|
||||
// refresh was forced: user requested another refresh within 2 seconds
|
||||
refreshCount.value = 0;
|
||||
|
||||
@@ -18,7 +18,7 @@ class AllMotionPhotosPage extends HookConsumerWidget {
|
||||
appBar: AppBar(
|
||||
title: const Text('motion_photos_page_title').tr(),
|
||||
leading: IconButton(
|
||||
onPressed: () => context.popRoute(),
|
||||
onPressed: () => context.maybePop(),
|
||||
icon: const Icon(Icons.arrow_back_ios_rounded),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -21,7 +21,7 @@ class AllPeoplePage extends HookConsumerWidget {
|
||||
'all_people_page_title',
|
||||
).tr(),
|
||||
leading: IconButton(
|
||||
onPressed: () => context.popRoute(),
|
||||
onPressed: () => context.maybePop(),
|
||||
icon: const Icon(Icons.arrow_back_ios_rounded),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -22,7 +22,7 @@ class AllPlacesPage extends HookConsumerWidget {
|
||||
'curated_location_page_title',
|
||||
).tr(),
|
||||
leading: IconButton(
|
||||
onPressed: () => context.popRoute(),
|
||||
onPressed: () => context.maybePop(),
|
||||
icon: const Icon(Icons.arrow_back_ios_rounded),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -15,7 +15,7 @@ class AllVideosPage extends HookConsumerWidget {
|
||||
appBar: AppBar(
|
||||
title: const Text('all_videos_page_title').tr(),
|
||||
leading: IconButton(
|
||||
onPressed: () => context.popRoute(),
|
||||
onPressed: () => context.maybePop(),
|
||||
icon: const Icon(Icons.arrow_back_ios_rounded),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -41,7 +41,7 @@ class MapLocationPickerPage extends HookConsumerWidget {
|
||||
}
|
||||
|
||||
void onClose([LatLng? selected]) {
|
||||
context.popRoute(selected);
|
||||
context.maybePop(selected);
|
||||
}
|
||||
|
||||
Future<void> getCurrentLocation() async {
|
||||
|
||||
@@ -102,7 +102,7 @@ class PersonResultPage extends HookConsumerWidget {
|
||||
appBar: AppBar(
|
||||
title: Text(name.value),
|
||||
leading: IconButton(
|
||||
onPressed: () => context.popRoute(),
|
||||
onPressed: () => context.maybePop(),
|
||||
icon: const Icon(Icons.arrow_back_ios_rounded),
|
||||
),
|
||||
actions: [
|
||||
|
||||
@@ -18,7 +18,7 @@ class RecentlyAddedPage extends HookConsumerWidget {
|
||||
appBar: AppBar(
|
||||
title: const Text('recently_added_page_title').tr(),
|
||||
leading: IconButton(
|
||||
onPressed: () => context.popRoute(),
|
||||
onPressed: () => context.maybePop(),
|
||||
icon: const Icon(Icons.arrow_back_ios_rounded),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -4,9 +4,11 @@ import 'package:auto_route/auto_route.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
||||
import 'package:immich_mobile/models/search/search_filter.model.dart';
|
||||
import 'package:immich_mobile/providers/search/paginated_search.provider.dart';
|
||||
import 'package:immich_mobile/widgets/asset_grid/multiselect_grid.dart';
|
||||
import 'package:immich_mobile/widgets/search/search_filter/camera_picker.dart';
|
||||
import 'package:immich_mobile/widgets/search/search_filter/display_option_picker.dart';
|
||||
import 'package:immich_mobile/widgets/search/search_filter/filter_bottom_sheet_scaffold.dart';
|
||||
@@ -15,8 +17,6 @@ import 'package:immich_mobile/widgets/search/search_filter/media_type_picker.dar
|
||||
import 'package:immich_mobile/widgets/search/search_filter/people_picker.dart';
|
||||
import 'package:immich_mobile/widgets/search/search_filter/search_filter_chip.dart';
|
||||
import 'package:immich_mobile/widgets/search/search_filter/search_filter_utils.dart';
|
||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||
import 'package:immich_mobile/widgets/asset_grid/multiselect_grid.dart';
|
||||
import 'package:openapi/api.dart';
|
||||
|
||||
@RoutePage()
|
||||
@@ -480,9 +480,7 @@ class SearchInputPage extends HookConsumerWidget {
|
||||
],
|
||||
leading: IconButton(
|
||||
icon: const Icon(Icons.arrow_back_ios_new_rounded),
|
||||
onPressed: () {
|
||||
context.router.pop();
|
||||
},
|
||||
onPressed: () => context.router.maybePop(),
|
||||
),
|
||||
title: TextField(
|
||||
controller: textSearchController,
|
||||
|
||||
@@ -22,7 +22,7 @@ class PartnerDetailPage extends HookConsumerWidget {
|
||||
|
||||
useEffect(
|
||||
() {
|
||||
ref.read(assetProvider.notifier).getPartnerAssets(partner);
|
||||
ref.read(assetProvider.notifier).getAllAsset();
|
||||
return null;
|
||||
},
|
||||
[],
|
||||
@@ -78,8 +78,7 @@ class PartnerDetailPage extends HookConsumerWidget {
|
||||
),
|
||||
body: MultiselectGrid(
|
||||
renderListProvider: assetsProvider(partner.isarId),
|
||||
onRefresh: () =>
|
||||
ref.read(assetProvider.notifier).getPartnerAssets(partner),
|
||||
onRefresh: () => ref.read(assetProvider.notifier).getAllAsset(),
|
||||
deleteEnabled: false,
|
||||
favoriteEnabled: false,
|
||||
),
|
||||
|
||||
@@ -328,7 +328,7 @@ class SharedLinkEditPage extends HookConsumerWidget {
|
||||
alignment: Alignment.bottomRight,
|
||||
child: ElevatedButton(
|
||||
onPressed: () {
|
||||
context.popRoute();
|
||||
context.maybePop();
|
||||
},
|
||||
child: const Text(
|
||||
"share_done",
|
||||
@@ -431,7 +431,7 @@ class SharedLinkEditPage extends HookConsumerWidget {
|
||||
changeExpiry: changeExpiry,
|
||||
);
|
||||
ref.invalidate(sharedLinksStateProvider);
|
||||
context.popRoute();
|
||||
context.maybePop();
|
||||
}
|
||||
|
||||
return Scaffold(
|
||||
|
||||
@@ -56,11 +56,10 @@ class AppLifeCycleNotifier extends StateNotifier<AppLifeCycleEnum> {
|
||||
switch (_ref.read(tabProvider)) {
|
||||
case TabEnum.home:
|
||||
_ref.read(assetProvider.notifier).getAllAsset();
|
||||
_ref.read(assetProvider.notifier).getPartnerAssets();
|
||||
case TabEnum.search:
|
||||
// nothing to do
|
||||
case TabEnum.sharing:
|
||||
_ref.read(assetProvider.notifier).getPartnerAssets();
|
||||
_ref.read(assetProvider.notifier).getAllAsset();
|
||||
_ref.read(sharedAlbumProvider.notifier).getAllSharedAlbums();
|
||||
case TabEnum.library:
|
||||
_ref.read(albumProvider.notifier).getAllAlbums();
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/providers/memory.provider.dart';
|
||||
import 'package:immich_mobile/services/album.service.dart';
|
||||
import 'package:immich_mobile/entities/exif_info.entity.dart';
|
||||
import 'package:immich_mobile/entities/store.entity.dart';
|
||||
import 'package:immich_mobile/entities/user.entity.dart';
|
||||
import 'package:immich_mobile/providers/db.provider.dart';
|
||||
import 'package:immich_mobile/providers/user.provider.dart';
|
||||
import 'package:immich_mobile/services/asset.service.dart';
|
||||
@@ -23,10 +23,10 @@ class AssetNotifier extends StateNotifier<bool> {
|
||||
final UserService _userService;
|
||||
final SyncService _syncService;
|
||||
final Isar _db;
|
||||
final StateNotifierProviderRef _ref;
|
||||
final log = Logger('AssetNotifier');
|
||||
bool _getAllAssetInProgress = false;
|
||||
bool _deleteInProgress = false;
|
||||
bool _getPartnerAssetsInProgress = false;
|
||||
|
||||
AssetNotifier(
|
||||
this._assetService,
|
||||
@@ -34,6 +34,7 @@ class AssetNotifier extends StateNotifier<bool> {
|
||||
this._userService,
|
||||
this._syncService,
|
||||
this._db,
|
||||
this._ref,
|
||||
) : super(false);
|
||||
|
||||
Future<void> getAllAsset({bool clear = false}) async {
|
||||
@@ -49,9 +50,15 @@ class AssetNotifier extends StateNotifier<bool> {
|
||||
await clearAssetsAndAlbums(_db);
|
||||
log.info("Manual refresh requested, cleared assets and albums from db");
|
||||
}
|
||||
final bool changedUsers = await _userService.refreshUsers();
|
||||
final bool newRemote = await _assetService.refreshRemoteAssets();
|
||||
final bool newLocal = await _albumService.refreshDeviceAlbums();
|
||||
debugPrint("newRemote: $newRemote, newLocal: $newLocal");
|
||||
debugPrint(
|
||||
"changedUsers: $changedUsers, newRemote: $newRemote, newLocal: $newLocal",
|
||||
);
|
||||
if (newRemote) {
|
||||
_ref.invalidate(memoryFutureProvider);
|
||||
}
|
||||
|
||||
log.info("Load assets: ${stopwatch.elapsedMilliseconds}ms");
|
||||
} finally {
|
||||
@@ -60,27 +67,6 @@ class AssetNotifier extends StateNotifier<bool> {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> getPartnerAssets([User? partner]) async {
|
||||
if (_getPartnerAssetsInProgress) return;
|
||||
try {
|
||||
final stopwatch = Stopwatch()..start();
|
||||
_getPartnerAssetsInProgress = true;
|
||||
if (partner == null) {
|
||||
await _userService.refreshUsers();
|
||||
final List<User> partners =
|
||||
await _db.users.filter().isPartnerSharedWithEqualTo(true).findAll();
|
||||
for (User u in partners) {
|
||||
await _assetService.refreshRemoteAssets(u);
|
||||
}
|
||||
} else {
|
||||
await _assetService.refreshRemoteAssets(partner);
|
||||
}
|
||||
log.info("Load partner assets: ${stopwatch.elapsedMilliseconds}ms");
|
||||
} finally {
|
||||
_getPartnerAssetsInProgress = false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> clearAllAsset() {
|
||||
return clearAssetsAndAlbums(_db);
|
||||
}
|
||||
@@ -321,6 +307,7 @@ final assetProvider = StateNotifierProvider<AssetNotifier, bool>((ref) {
|
||||
ref.watch(userServiceProvider),
|
||||
ref.watch(syncServiceProvider),
|
||||
ref.watch(dbProvider),
|
||||
ref,
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -374,7 +374,7 @@ class BackupNotifier extends StateNotifier<BackUpState> {
|
||||
|
||||
if (state.backupProgress != BackUpProgressEnum.inBackground) {
|
||||
await _getBackupAlbumsInfo();
|
||||
await updateServerInfo();
|
||||
await updateDiskInfo();
|
||||
await _updateBackupAssetCount();
|
||||
} else {
|
||||
log.warning("cannot get backup info - background backup is in progress!");
|
||||
@@ -542,7 +542,7 @@ class BackupNotifier extends StateNotifier<BackUpState> {
|
||||
_updatePersistentAlbumsSelection();
|
||||
}
|
||||
|
||||
updateServerInfo();
|
||||
updateDiskInfo();
|
||||
}
|
||||
|
||||
void _onUploadProgress(int sent, int total) {
|
||||
@@ -579,13 +579,13 @@ class BackupNotifier extends StateNotifier<BackUpState> {
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> updateServerInfo() async {
|
||||
final serverInfo = await _serverInfoService.getServerInfo();
|
||||
Future<void> updateDiskInfo() async {
|
||||
final diskInfo = await _serverInfoService.getDiskInfo();
|
||||
|
||||
// Update server info
|
||||
if (serverInfo != null) {
|
||||
if (diskInfo != null) {
|
||||
state = state.copyWith(
|
||||
serverInfo: serverInfo,
|
||||
serverInfo: diskInfo,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ class ManualUploadNotifier extends StateNotifier<ManualUploadState> {
|
||||
bool isDuplicated,
|
||||
) {
|
||||
state = state.copyWith(successfulUploads: state.successfulUploads + 1);
|
||||
_backupProvider.updateServerInfo();
|
||||
_backupProvider.updateDiskInfo();
|
||||
}
|
||||
|
||||
void _onAssetUploadError(ErrorUploadAsset errorAssetInfo) {
|
||||
|
||||
@@ -1,35 +1,32 @@
|
||||
import 'package:auto_route/auto_route.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/models/memories/memory.model.dart';
|
||||
import 'package:immich_mobile/models/search/search_filter.model.dart';
|
||||
import 'package:immich_mobile/pages/common/activities.page.dart';
|
||||
import 'package:immich_mobile/models/albums/asset_selection_page_result.model.dart';
|
||||
import 'package:immich_mobile/pages/common/album_options.page.dart';
|
||||
import 'package:immich_mobile/pages/common/album_viewer.page.dart';
|
||||
import 'package:immich_mobile/pages/common/album_asset_selection.page.dart';
|
||||
import 'package:immich_mobile/pages/common/create_album.page.dart';
|
||||
import 'package:immich_mobile/models/shared_link/shared_link.model.dart';
|
||||
import 'package:immich_mobile/pages/common/album_additional_shared_user_selection.page.dart';
|
||||
import 'package:immich_mobile/pages/common/album_shared_user_selection.page.dart';
|
||||
import 'package:immich_mobile/providers/gallery_permission.provider.dart';
|
||||
import 'package:immich_mobile/routing/auth_guard.dart';
|
||||
import 'package:immich_mobile/routing/custom_transition_builders.dart';
|
||||
import 'package:immich_mobile/routing/duplicate_guard.dart';
|
||||
import 'package:immich_mobile/routing/backup_permission_guard.dart';
|
||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||
import 'package:immich_mobile/entities/album.entity.dart';
|
||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||
import 'package:immich_mobile/entities/logger_message.entity.dart';
|
||||
import 'package:immich_mobile/entities/user.entity.dart';
|
||||
import 'package:immich_mobile/providers/api.provider.dart';
|
||||
import 'package:immich_mobile/pages/common/app_log_detail.page.dart';
|
||||
import 'package:immich_mobile/pages/common/app_log.page.dart';
|
||||
import 'package:immich_mobile/models/albums/asset_selection_page_result.model.dart';
|
||||
import 'package:immich_mobile/models/memories/memory.model.dart';
|
||||
import 'package:immich_mobile/models/search/search_filter.model.dart';
|
||||
import 'package:immich_mobile/models/shared_link/shared_link.model.dart';
|
||||
import 'package:immich_mobile/pages/backup/album_preview.page.dart';
|
||||
import 'package:immich_mobile/pages/backup/backup_album_selection.page.dart';
|
||||
import 'package:immich_mobile/pages/backup/backup_controller.page.dart';
|
||||
import 'package:immich_mobile/pages/backup/backup_options.page.dart';
|
||||
import 'package:immich_mobile/pages/backup/failed_backup_status.page.dart';
|
||||
import 'package:immich_mobile/pages/common/activities.page.dart';
|
||||
import 'package:immich_mobile/pages/common/album_additional_shared_user_selection.page.dart';
|
||||
import 'package:immich_mobile/pages/common/album_asset_selection.page.dart';
|
||||
import 'package:immich_mobile/pages/common/album_options.page.dart';
|
||||
import 'package:immich_mobile/pages/common/album_shared_user_selection.page.dart';
|
||||
import 'package:immich_mobile/pages/common/album_viewer.page.dart';
|
||||
import 'package:immich_mobile/pages/common/app_log.page.dart';
|
||||
import 'package:immich_mobile/pages/common/app_log_detail.page.dart';
|
||||
import 'package:immich_mobile/pages/common/create_album.page.dart';
|
||||
import 'package:immich_mobile/pages/common/gallery_viewer.page.dart';
|
||||
import 'package:immich_mobile/pages/common/settings.page.dart';
|
||||
import 'package:immich_mobile/pages/common/splash_screen.page.dart';
|
||||
import 'package:immich_mobile/pages/common/tab_controller.page.dart';
|
||||
import 'package:immich_mobile/pages/library/archive.page.dart';
|
||||
import 'package:immich_mobile/pages/library/favorite.page.dart';
|
||||
import 'package:immich_mobile/pages/library/library.page.dart';
|
||||
@@ -43,21 +40,23 @@ import 'package:immich_mobile/pages/search/all_motion_videos.page.dart';
|
||||
import 'package:immich_mobile/pages/search/all_people.page.dart';
|
||||
import 'package:immich_mobile/pages/search/all_places.page.dart';
|
||||
import 'package:immich_mobile/pages/search/all_videos.page.dart';
|
||||
import 'package:immich_mobile/pages/search/map/map_location_picker.page.dart';
|
||||
import 'package:immich_mobile/pages/search/map/map.page.dart';
|
||||
import 'package:immich_mobile/pages/search/map/map_location_picker.page.dart';
|
||||
import 'package:immich_mobile/pages/search/person_result.page.dart';
|
||||
import 'package:immich_mobile/pages/search/recently_added.page.dart';
|
||||
import 'package:immich_mobile/pages/search/search_input.page.dart';
|
||||
import 'package:immich_mobile/pages/search/search.page.dart';
|
||||
import 'package:immich_mobile/pages/common/settings.page.dart';
|
||||
import 'package:immich_mobile/pages/sharing/partner/partner_detail.page.dart';
|
||||
import 'package:immich_mobile/pages/search/search_input.page.dart';
|
||||
import 'package:immich_mobile/pages/sharing/partner/partner.page.dart';
|
||||
import 'package:immich_mobile/pages/sharing/shared_link/shared_link_edit.page.dart';
|
||||
import 'package:immich_mobile/pages/sharing/partner/partner_detail.page.dart';
|
||||
import 'package:immich_mobile/pages/sharing/shared_link/shared_link.page.dart';
|
||||
import 'package:immich_mobile/pages/sharing/shared_link/shared_link_edit.page.dart';
|
||||
import 'package:immich_mobile/pages/sharing/sharing.page.dart';
|
||||
import 'package:immich_mobile/pages/common/splash_screen.page.dart';
|
||||
import 'package:immich_mobile/pages/common/tab_controller.page.dart';
|
||||
import 'package:immich_mobile/pages/common/video_viewer.page.dart';
|
||||
import 'package:immich_mobile/providers/api.provider.dart';
|
||||
import 'package:immich_mobile/providers/gallery_permission.provider.dart';
|
||||
import 'package:immich_mobile/routing/auth_guard.dart';
|
||||
import 'package:immich_mobile/routing/backup_permission_guard.dart';
|
||||
import 'package:immich_mobile/routing/custom_transition_builders.dart';
|
||||
import 'package:immich_mobile/routing/duplicate_guard.dart';
|
||||
import 'package:immich_mobile/services/api.service.dart';
|
||||
import 'package:isar/isar.dart';
|
||||
import 'package:maplibre_gl/maplibre_gl.dart';
|
||||
@@ -120,10 +119,6 @@ class AppRouter extends _$AppRouter {
|
||||
guards: [_authGuard, _duplicateGuard],
|
||||
transitionsBuilder: CustomTransitionsBuilders.zoomedPage,
|
||||
),
|
||||
AutoRoute(
|
||||
page: VideoViewerRoute.page,
|
||||
guards: [_authGuard, _duplicateGuard],
|
||||
),
|
||||
AutoRoute(
|
||||
page: BackupControllerRoute.page,
|
||||
guards: [_authGuard, _duplicateGuard, _backupPermissionGuard],
|
||||
|
||||
+180
-256
@@ -21,6 +21,29 @@ abstract class _$AppRouter extends RootStackRouter {
|
||||
child: const ActivitiesPage(),
|
||||
);
|
||||
},
|
||||
AlbumAdditionalSharedUserSelectionRoute.name: (routeData) {
|
||||
final args =
|
||||
routeData.argsAs<AlbumAdditionalSharedUserSelectionRouteArgs>();
|
||||
return AutoRoutePage<List<String>?>(
|
||||
routeData: routeData,
|
||||
child: AlbumAdditionalSharedUserSelectionPage(
|
||||
key: args.key,
|
||||
album: args.album,
|
||||
),
|
||||
);
|
||||
},
|
||||
AlbumAssetSelectionRoute.name: (routeData) {
|
||||
final args = routeData.argsAs<AlbumAssetSelectionRouteArgs>();
|
||||
return AutoRoutePage<AssetSelectionPageResult?>(
|
||||
routeData: routeData,
|
||||
child: AlbumAssetSelectionPage(
|
||||
key: args.key,
|
||||
existingAssets: args.existingAssets,
|
||||
canDeselect: args.canDeselect,
|
||||
query: args.query,
|
||||
),
|
||||
);
|
||||
},
|
||||
AlbumOptionsRoute.name: (routeData) {
|
||||
final args = routeData.argsAs<AlbumOptionsRouteArgs>();
|
||||
return AutoRoutePage<dynamic>(
|
||||
@@ -41,6 +64,16 @@ abstract class _$AppRouter extends RootStackRouter {
|
||||
),
|
||||
);
|
||||
},
|
||||
AlbumSharedUserSelectionRoute.name: (routeData) {
|
||||
final args = routeData.argsAs<AlbumSharedUserSelectionRouteArgs>();
|
||||
return AutoRoutePage<List<String>>(
|
||||
routeData: routeData,
|
||||
child: AlbumSharedUserSelectionPage(
|
||||
key: args.key,
|
||||
assets: args.assets,
|
||||
),
|
||||
);
|
||||
},
|
||||
AlbumViewerRoute.name: (routeData) {
|
||||
final args = routeData.argsAs<AlbumViewerRouteArgs>();
|
||||
return AutoRoutePage<dynamic>(
|
||||
@@ -97,18 +130,6 @@ abstract class _$AppRouter extends RootStackRouter {
|
||||
child: const ArchivePage(),
|
||||
);
|
||||
},
|
||||
AlbumAssetSelectionRoute.name: (routeData) {
|
||||
final args = routeData.argsAs<AssetSelectionRouteArgs>();
|
||||
return AutoRoutePage<AssetSelectionPageResult?>(
|
||||
routeData: routeData,
|
||||
child: AlbumAssetSelectionPage(
|
||||
key: args.key,
|
||||
existingAssets: args.existingAssets,
|
||||
canDeselect: args.canDeselect,
|
||||
query: args.query,
|
||||
),
|
||||
);
|
||||
},
|
||||
BackupAlbumSelectionRoute.name: (routeData) {
|
||||
return AutoRoutePage<dynamic>(
|
||||
routeData: routeData,
|
||||
@@ -170,12 +191,6 @@ abstract class _$AppRouter extends RootStackRouter {
|
||||
),
|
||||
);
|
||||
},
|
||||
PhotosRoute.name: (routeData) {
|
||||
return AutoRoutePage<dynamic>(
|
||||
routeData: routeData,
|
||||
child: const PhotosPage(),
|
||||
);
|
||||
},
|
||||
LibraryRoute.name: (routeData) {
|
||||
return AutoRoutePage<dynamic>(
|
||||
routeData: routeData,
|
||||
@@ -249,6 +264,12 @@ abstract class _$AppRouter extends RootStackRouter {
|
||||
),
|
||||
);
|
||||
},
|
||||
PhotosRoute.name: (routeData) {
|
||||
return AutoRoutePage<dynamic>(
|
||||
routeData: routeData,
|
||||
child: const PhotosPage(),
|
||||
);
|
||||
},
|
||||
RecentlyAddedRoute.name: (routeData) {
|
||||
return AutoRoutePage<dynamic>(
|
||||
routeData: routeData,
|
||||
@@ -272,26 +293,6 @@ abstract class _$AppRouter extends RootStackRouter {
|
||||
child: const SearchPage(),
|
||||
);
|
||||
},
|
||||
AlbumAdditionalSharedUserSelectionRoute.name: (routeData) {
|
||||
final args = routeData.argsAs<SelectAdditionalUserForSharingRouteArgs>();
|
||||
return AutoRoutePage<List<String>?>(
|
||||
routeData: routeData,
|
||||
child: AlbumAdditionalSharedUserSelectionPage(
|
||||
key: args.key,
|
||||
album: args.album,
|
||||
),
|
||||
);
|
||||
},
|
||||
AlbumSharedUserSelectionRoute.name: (routeData) {
|
||||
final args = routeData.argsAs<SelectUserForSharingRouteArgs>();
|
||||
return AutoRoutePage<List<String>>(
|
||||
routeData: routeData,
|
||||
child: AlbumSharedUserSelectionPage(
|
||||
key: args.key,
|
||||
assets: args.assets,
|
||||
),
|
||||
);
|
||||
},
|
||||
SettingsRoute.name: (routeData) {
|
||||
return AutoRoutePage<dynamic>(
|
||||
routeData: routeData,
|
||||
@@ -351,21 +352,6 @@ abstract class _$AppRouter extends RootStackRouter {
|
||||
child: const TrashPage(),
|
||||
);
|
||||
},
|
||||
VideoViewerRoute.name: (routeData) {
|
||||
final args = routeData.argsAs<VideoViewerRouteArgs>();
|
||||
return AutoRoutePage<dynamic>(
|
||||
routeData: routeData,
|
||||
child: VideoViewerPage(
|
||||
key: args.key,
|
||||
asset: args.asset,
|
||||
isMotionVideo: args.isMotionVideo,
|
||||
placeholder: args.placeholder,
|
||||
showControls: args.showControls,
|
||||
hideControlsTimer: args.hideControlsTimer,
|
||||
showDownloadingIndicator: args.showDownloadingIndicator,
|
||||
),
|
||||
);
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -383,6 +369,94 @@ class ActivitiesRoute extends PageRouteInfo<void> {
|
||||
static const PageInfo<void> page = PageInfo<void>(name);
|
||||
}
|
||||
|
||||
/// generated route for
|
||||
/// [AlbumAdditionalSharedUserSelectionPage]
|
||||
class AlbumAdditionalSharedUserSelectionRoute
|
||||
extends PageRouteInfo<AlbumAdditionalSharedUserSelectionRouteArgs> {
|
||||
AlbumAdditionalSharedUserSelectionRoute({
|
||||
Key? key,
|
||||
required Album album,
|
||||
List<PageRouteInfo>? children,
|
||||
}) : super(
|
||||
AlbumAdditionalSharedUserSelectionRoute.name,
|
||||
args: AlbumAdditionalSharedUserSelectionRouteArgs(
|
||||
key: key,
|
||||
album: album,
|
||||
),
|
||||
initialChildren: children,
|
||||
);
|
||||
|
||||
static const String name = 'AlbumAdditionalSharedUserSelectionRoute';
|
||||
|
||||
static const PageInfo<AlbumAdditionalSharedUserSelectionRouteArgs> page =
|
||||
PageInfo<AlbumAdditionalSharedUserSelectionRouteArgs>(name);
|
||||
}
|
||||
|
||||
class AlbumAdditionalSharedUserSelectionRouteArgs {
|
||||
const AlbumAdditionalSharedUserSelectionRouteArgs({
|
||||
this.key,
|
||||
required this.album,
|
||||
});
|
||||
|
||||
final Key? key;
|
||||
|
||||
final Album album;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'AlbumAdditionalSharedUserSelectionRouteArgs{key: $key, album: $album}';
|
||||
}
|
||||
}
|
||||
|
||||
/// generated route for
|
||||
/// [AlbumAssetSelectionPage]
|
||||
class AlbumAssetSelectionRoute
|
||||
extends PageRouteInfo<AlbumAssetSelectionRouteArgs> {
|
||||
AlbumAssetSelectionRoute({
|
||||
Key? key,
|
||||
required Set<Asset> existingAssets,
|
||||
bool canDeselect = false,
|
||||
required QueryBuilder<Asset, Asset, QAfterSortBy>? query,
|
||||
List<PageRouteInfo>? children,
|
||||
}) : super(
|
||||
AlbumAssetSelectionRoute.name,
|
||||
args: AlbumAssetSelectionRouteArgs(
|
||||
key: key,
|
||||
existingAssets: existingAssets,
|
||||
canDeselect: canDeselect,
|
||||
query: query,
|
||||
),
|
||||
initialChildren: children,
|
||||
);
|
||||
|
||||
static const String name = 'AlbumAssetSelectionRoute';
|
||||
|
||||
static const PageInfo<AlbumAssetSelectionRouteArgs> page =
|
||||
PageInfo<AlbumAssetSelectionRouteArgs>(name);
|
||||
}
|
||||
|
||||
class AlbumAssetSelectionRouteArgs {
|
||||
const AlbumAssetSelectionRouteArgs({
|
||||
this.key,
|
||||
required this.existingAssets,
|
||||
this.canDeselect = false,
|
||||
required this.query,
|
||||
});
|
||||
|
||||
final Key? key;
|
||||
|
||||
final Set<Asset> existingAssets;
|
||||
|
||||
final bool canDeselect;
|
||||
|
||||
final QueryBuilder<Asset, Asset, QAfterSortBy>? query;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'AlbumAssetSelectionRouteArgs{key: $key, existingAssets: $existingAssets, canDeselect: $canDeselect, query: $query}';
|
||||
}
|
||||
}
|
||||
|
||||
/// generated route for
|
||||
/// [AlbumOptionsPage]
|
||||
class AlbumOptionsRoute extends PageRouteInfo<AlbumOptionsRouteArgs> {
|
||||
@@ -459,6 +533,45 @@ class AlbumPreviewRouteArgs {
|
||||
}
|
||||
}
|
||||
|
||||
/// generated route for
|
||||
/// [AlbumSharedUserSelectionPage]
|
||||
class AlbumSharedUserSelectionRoute
|
||||
extends PageRouteInfo<AlbumSharedUserSelectionRouteArgs> {
|
||||
AlbumSharedUserSelectionRoute({
|
||||
Key? key,
|
||||
required Set<Asset> assets,
|
||||
List<PageRouteInfo>? children,
|
||||
}) : super(
|
||||
AlbumSharedUserSelectionRoute.name,
|
||||
args: AlbumSharedUserSelectionRouteArgs(
|
||||
key: key,
|
||||
assets: assets,
|
||||
),
|
||||
initialChildren: children,
|
||||
);
|
||||
|
||||
static const String name = 'AlbumSharedUserSelectionRoute';
|
||||
|
||||
static const PageInfo<AlbumSharedUserSelectionRouteArgs> page =
|
||||
PageInfo<AlbumSharedUserSelectionRouteArgs>(name);
|
||||
}
|
||||
|
||||
class AlbumSharedUserSelectionRouteArgs {
|
||||
const AlbumSharedUserSelectionRouteArgs({
|
||||
this.key,
|
||||
required this.assets,
|
||||
});
|
||||
|
||||
final Key? key;
|
||||
|
||||
final Set<Asset> assets;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'AlbumSharedUserSelectionRouteArgs{key: $key, assets: $assets}';
|
||||
}
|
||||
}
|
||||
|
||||
/// generated route for
|
||||
/// [AlbumViewerPage]
|
||||
class AlbumViewerRoute extends PageRouteInfo<AlbumViewerRouteArgs> {
|
||||
@@ -619,54 +732,6 @@ class ArchiveRoute extends PageRouteInfo<void> {
|
||||
static const PageInfo<void> page = PageInfo<void>(name);
|
||||
}
|
||||
|
||||
/// generated route for
|
||||
/// [AlbumAssetSelectionPage]
|
||||
class AlbumAssetSelectionRoute extends PageRouteInfo<AssetSelectionRouteArgs> {
|
||||
AlbumAssetSelectionRoute({
|
||||
Key? key,
|
||||
required Set<Asset> existingAssets,
|
||||
bool canDeselect = false,
|
||||
required QueryBuilder<Asset, Asset, QAfterSortBy>? query,
|
||||
List<PageRouteInfo>? children,
|
||||
}) : super(
|
||||
AlbumAssetSelectionRoute.name,
|
||||
args: AssetSelectionRouteArgs(
|
||||
key: key,
|
||||
existingAssets: existingAssets,
|
||||
canDeselect: canDeselect,
|
||||
query: query,
|
||||
),
|
||||
initialChildren: children,
|
||||
);
|
||||
|
||||
static const String name = 'AlbumAssetSelectionRoute';
|
||||
|
||||
static const PageInfo<AssetSelectionRouteArgs> page =
|
||||
PageInfo<AssetSelectionRouteArgs>(name);
|
||||
}
|
||||
|
||||
class AssetSelectionRouteArgs {
|
||||
const AssetSelectionRouteArgs({
|
||||
this.key,
|
||||
required this.existingAssets,
|
||||
this.canDeselect = false,
|
||||
required this.query,
|
||||
});
|
||||
|
||||
final Key? key;
|
||||
|
||||
final Set<Asset> existingAssets;
|
||||
|
||||
final bool canDeselect;
|
||||
|
||||
final QueryBuilder<Asset, Asset, QAfterSortBy>? query;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'AssetSelectionRouteArgs{key: $key, existingAssets: $existingAssets, canDeselect: $canDeselect, query: $query}';
|
||||
}
|
||||
}
|
||||
|
||||
/// generated route for
|
||||
/// [BackupAlbumSelectionPage]
|
||||
class BackupAlbumSelectionRoute extends PageRouteInfo<void> {
|
||||
@@ -852,20 +917,6 @@ class GalleryViewerRouteArgs {
|
||||
}
|
||||
}
|
||||
|
||||
/// generated route for
|
||||
/// [PhotosPage]
|
||||
class PhotosRoute extends PageRouteInfo<void> {
|
||||
const PhotosRoute({List<PageRouteInfo>? children})
|
||||
: super(
|
||||
PhotosRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
|
||||
static const String name = 'PhotosRoute';
|
||||
|
||||
static const PageInfo<void> page = PageInfo<void>(name);
|
||||
}
|
||||
|
||||
/// generated route for
|
||||
/// [LibraryPage]
|
||||
class LibraryRoute extends PageRouteInfo<void> {
|
||||
@@ -1097,6 +1148,20 @@ class PersonResultRouteArgs {
|
||||
}
|
||||
}
|
||||
|
||||
/// generated route for
|
||||
/// [PhotosPage]
|
||||
class PhotosRoute extends PageRouteInfo<void> {
|
||||
const PhotosRoute({List<PageRouteInfo>? children})
|
||||
: super(
|
||||
PhotosRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
|
||||
static const String name = 'PhotosRoute';
|
||||
|
||||
static const PageInfo<void> page = PageInfo<void>(name);
|
||||
}
|
||||
|
||||
/// generated route for
|
||||
/// [RecentlyAddedPage]
|
||||
class RecentlyAddedRoute extends PageRouteInfo<void> {
|
||||
@@ -1163,84 +1228,6 @@ class SearchRoute extends PageRouteInfo<void> {
|
||||
static const PageInfo<void> page = PageInfo<void>(name);
|
||||
}
|
||||
|
||||
/// generated route for
|
||||
/// [AlbumAdditionalSharedUserSelectionPage]
|
||||
class AlbumAdditionalSharedUserSelectionRoute
|
||||
extends PageRouteInfo<SelectAdditionalUserForSharingRouteArgs> {
|
||||
AlbumAdditionalSharedUserSelectionRoute({
|
||||
Key? key,
|
||||
required Album album,
|
||||
List<PageRouteInfo>? children,
|
||||
}) : super(
|
||||
AlbumAdditionalSharedUserSelectionRoute.name,
|
||||
args: SelectAdditionalUserForSharingRouteArgs(
|
||||
key: key,
|
||||
album: album,
|
||||
),
|
||||
initialChildren: children,
|
||||
);
|
||||
|
||||
static const String name = 'AlbumAdditionalSharedUserSelectionRoute';
|
||||
|
||||
static const PageInfo<SelectAdditionalUserForSharingRouteArgs> page =
|
||||
PageInfo<SelectAdditionalUserForSharingRouteArgs>(name);
|
||||
}
|
||||
|
||||
class SelectAdditionalUserForSharingRouteArgs {
|
||||
const SelectAdditionalUserForSharingRouteArgs({
|
||||
this.key,
|
||||
required this.album,
|
||||
});
|
||||
|
||||
final Key? key;
|
||||
|
||||
final Album album;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'SelectAdditionalUserForSharingRouteArgs{key: $key, album: $album}';
|
||||
}
|
||||
}
|
||||
|
||||
/// generated route for
|
||||
/// [AlbumSharedUserSelectionPage]
|
||||
class AlbumSharedUserSelectionRoute
|
||||
extends PageRouteInfo<SelectUserForSharingRouteArgs> {
|
||||
AlbumSharedUserSelectionRoute({
|
||||
Key? key,
|
||||
required Set<Asset> assets,
|
||||
List<PageRouteInfo>? children,
|
||||
}) : super(
|
||||
AlbumSharedUserSelectionRoute.name,
|
||||
args: SelectUserForSharingRouteArgs(
|
||||
key: key,
|
||||
assets: assets,
|
||||
),
|
||||
initialChildren: children,
|
||||
);
|
||||
|
||||
static const String name = 'AlbumSharedUserSelectionRoute';
|
||||
|
||||
static const PageInfo<SelectUserForSharingRouteArgs> page =
|
||||
PageInfo<SelectUserForSharingRouteArgs>(name);
|
||||
}
|
||||
|
||||
class SelectUserForSharingRouteArgs {
|
||||
const SelectUserForSharingRouteArgs({
|
||||
this.key,
|
||||
required this.assets,
|
||||
});
|
||||
|
||||
final Key? key;
|
||||
|
||||
final Set<Asset> assets;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'SelectUserForSharingRouteArgs{key: $key, assets: $assets}';
|
||||
}
|
||||
}
|
||||
|
||||
/// generated route for
|
||||
/// [SettingsPage]
|
||||
class SettingsRoute extends PageRouteInfo<void> {
|
||||
@@ -1410,66 +1397,3 @@ class TrashRoute extends PageRouteInfo<void> {
|
||||
|
||||
static const PageInfo<void> page = PageInfo<void>(name);
|
||||
}
|
||||
|
||||
/// generated route for
|
||||
/// [VideoViewerPage]
|
||||
class VideoViewerRoute extends PageRouteInfo<VideoViewerRouteArgs> {
|
||||
VideoViewerRoute({
|
||||
Key? key,
|
||||
required Asset asset,
|
||||
bool isMotionVideo = false,
|
||||
Widget? placeholder,
|
||||
bool showControls = true,
|
||||
Duration hideControlsTimer = const Duration(seconds: 5),
|
||||
bool showDownloadingIndicator = true,
|
||||
List<PageRouteInfo>? children,
|
||||
}) : super(
|
||||
VideoViewerRoute.name,
|
||||
args: VideoViewerRouteArgs(
|
||||
key: key,
|
||||
asset: asset,
|
||||
isMotionVideo: isMotionVideo,
|
||||
placeholder: placeholder,
|
||||
showControls: showControls,
|
||||
hideControlsTimer: hideControlsTimer,
|
||||
showDownloadingIndicator: showDownloadingIndicator,
|
||||
),
|
||||
initialChildren: children,
|
||||
);
|
||||
|
||||
static const String name = 'VideoViewerRoute';
|
||||
|
||||
static const PageInfo<VideoViewerRouteArgs> page =
|
||||
PageInfo<VideoViewerRouteArgs>(name);
|
||||
}
|
||||
|
||||
class VideoViewerRouteArgs {
|
||||
const VideoViewerRouteArgs({
|
||||
this.key,
|
||||
required this.asset,
|
||||
this.isMotionVideo = false,
|
||||
this.placeholder,
|
||||
this.showControls = true,
|
||||
this.hideControlsTimer = const Duration(seconds: 5),
|
||||
this.showDownloadingIndicator = true,
|
||||
});
|
||||
|
||||
final Key? key;
|
||||
|
||||
final Asset asset;
|
||||
|
||||
final bool isMotionVideo;
|
||||
|
||||
final Widget? placeholder;
|
||||
|
||||
final bool showControls;
|
||||
|
||||
final Duration hideControlsTimer;
|
||||
|
||||
final bool showDownloadingIndicator;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'VideoViewerRouteArgs{key: $key, asset: $asset, isMotionVideo: $isMotionVideo, placeholder: $placeholder, showControls: $showControls, hideControlsTimer: $hideControlsTimer, showDownloadingIndicator: $showDownloadingIndicator}';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ class TabNavigationObserver extends AutoRouterObserver {
|
||||
|
||||
if (route.name == 'SharingRoute') {
|
||||
ref.read(sharedAlbumProvider.notifier).getAllSharedAlbums();
|
||||
ref.read(assetProvider.notifier).getPartnerAssets();
|
||||
Future(() => ref.read(assetProvider.notifier).getAllAsset());
|
||||
}
|
||||
|
||||
if (route.name == 'LibraryRoute') {
|
||||
|
||||
@@ -180,7 +180,14 @@ class AlbumService {
|
||||
CreateAlbumDto(
|
||||
albumName: albumName,
|
||||
assetIds: assets.map((asset) => asset.remoteId!).toList(),
|
||||
sharedWithUserIds: sharedUsers.map((e) => e.id).toList(),
|
||||
albumUsers: sharedUsers
|
||||
.map(
|
||||
(e) => AlbumUserCreateDto(
|
||||
userId: e.id,
|
||||
role: AlbumUserRole.editor,
|
||||
),
|
||||
)
|
||||
.toList(),
|
||||
),
|
||||
);
|
||||
if (remote != null) {
|
||||
|
||||
@@ -23,6 +23,7 @@ class ApiService {
|
||||
late PersonApi personApi;
|
||||
late AuditApi auditApi;
|
||||
late SharedLinkApi sharedLinkApi;
|
||||
late SyncApi syncApi;
|
||||
late SystemConfigApi systemConfigApi;
|
||||
late ActivityApi activityApi;
|
||||
late DownloadApi downloadApi;
|
||||
@@ -53,6 +54,7 @@ class ApiService {
|
||||
personApi = PersonApi(_apiClient);
|
||||
auditApi = AuditApi(_apiClient);
|
||||
sharedLinkApi = SharedLinkApi(_apiClient);
|
||||
syncApi = SyncApi(_apiClient);
|
||||
systemConfigApi = SystemConfigApi(_apiClient);
|
||||
activityApi = ActivityApi(_apiClient);
|
||||
downloadApi = DownloadApi(_apiClient);
|
||||
|
||||
@@ -46,6 +46,7 @@ enum AppSettingsEnum<T> {
|
||||
advancedTroubleshooting<bool>(StoreKey.advancedTroubleshooting, null, false),
|
||||
logLevel<int>(StoreKey.logLevel, null, 5), // Level.INFO = 5
|
||||
preferRemoteImage<bool>(StoreKey.preferRemoteImage, null, false),
|
||||
loopVideo<bool>(StoreKey.loopVideo, "loopVideo", true),
|
||||
mapThemeMode<int>(StoreKey.mapThemeMode, null, 0),
|
||||
mapShowFavoriteOnly<bool>(StoreKey.mapShowFavoriteOnly, null, false),
|
||||
mapIncludeArchived<bool>(StoreKey.mapIncludeArchived, null, false),
|
||||
|
||||
@@ -5,13 +5,14 @@ import 'dart:async';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||
import 'package:immich_mobile/entities/etag.entity.dart';
|
||||
import 'package:immich_mobile/entities/exif_info.entity.dart';
|
||||
import 'package:immich_mobile/entities/store.entity.dart';
|
||||
import 'package:immich_mobile/entities/user.entity.dart';
|
||||
import 'package:immich_mobile/providers/api.provider.dart';
|
||||
import 'package:immich_mobile/providers/db.provider.dart';
|
||||
import 'package:immich_mobile/services/api.service.dart';
|
||||
import 'package:immich_mobile/services/sync.service.dart';
|
||||
import 'package:immich_mobile/services/user.service.dart';
|
||||
import 'package:isar/isar.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:maplibre_gl/maplibre_gl.dart';
|
||||
@@ -21,6 +22,7 @@ final assetServiceProvider = Provider(
|
||||
(ref) => AssetService(
|
||||
ref.watch(apiServiceProvider),
|
||||
ref.watch(syncServiceProvider),
|
||||
ref.watch(userServiceProvider),
|
||||
ref.watch(dbProvider),
|
||||
),
|
||||
);
|
||||
@@ -28,24 +30,33 @@ final assetServiceProvider = Provider(
|
||||
class AssetService {
|
||||
final ApiService _apiService;
|
||||
final SyncService _syncService;
|
||||
final UserService _userService;
|
||||
final log = Logger('AssetService');
|
||||
final Isar _db;
|
||||
|
||||
AssetService(
|
||||
this._apiService,
|
||||
this._syncService,
|
||||
this._userService,
|
||||
this._db,
|
||||
);
|
||||
|
||||
/// Checks the server for updated assets and updates the local database if
|
||||
/// required. Returns `true` if there were any changes.
|
||||
Future<bool> refreshRemoteAssets([User? user]) async {
|
||||
user ??= Store.get<User>(StoreKey.currentUser);
|
||||
Future<bool> refreshRemoteAssets() async {
|
||||
final syncedUserIds = await _db.eTags.where().idProperty().findAll();
|
||||
final List<User> syncedUsers = syncedUserIds.isEmpty
|
||||
? []
|
||||
: await _db.users
|
||||
.where()
|
||||
.anyOf(syncedUserIds, (q, id) => q.idEqualTo(id))
|
||||
.findAll();
|
||||
final Stopwatch sw = Stopwatch()..start();
|
||||
final bool changes = await _syncService.syncRemoteAssetsToDb(
|
||||
user,
|
||||
_getRemoteAssetChanges,
|
||||
_getRemoteAssets,
|
||||
users: syncedUsers,
|
||||
getChangedAssets: _getRemoteAssetChanges,
|
||||
loadAssets: _getRemoteAssets,
|
||||
refreshUsers: _userService.getUsersFromServer,
|
||||
);
|
||||
debugPrint("refreshRemoteAssets full took ${sw.elapsedMilliseconds}ms");
|
||||
return changes;
|
||||
@@ -53,14 +64,15 @@ class AssetService {
|
||||
|
||||
/// Returns `(null, null)` if changes are invalid -> requires full sync
|
||||
Future<(List<Asset>? toUpsert, List<String>? toDelete)>
|
||||
_getRemoteAssetChanges(User user, DateTime since) async {
|
||||
final deleted = await _apiService.auditApi
|
||||
.getAuditDeletes(since, EntityType.ASSET, userId: user.id);
|
||||
if (deleted == null || deleted.needsFullSync) return (null, null);
|
||||
final assetDto = await _apiService.assetApi
|
||||
.getAllAssets(userId: user.id, updatedAfter: since);
|
||||
if (assetDto == null) return (null, null);
|
||||
return (assetDto.map(Asset.remote).toList(), deleted.ids);
|
||||
_getRemoteAssetChanges(List<User> users, DateTime since) async {
|
||||
final dto = AssetDeltaSyncDto(
|
||||
updatedAfter: since,
|
||||
userIds: users.map((e) => e.id).toList(),
|
||||
);
|
||||
final changes = await _apiService.syncApi.getDeltaSync(dto);
|
||||
return changes == null || changes.needsFullSync
|
||||
? (null, null)
|
||||
: (changes.upserted.map(Asset.remote).toList(), changes.deleted);
|
||||
}
|
||||
|
||||
/// Returns the list of people of the given asset id.
|
||||
@@ -85,38 +97,32 @@ class AssetService {
|
||||
}
|
||||
|
||||
/// Returns `null` if the server state did not change, else list of assets
|
||||
Future<List<Asset>?> _getRemoteAssets(User user) async {
|
||||
Future<List<Asset>?> _getRemoteAssets(User user, DateTime until) async {
|
||||
const int chunkSize = 10000;
|
||||
try {
|
||||
final DateTime now = DateTime.now().toUtc();
|
||||
final List<Asset> allAssets = [];
|
||||
for (int i = 0;; i += chunkSize) {
|
||||
final List<AssetResponseDto>? assets =
|
||||
await _apiService.assetApi.getAllAssets(
|
||||
DateTime? lastCreationDate;
|
||||
String? lastId;
|
||||
// will break on error or once all assets are loaded
|
||||
while (true) {
|
||||
final dto = AssetFullSyncDto(
|
||||
limit: chunkSize,
|
||||
updatedUntil: until,
|
||||
lastId: lastId,
|
||||
lastCreationDate: lastCreationDate,
|
||||
userId: user.id,
|
||||
// updatedBefore is important! without it we could
|
||||
// a) get the same Asset multiple times in different versions (when
|
||||
// the asset is modified while the chunks are loaded from the server)
|
||||
// b) miss assets when new assets are inserted in between the calls
|
||||
updatedBefore: now,
|
||||
skip: i,
|
||||
take: chunkSize,
|
||||
);
|
||||
if (assets == null) {
|
||||
return null;
|
||||
}
|
||||
final List<AssetResponseDto>? assets =
|
||||
await _apiService.syncApi.getFullSyncForUser(dto);
|
||||
if (assets == null) return null;
|
||||
allAssets.addAll(assets.map(Asset.remote));
|
||||
if (assets.length < chunkSize) {
|
||||
break;
|
||||
}
|
||||
if (assets.isEmpty) break;
|
||||
lastCreationDate = assets.last.fileCreatedAt;
|
||||
lastId = assets.last.id;
|
||||
}
|
||||
return allAssets;
|
||||
} catch (error, stack) {
|
||||
log.severe(
|
||||
'Error while getting remote assets',
|
||||
error,
|
||||
stack,
|
||||
);
|
||||
log.severe('Error while getting remote assets', error, stack);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import 'package:immich_mobile/entities/store.entity.dart';
|
||||
import 'package:immich_mobile/services/api.service.dart';
|
||||
import 'package:immich_mobile/utils/backup_progress.dart';
|
||||
import 'package:immich_mobile/utils/diff.dart';
|
||||
import 'package:immich_mobile/utils/http_ssl_cert_override.dart';
|
||||
import 'package:isar/isar.dart';
|
||||
import 'package:path_provider_ios/path_provider_ios.dart';
|
||||
import 'package:photo_manager/photo_manager.dart';
|
||||
@@ -590,6 +591,7 @@ enum IosBackgroundTask { fetch, processing }
|
||||
/// entry point called by Kotlin/Java code; needs to be a top-level function
|
||||
@pragma('vm:entry-point')
|
||||
void _nativeEntry() {
|
||||
HttpOverrides.global = HttpSSLCertOverride();
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
DartPluginRegistrant.ensureInitialized();
|
||||
BackgroundService backgroundService = BackgroundService();
|
||||
|
||||
@@ -8,6 +8,8 @@ import 'package:isar/isar.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:openapi/api.dart';
|
||||
|
||||
import '../utils/string_helper.dart';
|
||||
|
||||
final memoryServiceProvider = StateProvider<MemoryService>((ref) {
|
||||
return MemoryService(
|
||||
ref.watch(apiServiceProvider),
|
||||
@@ -36,13 +38,17 @@ class MemoryService {
|
||||
}
|
||||
|
||||
List<Memory> memories = [];
|
||||
for (final MemoryLaneResponseDto(:title, :assets) in data) {
|
||||
memories.add(
|
||||
Memory(
|
||||
title: title,
|
||||
assets: await _db.assets.getAllByRemoteId(assets.map((e) => e.id)),
|
||||
),
|
||||
);
|
||||
for (final MemoryLaneResponseDto(:yearsAgo, :assets) in data) {
|
||||
final dbAssets =
|
||||
await _db.assets.getAllByRemoteId(assets.map((e) => e.id));
|
||||
if (dbAssets.isNotEmpty) {
|
||||
memories.add(
|
||||
Memory(
|
||||
title: '$yearsAgo year${s(yearsAgo)} ago',
|
||||
assets: dbAssets,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return memories.isNotEmpty ? memories : null;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user