code: updated impl inside deleteLocalOnlyAssets

This commit is contained in:
Yashraj Jain
2024-10-09 10:58:27 +05:30
parent c266d2344a
commit a52ba17740
2 changed files with 31 additions and 22 deletions
+28 -5
View File
@@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/providers/memory.provider.dart'; import 'package:immich_mobile/providers/memory.provider.dart';
import 'package:immich_mobile/repositories/asset_media.repository.dart'; import 'package:immich_mobile/repositories/asset_media.repository.dart';
@@ -14,6 +15,7 @@ import 'package:immich_mobile/services/sync.service.dart';
import 'package:immich_mobile/services/user.service.dart'; import 'package:immich_mobile/services/user.service.dart';
import 'package:immich_mobile/utils/db.dart'; import 'package:immich_mobile/utils/db.dart';
import 'package:immich_mobile/utils/renderlist_generator.dart'; import 'package:immich_mobile/utils/renderlist_generator.dart';
import 'package:immich_mobile/widgets/common/immich_toast.dart';
import 'package:isar/isar.dart'; import 'package:isar/isar.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
@@ -78,27 +80,48 @@ class AssetNotifier extends StateNotifier<bool> {
} }
Future<bool> deleteLocalOnlyAssets( Future<bool> deleteLocalOnlyAssets(
BuildContext context,
Iterable<Asset> deleteAssets, { Iterable<Asset> deleteAssets, {
bool onlyBackedUp = false, bool onlyBackedUp = false,
}) async { }) async {
_deleteInProgress = true; _deleteInProgress = true;
state = true; state = true;
try { try {
// Filter local assets based on the backup status (`isRemote`).
// If `onlyBackedUp` is true, only select assets that are also present on the server (`isRemote`).
final assetsToDelete = deleteAssets
.where((e) => e.isLocal && (!onlyBackedUp || e.isRemote))
.toList();
if (assetsToDelete.isEmpty) {
// No assets to delete, exit early
ImmichToast.show(
context: context,
msg: 'No backed-up assets selected for deletion.',
gravity: ToastGravity.BOTTOM,
);
return false;
}
// Continue with deletion of the filtered assets
final assets = onlyBackedUp final assets = onlyBackedUp
? deleteAssets.where((e) => e.storage == AssetState.merged) ? assetsToDelete.where((e) => e.storage == AssetState.merged)
: deleteAssets; : assetsToDelete;
final localDeleted = await _deleteLocalAssets(assets); final localDeleted = await _deleteLocalAssets(assets);
if (localDeleted.isNotEmpty) { if (localDeleted.isNotEmpty) {
final localOnlyIds = deleteAssets final localOnlyIds = assetsToDelete
.where((e) => e.storage == AssetState.local) .where((e) => e.storage == AssetState.local)
.map((e) => e.id) .map((e) => e.id)
.toList(); .toList();
// Update merged assets to remote only // Update merged assets to remote only
final mergedAssets = final mergedAssets = assetsToDelete
deleteAssets.where((e) => e.storage == AssetState.merged).map((e) { .where((e) => e.storage == AssetState.merged)
.map((e) {
e.localId = null; e.localId = null;
return e; return e;
}).toList(); }).toList();
await _db.writeTxn(() async { await _db.writeTxn(() async {
if (mergedAssets.isNotEmpty) { if (mergedAssets.isNotEmpty) {
await _db.assets.putAll(mergedAssets); await _db.assets.putAll(mergedAssets);
@@ -204,25 +204,11 @@ class MultiselectGrid extends HookConsumerWidget {
void onDeleteLocal(bool onlyBackedUp) async { void onDeleteLocal(bool onlyBackedUp) async {
processing.value = true; processing.value = true;
try { try {
// Filter local assets based on the backup status (`isRemote`). final localIds = selection.value.where((a) => a.isLocal).toList();
// If `onlyBackedUp` is true, only select assets that are also present on the server (`isRemote`).
final localIds = selection.value
.where((a) => a.isLocal && (!onlyBackedUp || a.isRemote))
.toList();
if (localIds.isEmpty) {
ImmichToast.show(
context: context,
msg: 'No backed-up assets selected for deletion.',
gravity: ToastGravity.BOTTOM,
);
return;
}
// Proceed with deletion of filtered assets
final isDeleted = await ref final isDeleted = await ref
.read(assetProvider.notifier) .read(assetProvider.notifier)
.deleteLocalOnlyAssets(localIds, onlyBackedUp: onlyBackedUp); .deleteLocalOnlyAssets(context, localIds,
onlyBackedUp: onlyBackedUp);
if (isDeleted) { if (isDeleted) {
ImmichToast.show( ImmichToast.show(