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/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;
} }
} }

View file

@ -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());

View file

@ -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();

View file

@ -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());
} }
}, },
); );