fixed freeze after deleting multiple entries

This commit is contained in:
Thibault Deckers 2020-09-28 12:10:37 +09:00
parent 44fe56efdb
commit 8052347895
4 changed files with 11 additions and 7 deletions

View file

@ -1,4 +1,6 @@
import 'package:aves/model/filters/album.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/utils/android_file_utils.dart';
import 'package:collection/collection.dart';
@ -67,6 +69,10 @@ mixin AlbumMixin on SourceBase {
if (emptyAlbums.isNotEmpty) {
_folderPaths.removeAll(emptyAlbums);
updateAlbums();
final pinnedFilters = settings.pinnedFilters;
emptyAlbums.forEach((album) => pinnedFilters.remove(AlbumFilter(album, getUniqueAlbumName(album))));
settings.pinnedFilters = pinnedFilters;
}
}

View file

@ -70,7 +70,7 @@ class CollectionSource with SourceBase, AlbumMixin, LocationMixin, TagMixin {
eventBus.fire(EntryAddedEvent());
}
void removeEntries(Iterable<ImageEntry> entries) {
void removeEntries(List<ImageEntry> entries) {
entries.forEach((entry) => entry.removeFromFavourites());
_rawEntries.removeWhere(entries.contains);
cleanEmptyAlbums(entries.map((entry) => entry.directory).toSet());

View file

@ -169,7 +169,7 @@ class SelectionActionDelegate with FeedbackMixin, PermissionAwareMixin {
selection: selection,
opStream: ImageFileService.delete(selection),
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 selectionCount = selection.length;
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')}');
}
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.browse();

View file

@ -86,17 +86,15 @@ class AlbumChipActionDelegate extends ChipActionDelegate with FeedbackMixin, Per
selection: selection,
opStream: ImageFileService.delete(selection),
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 selectionCount = selection.length;
if (deletedCount < selectionCount) {
final count = selectionCount - deletedCount;
showFeedback(context, 'Failed to delete ${Intl.plural(count, one: '$count item', other: '$count items')}');
} else {
settings.pinnedFilters = settings.pinnedFilters..remove(filter);
}
if (deletedCount > 0) {
source.removeEntries(selection.where((e) => deletedUris.contains(e.uri)));
source.removeEntries(selection.where((e) => deletedUris.contains(e.uri)).toList());
}
},
);