mirror of
https://github.com/immich-app/immich.git
synced 2025-12-12 15:50:43 -08: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>
352 lines
13 KiB
Dart
Generated
352 lines
13 KiB
Dart
Generated
// dart format width=80
|
|
// ignore_for_file: type=lint
|
|
import 'package:drift/drift.dart' as i0;
|
|
import 'package:immich_mobile/infrastructure/entities/user.entity.drift.dart'
|
|
as i1;
|
|
import 'package:immich_mobile/infrastructure/entities/remote_asset.entity.drift.dart'
|
|
as i2;
|
|
import 'package:immich_mobile/infrastructure/entities/stack.entity.drift.dart'
|
|
as i3;
|
|
import 'package:immich_mobile/infrastructure/entities/local_asset.entity.drift.dart'
|
|
as i4;
|
|
import 'package:immich_mobile/infrastructure/entities/remote_album.entity.drift.dart'
|
|
as i5;
|
|
import 'package:immich_mobile/infrastructure/entities/local_album.entity.drift.dart'
|
|
as i6;
|
|
import 'package:immich_mobile/infrastructure/entities/local_album_asset.entity.drift.dart'
|
|
as i7;
|
|
import 'package:immich_mobile/infrastructure/entities/auth_user.entity.drift.dart'
|
|
as i8;
|
|
import 'package:immich_mobile/infrastructure/entities/user_metadata.entity.drift.dart'
|
|
as i9;
|
|
import 'package:immich_mobile/infrastructure/entities/partner.entity.drift.dart'
|
|
as i10;
|
|
import 'package:immich_mobile/infrastructure/entities/exif.entity.drift.dart'
|
|
as i11;
|
|
import 'package:immich_mobile/infrastructure/entities/remote_album_asset.entity.drift.dart'
|
|
as i12;
|
|
import 'package:immich_mobile/infrastructure/entities/remote_album_user.entity.drift.dart'
|
|
as i13;
|
|
import 'package:immich_mobile/infrastructure/entities/memory.entity.drift.dart'
|
|
as i14;
|
|
import 'package:immich_mobile/infrastructure/entities/memory_asset.entity.drift.dart'
|
|
as i15;
|
|
import 'package:immich_mobile/infrastructure/entities/person.entity.drift.dart'
|
|
as i16;
|
|
import 'package:immich_mobile/infrastructure/entities/asset_face.entity.drift.dart'
|
|
as i17;
|
|
import 'package:immich_mobile/infrastructure/entities/store.entity.drift.dart'
|
|
as i18;
|
|
import 'package:immich_mobile/infrastructure/entities/trashed_local_asset.entity.drift.dart'
|
|
as i19;
|
|
import 'package:immich_mobile/infrastructure/entities/merged_asset.drift.dart'
|
|
as i20;
|
|
import 'package:drift/internal/modular.dart' as i21;
|
|
|
|
abstract class $Drift extends i0.GeneratedDatabase {
|
|
$Drift(i0.QueryExecutor e) : super(e);
|
|
$DriftManager get managers => $DriftManager(this);
|
|
late final i1.$UserEntityTable userEntity = i1.$UserEntityTable(this);
|
|
late final i2.$RemoteAssetEntityTable remoteAssetEntity = i2
|
|
.$RemoteAssetEntityTable(this);
|
|
late final i3.$StackEntityTable stackEntity = i3.$StackEntityTable(this);
|
|
late final i4.$LocalAssetEntityTable localAssetEntity = i4
|
|
.$LocalAssetEntityTable(this);
|
|
late final i5.$RemoteAlbumEntityTable remoteAlbumEntity = i5
|
|
.$RemoteAlbumEntityTable(this);
|
|
late final i6.$LocalAlbumEntityTable localAlbumEntity = i6
|
|
.$LocalAlbumEntityTable(this);
|
|
late final i7.$LocalAlbumAssetEntityTable localAlbumAssetEntity = i7
|
|
.$LocalAlbumAssetEntityTable(this);
|
|
late final i8.$AuthUserEntityTable authUserEntity = i8.$AuthUserEntityTable(
|
|
this,
|
|
);
|
|
late final i9.$UserMetadataEntityTable userMetadataEntity = i9
|
|
.$UserMetadataEntityTable(this);
|
|
late final i10.$PartnerEntityTable partnerEntity = i10.$PartnerEntityTable(
|
|
this,
|
|
);
|
|
late final i11.$RemoteExifEntityTable remoteExifEntity = i11
|
|
.$RemoteExifEntityTable(this);
|
|
late final i12.$RemoteAlbumAssetEntityTable remoteAlbumAssetEntity = i12
|
|
.$RemoteAlbumAssetEntityTable(this);
|
|
late final i13.$RemoteAlbumUserEntityTable remoteAlbumUserEntity = i13
|
|
.$RemoteAlbumUserEntityTable(this);
|
|
late final i14.$MemoryEntityTable memoryEntity = i14.$MemoryEntityTable(this);
|
|
late final i15.$MemoryAssetEntityTable memoryAssetEntity = i15
|
|
.$MemoryAssetEntityTable(this);
|
|
late final i16.$PersonEntityTable personEntity = i16.$PersonEntityTable(this);
|
|
late final i17.$AssetFaceEntityTable assetFaceEntity = i17
|
|
.$AssetFaceEntityTable(this);
|
|
late final i18.$StoreEntityTable storeEntity = i18.$StoreEntityTable(this);
|
|
late final i19.$TrashedLocalAssetEntityTable trashedLocalAssetEntity = i19
|
|
.$TrashedLocalAssetEntityTable(this);
|
|
i20.MergedAssetDrift get mergedAssetDrift => i21.ReadDatabaseContainer(
|
|
this,
|
|
).accessor<i20.MergedAssetDrift>(i20.MergedAssetDrift.new);
|
|
@override
|
|
Iterable<i0.TableInfo<i0.Table, Object?>> get allTables =>
|
|
allSchemaEntities.whereType<i0.TableInfo<i0.Table, Object?>>();
|
|
@override
|
|
List<i0.DatabaseSchemaEntity> get allSchemaEntities => [
|
|
userEntity,
|
|
remoteAssetEntity,
|
|
stackEntity,
|
|
localAssetEntity,
|
|
remoteAlbumEntity,
|
|
localAlbumEntity,
|
|
localAlbumAssetEntity,
|
|
i4.idxLocalAssetChecksum,
|
|
i2.idxRemoteAssetOwnerChecksum,
|
|
i2.uQRemoteAssetsOwnerChecksum,
|
|
i2.uQRemoteAssetsOwnerLibraryChecksum,
|
|
i2.idxRemoteAssetChecksum,
|
|
authUserEntity,
|
|
userMetadataEntity,
|
|
partnerEntity,
|
|
remoteExifEntity,
|
|
remoteAlbumAssetEntity,
|
|
remoteAlbumUserEntity,
|
|
memoryEntity,
|
|
memoryAssetEntity,
|
|
personEntity,
|
|
assetFaceEntity,
|
|
storeEntity,
|
|
trashedLocalAssetEntity,
|
|
i11.idxLatLng,
|
|
i19.idxTrashedLocalAssetChecksum,
|
|
i19.idxTrashedLocalAssetAlbum,
|
|
];
|
|
@override
|
|
i0.StreamQueryUpdateRules
|
|
get streamUpdateRules => const i0.StreamQueryUpdateRules([
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'user_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [
|
|
i0.TableUpdate('remote_asset_entity', kind: i0.UpdateKind.delete),
|
|
],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'user_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [i0.TableUpdate('stack_entity', kind: i0.UpdateKind.delete)],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'user_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [
|
|
i0.TableUpdate('remote_album_entity', kind: i0.UpdateKind.delete),
|
|
],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'remote_asset_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [
|
|
i0.TableUpdate('remote_album_entity', kind: i0.UpdateKind.update),
|
|
],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'remote_album_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [
|
|
i0.TableUpdate('local_album_entity', kind: i0.UpdateKind.update),
|
|
],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'local_asset_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [
|
|
i0.TableUpdate('local_album_asset_entity', kind: i0.UpdateKind.delete),
|
|
],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'local_album_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [
|
|
i0.TableUpdate('local_album_asset_entity', kind: i0.UpdateKind.delete),
|
|
],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'user_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [
|
|
i0.TableUpdate('user_metadata_entity', kind: i0.UpdateKind.delete),
|
|
],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'user_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [i0.TableUpdate('partner_entity', kind: i0.UpdateKind.delete)],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'user_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [i0.TableUpdate('partner_entity', kind: i0.UpdateKind.delete)],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'remote_asset_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [
|
|
i0.TableUpdate('remote_exif_entity', kind: i0.UpdateKind.delete),
|
|
],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'remote_asset_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [
|
|
i0.TableUpdate('remote_album_asset_entity', kind: i0.UpdateKind.delete),
|
|
],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'remote_album_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [
|
|
i0.TableUpdate('remote_album_asset_entity', kind: i0.UpdateKind.delete),
|
|
],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'remote_album_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [
|
|
i0.TableUpdate('remote_album_user_entity', kind: i0.UpdateKind.delete),
|
|
],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'user_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [
|
|
i0.TableUpdate('remote_album_user_entity', kind: i0.UpdateKind.delete),
|
|
],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'user_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [i0.TableUpdate('memory_entity', kind: i0.UpdateKind.delete)],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'remote_asset_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [
|
|
i0.TableUpdate('memory_asset_entity', kind: i0.UpdateKind.delete),
|
|
],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'memory_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [
|
|
i0.TableUpdate('memory_asset_entity', kind: i0.UpdateKind.delete),
|
|
],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'user_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [i0.TableUpdate('person_entity', kind: i0.UpdateKind.delete)],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'remote_asset_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [i0.TableUpdate('asset_face_entity', kind: i0.UpdateKind.delete)],
|
|
),
|
|
i0.WritePropagation(
|
|
on: i0.TableUpdateQuery.onTableName(
|
|
'person_entity',
|
|
limitUpdateKind: i0.UpdateKind.delete,
|
|
),
|
|
result: [i0.TableUpdate('asset_face_entity', kind: i0.UpdateKind.update)],
|
|
),
|
|
]);
|
|
@override
|
|
i0.DriftDatabaseOptions get options =>
|
|
const i0.DriftDatabaseOptions(storeDateTimeAsText: true);
|
|
}
|
|
|
|
class $DriftManager {
|
|
final $Drift _db;
|
|
$DriftManager(this._db);
|
|
i1.$$UserEntityTableTableManager get userEntity =>
|
|
i1.$$UserEntityTableTableManager(_db, _db.userEntity);
|
|
i2.$$RemoteAssetEntityTableTableManager get remoteAssetEntity =>
|
|
i2.$$RemoteAssetEntityTableTableManager(_db, _db.remoteAssetEntity);
|
|
i3.$$StackEntityTableTableManager get stackEntity =>
|
|
i3.$$StackEntityTableTableManager(_db, _db.stackEntity);
|
|
i4.$$LocalAssetEntityTableTableManager get localAssetEntity =>
|
|
i4.$$LocalAssetEntityTableTableManager(_db, _db.localAssetEntity);
|
|
i5.$$RemoteAlbumEntityTableTableManager get remoteAlbumEntity =>
|
|
i5.$$RemoteAlbumEntityTableTableManager(_db, _db.remoteAlbumEntity);
|
|
i6.$$LocalAlbumEntityTableTableManager get localAlbumEntity =>
|
|
i6.$$LocalAlbumEntityTableTableManager(_db, _db.localAlbumEntity);
|
|
i7.$$LocalAlbumAssetEntityTableTableManager get localAlbumAssetEntity => i7
|
|
.$$LocalAlbumAssetEntityTableTableManager(_db, _db.localAlbumAssetEntity);
|
|
i8.$$AuthUserEntityTableTableManager get authUserEntity =>
|
|
i8.$$AuthUserEntityTableTableManager(_db, _db.authUserEntity);
|
|
i9.$$UserMetadataEntityTableTableManager get userMetadataEntity =>
|
|
i9.$$UserMetadataEntityTableTableManager(_db, _db.userMetadataEntity);
|
|
i10.$$PartnerEntityTableTableManager get partnerEntity =>
|
|
i10.$$PartnerEntityTableTableManager(_db, _db.partnerEntity);
|
|
i11.$$RemoteExifEntityTableTableManager get remoteExifEntity =>
|
|
i11.$$RemoteExifEntityTableTableManager(_db, _db.remoteExifEntity);
|
|
i12.$$RemoteAlbumAssetEntityTableTableManager get remoteAlbumAssetEntity =>
|
|
i12.$$RemoteAlbumAssetEntityTableTableManager(
|
|
_db,
|
|
_db.remoteAlbumAssetEntity,
|
|
);
|
|
i13.$$RemoteAlbumUserEntityTableTableManager get remoteAlbumUserEntity => i13
|
|
.$$RemoteAlbumUserEntityTableTableManager(_db, _db.remoteAlbumUserEntity);
|
|
i14.$$MemoryEntityTableTableManager get memoryEntity =>
|
|
i14.$$MemoryEntityTableTableManager(_db, _db.memoryEntity);
|
|
i15.$$MemoryAssetEntityTableTableManager get memoryAssetEntity =>
|
|
i15.$$MemoryAssetEntityTableTableManager(_db, _db.memoryAssetEntity);
|
|
i16.$$PersonEntityTableTableManager get personEntity =>
|
|
i16.$$PersonEntityTableTableManager(_db, _db.personEntity);
|
|
i17.$$AssetFaceEntityTableTableManager get assetFaceEntity =>
|
|
i17.$$AssetFaceEntityTableTableManager(_db, _db.assetFaceEntity);
|
|
i18.$$StoreEntityTableTableManager get storeEntity =>
|
|
i18.$$StoreEntityTableTableManager(_db, _db.storeEntity);
|
|
i19.$$TrashedLocalAssetEntityTableTableManager get trashedLocalAssetEntity =>
|
|
i19.$$TrashedLocalAssetEntityTableTableManager(
|
|
_db,
|
|
_db.trashedLocalAssetEntity,
|
|
);
|
|
}
|