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:async';
import 'dart:collection'; import 'dart:collection';
import 'package:aves/model/actions/move_type.dart';
import 'package:aves/model/entry.dart'; import 'package:aves/model/entry.dart';
import 'package:aves/model/favourites.dart'; import 'package:aves/model/favourites.dart';
import 'package:aves/model/filters/album.dart'; import 'package:aves/model/filters/album.dart';
@ -50,7 +51,12 @@ class CollectionLens with ChangeNotifier {
final sourceEvents = source.eventBus; final sourceEvents = source.eventBus;
_subscriptions.add(sourceEvents.on<EntryAddedEvent>().listen((e) => _onEntryAdded(e.entries))); _subscriptions.add(sourceEvents.on<EntryAddedEvent>().listen((e) => _onEntryAdded(e.entries)));
_subscriptions.add(sourceEvents.on<EntryRemovedEvent>().listen((e) => _onEntryRemoved(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<EntryRefreshedEvent>().listen((e) => _refresh()));
_subscriptions.add(sourceEvents.on<FilterVisibilityChangedEvent>().listen((e) => _refresh())); _subscriptions.add(sourceEvents.on<FilterVisibilityChangedEvent>().listen((e) => _refresh()));
_subscriptions.add(sourceEvents.on<CatalogMetadataChangedEvent>().listen((e) => _refresh())); _subscriptions.add(sourceEvents.on<CatalogMetadataChangedEvent>().listen((e) => _refresh()));

View file

@ -1,5 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'package:aves/model/actions/move_type.dart';
import 'package:aves/model/covers.dart'; import 'package:aves/model/covers.dart';
import 'package:aves/model/entry.dart'; import 'package:aves/model/entry.dart';
import 'package:aves/model/favourites.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); await _moveEntry(entry, newFields, persist: persist);
entry.metadataChangeNotifier.notify(); entry.metadataChangeNotifier.notify();
eventBus.fire(EntryMovedEvent({entry})); eventBus.fire(EntryMovedEvent(MoveType.move, {entry}));
completer.complete(true); completer.complete(true);
}, },
); );
@ -278,7 +279,7 @@ abstract class CollectionSource with SourceBase, AlbumMixin, LocationMixin, TagM
} }
invalidateAlbumFilterSummary(directories: fromAlbums); invalidateAlbumFilterSummary(directories: fromAlbums);
_invalidate(movedEntries); _invalidate(movedEntries);
eventBus.fire(EntryMovedEvent(movedEntries)); eventBus.fire(EntryMovedEvent(copy ? MoveType.copy : MoveType.move, movedEntries));
} }
bool get initialized => false; 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/entry.dart';
import 'package:aves/model/filters/filters.dart'; import 'package:aves/model/filters/filters.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
@ -18,9 +19,10 @@ class EntryRemovedEvent {
@immutable @immutable
class EntryMovedEvent { class EntryMovedEvent {
final MoveType type;
final Set<AvesEntry> entries; final Set<AvesEntry> entries;
const EntryMovedEvent(this.entries); const EntryMovedEvent(this.type, this.entries);
} }
@immutable @immutable