optimized refresh after copy

This commit is contained in:
Thibault Deckers 2021-11-29 16:57:56 +09:00
parent 52fb0a7e15
commit e9d7434926
3 changed files with 13 additions and 4 deletions

View file

@ -1,6 +1,7 @@
import 'dart:async';
import 'dart:collection';
import 'package:aves/model/actions/move_type.dart';
import 'package:aves/model/entry.dart';
import 'package:aves/model/favourites.dart';
import 'package:aves/model/filters/album.dart';
@ -50,7 +51,12 @@ class CollectionLens with ChangeNotifier {
final sourceEvents = source.eventBus;
_subscriptions.add(sourceEvents.on<EntryAddedEvent>().listen((e) => _onEntryAdded(e.entries)));
_subscriptions.add(sourceEvents.on<EntryRemovedEvent>().listen((e) => _onEntryRemoved(e.entries)));
_subscriptions.add(sourceEvents.on<EntryMovedEvent>().listen((e) => _refresh()));
_subscriptions.add(sourceEvents.on<EntryMovedEvent>().listen((e) {
if (e.type == MoveType.move) {
// refreshing copied items is already handled via `EntryAddedEvent`s
_refresh();
}
}));
_subscriptions.add(sourceEvents.on<EntryRefreshedEvent>().listen((e) => _refresh()));
_subscriptions.add(sourceEvents.on<FilterVisibilityChangedEvent>().listen((e) => _refresh()));
_subscriptions.add(sourceEvents.on<CatalogMetadataChangedEvent>().listen((e) => _refresh()));

View file

@ -1,5 +1,6 @@
import 'dart:async';
import 'package:aves/model/actions/move_type.dart';
import 'package:aves/model/covers.dart';
import 'package:aves/model/entry.dart';
import 'package:aves/model/favourites.dart';
@ -187,7 +188,7 @@ abstract class CollectionSource with SourceBase, AlbumMixin, LocationMixin, TagM
}
await _moveEntry(entry, newFields, persist: persist);
entry.metadataChangeNotifier.notify();
eventBus.fire(EntryMovedEvent({entry}));
eventBus.fire(EntryMovedEvent(MoveType.move, {entry}));
completer.complete(true);
},
);
@ -278,7 +279,7 @@ abstract class CollectionSource with SourceBase, AlbumMixin, LocationMixin, TagM
}
invalidateAlbumFilterSummary(directories: fromAlbums);
_invalidate(movedEntries);
eventBus.fire(EntryMovedEvent(movedEntries));
eventBus.fire(EntryMovedEvent(copy ? MoveType.copy : MoveType.move, movedEntries));
}
bool get initialized => false;

View file

@ -1,3 +1,4 @@
import 'package:aves/model/actions/move_type.dart';
import 'package:aves/model/entry.dart';
import 'package:aves/model/filters/filters.dart';
import 'package:flutter/foundation.dart';
@ -18,9 +19,10 @@ class EntryRemovedEvent {
@immutable
class EntryMovedEvent {
final MoveType type;
final Set<AvesEntry> entries;
const EntryMovedEvent(this.entries);
const EntryMovedEvent(this.type, this.entries);
}
@immutable