2025-08-21 17:15:11 -05:00
|
|
|
//
|
|
|
|
|
// AUTO-GENERATED FILE, DO NOT MODIFY!
|
|
|
|
|
//
|
|
|
|
|
// @dart=2.18
|
|
|
|
|
|
|
|
|
|
// ignore_for_file: unused_element, unused_import
|
|
|
|
|
// ignore_for_file: always_put_required_named_parameters_first
|
|
|
|
|
// ignore_for_file: constant_identifier_names
|
|
|
|
|
// ignore_for_file: lines_longer_than_80_chars
|
|
|
|
|
|
|
|
|
|
library openapi.api;
|
|
|
|
|
|
|
|
|
|
import 'dart:async';
|
|
|
|
|
import 'dart:convert';
|
|
|
|
|
import 'dart:io';
|
|
|
|
|
|
|
|
|
|
import 'package:collection/collection.dart';
|
|
|
|
|
import 'package:flutter/foundation.dart';
|
|
|
|
|
import 'package:immich_mobile/utils/openapi_patching.dart';
|
|
|
|
|
import 'package:http/http.dart';
|
|
|
|
|
import 'package:intl/intl.dart';
|
|
|
|
|
import 'package:meta/meta.dart';
|
|
|
|
|
|
|
|
|
|
part 'api_client.dart';
|
|
|
|
|
part 'api_helper.dart';
|
|
|
|
|
part 'api_exception.dart';
|
|
|
|
|
part 'auth/authentication.dart';
|
|
|
|
|
part 'auth/api_key_auth.dart';
|
|
|
|
|
part 'auth/oauth.dart';
|
|
|
|
|
part 'auth/http_basic_auth.dart';
|
|
|
|
|
part 'auth/http_bearer_auth.dart';
|
|
|
|
|
|
|
|
|
|
part 'api/api_keys_api.dart';
|
|
|
|
|
part 'api/activities_api.dart';
|
|
|
|
|
part 'api/albums_api.dart';
|
|
|
|
|
part 'api/assets_api.dart';
|
|
|
|
|
part 'api/authentication_api.dart';
|
2025-11-11 17:01:14 -05:00
|
|
|
part 'api/authentication_admin_api.dart';
|
feat: restore database backups (#23978)
* feat: ProcessRepository#createSpawnDuplexStream
* test: write tests for ProcessRepository#createSpawnDuplexStream
* feat: StorageRepository#createGzip,createGunzip,createPlainReadStream
* feat: backups util (args, create, restore, progress)
* feat: wait on maintenance operation lock on boot
* chore: use backup util from backup.service.ts
test: update backup.service.ts tests with new util
* feat: list/delete backups (maintenance services)
* chore: open api
fix: missing action in cli.service.ts
* chore: add missing repositories to MaintenanceModule
* refactor: move logSecret into module init
* feat: initialise StorageCore in maintenance mode
* feat: authenticate websocket requests in maintenance mode
* test: add mock for new storage fns
* feat: add MaintenanceEphemeralStateRepository
refactor: cache the secret in memory
* test: update service worker tests
* feat: add external maintenance mode status
* feat: synchronised status, restore db action
* test: backup restore service tests
* refactor: DRY end maintenance
* feat: list and delete backup routes
* feat: start action on boot
* fix: should set status on restore end
* refactor: add maintenanceStore to hold writables
* feat: sync status to web app
* feat: web impl.
* test: various utils for testings
* test: web e2e tests
* test: e2e maintenance spec
* test: update cli spec
* chore: e2e lint
* chore: lint fixes
* chore: lint fixes
* feat: start restore flow route
* test: update e2e tests
* chore: remove neon lights on maintenance action pages
* fix: use 'startRestoreFlow' on onboarding page
* chore: ignore any library folder in `docker/`
* fix: load status on boot
* feat: upload backups
* refactor: permit any .sql(.gz) to be listed/restored
* feat: download backups from list
* fix: permit uploading just .sql files
* feat: restore just .sql files
* fix: don't show backups list if logged out
* feat: system integrity check in restore flow
* test: not providing failed backups in API anymore
* test: util should also not try to use failedBackups
* fix: actually assign inputStream
* test: correct test backup prep.
* fix: ensure task is defined to show error
* test: fix docker cp command
* test: update e2e web spec to select next button
* test: update e2e api tests
* test: refactor timeouts
* chore: remove `showDelete` from maint. settings
* chore: lint
* chore: lint
* fix: make sure backups are correctly sorted for clean up
* test: update service spec
* test: adjust e2e timeout
* test: increase web timeouts for ci
* chore: move gitignore changes
* chore: additional filename validation
* refactor: better typings for integrity API
* feat: higher accuracy progress tracking
* chore: delay lock retry
* refactor: remove old maintenance settings
* refactor: clean up tailwind classes
* refactor: use while loop rather than recursive calls
* test: update service specs
* chore: check canParse too
* chore: lint
* fix: logic error causing infinite loop
* refactor: use <ProgressBar /> from ui library
* fix: create or overwrite file
* chore: i18n pass, update progress bar
* fix: wrong translation string
* chore: update colour variables
* test: update web test for new maint. page
* chore: format, fix key
* test: update tests to be more linter complaint & use new routines
* chore: update onClick -> onAction, title -> breadcrumbs
* fix: use wrench icon in admin settings sidebar
* chore: add translation strings to accordion
* chore: lint
* refactor: move maintenance worker init into service
* refactor: `maintenanceStatus` -> `getMaintenanceStatus`
refactor: `integrityCheck` -> `detectPriorInstall`
chore: add `v2.4.0` version
refactor: `/backups/list` -> `/backups`
refactor: use sendFile in download route
refactor: use separate backups permissions
chore: correct descriptions
refactor: permit handler that doesn't return promise for sendfile
* refactor: move status impl into service
refactor: add active flag to maintenance status
* refactor: split into database backup controller
* test: split api e2e tests and passing
* fix: move end button into authed default maint page
* fix: also show in restore flow
* fix: import getMaintenanceStatus
* test: split web e2e tests
* refactor: ensure detect install is consistently named
* chore: ensure admin for detect install while out of maint.
* refactor: remove state repository
* test: update maint. worker service spec
* test: split backup service spec
* refactor: rename db backup routes
* refactor: instead of param, allow bulk backup deletion
* test: update sdk use in e2e test
* test: correct deleteBackup call
* fix: correct type for serverinstall response dto
* chore: validate filename for deletion
* test: wip
* test: backups no longer take path param
* refactor: scope util to database-backups instead of backups
* fix: update worker controller with new route
* chore: use new admin page actions
* chore: remove stray comment
* test: rename outdated test
* refactor: getter pattern for maintenance secret
* refactor: `createSpawnDuplexStream` -> `spawnDuplexStream`
* refactor: prefer `Object.assign`
* refactor: remove useless try {} block
* refactor: prefer `type Props`
refactor: prefer arrow function
* refactor: use luxon API for minutesAgo
* chore: remove change to gitignore
* refactor: prefer `type Props`
* refactor: remove async from onMount
* refactor: use luxon toRelative for relative time
* refactor: duplicate logic check
* chore: open api
* refactor: begin moving code into web//services
* refactor: don't use template string with $t
* test: use dialog role to match prompt
* refactor: split actions into flow/restore
* test: fix action value
* refactor: move more service calls into web//services
* chore: should void fn return
* chore: bump 2.4.0 to 2.5.0 in controller
* chore: bump 2.4.0 to 2.5.0 in controller
* refactor: use events for web//services
* chore: open api
* chore: open api
* refactor: don't await returned promise
* refactor: remove redundant check
* refactor: add `type: command` to actions
* refactor: split backup entries into own component
* refactor: split restore flow into separate components
* refactor(web): split BackupDelete event
* chore: stylings
* chore: stylings
* fix: don't log query failure on first boot
* feat: support pg_dumpall backups
* feat: display information about each backup
* chore: i18n
* feat: rollback to restore point on migrations failure
* feat: health check after restore
* chore: format
* refactor: split health check into separate function
* refactor: split health into repository
test: write tests covering rollbacks
* fix: omit 'health' requirement from createDbBackup
* test(e2e): rollback test
* fix: wrap text in backup entry
* fix: don't shrink context menu button
* fix: correct CREATE DB syntax for postgres
* test: rename backups generated by test
* feat: add filesize to backup response dto
* feat: restore list
* feat: ui work
* fix: e2e test
* fix: e2e test
* pr feedback
* pr feedback
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-01-20 15:22:28 +00:00
|
|
|
part 'api/database_backups_admin_api.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'api/deprecated_api.dart';
|
|
|
|
|
part 'api/download_api.dart';
|
|
|
|
|
part 'api/duplicates_api.dart';
|
|
|
|
|
part 'api/faces_api.dart';
|
|
|
|
|
part 'api/jobs_api.dart';
|
|
|
|
|
part 'api/libraries_api.dart';
|
2025-11-17 17:15:44 +00:00
|
|
|
part 'api/maintenance_admin_api.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'api/map_api.dart';
|
|
|
|
|
part 'api/memories_api.dart';
|
|
|
|
|
part 'api/notifications_api.dart';
|
|
|
|
|
part 'api/notifications_admin_api.dart';
|
|
|
|
|
part 'api/partners_api.dart';
|
|
|
|
|
part 'api/people_api.dart';
|
2025-11-14 14:05:05 -06:00
|
|
|
part 'api/plugins_api.dart';
|
2025-11-25 08:19:40 -05:00
|
|
|
part 'api/queues_api.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'api/search_api.dart';
|
|
|
|
|
part 'api/server_api.dart';
|
|
|
|
|
part 'api/sessions_api.dart';
|
|
|
|
|
part 'api/shared_links_api.dart';
|
|
|
|
|
part 'api/stacks_api.dart';
|
|
|
|
|
part 'api/sync_api.dart';
|
|
|
|
|
part 'api/system_config_api.dart';
|
|
|
|
|
part 'api/system_metadata_api.dart';
|
|
|
|
|
part 'api/tags_api.dart';
|
|
|
|
|
part 'api/timeline_api.dart';
|
|
|
|
|
part 'api/trash_api.dart';
|
|
|
|
|
part 'api/users_api.dart';
|
|
|
|
|
part 'api/users_admin_api.dart';
|
2025-11-11 17:01:14 -05:00
|
|
|
part 'api/views_api.dart';
|
2025-11-14 14:05:05 -06:00
|
|
|
part 'api/workflows_api.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
|
|
|
|
|
part 'model/api_key_create_dto.dart';
|
|
|
|
|
part 'model/api_key_create_response_dto.dart';
|
|
|
|
|
part 'model/api_key_response_dto.dart';
|
|
|
|
|
part 'model/api_key_update_dto.dart';
|
|
|
|
|
part 'model/activity_create_dto.dart';
|
|
|
|
|
part 'model/activity_response_dto.dart';
|
|
|
|
|
part 'model/activity_statistics_response_dto.dart';
|
|
|
|
|
part 'model/add_users_dto.dart';
|
|
|
|
|
part 'model/admin_onboarding_update_dto.dart';
|
|
|
|
|
part 'model/album_response_dto.dart';
|
|
|
|
|
part 'model/album_statistics_response_dto.dart';
|
|
|
|
|
part 'model/album_user_add_dto.dart';
|
|
|
|
|
part 'model/album_user_create_dto.dart';
|
|
|
|
|
part 'model/album_user_response_dto.dart';
|
|
|
|
|
part 'model/album_user_role.dart';
|
|
|
|
|
part 'model/albums_add_assets_dto.dart';
|
|
|
|
|
part 'model/albums_add_assets_response_dto.dart';
|
|
|
|
|
part 'model/albums_response.dart';
|
|
|
|
|
part 'model/albums_update.dart';
|
|
|
|
|
part 'model/asset_bulk_delete_dto.dart';
|
|
|
|
|
part 'model/asset_bulk_update_dto.dart';
|
|
|
|
|
part 'model/asset_bulk_upload_check_dto.dart';
|
|
|
|
|
part 'model/asset_bulk_upload_check_item.dart';
|
|
|
|
|
part 'model/asset_bulk_upload_check_response_dto.dart';
|
|
|
|
|
part 'model/asset_bulk_upload_check_result.dart';
|
2025-10-29 14:43:47 +01:00
|
|
|
part 'model/asset_copy_dto.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/asset_delta_sync_dto.dart';
|
|
|
|
|
part 'model/asset_delta_sync_response_dto.dart';
|
2026-01-09 17:59:52 -05:00
|
|
|
part 'model/asset_edit_action.dart';
|
2026-02-23 14:57:57 -06:00
|
|
|
part 'model/asset_edit_action_item_dto.dart';
|
|
|
|
|
part 'model/asset_edit_action_item_dto_parameters.dart';
|
|
|
|
|
part 'model/asset_edit_action_item_response_dto.dart';
|
|
|
|
|
part 'model/asset_edits_create_dto.dart';
|
|
|
|
|
part 'model/asset_edits_response_dto.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/asset_face_create_dto.dart';
|
|
|
|
|
part 'model/asset_face_delete_dto.dart';
|
|
|
|
|
part 'model/asset_face_response_dto.dart';
|
|
|
|
|
part 'model/asset_face_update_dto.dart';
|
|
|
|
|
part 'model/asset_face_update_item.dart';
|
|
|
|
|
part 'model/asset_face_without_person_response_dto.dart';
|
|
|
|
|
part 'model/asset_full_sync_dto.dart';
|
2026-04-14 23:39:03 +02:00
|
|
|
part 'model/asset_id_error_reason.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/asset_ids_dto.dart';
|
|
|
|
|
part 'model/asset_ids_response_dto.dart';
|
|
|
|
|
part 'model/asset_job_name.dart';
|
|
|
|
|
part 'model/asset_jobs_dto.dart';
|
|
|
|
|
part 'model/asset_media_response_dto.dart';
|
|
|
|
|
part 'model/asset_media_size.dart';
|
|
|
|
|
part 'model/asset_media_status.dart';
|
2026-01-08 14:52:16 -05:00
|
|
|
part 'model/asset_metadata_bulk_delete_dto.dart';
|
|
|
|
|
part 'model/asset_metadata_bulk_delete_item_dto.dart';
|
|
|
|
|
part 'model/asset_metadata_bulk_response_dto.dart';
|
|
|
|
|
part 'model/asset_metadata_bulk_upsert_dto.dart';
|
|
|
|
|
part 'model/asset_metadata_bulk_upsert_item_dto.dart';
|
2025-08-27 14:31:23 -04:00
|
|
|
part 'model/asset_metadata_response_dto.dart';
|
|
|
|
|
part 'model/asset_metadata_upsert_dto.dart';
|
|
|
|
|
part 'model/asset_metadata_upsert_item_dto.dart';
|
2025-10-28 15:57:03 -05:00
|
|
|
part 'model/asset_ocr_response_dto.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/asset_order.dart';
|
2026-04-14 23:39:03 +02:00
|
|
|
part 'model/asset_reject_reason.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/asset_response_dto.dart';
|
|
|
|
|
part 'model/asset_stack_response_dto.dart';
|
|
|
|
|
part 'model/asset_stats_response_dto.dart';
|
|
|
|
|
part 'model/asset_type_enum.dart';
|
2026-04-14 23:39:03 +02:00
|
|
|
part 'model/asset_upload_action.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/asset_visibility.dart';
|
|
|
|
|
part 'model/audio_codec.dart';
|
|
|
|
|
part 'model/auth_status_response_dto.dart';
|
|
|
|
|
part 'model/avatar_update.dart';
|
|
|
|
|
part 'model/bulk_id_error_reason.dart';
|
|
|
|
|
part 'model/bulk_id_response_dto.dart';
|
|
|
|
|
part 'model/bulk_ids_dto.dart';
|
|
|
|
|
part 'model/clip_config.dart';
|
|
|
|
|
part 'model/cq_mode.dart';
|
|
|
|
|
part 'model/cast_response.dart';
|
|
|
|
|
part 'model/cast_update.dart';
|
|
|
|
|
part 'model/change_password_dto.dart';
|
|
|
|
|
part 'model/check_existing_assets_dto.dart';
|
|
|
|
|
part 'model/check_existing_assets_response_dto.dart';
|
|
|
|
|
part 'model/colorspace.dart';
|
feat(album): show per-user contributions in shared albums (#21740)
* feat: show per-user contribution counts on shared albums
Add API support and UI display for per-user asset contribution
counts on shared albums:
- server: add ContributorCountResponseDto and repository method to
aggregate counts per user (excluding deleted assets), expose via
album response only when shared and counts > 0
- web: display contributor counts in Album Users modal next to each
member’s role
This helps users understand participation levels in shared albums.
* Add ContributorCountResponseDto and expose contributorCounts
on AlbumResponseDto in OpenAPI spec. Regenerate TypeScript SDK
and mobile OpenAPI clients to include new types.
No breaking changes; fields are additive.
* fix: shrink age view to fit and not overflow (#22405)
Co-authored-by: Alex <alex.tran1502@gmail.com>
* chore: post release tasks (#22587)
* chore: clean auth-user entity on reset (#22583)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* fix: mitigate database lock scenario when running full sync in splash screen page (#22608)
* fix: improve sync backup error indicator (#22527)
* fix: improve sync indicator error
* prefer backup disabled icon before error
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* fix: bottom navigation bar overlay sheet info (#22610)
* fix: respect storage indicator setting (#22596)
* fix: respect storage indicator size setting
* remove black bar on the bottom of the setting scaffold page
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* fix: do not run multiple engines on cold startup (#22518)
fix: do not run multiple engines on app startup
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* fix: album selector in favorite view (#22612)
* chore(web): update translations (#22486)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ar/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/az/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/bg/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ca/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/cs/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/da/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/de/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/el/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/es/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/he/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hu/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/it/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/kn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ko/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ml/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ro/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ru/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ta/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/tr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_SIMPLIFIED/
Translation: Immich/immich
Co-authored-by: Arthur Bols <arthur@bols.dev>
Co-authored-by: Ben Kim <benkim1129@gmail.com>
Co-authored-by: César Gómez <cegomez@gmail.com>
Co-authored-by: DR <weblate-kavita.snowflake668@slmail.me>
Co-authored-by: DevServs <bonov@mail.ru>
Co-authored-by: Emil Friis Osmann <Emilfriisosmann@gmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Godwin T <godwintgn@protonmail.com>
Co-authored-by: Hristo T <hristotarnev@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: KecskeTech <teonyitas@gmail.com>
Co-authored-by: Kiril Panayotov <eccyboo@protonmail.com>
Co-authored-by: Liviu Roman <contact@liviuroman.com>
Co-authored-by: Lorenzo <artale.lorenzo@outlook.it>
Co-authored-by: Marcelo Popper Costa <marcelo_popper@hotmail.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Miryusif Rahimov <miryusifrahimov@gmail.com>
Co-authored-by: Msaood <msaood@msaood.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Pedro Vendeira <vendeira.pedro@gmail.com>
Co-authored-by: PontusÖsterlindh <pontus@osterlindh.com>
Co-authored-by: Rahees <ahdrahees.dev@gmail.com>
Co-authored-by: Sandeep R <sandeep1891995@gmail.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: TV Box <realceday.tvbox@gmail.com>
Co-authored-by: Tino Altmann <usinggrant@hotmail.de>
Co-authored-by: User 123456789 <user123456789@users.noreply.hosted.weblate.org>
Co-authored-by: Vegard Fladby <vegard@fladby.org>
Co-authored-by: anton garcias <isaga.percompartir@gmail.com>
Co-authored-by: chamdim <chamdim@protonmail.com>
Co-authored-by: longlarry <weblate.gm@tuta.io>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: swever <swever@users.noreply.hosted.weblate.org>
Co-authored-by: தமிழ்நேரம் <tamilneram247@gmail.com>
Co-authored-by: 안세훈 <on9686@gmail.com>
* chore: version v2.0.1
* fix(docs): link to immich docs does not lead correctly to docs (#22687)
* fix(server): fix chunking Postgres query parameters (#22684)
* feat(server): improve checkAlbumAccess query performance (#22467)
* Fix slow SQL query in checkAlbumAccess caused by the array overlap operator &&
* Update access.repository.sql
* Rewrite the query to pass assetIds once as a single array parameter
* chore: mark VSCode tasks as background tasks (#22631)
VSCode expect tasks that aren't marked as background tasks to finish eventually. That's not how a dev-server is supposed to work, we expect it to run for basically infinite time.
By marking those tasks as background tasks, VSCode stops showing the infinite loading spinner on those processes.
* fix(ml): Resolve IPv6 startup crash and healthcheck failure (#22387)
* fix(ml): Resolve IPv6 startup crash and healthcheck failure
Fixes #13782
* fix(ml): updated the fix to use the std lib
* Apply code formatting to __main__.py
* fix(server): override reserved color metadata for video thumbnails (#22348)
override reserved metadata
* fix(mobile): trash description cut off (#22662)
* fix(mobile): empty album description does not save (#22649)
* fix(mobile): video player using ref after disposal (#21843)
check if disposed
* docs: add job order diagram (#22673)
* docs: add job order diagram
* wording
---------
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
* fix: missing responsive calculation in UserPageLayout (#22455)
* fix: use full-size image for non-web-compatible panoramas (#20359)
* fix(web): use full-size image for non-web-compatible panoramas
* always generate full-size image for panoramas
* add unit test
* fix formatting
---------
Co-authored-by: gergo= <gergo@pitty.hu>
* chore: update cli docs to pnpm (#22702)
update cli docs to pnpm
* chore(web): upgrade ESLint and plugins (#22495)
* chore(web): upgrade ESLint and plugins, simplify linting configuration
- Update eslint from ^9.18.0 to ^9.36.0
- Update eslint plugins:
- eslint-plugin-svelte: ^3.9.0 → ^3.12.4
- eslint-plugin-unicorn: ^60.0.0 → ^61.0.2
- svelte-eslint-parser: ^1.2.0 → ^1.3.3
- typescript-eslint: ^8.28.0 → ^8.45.0
- Remove eslint-p dependency in favor of native eslint concurrency
- Add unicorn/no-array-sort rule exception
- Update linting scripts to use eslint's native --concurrency flag
- Update Makefile and mise.toml to reflect simplified lint commands
- Update GitHub Actions workflow to use standard pnpm lint command
* pnpm dedupe
---------
Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com>
* fix(web): do not notify on patch releases (#22591)
* chore: post release tasks (#22616)
* fix: hide view in timeline button on local timeline (#22713)
* chore(server): support vectorchord 0.5.x (#21602)
Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
* fix: Fix issue fail to download iOS live photos (#22708)
Co-authored-by: bwees <brandonwees@gmail.com>
* fix(docs): Remove immich_remove_offline_files as no longer functional (#21774)
Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
Co-authored-by: Brandon Wees <brandonwees@gmail.com>
* fix(mobile): closing editor goes back to main page (#22647)
Co-authored-by: bwees <brandonwees@gmail.com>
* docs: update TrueNAS migration instructions (#22463)
Co-authored-by: bo0tzz <git@bo0tzz.me>
Co-authored-by: Nicholas Flamy <30300649+NicholasFlamy@users.noreply.github.com>
* docs: update Synology install guide (#21996)
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
* fix: improve the selected sidebar item text color in dark mode (#22640)
* chore(deps): update redis:6.2-alpine docker digest to 2185e74 (#22718)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* chore: update devcontainers for trixie, devenv changes (#22194)
* fix(deps): update dependency device_info_plus to v12 (#22724)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* chore(deps): update dependency flutter to v3.35.5 (#22720)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* chore(deps): update github-actions (#22721)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* fix: --no-git-checks on pnpm publish (#22715)
* fix: --no-git-checks on sdk publish
* fix: --no-git-checks on cli publish
* refactor(web): Clarify property names in Timeline and Scrubber (#22265)
refactor(web): Clarify property names in Timeline and Scrubber
Renamed properties across Timeline/Scrubber components for clarity:
- scrubOverallPercent → timelineScrollPercent
- scrubberMonthPercent → viewportTopMonthScrollPercent
- scrubberMonth → viewportTopMonth
- leadout → isInLeadOutSection
Additional changes:
- Updated ScrubberListener signature to accept object parameter
- Added detailed JSDoc comments for all Scrubber props
- Fixed callback invocations to use new object syntax
- Aligned Timeline's local state variables with Scrubber prop names
* fix: promote to foreground service before starting engine (#22517)
fix: show notification from native
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* refactor(web): extract timeline keyboard actions into separate component (#22266)
refactor(web): extract timeline keyboard actions into separate component
Extracts keyboard shortcuts and related functionality from Timeline component into a dedicated TimelineKeyboardActions component for better separation of concerns and maintainability.
* feat: make skeleton title optional (#22396)
feat: skeleton title is optional
feat: skeleton title optional
* refactor(web): extract asset viewer logic from Timeline into TimelineAssetViewer component (#22268)
refactor(web): extract asset viewer logic from Timeline into TimelineAssetViewer component
- Extracted asset viewer navigation and action handling logic from Timeline.svelte into a dedicated TimelineAssetViewer component
- Reduces Timeline.svelte complexity by ~150 lines and improves separation of concerns
- No functional changes - purely a refactoring to improve code organization
## Changes
- Created new TimelineAssetViewer.svelte component containing all asset viewer-related logic
- Moved handlePrevious, handleNext, handleRandom, handleClose, handlePreAction, and handleAction methods
- Timeline.svelte now only passes required props to the new component
- Maintained all existing functionality including navigation, asset actions, and stack management
* chore: track full actions/cache version in comment (#22359)
* fix(ml): ipv6 check (#22735)
* chore(deps): cache pnpm dependencies in prod build (#22555)
* cache pnpm dependencies
use different ids to be safe
unnecessary lines
* use buildcache folder
* chore: use isar immich fork (#22738)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* fix: bottom sheet blank with local assets that have remote counterparts (#22743)
* chore(deps): update dependency @types/node to ^22.18.8 (#22719)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* chore(deps): update dependency nodemailer to v7.0.7 [security] (#22740)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* fix(deps): update dependency connectivity_plus to v7 (#22723)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* chore: use hosted isar flutter libs (#22757)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* fix: skip local only assets in move to lock action (#22728)
* fix:prefer trashing to deletions
* skip local only assets in move to lock action
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* fix: brief flashing when swiping from video (#22187)
* fix(web): Uniform random distribution during shuffle (#19902)
feat: better random distribution
* fix: persist search page scroll offset between rebuilds (#22733)
fix: persist search scroll between rebuilds
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* docs: add some external library notes (#22776)
* feat(web): seconds and milliseconds in timestamps (#20337)
* fix(web): seconds in timestamps
* changed date-input step to provide millisecond precision
* feat(cli): add debug development config (#22712)
* add debug and change ts-node with tsx
* update pr changes
* update pnpm-lock
* remove ts-node from readme
* typo
* resolve conflicts
* remove tsx
* launch from dist
* add preLaunchTask
* update readme
* undo main in package.json
* remove typo
* Apply suggestion from @bwees
Co-authored-by: Brandon Wees <brandonwees@gmail.com>
* revert pnpm-lock changes
* @jrasm91 suggestions
* chore: run node with source maps
---------
Co-authored-by: Jason Rasmussen <jason@rasm.me>
Co-authored-by: Brandon Wees <brandonwees@gmail.com>
* docs: add Immich-Stack to community-projects (#21563)
docs: add Immich Stack community project
Co-authored-by: Jason Rasmussen <jason@rasm.me>
* feat(web): Add upload to stack action (#19842)
* feat(web): Add upload to stack action
* Event handling and translation
* Update asset viewer instead
* lint, improve upload return type
* Add suggestions from code review
* Resolve merge conflicts
* Apply suggestions from code review
* feat(server): add `immich.users.total` metric (#21780)
* Add immich.users.total metric
* Fix tests & one lint error
* Lint
* Fix SQL Schema checks
* Fix nit
* Use workers argument in OnEvent hook and remove condition from method body
* feat(docs): add zh_TW Traditional Chinese version README (#22703)
docs: add zh_TW Traditional Chinese version README
* chore: ignore renovate major updates for postgres image (#22764)
* fix: remove postgres exclude datasource match (#22811)
* chore(deps): update github-actions (major) (#22810)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* fix: revert terragrunt-action bump (#22812)
* chore: don't enforce runes (#22813)
* chore(deps): update base-image to v202510092146 (major) (#22818)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* fix(deps): update typescript-projects (#22809)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
* fix: only cast to device if the asset is a RemoteAsset (#22805)
* feat: (perf) remove scroll compensation (#22837)
* fix(deps): update dependency happy-dom to v20 [security] (#22846)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* chore(deps): update github-actions (#22793)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* fix: various typos (#22867)
Found via `codespell -q 3 -S "*.svg,./i18n,./docs/package-lock.json,./readme_i18n,./mobile/assets/i18n" -L afterall,devlop,finaly,inout,nd,optin,renderd,sade`
* fix: ios skip posting hash response after detached from engine (#22695)
* skip posting message after detached from engine
* review changes
* cancel plugin before destroying engine
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* chore(deps): update ghcr.io/immich-app/postgres:14-vectorchord0.3.0 docker digest to 6f3e9d2 (#22912)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* chore(deps): update ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0 docker digest to bcf6335 (#22913)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* fix: re-add scroll compensation (efficiently) (#22848)
* fix: re-add scroll compensation (efficient)
* Rename showSkeleton to invisible. Adjust skeleton margins, invisible support.
* Fix faulty logic, simplify
* Calculate ratios and determine compensation strategy: height comp for above/partiality visible, month-scroll comp within a fully visible month.
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* fix: shared album control permissions (#22435)
* fix: shared album control permissions
* fix: properly display "add photos"
* fix: dont allow modification of album order
* fix: album title/description edit from app bar
* chore: code review changes
* chore: format translations
* chore: lintings
* fix: show dialog before delete local action (#22280)
* fix: show dialog on delete local action
# Conflicts:
# mobile/lib/repositories/asset_media.repository.dart
* button style
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* fix(deps): update dependency kysely-postgres-js to v3 (#22924)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* chore(deps): update redis:6.2-alpine docker digest to 77697a7 (#22915)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* fix(deps): update typescript-projects (#22918)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
* feat: local album events notification (#22817)
* feat: local album events notification
* pr feedback
* show number of unread notification
* chore: refactor show view in timeline button (#22894)
* chore: refactor show view in timeline button
This refactor includes changes to notify asset viewer about where an asset was shown from.
* chore: realized I could just pull from the timelineProvider instead of storing it in the asset viewer state
* chore: rename enum to TimelineOrigin and update members
* fix: update isOwner condition
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* chore(web): update translations (#22623)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ar/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/be/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/bn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ca/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/cs/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/da/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/de/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/el/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/es/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/et/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/gl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/he/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/id/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/it/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ja/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ka/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/mr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pa/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ro/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ru/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Latn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ta/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/tr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_SIMPLIFIED/
Translation: Immich/immich
Co-authored-by: Abhijeet Bonde <abhijeetbonde19@gmail.com>
Co-authored-by: Adam Uchmanowicz <auchmanowicz@gmail.com>
Co-authored-by: Adrian Hermida <adrian.hermida.baloira@gmail.com>
Co-authored-by: Aleksa Milošević <akimaki15@gmail.com>
Co-authored-by: Amin <amnsharif@gmail.com>
Co-authored-by: AndreiP28 <andreiprica28@gmail.com>
Co-authored-by: António Santos <antoniomsantos99@gmail.com>
Co-authored-by: Asger Mogensen <asgermog@gmail.com>
Co-authored-by: Christoph Auer <Christoph.Auer@pilsheim.de>
Co-authored-by: Denis Pacquier <denis.pacquier@gmail.com>
Co-authored-by: DevServs <bonov@mail.ru>
Co-authored-by: Eetu Mäenpää <me@eetumaenpaa.fi>
Co-authored-by: Felipe Garcia <garcia.o.felipe@gmail.com>
Co-authored-by: Filip Joković <filip@jokovic.dev>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <indrek.haav@hotmail.com>
Co-authored-by: Jason Song <songpeiheng@gmail.com>
Co-authored-by: Javier Villanueva García <jvg2203@gmail.com>
Co-authored-by: Jordy H <jordy@hoebergen.net>
Co-authored-by: Jorge Montejo <jorgemon.lopez@gmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Konstantinos D <kdemer@yahoo.com>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Liviu Roman <contact@liviuroman.com>
Co-authored-by: Lorenz Baum <LorenzBaum@gmx.de>
Co-authored-by: Lukas Konsin <lukaskonsin@proton.me>
Co-authored-by: Mandeep <mandeeps708@gmail.com>
Co-authored-by: Marc Casillas <mcasillassu@gmail.com>
Co-authored-by: Marcelo Popper Costa <marcelo_popper@hotmail.com>
Co-authored-by: MatijaThe245th <matija245matakovic@gmail.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Mees Frensel <meesfrensel@gmail.com>
Co-authored-by: Mirko <itzmirko@itzmirko.it>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Oleksandr Yurov <oyurov@icloud.com>
Co-authored-by: Orkun Sürel <orkunsurel@gmail.com>
Co-authored-by: Peter Dave Hello <hsu@peterdavehello.org>
Co-authored-by: Philipp Burndorfer <phi.bur@gmx.at>
Co-authored-by: Prasanth Baskar <bupdprasanth@gmail.com>
Co-authored-by: Roman Zhukov <Softver161@gmail.com>
Co-authored-by: Sayan Goswami <goswami.sayan47@gmail.com>
Co-authored-by: Sergey Katsubo <skatsubo@gmail.com>
Co-authored-by: Simon Bierwald <simon.bierwald@gmail.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: TV Box <realceday.tvbox@gmail.com>
Co-authored-by: Taiki M <vexingly-many-mace@duck.com>
Co-authored-by: Theodore Zhvania <zhvania@ted.ge>
Co-authored-by: Tim De Meyer <demeyer.tim@gmail.com>
Co-authored-by: User 123456789 <user123456789@users.noreply.hosted.weblate.org>
Co-authored-by: Valentino Harpa <valen.ginga@gmail.com>
Co-authored-by: Vegard Fladby <vegard@fladby.org>
Co-authored-by: Willem Schipper <git@willem.page>
Co-authored-by: Yago Raña Gayoso <yago.rana.gayoso@gmail.com>
Co-authored-by: Zurab Sajaia <vavalomi@hotmail.com>
Co-authored-by: albanobattistella <albanobattistella@gmail.com>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Co-authored-by: dark&white <darkwhite@users.noreply.hosted.weblate.org>
Co-authored-by: eav5jhl0 <eav5jhl0@users.noreply.hosted.weblate.org>
Co-authored-by: findussoft <sella_violett_8i@icloud.com>
Co-authored-by: kiwinho <kiwicaja@gmail.com>
Co-authored-by: millallo <millallo@tiscali.it>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: rokon001 <rnacc3579@gmail.com>
Co-authored-by: vaibhav kumar <catvaku@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: Максим Горпиніч <gorpinicmaksim0@gmail.com>
Co-authored-by: தமிழ்நேரம் <tamilneram247@gmail.com>
* chore: version v2.1.0
* refactor
* question marks are the enemy
* refactor count map
* update readme
* e2e
* count of 0 is impossible
* useless async
---------
Co-authored-by: Chaoscontrol <6642238+Chaoscontrol@users.noreply.github.com>
Co-authored-by: Brandon Wees <brandonwees@gmail.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: shenlong <139912620+shenlong-tanwen@users.noreply.github.com>
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Weblate (bot) <hosted@weblate.org>
Co-authored-by: Arthur Bols <arthur@bols.dev>
Co-authored-by: Ben Kim <benkim1129@gmail.com>
Co-authored-by: César Gómez <cegomez@gmail.com>
Co-authored-by: DR <weblate-kavita.snowflake668@slmail.me>
Co-authored-by: DevServs <bonov@mail.ru>
Co-authored-by: Emil Friis Osmann <Emilfriisosmann@gmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Godwin T <godwintgn@protonmail.com>
Co-authored-by: Hristo T <hristotarnev@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: KecskeTech <teonyitas@gmail.com>
Co-authored-by: Kiril Panayotov <eccyboo@protonmail.com>
Co-authored-by: Liviu Roman <contact@liviuroman.com>
Co-authored-by: Lorenzo <artale.lorenzo@outlook.it>
Co-authored-by: Marcelo Popper Costa <marcelo_popper@hotmail.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Miryusif Rahimov <miryusifrahimov@gmail.com>
Co-authored-by: Msaood <msaood@msaood.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Pedro Vendeira <vendeira.pedro@gmail.com>
Co-authored-by: PontusÖsterlindh <pontus@osterlindh.com>
Co-authored-by: Rahees <ahdrahees.dev@gmail.com>
Co-authored-by: Sandeep R <sandeep1891995@gmail.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: TV Box <realceday.tvbox@gmail.com>
Co-authored-by: Tino Altmann <usinggrant@hotmail.de>
Co-authored-by: User 123456789 <user123456789@users.noreply.hosted.weblate.org>
Co-authored-by: Vegard Fladby <vegard@fladby.org>
Co-authored-by: anton garcias <isaga.percompartir@gmail.com>
Co-authored-by: chamdim <chamdim@protonmail.com>
Co-authored-by: longlarry <weblate.gm@tuta.io>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: swever <swever@users.noreply.hosted.weblate.org>
Co-authored-by: தமிழ்நேரம் <tamilneram247@gmail.com>
Co-authored-by: 안세훈 <on9686@gmail.com>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Xavier Dupuis <xavier0978@hotmail.fr>
Co-authored-by: Sergey Katsubo <skatsubo@gmail.com>
Co-authored-by: Adrian Jost <22987140+adrianjost@users.noreply.github.com>
Co-authored-by: Cokodayo <78474654+CaptainJack2491@users.noreply.github.com>
Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
Co-authored-by: Yaros <thedj.launchpadder.dmx512@gmail.com>
Co-authored-by: USBAkimbo <71508071+USBAkimbo@users.noreply.github.com>
Co-authored-by: Min Idzelis <min123@gmail.com>
Co-authored-by: grgergo <gergo_g@proton.me>
Co-authored-by: gergo= <gergo@pitty.hu>
Co-authored-by: Jorge Montejo <jorgemon.lopez@gmail.com>
Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
Co-authored-by: Diogo Correia <me@diogotc.com>
Co-authored-by: CuberL <liaoziyue10@gmail.com>
Co-authored-by: Xantin <56741168+Xiticks@users.noreply.github.com>
Co-authored-by: bo0tzz <git@bo0tzz.me>
Co-authored-by: Nicholas Flamy <30300649+NicholasFlamy@users.noreply.github.com>
Co-authored-by: TDR001 <redp50@outlook.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Saschl <19493808+Saschl@users.noreply.github.com>
Co-authored-by: Pascal Sommer <Pascal-So@users.noreply.github.com>
Co-authored-by: kaziu687 <kaziu687@gmail.com>
Co-authored-by: Qhilm <3350433+Qhilm@users.noreply.github.com>
Co-authored-by: Sebastian Schneider <sese.tailor@gmx.net>
Co-authored-by: Tushar Harsora <tusharharsora95@gmail.com>
Co-authored-by: Peter Dave Hello <hsu@peterdavehello.org>
Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
Co-authored-by: luzpaz <luzpaz@users.noreply.github.com>
Co-authored-by: Abhijeet Bonde <abhijeetbonde19@gmail.com>
Co-authored-by: Adam Uchmanowicz <auchmanowicz@gmail.com>
Co-authored-by: Adrian Hermida <adrian.hermida.baloira@gmail.com>
Co-authored-by: Aleksa Milošević <akimaki15@gmail.com>
Co-authored-by: Amin <amnsharif@gmail.com>
Co-authored-by: AndreiP28 <andreiprica28@gmail.com>
Co-authored-by: António Santos <antoniomsantos99@gmail.com>
Co-authored-by: Asger Mogensen <asgermog@gmail.com>
Co-authored-by: Christoph Auer <Christoph.Auer@pilsheim.de>
Co-authored-by: Denis Pacquier <denis.pacquier@gmail.com>
Co-authored-by: Eetu Mäenpää <me@eetumaenpaa.fi>
Co-authored-by: Felipe Garcia <garcia.o.felipe@gmail.com>
Co-authored-by: Filip Joković <filip@jokovic.dev>
Co-authored-by: Indrek Haav <indrek.haav@hotmail.com>
Co-authored-by: Jason Song <songpeiheng@gmail.com>
Co-authored-by: Javier Villanueva García <jvg2203@gmail.com>
Co-authored-by: Jordy H <jordy@hoebergen.net>
Co-authored-by: Konstantinos D <kdemer@yahoo.com>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Lorenz Baum <LorenzBaum@gmx.de>
Co-authored-by: Lukas Konsin <lukaskonsin@proton.me>
Co-authored-by: Mandeep <mandeeps708@gmail.com>
Co-authored-by: Marc Casillas <mcasillassu@gmail.com>
Co-authored-by: MatijaThe245th <matija245matakovic@gmail.com>
Co-authored-by: Mees Frensel <meesfrensel@gmail.com>
Co-authored-by: Mirko <itzmirko@itzmirko.it>
Co-authored-by: Oleksandr Yurov <oyurov@icloud.com>
Co-authored-by: Orkun Sürel <orkunsurel@gmail.com>
Co-authored-by: Philipp Burndorfer <phi.bur@gmx.at>
Co-authored-by: Prasanth Baskar <bupdprasanth@gmail.com>
Co-authored-by: Roman Zhukov <Softver161@gmail.com>
Co-authored-by: Sayan Goswami <goswami.sayan47@gmail.com>
Co-authored-by: Simon Bierwald <simon.bierwald@gmail.com>
Co-authored-by: Taiki M <vexingly-many-mace@duck.com>
Co-authored-by: Theodore Zhvania <zhvania@ted.ge>
Co-authored-by: Tim De Meyer <demeyer.tim@gmail.com>
Co-authored-by: Valentino Harpa <valen.ginga@gmail.com>
Co-authored-by: Willem Schipper <git@willem.page>
Co-authored-by: Yago Raña Gayoso <yago.rana.gayoso@gmail.com>
Co-authored-by: Zurab Sajaia <vavalomi@hotmail.com>
Co-authored-by: albanobattistella <albanobattistella@gmail.com>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Co-authored-by: dark&white <darkwhite@users.noreply.hosted.weblate.org>
Co-authored-by: eav5jhl0 <eav5jhl0@users.noreply.hosted.weblate.org>
Co-authored-by: findussoft <sella_violett_8i@icloud.com>
Co-authored-by: kiwinho <kiwicaja@gmail.com>
Co-authored-by: millallo <millallo@tiscali.it>
Co-authored-by: rokon001 <rnacc3579@gmail.com>
Co-authored-by: vaibhav kumar <catvaku@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: Максим Горпиніч <gorpinicmaksim0@gmail.com>
2025-10-14 22:34:20 +01:00
|
|
|
part 'model/contributor_count_response_dto.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/create_album_dto.dart';
|
|
|
|
|
part 'model/create_library_dto.dart';
|
|
|
|
|
part 'model/create_profile_image_response_dto.dart';
|
2026-01-09 17:59:52 -05:00
|
|
|
part 'model/crop_parameters.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/database_backup_config.dart';
|
feat: restore database backups (#23978)
* feat: ProcessRepository#createSpawnDuplexStream
* test: write tests for ProcessRepository#createSpawnDuplexStream
* feat: StorageRepository#createGzip,createGunzip,createPlainReadStream
* feat: backups util (args, create, restore, progress)
* feat: wait on maintenance operation lock on boot
* chore: use backup util from backup.service.ts
test: update backup.service.ts tests with new util
* feat: list/delete backups (maintenance services)
* chore: open api
fix: missing action in cli.service.ts
* chore: add missing repositories to MaintenanceModule
* refactor: move logSecret into module init
* feat: initialise StorageCore in maintenance mode
* feat: authenticate websocket requests in maintenance mode
* test: add mock for new storage fns
* feat: add MaintenanceEphemeralStateRepository
refactor: cache the secret in memory
* test: update service worker tests
* feat: add external maintenance mode status
* feat: synchronised status, restore db action
* test: backup restore service tests
* refactor: DRY end maintenance
* feat: list and delete backup routes
* feat: start action on boot
* fix: should set status on restore end
* refactor: add maintenanceStore to hold writables
* feat: sync status to web app
* feat: web impl.
* test: various utils for testings
* test: web e2e tests
* test: e2e maintenance spec
* test: update cli spec
* chore: e2e lint
* chore: lint fixes
* chore: lint fixes
* feat: start restore flow route
* test: update e2e tests
* chore: remove neon lights on maintenance action pages
* fix: use 'startRestoreFlow' on onboarding page
* chore: ignore any library folder in `docker/`
* fix: load status on boot
* feat: upload backups
* refactor: permit any .sql(.gz) to be listed/restored
* feat: download backups from list
* fix: permit uploading just .sql files
* feat: restore just .sql files
* fix: don't show backups list if logged out
* feat: system integrity check in restore flow
* test: not providing failed backups in API anymore
* test: util should also not try to use failedBackups
* fix: actually assign inputStream
* test: correct test backup prep.
* fix: ensure task is defined to show error
* test: fix docker cp command
* test: update e2e web spec to select next button
* test: update e2e api tests
* test: refactor timeouts
* chore: remove `showDelete` from maint. settings
* chore: lint
* chore: lint
* fix: make sure backups are correctly sorted for clean up
* test: update service spec
* test: adjust e2e timeout
* test: increase web timeouts for ci
* chore: move gitignore changes
* chore: additional filename validation
* refactor: better typings for integrity API
* feat: higher accuracy progress tracking
* chore: delay lock retry
* refactor: remove old maintenance settings
* refactor: clean up tailwind classes
* refactor: use while loop rather than recursive calls
* test: update service specs
* chore: check canParse too
* chore: lint
* fix: logic error causing infinite loop
* refactor: use <ProgressBar /> from ui library
* fix: create or overwrite file
* chore: i18n pass, update progress bar
* fix: wrong translation string
* chore: update colour variables
* test: update web test for new maint. page
* chore: format, fix key
* test: update tests to be more linter complaint & use new routines
* chore: update onClick -> onAction, title -> breadcrumbs
* fix: use wrench icon in admin settings sidebar
* chore: add translation strings to accordion
* chore: lint
* refactor: move maintenance worker init into service
* refactor: `maintenanceStatus` -> `getMaintenanceStatus`
refactor: `integrityCheck` -> `detectPriorInstall`
chore: add `v2.4.0` version
refactor: `/backups/list` -> `/backups`
refactor: use sendFile in download route
refactor: use separate backups permissions
chore: correct descriptions
refactor: permit handler that doesn't return promise for sendfile
* refactor: move status impl into service
refactor: add active flag to maintenance status
* refactor: split into database backup controller
* test: split api e2e tests and passing
* fix: move end button into authed default maint page
* fix: also show in restore flow
* fix: import getMaintenanceStatus
* test: split web e2e tests
* refactor: ensure detect install is consistently named
* chore: ensure admin for detect install while out of maint.
* refactor: remove state repository
* test: update maint. worker service spec
* test: split backup service spec
* refactor: rename db backup routes
* refactor: instead of param, allow bulk backup deletion
* test: update sdk use in e2e test
* test: correct deleteBackup call
* fix: correct type for serverinstall response dto
* chore: validate filename for deletion
* test: wip
* test: backups no longer take path param
* refactor: scope util to database-backups instead of backups
* fix: update worker controller with new route
* chore: use new admin page actions
* chore: remove stray comment
* test: rename outdated test
* refactor: getter pattern for maintenance secret
* refactor: `createSpawnDuplexStream` -> `spawnDuplexStream`
* refactor: prefer `Object.assign`
* refactor: remove useless try {} block
* refactor: prefer `type Props`
refactor: prefer arrow function
* refactor: use luxon API for minutesAgo
* chore: remove change to gitignore
* refactor: prefer `type Props`
* refactor: remove async from onMount
* refactor: use luxon toRelative for relative time
* refactor: duplicate logic check
* chore: open api
* refactor: begin moving code into web//services
* refactor: don't use template string with $t
* test: use dialog role to match prompt
* refactor: split actions into flow/restore
* test: fix action value
* refactor: move more service calls into web//services
* chore: should void fn return
* chore: bump 2.4.0 to 2.5.0 in controller
* chore: bump 2.4.0 to 2.5.0 in controller
* refactor: use events for web//services
* chore: open api
* chore: open api
* refactor: don't await returned promise
* refactor: remove redundant check
* refactor: add `type: command` to actions
* refactor: split backup entries into own component
* refactor: split restore flow into separate components
* refactor(web): split BackupDelete event
* chore: stylings
* chore: stylings
* fix: don't log query failure on first boot
* feat: support pg_dumpall backups
* feat: display information about each backup
* chore: i18n
* feat: rollback to restore point on migrations failure
* feat: health check after restore
* chore: format
* refactor: split health check into separate function
* refactor: split health into repository
test: write tests covering rollbacks
* fix: omit 'health' requirement from createDbBackup
* test(e2e): rollback test
* fix: wrap text in backup entry
* fix: don't shrink context menu button
* fix: correct CREATE DB syntax for postgres
* test: rename backups generated by test
* feat: add filesize to backup response dto
* feat: restore list
* feat: ui work
* fix: e2e test
* fix: e2e test
* pr feedback
* pr feedback
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-01-20 15:22:28 +00:00
|
|
|
part 'model/database_backup_delete_dto.dart';
|
|
|
|
|
part 'model/database_backup_dto.dart';
|
|
|
|
|
part 'model/database_backup_list_response_dto.dart';
|
2026-02-18 22:47:45 +01:00
|
|
|
part 'model/download_archive_dto.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/download_archive_info.dart';
|
|
|
|
|
part 'model/download_info_dto.dart';
|
|
|
|
|
part 'model/download_response.dart';
|
|
|
|
|
part 'model/download_response_dto.dart';
|
|
|
|
|
part 'model/download_update.dart';
|
|
|
|
|
part 'model/duplicate_detection_config.dart';
|
feat(server): resolve duplicates (#25316)
* feat(web): Synchronize information from deduplicated images
* Added new settings menu to the the deduplication tab.
* The toggable options in the settings are synchronization of: albums, favorites, ratings, description, visibility and location.
* When synchronizing the albums, the resolved images will be added to all albums of the duplicates.
* When synchronizing the favorite status, the resolved images will be marked as favorite, if at least one selectable image is marked as favorite.
* When synchronizing the ratings, the highest rating from the selectable images will be applied to the resolved image.
* When synchronizing the description, all descriptions from the selectable images will be merged into one description for the resolved image.
* When synchronizing the visibility, the most restrictive visibility setting from the selectable images will be applied to the resolved image.
* When synchronizing the location, if exactly one unique location exists among the selectable images, this location will be applied to the resolved image.
* There is no additional UI for these settings to keep the visual clutter minimal. The settings are applied automatically based on the user's preferences.
* Replace addAssetToAlbums with copyAsset
* fix linter
* feat(web): add duplicate sync fields and fix typo
* feat(web): add tag sync and enhance duplicate resolution
This update introduces tag synchronization for duplicate resolution,
ensuring all unique tag IDs from duplicates are applied to kept assets.
The visibility sync logic is updated to use a simplified ordering, as the hidden status items will never show up in a duplicate set.
Album synchronization now merges albums directly via addAssetsToAlbums; as the approach with copyAsset API endpoint was ineffiecient.
Description, rating, and location sync logic is improved for correctness.
and deduplication. i18n strings were added / updated.
* feat(server): move duplicate resolution to backend with sync and stacking
Moves duplicate metadata synchronization from frontend to backend, enabling robust
batch operations and proper validation. This is an improved refactor of PR #13851.
New endpoints:
- POST /duplicates/resolve - batch resolve with configurable metadata sync
- POST /duplicates/stack - create stacks from duplicate groups
- GET /duplicates - now includes suggestedKeepAssetIds based on file size and EXIF
Key changes:
- Move sync logic (albums, tags, favorites, ratings, descriptions, location, visibility) to server
- Add server-side metadata merge policies with proper conflict resolution
- Replace client-side resolution logic with new backend endpoints
- Add comprehensive E2E tests (70+ test cases) and unit tests
- Update OpenAPI specs and TypeScript SDK
No breaking changes - only additions to existing API.
* feat(preferences): enable all duplicate sync settings by default
* chore: clean up
* chore: clean up
* refactor: rename & clean up
* fix: preference upgrade
* chore: linting
* refactor(e2e): use updateAssets API for setAssetDuplicateId
* fix: visibility sync logic in duplicate resolution
* fix(duplicate): write description to exifUpdate
Previously the duplicate resolution populated assetUpdate.description even
though description belongs to exif info.
* fix(duplicate): remove redundant updateLockedColumns wrapper
updateAllExif already computes lockedProperties via distinctLocked
using Object.keys(options). The wrapper added a lockedProperties key
to the options object, causing the spurious string 'lockedProperties'
to be stored in the lockedProperties array.
* fix(duplicate): write merged tags to asset_exif to survive metadata re-extraction
During duplicate resolution, replaceAssetTags correctly wrote merged tag
IDs to the tag_asset table, but never updated asset_exif.tags or locked
the tags property. The subsequent SidecarWrite → AssetExtractMetadata
chain calls applyTagList, which destructively replaces tag_asset rows
with whatever is in asset_exif.tags — still the original per-asset tags,
not the merged set.
Write merged tag values to asset_exif.tags via updateAllExif (which also
locks the property via distinctLocked), and queue SidecarWrite when tags
change so they persist to the sidecar file.
* docs(duplicates): clarify location and tag sync behavior
* refactor(duplicate): remove sync settings, always sync all metadata on resolve
Remove DuplicateSyncSettingsDto and the per-field sync toggles
(albums, favorites, rating, description, visibility, location, tags).
Duplicate resolution now unconditionally syncs all metadata from
trashed assets to kept assets.
- Remove DuplicateSyncSettingsDto and settings field from DuplicateResolveDto
- Update DuplicateService to always run all sync logic without conditionals
- Delete DuplicateSettingsModal.svelte and settings gear button from UI
- Remove DuplicateSettings type and duplicateSettings persisted store
- Update unit and e2e tests to remove settings from resolve requests
* docs: update duplicates utility to reflect automatic metadata sync
* docs(web): replace duplicates info modal with link to documentation
* chore: clean up
* fix: add missing type cast to jsonAgg in duplicate repository getAll
* fix: skip persisting rating=0 in duplicate merge to avoid unnecessary sidecar write
---------
Co-authored-by: Toni <51962051+EinToni@users.noreply.github.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
2026-03-26 19:33:55 +01:00
|
|
|
part 'model/duplicate_resolve_dto.dart';
|
|
|
|
|
part 'model/duplicate_resolve_group_dto.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/duplicate_response_dto.dart';
|
|
|
|
|
part 'model/email_notifications_response.dart';
|
|
|
|
|
part 'model/email_notifications_update.dart';
|
|
|
|
|
part 'model/exif_response_dto.dart';
|
|
|
|
|
part 'model/face_dto.dart';
|
|
|
|
|
part 'model/facial_recognition_config.dart';
|
|
|
|
|
part 'model/folders_response.dart';
|
|
|
|
|
part 'model/folders_update.dart';
|
|
|
|
|
part 'model/image_format.dart';
|
|
|
|
|
part 'model/job_create_dto.dart';
|
2025-11-25 08:19:40 -05:00
|
|
|
part 'model/job_name.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/job_settings_dto.dart';
|
|
|
|
|
part 'model/library_response_dto.dart';
|
|
|
|
|
part 'model/library_stats_response_dto.dart';
|
|
|
|
|
part 'model/license_key_dto.dart';
|
|
|
|
|
part 'model/log_level.dart';
|
|
|
|
|
part 'model/login_credential_dto.dart';
|
|
|
|
|
part 'model/login_response_dto.dart';
|
|
|
|
|
part 'model/logout_response_dto.dart';
|
2025-09-19 12:18:42 -04:00
|
|
|
part 'model/machine_learning_availability_checks_dto.dart';
|
2025-11-17 17:15:44 +00:00
|
|
|
part 'model/maintenance_action.dart';
|
|
|
|
|
part 'model/maintenance_auth_dto.dart';
|
feat: restore database backups (#23978)
* feat: ProcessRepository#createSpawnDuplexStream
* test: write tests for ProcessRepository#createSpawnDuplexStream
* feat: StorageRepository#createGzip,createGunzip,createPlainReadStream
* feat: backups util (args, create, restore, progress)
* feat: wait on maintenance operation lock on boot
* chore: use backup util from backup.service.ts
test: update backup.service.ts tests with new util
* feat: list/delete backups (maintenance services)
* chore: open api
fix: missing action in cli.service.ts
* chore: add missing repositories to MaintenanceModule
* refactor: move logSecret into module init
* feat: initialise StorageCore in maintenance mode
* feat: authenticate websocket requests in maintenance mode
* test: add mock for new storage fns
* feat: add MaintenanceEphemeralStateRepository
refactor: cache the secret in memory
* test: update service worker tests
* feat: add external maintenance mode status
* feat: synchronised status, restore db action
* test: backup restore service tests
* refactor: DRY end maintenance
* feat: list and delete backup routes
* feat: start action on boot
* fix: should set status on restore end
* refactor: add maintenanceStore to hold writables
* feat: sync status to web app
* feat: web impl.
* test: various utils for testings
* test: web e2e tests
* test: e2e maintenance spec
* test: update cli spec
* chore: e2e lint
* chore: lint fixes
* chore: lint fixes
* feat: start restore flow route
* test: update e2e tests
* chore: remove neon lights on maintenance action pages
* fix: use 'startRestoreFlow' on onboarding page
* chore: ignore any library folder in `docker/`
* fix: load status on boot
* feat: upload backups
* refactor: permit any .sql(.gz) to be listed/restored
* feat: download backups from list
* fix: permit uploading just .sql files
* feat: restore just .sql files
* fix: don't show backups list if logged out
* feat: system integrity check in restore flow
* test: not providing failed backups in API anymore
* test: util should also not try to use failedBackups
* fix: actually assign inputStream
* test: correct test backup prep.
* fix: ensure task is defined to show error
* test: fix docker cp command
* test: update e2e web spec to select next button
* test: update e2e api tests
* test: refactor timeouts
* chore: remove `showDelete` from maint. settings
* chore: lint
* chore: lint
* fix: make sure backups are correctly sorted for clean up
* test: update service spec
* test: adjust e2e timeout
* test: increase web timeouts for ci
* chore: move gitignore changes
* chore: additional filename validation
* refactor: better typings for integrity API
* feat: higher accuracy progress tracking
* chore: delay lock retry
* refactor: remove old maintenance settings
* refactor: clean up tailwind classes
* refactor: use while loop rather than recursive calls
* test: update service specs
* chore: check canParse too
* chore: lint
* fix: logic error causing infinite loop
* refactor: use <ProgressBar /> from ui library
* fix: create or overwrite file
* chore: i18n pass, update progress bar
* fix: wrong translation string
* chore: update colour variables
* test: update web test for new maint. page
* chore: format, fix key
* test: update tests to be more linter complaint & use new routines
* chore: update onClick -> onAction, title -> breadcrumbs
* fix: use wrench icon in admin settings sidebar
* chore: add translation strings to accordion
* chore: lint
* refactor: move maintenance worker init into service
* refactor: `maintenanceStatus` -> `getMaintenanceStatus`
refactor: `integrityCheck` -> `detectPriorInstall`
chore: add `v2.4.0` version
refactor: `/backups/list` -> `/backups`
refactor: use sendFile in download route
refactor: use separate backups permissions
chore: correct descriptions
refactor: permit handler that doesn't return promise for sendfile
* refactor: move status impl into service
refactor: add active flag to maintenance status
* refactor: split into database backup controller
* test: split api e2e tests and passing
* fix: move end button into authed default maint page
* fix: also show in restore flow
* fix: import getMaintenanceStatus
* test: split web e2e tests
* refactor: ensure detect install is consistently named
* chore: ensure admin for detect install while out of maint.
* refactor: remove state repository
* test: update maint. worker service spec
* test: split backup service spec
* refactor: rename db backup routes
* refactor: instead of param, allow bulk backup deletion
* test: update sdk use in e2e test
* test: correct deleteBackup call
* fix: correct type for serverinstall response dto
* chore: validate filename for deletion
* test: wip
* test: backups no longer take path param
* refactor: scope util to database-backups instead of backups
* fix: update worker controller with new route
* chore: use new admin page actions
* chore: remove stray comment
* test: rename outdated test
* refactor: getter pattern for maintenance secret
* refactor: `createSpawnDuplexStream` -> `spawnDuplexStream`
* refactor: prefer `Object.assign`
* refactor: remove useless try {} block
* refactor: prefer `type Props`
refactor: prefer arrow function
* refactor: use luxon API for minutesAgo
* chore: remove change to gitignore
* refactor: prefer `type Props`
* refactor: remove async from onMount
* refactor: use luxon toRelative for relative time
* refactor: duplicate logic check
* chore: open api
* refactor: begin moving code into web//services
* refactor: don't use template string with $t
* test: use dialog role to match prompt
* refactor: split actions into flow/restore
* test: fix action value
* refactor: move more service calls into web//services
* chore: should void fn return
* chore: bump 2.4.0 to 2.5.0 in controller
* chore: bump 2.4.0 to 2.5.0 in controller
* refactor: use events for web//services
* chore: open api
* chore: open api
* refactor: don't await returned promise
* refactor: remove redundant check
* refactor: add `type: command` to actions
* refactor: split backup entries into own component
* refactor: split restore flow into separate components
* refactor(web): split BackupDelete event
* chore: stylings
* chore: stylings
* fix: don't log query failure on first boot
* feat: support pg_dumpall backups
* feat: display information about each backup
* chore: i18n
* feat: rollback to restore point on migrations failure
* feat: health check after restore
* chore: format
* refactor: split health check into separate function
* refactor: split health into repository
test: write tests covering rollbacks
* fix: omit 'health' requirement from createDbBackup
* test(e2e): rollback test
* fix: wrap text in backup entry
* fix: don't shrink context menu button
* fix: correct CREATE DB syntax for postgres
* test: rename backups generated by test
* feat: add filesize to backup response dto
* feat: restore list
* feat: ui work
* fix: e2e test
* fix: e2e test
* pr feedback
* pr feedback
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-01-20 15:22:28 +00:00
|
|
|
part 'model/maintenance_detect_install_response_dto.dart';
|
|
|
|
|
part 'model/maintenance_detect_install_storage_folder_dto.dart';
|
2025-11-17 17:15:44 +00:00
|
|
|
part 'model/maintenance_login_dto.dart';
|
feat: restore database backups (#23978)
* feat: ProcessRepository#createSpawnDuplexStream
* test: write tests for ProcessRepository#createSpawnDuplexStream
* feat: StorageRepository#createGzip,createGunzip,createPlainReadStream
* feat: backups util (args, create, restore, progress)
* feat: wait on maintenance operation lock on boot
* chore: use backup util from backup.service.ts
test: update backup.service.ts tests with new util
* feat: list/delete backups (maintenance services)
* chore: open api
fix: missing action in cli.service.ts
* chore: add missing repositories to MaintenanceModule
* refactor: move logSecret into module init
* feat: initialise StorageCore in maintenance mode
* feat: authenticate websocket requests in maintenance mode
* test: add mock for new storage fns
* feat: add MaintenanceEphemeralStateRepository
refactor: cache the secret in memory
* test: update service worker tests
* feat: add external maintenance mode status
* feat: synchronised status, restore db action
* test: backup restore service tests
* refactor: DRY end maintenance
* feat: list and delete backup routes
* feat: start action on boot
* fix: should set status on restore end
* refactor: add maintenanceStore to hold writables
* feat: sync status to web app
* feat: web impl.
* test: various utils for testings
* test: web e2e tests
* test: e2e maintenance spec
* test: update cli spec
* chore: e2e lint
* chore: lint fixes
* chore: lint fixes
* feat: start restore flow route
* test: update e2e tests
* chore: remove neon lights on maintenance action pages
* fix: use 'startRestoreFlow' on onboarding page
* chore: ignore any library folder in `docker/`
* fix: load status on boot
* feat: upload backups
* refactor: permit any .sql(.gz) to be listed/restored
* feat: download backups from list
* fix: permit uploading just .sql files
* feat: restore just .sql files
* fix: don't show backups list if logged out
* feat: system integrity check in restore flow
* test: not providing failed backups in API anymore
* test: util should also not try to use failedBackups
* fix: actually assign inputStream
* test: correct test backup prep.
* fix: ensure task is defined to show error
* test: fix docker cp command
* test: update e2e web spec to select next button
* test: update e2e api tests
* test: refactor timeouts
* chore: remove `showDelete` from maint. settings
* chore: lint
* chore: lint
* fix: make sure backups are correctly sorted for clean up
* test: update service spec
* test: adjust e2e timeout
* test: increase web timeouts for ci
* chore: move gitignore changes
* chore: additional filename validation
* refactor: better typings for integrity API
* feat: higher accuracy progress tracking
* chore: delay lock retry
* refactor: remove old maintenance settings
* refactor: clean up tailwind classes
* refactor: use while loop rather than recursive calls
* test: update service specs
* chore: check canParse too
* chore: lint
* fix: logic error causing infinite loop
* refactor: use <ProgressBar /> from ui library
* fix: create or overwrite file
* chore: i18n pass, update progress bar
* fix: wrong translation string
* chore: update colour variables
* test: update web test for new maint. page
* chore: format, fix key
* test: update tests to be more linter complaint & use new routines
* chore: update onClick -> onAction, title -> breadcrumbs
* fix: use wrench icon in admin settings sidebar
* chore: add translation strings to accordion
* chore: lint
* refactor: move maintenance worker init into service
* refactor: `maintenanceStatus` -> `getMaintenanceStatus`
refactor: `integrityCheck` -> `detectPriorInstall`
chore: add `v2.4.0` version
refactor: `/backups/list` -> `/backups`
refactor: use sendFile in download route
refactor: use separate backups permissions
chore: correct descriptions
refactor: permit handler that doesn't return promise for sendfile
* refactor: move status impl into service
refactor: add active flag to maintenance status
* refactor: split into database backup controller
* test: split api e2e tests and passing
* fix: move end button into authed default maint page
* fix: also show in restore flow
* fix: import getMaintenanceStatus
* test: split web e2e tests
* refactor: ensure detect install is consistently named
* chore: ensure admin for detect install while out of maint.
* refactor: remove state repository
* test: update maint. worker service spec
* test: split backup service spec
* refactor: rename db backup routes
* refactor: instead of param, allow bulk backup deletion
* test: update sdk use in e2e test
* test: correct deleteBackup call
* fix: correct type for serverinstall response dto
* chore: validate filename for deletion
* test: wip
* test: backups no longer take path param
* refactor: scope util to database-backups instead of backups
* fix: update worker controller with new route
* chore: use new admin page actions
* chore: remove stray comment
* test: rename outdated test
* refactor: getter pattern for maintenance secret
* refactor: `createSpawnDuplexStream` -> `spawnDuplexStream`
* refactor: prefer `Object.assign`
* refactor: remove useless try {} block
* refactor: prefer `type Props`
refactor: prefer arrow function
* refactor: use luxon API for minutesAgo
* chore: remove change to gitignore
* refactor: prefer `type Props`
* refactor: remove async from onMount
* refactor: use luxon toRelative for relative time
* refactor: duplicate logic check
* chore: open api
* refactor: begin moving code into web//services
* refactor: don't use template string with $t
* test: use dialog role to match prompt
* refactor: split actions into flow/restore
* test: fix action value
* refactor: move more service calls into web//services
* chore: should void fn return
* chore: bump 2.4.0 to 2.5.0 in controller
* chore: bump 2.4.0 to 2.5.0 in controller
* refactor: use events for web//services
* chore: open api
* chore: open api
* refactor: don't await returned promise
* refactor: remove redundant check
* refactor: add `type: command` to actions
* refactor: split backup entries into own component
* refactor: split restore flow into separate components
* refactor(web): split BackupDelete event
* chore: stylings
* chore: stylings
* fix: don't log query failure on first boot
* feat: support pg_dumpall backups
* feat: display information about each backup
* chore: i18n
* feat: rollback to restore point on migrations failure
* feat: health check after restore
* chore: format
* refactor: split health check into separate function
* refactor: split health into repository
test: write tests covering rollbacks
* fix: omit 'health' requirement from createDbBackup
* test(e2e): rollback test
* fix: wrap text in backup entry
* fix: don't shrink context menu button
* fix: correct CREATE DB syntax for postgres
* test: rename backups generated by test
* feat: add filesize to backup response dto
* feat: restore list
* feat: ui work
* fix: e2e test
* fix: e2e test
* pr feedback
* pr feedback
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-01-20 15:22:28 +00:00
|
|
|
part 'model/maintenance_status_response_dto.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/manual_job_name.dart';
|
|
|
|
|
part 'model/map_marker_response_dto.dart';
|
|
|
|
|
part 'model/map_reverse_geocode_response_dto.dart';
|
|
|
|
|
part 'model/memories_response.dart';
|
|
|
|
|
part 'model/memories_update.dart';
|
|
|
|
|
part 'model/memory_create_dto.dart';
|
|
|
|
|
part 'model/memory_response_dto.dart';
|
2025-11-11 01:38:50 +11:00
|
|
|
part 'model/memory_search_order.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/memory_statistics_response_dto.dart';
|
|
|
|
|
part 'model/memory_type.dart';
|
|
|
|
|
part 'model/memory_update_dto.dart';
|
|
|
|
|
part 'model/merge_person_dto.dart';
|
|
|
|
|
part 'model/metadata_search_dto.dart';
|
2026-01-09 17:59:52 -05:00
|
|
|
part 'model/mirror_axis.dart';
|
|
|
|
|
part 'model/mirror_parameters.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/notification_create_dto.dart';
|
|
|
|
|
part 'model/notification_delete_all_dto.dart';
|
|
|
|
|
part 'model/notification_dto.dart';
|
|
|
|
|
part 'model/notification_level.dart';
|
|
|
|
|
part 'model/notification_type.dart';
|
|
|
|
|
part 'model/notification_update_all_dto.dart';
|
|
|
|
|
part 'model/notification_update_dto.dart';
|
|
|
|
|
part 'model/o_auth_authorize_response_dto.dart';
|
|
|
|
|
part 'model/o_auth_callback_dto.dart';
|
|
|
|
|
part 'model/o_auth_config_dto.dart';
|
|
|
|
|
part 'model/o_auth_token_endpoint_auth_method.dart';
|
2025-10-27 22:09:55 +08:00
|
|
|
part 'model/ocr_config.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/on_this_day_dto.dart';
|
|
|
|
|
part 'model/onboarding_dto.dart';
|
|
|
|
|
part 'model/onboarding_response_dto.dart';
|
2025-09-05 17:59:11 -04:00
|
|
|
part 'model/partner_create_dto.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/partner_direction.dart';
|
|
|
|
|
part 'model/partner_response_dto.dart';
|
2025-09-05 17:59:11 -04:00
|
|
|
part 'model/partner_update_dto.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/people_response.dart';
|
|
|
|
|
part 'model/people_response_dto.dart';
|
|
|
|
|
part 'model/people_update.dart';
|
|
|
|
|
part 'model/people_update_dto.dart';
|
|
|
|
|
part 'model/people_update_item.dart';
|
|
|
|
|
part 'model/permission.dart';
|
|
|
|
|
part 'model/person_create_dto.dart';
|
|
|
|
|
part 'model/person_response_dto.dart';
|
|
|
|
|
part 'model/person_statistics_response_dto.dart';
|
|
|
|
|
part 'model/person_update_dto.dart';
|
|
|
|
|
part 'model/person_with_faces_response_dto.dart';
|
|
|
|
|
part 'model/pin_code_change_dto.dart';
|
|
|
|
|
part 'model/pin_code_reset_dto.dart';
|
|
|
|
|
part 'model/pin_code_setup_dto.dart';
|
|
|
|
|
part 'model/places_response_dto.dart';
|
2025-11-14 14:05:05 -06:00
|
|
|
part 'model/plugin_action_response_dto.dart';
|
2025-12-20 21:07:07 -06:00
|
|
|
part 'model/plugin_context_type.dart';
|
2025-11-14 14:05:05 -06:00
|
|
|
part 'model/plugin_filter_response_dto.dart';
|
2026-04-14 23:39:03 +02:00
|
|
|
part 'model/plugin_json_schema.dart';
|
|
|
|
|
part 'model/plugin_json_schema_property.dart';
|
|
|
|
|
part 'model/plugin_json_schema_property_additional_properties.dart';
|
|
|
|
|
part 'model/plugin_json_schema_type.dart';
|
2025-11-14 14:05:05 -06:00
|
|
|
part 'model/plugin_response_dto.dart';
|
2025-12-20 21:07:07 -06:00
|
|
|
part 'model/plugin_trigger_response_dto.dart';
|
2025-11-14 14:05:05 -06:00
|
|
|
part 'model/plugin_trigger_type.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/purchase_response.dart';
|
|
|
|
|
part 'model/purchase_update.dart';
|
2025-11-14 14:42:00 -05:00
|
|
|
part 'model/queue_command.dart';
|
|
|
|
|
part 'model/queue_command_dto.dart';
|
2025-11-25 08:19:40 -05:00
|
|
|
part 'model/queue_delete_dto.dart';
|
|
|
|
|
part 'model/queue_job_response_dto.dart';
|
|
|
|
|
part 'model/queue_job_status.dart';
|
2025-11-14 14:42:00 -05:00
|
|
|
part 'model/queue_name.dart';
|
|
|
|
|
part 'model/queue_response_dto.dart';
|
2025-11-25 08:19:40 -05:00
|
|
|
part 'model/queue_response_legacy_dto.dart';
|
2025-11-14 14:42:00 -05:00
|
|
|
part 'model/queue_statistics_dto.dart';
|
2025-11-25 08:19:40 -05:00
|
|
|
part 'model/queue_status_legacy_dto.dart';
|
|
|
|
|
part 'model/queue_update_dto.dart';
|
|
|
|
|
part 'model/queues_response_legacy_dto.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/random_search_dto.dart';
|
|
|
|
|
part 'model/ratings_response.dart';
|
|
|
|
|
part 'model/ratings_update.dart';
|
|
|
|
|
part 'model/reaction_level.dart';
|
|
|
|
|
part 'model/reaction_type.dart';
|
|
|
|
|
part 'model/reverse_geocoding_state_response_dto.dart';
|
2026-01-09 17:59:52 -05:00
|
|
|
part 'model/rotate_parameters.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/search_album_response_dto.dart';
|
|
|
|
|
part 'model/search_asset_response_dto.dart';
|
|
|
|
|
part 'model/search_explore_item.dart';
|
|
|
|
|
part 'model/search_explore_response_dto.dart';
|
|
|
|
|
part 'model/search_facet_count_response_dto.dart';
|
|
|
|
|
part 'model/search_facet_response_dto.dart';
|
|
|
|
|
part 'model/search_response_dto.dart';
|
|
|
|
|
part 'model/search_statistics_response_dto.dart';
|
|
|
|
|
part 'model/search_suggestion_type.dart';
|
|
|
|
|
part 'model/server_about_response_dto.dart';
|
|
|
|
|
part 'model/server_apk_links_dto.dart';
|
|
|
|
|
part 'model/server_config_dto.dart';
|
|
|
|
|
part 'model/server_features_dto.dart';
|
|
|
|
|
part 'model/server_media_types_response_dto.dart';
|
|
|
|
|
part 'model/server_ping_response.dart';
|
|
|
|
|
part 'model/server_stats_response_dto.dart';
|
|
|
|
|
part 'model/server_storage_response_dto.dart';
|
|
|
|
|
part 'model/server_theme_dto.dart';
|
|
|
|
|
part 'model/server_version_history_response_dto.dart';
|
|
|
|
|
part 'model/server_version_response_dto.dart';
|
|
|
|
|
part 'model/session_create_dto.dart';
|
|
|
|
|
part 'model/session_create_response_dto.dart';
|
|
|
|
|
part 'model/session_response_dto.dart';
|
|
|
|
|
part 'model/session_unlock_dto.dart';
|
|
|
|
|
part 'model/session_update_dto.dart';
|
2025-11-17 17:15:44 +00:00
|
|
|
part 'model/set_maintenance_mode_dto.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/shared_link_create_dto.dart';
|
|
|
|
|
part 'model/shared_link_edit_dto.dart';
|
2026-02-12 12:08:38 -05:00
|
|
|
part 'model/shared_link_login_dto.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/shared_link_response_dto.dart';
|
|
|
|
|
part 'model/shared_link_type.dart';
|
|
|
|
|
part 'model/shared_links_response.dart';
|
|
|
|
|
part 'model/shared_links_update.dart';
|
|
|
|
|
part 'model/sign_up_dto.dart';
|
|
|
|
|
part 'model/smart_search_dto.dart';
|
|
|
|
|
part 'model/source_type.dart';
|
|
|
|
|
part 'model/stack_create_dto.dart';
|
|
|
|
|
part 'model/stack_response_dto.dart';
|
|
|
|
|
part 'model/stack_update_dto.dart';
|
|
|
|
|
part 'model/statistics_search_dto.dart';
|
feat: restore database backups (#23978)
* feat: ProcessRepository#createSpawnDuplexStream
* test: write tests for ProcessRepository#createSpawnDuplexStream
* feat: StorageRepository#createGzip,createGunzip,createPlainReadStream
* feat: backups util (args, create, restore, progress)
* feat: wait on maintenance operation lock on boot
* chore: use backup util from backup.service.ts
test: update backup.service.ts tests with new util
* feat: list/delete backups (maintenance services)
* chore: open api
fix: missing action in cli.service.ts
* chore: add missing repositories to MaintenanceModule
* refactor: move logSecret into module init
* feat: initialise StorageCore in maintenance mode
* feat: authenticate websocket requests in maintenance mode
* test: add mock for new storage fns
* feat: add MaintenanceEphemeralStateRepository
refactor: cache the secret in memory
* test: update service worker tests
* feat: add external maintenance mode status
* feat: synchronised status, restore db action
* test: backup restore service tests
* refactor: DRY end maintenance
* feat: list and delete backup routes
* feat: start action on boot
* fix: should set status on restore end
* refactor: add maintenanceStore to hold writables
* feat: sync status to web app
* feat: web impl.
* test: various utils for testings
* test: web e2e tests
* test: e2e maintenance spec
* test: update cli spec
* chore: e2e lint
* chore: lint fixes
* chore: lint fixes
* feat: start restore flow route
* test: update e2e tests
* chore: remove neon lights on maintenance action pages
* fix: use 'startRestoreFlow' on onboarding page
* chore: ignore any library folder in `docker/`
* fix: load status on boot
* feat: upload backups
* refactor: permit any .sql(.gz) to be listed/restored
* feat: download backups from list
* fix: permit uploading just .sql files
* feat: restore just .sql files
* fix: don't show backups list if logged out
* feat: system integrity check in restore flow
* test: not providing failed backups in API anymore
* test: util should also not try to use failedBackups
* fix: actually assign inputStream
* test: correct test backup prep.
* fix: ensure task is defined to show error
* test: fix docker cp command
* test: update e2e web spec to select next button
* test: update e2e api tests
* test: refactor timeouts
* chore: remove `showDelete` from maint. settings
* chore: lint
* chore: lint
* fix: make sure backups are correctly sorted for clean up
* test: update service spec
* test: adjust e2e timeout
* test: increase web timeouts for ci
* chore: move gitignore changes
* chore: additional filename validation
* refactor: better typings for integrity API
* feat: higher accuracy progress tracking
* chore: delay lock retry
* refactor: remove old maintenance settings
* refactor: clean up tailwind classes
* refactor: use while loop rather than recursive calls
* test: update service specs
* chore: check canParse too
* chore: lint
* fix: logic error causing infinite loop
* refactor: use <ProgressBar /> from ui library
* fix: create or overwrite file
* chore: i18n pass, update progress bar
* fix: wrong translation string
* chore: update colour variables
* test: update web test for new maint. page
* chore: format, fix key
* test: update tests to be more linter complaint & use new routines
* chore: update onClick -> onAction, title -> breadcrumbs
* fix: use wrench icon in admin settings sidebar
* chore: add translation strings to accordion
* chore: lint
* refactor: move maintenance worker init into service
* refactor: `maintenanceStatus` -> `getMaintenanceStatus`
refactor: `integrityCheck` -> `detectPriorInstall`
chore: add `v2.4.0` version
refactor: `/backups/list` -> `/backups`
refactor: use sendFile in download route
refactor: use separate backups permissions
chore: correct descriptions
refactor: permit handler that doesn't return promise for sendfile
* refactor: move status impl into service
refactor: add active flag to maintenance status
* refactor: split into database backup controller
* test: split api e2e tests and passing
* fix: move end button into authed default maint page
* fix: also show in restore flow
* fix: import getMaintenanceStatus
* test: split web e2e tests
* refactor: ensure detect install is consistently named
* chore: ensure admin for detect install while out of maint.
* refactor: remove state repository
* test: update maint. worker service spec
* test: split backup service spec
* refactor: rename db backup routes
* refactor: instead of param, allow bulk backup deletion
* test: update sdk use in e2e test
* test: correct deleteBackup call
* fix: correct type for serverinstall response dto
* chore: validate filename for deletion
* test: wip
* test: backups no longer take path param
* refactor: scope util to database-backups instead of backups
* fix: update worker controller with new route
* chore: use new admin page actions
* chore: remove stray comment
* test: rename outdated test
* refactor: getter pattern for maintenance secret
* refactor: `createSpawnDuplexStream` -> `spawnDuplexStream`
* refactor: prefer `Object.assign`
* refactor: remove useless try {} block
* refactor: prefer `type Props`
refactor: prefer arrow function
* refactor: use luxon API for minutesAgo
* chore: remove change to gitignore
* refactor: prefer `type Props`
* refactor: remove async from onMount
* refactor: use luxon toRelative for relative time
* refactor: duplicate logic check
* chore: open api
* refactor: begin moving code into web//services
* refactor: don't use template string with $t
* test: use dialog role to match prompt
* refactor: split actions into flow/restore
* test: fix action value
* refactor: move more service calls into web//services
* chore: should void fn return
* chore: bump 2.4.0 to 2.5.0 in controller
* chore: bump 2.4.0 to 2.5.0 in controller
* refactor: use events for web//services
* chore: open api
* chore: open api
* refactor: don't await returned promise
* refactor: remove redundant check
* refactor: add `type: command` to actions
* refactor: split backup entries into own component
* refactor: split restore flow into separate components
* refactor(web): split BackupDelete event
* chore: stylings
* chore: stylings
* fix: don't log query failure on first boot
* feat: support pg_dumpall backups
* feat: display information about each backup
* chore: i18n
* feat: rollback to restore point on migrations failure
* feat: health check after restore
* chore: format
* refactor: split health check into separate function
* refactor: split health into repository
test: write tests covering rollbacks
* fix: omit 'health' requirement from createDbBackup
* test(e2e): rollback test
* fix: wrap text in backup entry
* fix: don't shrink context menu button
* fix: correct CREATE DB syntax for postgres
* test: rename backups generated by test
* feat: add filesize to backup response dto
* feat: restore list
* feat: ui work
* fix: e2e test
* fix: e2e test
* pr feedback
* pr feedback
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-01-20 15:22:28 +00:00
|
|
|
part 'model/storage_folder.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/sync_ack_delete_dto.dart';
|
|
|
|
|
part 'model/sync_ack_dto.dart';
|
|
|
|
|
part 'model/sync_ack_set_dto.dart';
|
|
|
|
|
part 'model/sync_album_delete_v1.dart';
|
|
|
|
|
part 'model/sync_album_to_asset_delete_v1.dart';
|
|
|
|
|
part 'model/sync_album_to_asset_v1.dart';
|
|
|
|
|
part 'model/sync_album_user_delete_v1.dart';
|
|
|
|
|
part 'model/sync_album_user_v1.dart';
|
|
|
|
|
part 'model/sync_album_v1.dart';
|
|
|
|
|
part 'model/sync_asset_delete_v1.dart';
|
2026-02-25 12:12:41 -06:00
|
|
|
part 'model/sync_asset_edit_delete_v1.dart';
|
|
|
|
|
part 'model/sync_asset_edit_v1.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/sync_asset_exif_v1.dart';
|
|
|
|
|
part 'model/sync_asset_face_delete_v1.dart';
|
|
|
|
|
part 'model/sync_asset_face_v1.dart';
|
2026-02-23 08:50:54 -06:00
|
|
|
part 'model/sync_asset_face_v2.dart';
|
2025-08-27 14:31:23 -04:00
|
|
|
part 'model/sync_asset_metadata_delete_v1.dart';
|
|
|
|
|
part 'model/sync_asset_metadata_v1.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
part 'model/sync_asset_v1.dart';
|
|
|
|
|
part 'model/sync_auth_user_v1.dart';
|
|
|
|
|
part 'model/sync_entity_type.dart';
|
|
|
|
|
part 'model/sync_memory_asset_delete_v1.dart';
|
|
|
|
|
part 'model/sync_memory_asset_v1.dart';
|
|
|
|
|
part 'model/sync_memory_delete_v1.dart';
|
|
|
|
|
part 'model/sync_memory_v1.dart';
|
|
|
|
|
part 'model/sync_partner_delete_v1.dart';
|
|
|
|
|
part 'model/sync_partner_v1.dart';
|
|
|
|
|
part 'model/sync_person_delete_v1.dart';
|
|
|
|
|
part 'model/sync_person_v1.dart';
|
|
|
|
|
part 'model/sync_request_type.dart';
|
|
|
|
|
part 'model/sync_stack_delete_v1.dart';
|
|
|
|
|
part 'model/sync_stack_v1.dart';
|
|
|
|
|
part 'model/sync_stream_dto.dart';
|
|
|
|
|
part 'model/sync_user_delete_v1.dart';
|
|
|
|
|
part 'model/sync_user_metadata_delete_v1.dart';
|
|
|
|
|
part 'model/sync_user_metadata_v1.dart';
|
|
|
|
|
part 'model/sync_user_v1.dart';
|
|
|
|
|
part 'model/system_config_backups_dto.dart';
|
|
|
|
|
part 'model/system_config_dto.dart';
|
|
|
|
|
part 'model/system_config_f_fmpeg_dto.dart';
|
|
|
|
|
part 'model/system_config_faces_dto.dart';
|
|
|
|
|
part 'model/system_config_generated_fullsize_image_dto.dart';
|
|
|
|
|
part 'model/system_config_generated_image_dto.dart';
|
|
|
|
|
part 'model/system_config_image_dto.dart';
|
|
|
|
|
part 'model/system_config_job_dto.dart';
|
|
|
|
|
part 'model/system_config_library_dto.dart';
|
|
|
|
|
part 'model/system_config_library_scan_dto.dart';
|
|
|
|
|
part 'model/system_config_library_watch_dto.dart';
|
|
|
|
|
part 'model/system_config_logging_dto.dart';
|
|
|
|
|
part 'model/system_config_machine_learning_dto.dart';
|
|
|
|
|
part 'model/system_config_map_dto.dart';
|
|
|
|
|
part 'model/system_config_metadata_dto.dart';
|
|
|
|
|
part 'model/system_config_new_version_check_dto.dart';
|
|
|
|
|
part 'model/system_config_nightly_tasks_dto.dart';
|
|
|
|
|
part 'model/system_config_notifications_dto.dart';
|
|
|
|
|
part 'model/system_config_o_auth_dto.dart';
|
|
|
|
|
part 'model/system_config_password_login_dto.dart';
|
|
|
|
|
part 'model/system_config_reverse_geocoding_dto.dart';
|
|
|
|
|
part 'model/system_config_server_dto.dart';
|
|
|
|
|
part 'model/system_config_smtp_dto.dart';
|
|
|
|
|
part 'model/system_config_smtp_transport_dto.dart';
|
|
|
|
|
part 'model/system_config_storage_template_dto.dart';
|
|
|
|
|
part 'model/system_config_template_emails_dto.dart';
|
|
|
|
|
part 'model/system_config_template_storage_option_dto.dart';
|
|
|
|
|
part 'model/system_config_templates_dto.dart';
|
|
|
|
|
part 'model/system_config_theme_dto.dart';
|
|
|
|
|
part 'model/system_config_trash_dto.dart';
|
|
|
|
|
part 'model/system_config_user_dto.dart';
|
|
|
|
|
part 'model/tag_bulk_assets_dto.dart';
|
|
|
|
|
part 'model/tag_bulk_assets_response_dto.dart';
|
|
|
|
|
part 'model/tag_create_dto.dart';
|
|
|
|
|
part 'model/tag_response_dto.dart';
|
|
|
|
|
part 'model/tag_update_dto.dart';
|
|
|
|
|
part 'model/tag_upsert_dto.dart';
|
|
|
|
|
part 'model/tags_response.dart';
|
|
|
|
|
part 'model/tags_update.dart';
|
|
|
|
|
part 'model/template_dto.dart';
|
|
|
|
|
part 'model/template_response_dto.dart';
|
|
|
|
|
part 'model/test_email_response_dto.dart';
|
|
|
|
|
part 'model/time_bucket_asset_response_dto.dart';
|
|
|
|
|
part 'model/time_buckets_response_dto.dart';
|
|
|
|
|
part 'model/tone_mapping.dart';
|
|
|
|
|
part 'model/transcode_hw_accel.dart';
|
|
|
|
|
part 'model/transcode_policy.dart';
|
|
|
|
|
part 'model/trash_response_dto.dart';
|
|
|
|
|
part 'model/update_album_dto.dart';
|
|
|
|
|
part 'model/update_album_user_dto.dart';
|
|
|
|
|
part 'model/update_asset_dto.dart';
|
|
|
|
|
part 'model/update_library_dto.dart';
|
|
|
|
|
part 'model/usage_by_user_dto.dart';
|
|
|
|
|
part 'model/user_admin_create_dto.dart';
|
|
|
|
|
part 'model/user_admin_delete_dto.dart';
|
|
|
|
|
part 'model/user_admin_response_dto.dart';
|
|
|
|
|
part 'model/user_admin_update_dto.dart';
|
|
|
|
|
part 'model/user_avatar_color.dart';
|
|
|
|
|
part 'model/user_license.dart';
|
|
|
|
|
part 'model/user_metadata_key.dart';
|
|
|
|
|
part 'model/user_preferences_response_dto.dart';
|
|
|
|
|
part 'model/user_preferences_update_dto.dart';
|
|
|
|
|
part 'model/user_response_dto.dart';
|
|
|
|
|
part 'model/user_status.dart';
|
|
|
|
|
part 'model/user_update_me_dto.dart';
|
|
|
|
|
part 'model/validate_access_token_response_dto.dart';
|
|
|
|
|
part 'model/validate_library_dto.dart';
|
|
|
|
|
part 'model/validate_library_import_path_response_dto.dart';
|
|
|
|
|
part 'model/validate_library_response_dto.dart';
|
|
|
|
|
part 'model/version_check_state_response_dto.dart';
|
|
|
|
|
part 'model/video_codec.dart';
|
|
|
|
|
part 'model/video_container.dart';
|
2025-11-14 14:05:05 -06:00
|
|
|
part 'model/workflow_action_item_dto.dart';
|
|
|
|
|
part 'model/workflow_action_response_dto.dart';
|
|
|
|
|
part 'model/workflow_create_dto.dart';
|
|
|
|
|
part 'model/workflow_filter_item_dto.dart';
|
|
|
|
|
part 'model/workflow_filter_response_dto.dart';
|
|
|
|
|
part 'model/workflow_response_dto.dart';
|
|
|
|
|
part 'model/workflow_update_dto.dart';
|
2025-08-21 17:15:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
/// An [ApiClient] instance that uses the default values obtained from
|
|
|
|
|
/// the OpenAPI specification file.
|
|
|
|
|
var defaultApiClient = ApiClient();
|
|
|
|
|
|
|
|
|
|
const _delimiters = {'csv': ',', 'ssv': ' ', 'tsv': '\t', 'pipes': '|'};
|
|
|
|
|
const _dateEpochMarker = 'epoch';
|
|
|
|
|
const _deepEquality = DeepCollectionEquality();
|
|
|
|
|
final _dateFormatter = DateFormat('yyyy-MM-dd');
|
|
|
|
|
final _regList = RegExp(r'^List<(.*)>$');
|
|
|
|
|
final _regSet = RegExp(r'^Set<(.*)>$');
|
|
|
|
|
final _regMap = RegExp(r'^Map<String,(.*)>$');
|
|
|
|
|
|
|
|
|
|
bool _isEpochMarker(String? pattern) => pattern == _dateEpochMarker || pattern == '/$_dateEpochMarker/';
|