mirror of
https://github.com/immich-app/immich.git
synced 2025-11-24 23:35:18 -05:00
* feature(mobile, beta, Android): handle remote asset trash/restore events and rescan media - Handle move to trash and restore from trash for remote assets on Android - Trigger MediaScannerConnection to rescan affected media files * feature(mobile, beta, Android): fix rescan * fix imports * fix checking conditions * refactor naming * fix line breaks * refactor code rollback changes in BackgroundServicePlugin * refactor code (use separate TrashService) * refactor code * parallelize restoreFromTrash calls with Future.wait format trash.provider.dart * try to re-format trash.provider.dart * re-format trash.provider.dart * rename TrashService to TrashSyncService to avoid duplicated names revert changes in original trash.provider.dart * refactor code (minor nitpicks) * process restoreFromTrash sequentially instead of Future.wait * group local assets by checksum before moving to trash delete LocalAssetEntity records when moved to trash refactor code * fix format * use checksum for asset restoration refactro code * fix format * sync trash only for backup-selected assets * feat(db): add local_trashed_asset table and integrate with restoration flow - Add new `local_trashed_asset` table to store metadata of trashed assets - Save trashed asset info into `local_trashed_asset` before deletion - Use `local_trashed_asset` as source for asset restoration - Implement file restoration by `mediaId` * resolve merge conflicts * fix index creating on migration * rework trashed assets handling - add new table trashed_local_asset - mirror trashed assets data in trashed_local_asset. - compute checksums for assets trashed out-of-app. - restore assets present in trashed_local_asset and non-trashed in remote_asset. - simplify moving-to-trash logic based on remote_asset events. * resolve merge conflicts use updated approach for calculating checksums * use CurrentPlatform instead _platform fix mocks * revert redundant changes * Include trashed items in getMediaChanges Process trashed items delta during incremental sync * fix merge conflicts * fix format * trashed_local_asset table mirror of local_asset table structure trashed_local_asset<->local_asset transfer data on move to trash or restore refactor code * refactor and format code * refactor TrashedAsset model fix missed data transfering * refactor code remove unused model * fix label * fix merge conflicts * optimize, refactor code remove redundant code and checking getTrashedAssetsForAlbum for iOS tests for hash trashed assets * format code * fix migration fix tests * fix generated file * reuse exist checksums on trash data update handle restoration errors fix import * format code * sync_stream.service depend on repos refactor assets restoration update dependencies in tests * remove trashed asset model remove trash_sync.service refactor DriftTrashedLocalAssetRepository, LocalSyncService * rework fetching trashed assets data on native side optimize handling trashed assets in local sync service refactor code * update NativeSyncApi on iOS side remove unused code * optimize sync trashed assets call in full sync mode refactor code * fix format * remove albumIds from getTrashedAssets params fix upsert in trashed local asset repo refactor code * fix getTrashedAssets params * fix(trash-sync): clean up NativeSyncApiImplBase and correct applyDelta * refactor(trash-sync): optimize performance and fix minor issues * refactor(trash-sync): add missed index * feat(trash-sync): remove sinceLastCheckpoint param from getTrashedAssets * fix(trash-sync): fix target table * fix(trash-sync): remove unused extension * fix(trash-sync): remove unused code * fix(trash-sync): refactor code * fix(trash-sync): reformat file * fix(trash_sync): refactor code * fix(trash_sync): improve moving to trash * refactor(trash_sync): integrate MANAGE_MEDIA permission request into login flow and advanced settings * refactor(trash_sync): add additional checking for experimental trash sync flag and MANAGE_MEDIA permission. * refactor(trash_sync): resolve merge conflicts * refactor(trash_sync): fix format * resolve merge conflicts add await for alert dialog add missed request * refactor(trash_sync): rework MANAGE_MEDIA info widget show rationale text in permission request alert dialog refactor setting getter * fix(trash_sync): restore missing text values * fix(trash_sync): format file * fix(trash_sync): check backup enabled and remove remote asset existence check * fix(trash_sync): remove checking backup enabled test(trash_sync): cover sync-stream trash/restore paths and dedupe mocks * test(trash_sync): cover trash/restore flows for local_sync_service * chore(e2e): restore test-assets submodule pointer --------- Co-authored-by: Peter Ombodi <peter.ombodi@gmail.com> Co-authored-by: Alex <alex.tran1502@gmail.com>
64 lines
2.2 KiB
Dart
64 lines
2.2 KiB
Dart
import 'dart:io';
|
|
|
|
const int noDbId = -9223372036854775808; // from Isar
|
|
const double downloadCompleted = -1;
|
|
const double downloadFailed = -2;
|
|
|
|
// Number of log entries to retain on app start
|
|
const int kLogTruncateLimit = 2000;
|
|
|
|
// Sync
|
|
const int kSyncEventBatchSize = 5000;
|
|
const int kFetchLocalAssetsBatchSize = 40000;
|
|
|
|
// Hash batch limits
|
|
final int kBatchHashFileLimit = Platform.isIOS ? 32 : 512;
|
|
const int kBatchHashSizeLimit = 1024 * 1024 * 1024; // 1GB
|
|
|
|
// Secure storage keys
|
|
const String kSecuredPinCode = "secured_pin_code";
|
|
|
|
// background_downloader task groups
|
|
const String kManualUploadGroup = 'manual_upload_group';
|
|
const String kBackupGroup = 'backup_group';
|
|
const String kBackupLivePhotoGroup = 'backup_live_photo_group';
|
|
const String kDownloadGroupImage = 'group_image';
|
|
const String kDownloadGroupVideo = 'group_video';
|
|
const String kDownloadGroupLivePhoto = 'group_livephoto';
|
|
|
|
// Timeline constants
|
|
const int kTimelineNoneSegmentSize = 120;
|
|
const int kTimelineAssetLoadBatchSize = 1024;
|
|
const int kTimelineAssetLoadOppositeSize = 64;
|
|
|
|
// Widget keys
|
|
const String appShareGroupId = "group.app.immich.share";
|
|
const String kWidgetAuthToken = "widget_auth_token";
|
|
const String kWidgetServerEndpoint = "widget_server_url";
|
|
const String kWidgetCustomHeaders = "widget_custom_headers";
|
|
|
|
// add widget identifiers here for new widgets
|
|
// these are used to force a widget refresh
|
|
// (iOSName, androidFQDN)
|
|
const List<(String, String)> kWidgetNames = [
|
|
('com.immich.widget.random', 'app.alextran.immich.widget.RandomReceiver'),
|
|
('com.immich.widget.memory', 'app.alextran.immich.widget.MemoryReceiver'),
|
|
];
|
|
|
|
const double kUploadStatusFailed = -1.0;
|
|
const double kUploadStatusCanceled = -2.0;
|
|
|
|
const int kMinMonthsToEnableScrubberSnap = 12;
|
|
|
|
const String kImmichAppStoreLink = "https://apps.apple.com/app/immich/id6449244941";
|
|
const String kImmichPlayStoreLink = "https://play.google.com/store/apps/details?id=app.alextran.immich";
|
|
const String kImmichLatestRelease = "https://github.com/immich-app/immich/releases/latest";
|
|
|
|
const int kPhotoTabIndex = 0;
|
|
const int kSearchTabIndex = 1;
|
|
const int kAlbumTabIndex = 2;
|
|
const int kLibraryTabIndex = 3;
|
|
|
|
// Workaround for SQLite's variable limit (SQLITE_MAX_VARIABLE_NUMBER = 32766)
|
|
const int kDriftMaxChunk = 32000;
|