fixed freeze after deleting multiple entries
This commit is contained in:
parent
44fe56efdb
commit
8052347895
4 changed files with 11 additions and 7 deletions
|
@ -1,4 +1,6 @@
|
||||||
|
import 'package:aves/model/filters/album.dart';
|
||||||
import 'package:aves/model/image_entry.dart';
|
import 'package:aves/model/image_entry.dart';
|
||||||
|
import 'package:aves/model/settings/settings.dart';
|
||||||
import 'package:aves/model/source/collection_source.dart';
|
import 'package:aves/model/source/collection_source.dart';
|
||||||
import 'package:aves/utils/android_file_utils.dart';
|
import 'package:aves/utils/android_file_utils.dart';
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
|
@ -67,6 +69,10 @@ mixin AlbumMixin on SourceBase {
|
||||||
if (emptyAlbums.isNotEmpty) {
|
if (emptyAlbums.isNotEmpty) {
|
||||||
_folderPaths.removeAll(emptyAlbums);
|
_folderPaths.removeAll(emptyAlbums);
|
||||||
updateAlbums();
|
updateAlbums();
|
||||||
|
|
||||||
|
final pinnedFilters = settings.pinnedFilters;
|
||||||
|
emptyAlbums.forEach((album) => pinnedFilters.remove(AlbumFilter(album, getUniqueAlbumName(album))));
|
||||||
|
settings.pinnedFilters = pinnedFilters;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ class CollectionSource with SourceBase, AlbumMixin, LocationMixin, TagMixin {
|
||||||
eventBus.fire(EntryAddedEvent());
|
eventBus.fire(EntryAddedEvent());
|
||||||
}
|
}
|
||||||
|
|
||||||
void removeEntries(Iterable<ImageEntry> entries) {
|
void removeEntries(List<ImageEntry> entries) {
|
||||||
entries.forEach((entry) => entry.removeFromFavourites());
|
entries.forEach((entry) => entry.removeFromFavourites());
|
||||||
_rawEntries.removeWhere(entries.contains);
|
_rawEntries.removeWhere(entries.contains);
|
||||||
cleanEmptyAlbums(entries.map((entry) => entry.directory).toSet());
|
cleanEmptyAlbums(entries.map((entry) => entry.directory).toSet());
|
||||||
|
|
|
@ -169,7 +169,7 @@ class SelectionActionDelegate with FeedbackMixin, PermissionAwareMixin {
|
||||||
selection: selection,
|
selection: selection,
|
||||||
opStream: ImageFileService.delete(selection),
|
opStream: ImageFileService.delete(selection),
|
||||||
onDone: (processed) {
|
onDone: (processed) {
|
||||||
final deletedUris = processed.where((e) => e.success).map((e) => e.uri);
|
final deletedUris = processed.where((e) => e.success).map((e) => e.uri).toList();
|
||||||
final deletedCount = deletedUris.length;
|
final deletedCount = deletedUris.length;
|
||||||
final selectionCount = selection.length;
|
final selectionCount = selection.length;
|
||||||
if (deletedCount < selectionCount) {
|
if (deletedCount < selectionCount) {
|
||||||
|
@ -177,7 +177,7 @@ class SelectionActionDelegate with FeedbackMixin, PermissionAwareMixin {
|
||||||
showFeedback(context, 'Failed to delete ${Intl.plural(count, one: '$count item', other: '$count items')}');
|
showFeedback(context, 'Failed to delete ${Intl.plural(count, one: '$count item', other: '$count items')}');
|
||||||
}
|
}
|
||||||
if (deletedCount > 0) {
|
if (deletedCount > 0) {
|
||||||
collection.source.removeEntries(selection.where((e) => deletedUris.contains(e.uri)));
|
collection.source.removeEntries(selection.where((e) => deletedUris.contains(e.uri)).toList());
|
||||||
}
|
}
|
||||||
collection.clearSelection();
|
collection.clearSelection();
|
||||||
collection.browse();
|
collection.browse();
|
||||||
|
|
|
@ -86,17 +86,15 @@ class AlbumChipActionDelegate extends ChipActionDelegate with FeedbackMixin, Per
|
||||||
selection: selection,
|
selection: selection,
|
||||||
opStream: ImageFileService.delete(selection),
|
opStream: ImageFileService.delete(selection),
|
||||||
onDone: (processed) {
|
onDone: (processed) {
|
||||||
final deletedUris = processed.where((e) => e.success).map((e) => e.uri);
|
final deletedUris = processed.where((e) => e.success).map((e) => e.uri).toList();
|
||||||
final deletedCount = deletedUris.length;
|
final deletedCount = deletedUris.length;
|
||||||
final selectionCount = selection.length;
|
final selectionCount = selection.length;
|
||||||
if (deletedCount < selectionCount) {
|
if (deletedCount < selectionCount) {
|
||||||
final count = selectionCount - deletedCount;
|
final count = selectionCount - deletedCount;
|
||||||
showFeedback(context, 'Failed to delete ${Intl.plural(count, one: '$count item', other: '$count items')}');
|
showFeedback(context, 'Failed to delete ${Intl.plural(count, one: '$count item', other: '$count items')}');
|
||||||
} else {
|
|
||||||
settings.pinnedFilters = settings.pinnedFilters..remove(filter);
|
|
||||||
}
|
}
|
||||||
if (deletedCount > 0) {
|
if (deletedCount > 0) {
|
||||||
source.removeEntries(selection.where((e) => deletedUris.contains(e.uri)));
|
source.removeEntries(selection.where((e) => deletedUris.contains(e.uri)).toList());
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in a new issue