From e9d74349263e1f286971828171dc610ca833d584 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Mon, 29 Nov 2021 16:57:56 +0900 Subject: [PATCH] optimized refresh after copy --- lib/model/source/collection_lens.dart | 8 +++++++- lib/model/source/collection_source.dart | 5 +++-- lib/model/source/events.dart | 4 +++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/model/source/collection_lens.dart b/lib/model/source/collection_lens.dart index 60e16c912..59166c762 100644 --- a/lib/model/source/collection_lens.dart +++ b/lib/model/source/collection_lens.dart @@ -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().listen((e) => _onEntryAdded(e.entries))); _subscriptions.add(sourceEvents.on().listen((e) => _onEntryRemoved(e.entries))); - _subscriptions.add(sourceEvents.on().listen((e) => _refresh())); + _subscriptions.add(sourceEvents.on().listen((e) { + if (e.type == MoveType.move) { + // refreshing copied items is already handled via `EntryAddedEvent`s + _refresh(); + } + })); _subscriptions.add(sourceEvents.on().listen((e) => _refresh())); _subscriptions.add(sourceEvents.on().listen((e) => _refresh())); _subscriptions.add(sourceEvents.on().listen((e) => _refresh())); diff --git a/lib/model/source/collection_source.dart b/lib/model/source/collection_source.dart index e6eb8cf23..978f9957b 100644 --- a/lib/model/source/collection_source.dart +++ b/lib/model/source/collection_source.dart @@ -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; diff --git a/lib/model/source/events.dart b/lib/model/source/events.dart index f4ce3f5d5..582a86c2f 100644 --- a/lib/model/source/events.dart +++ b/lib/model/source/events.dart @@ -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 entries; - const EntryMovedEvent(this.entries); + const EntryMovedEvent(this.type, this.entries); } @immutable