diff --git a/lib/use_case/add_to_album.dart b/lib/use_case/add_to_album.dart index edc0d23e..01a60c81 100644 --- a/lib/use_case/add_to_album.dart +++ b/lib/use_case/add_to_album.dart @@ -3,7 +3,7 @@ import 'package:nc_photos/account.dart'; import 'package:nc_photos/entity/album.dart'; import 'package:nc_photos/entity/album/item.dart'; import 'package:nc_photos/entity/album/provider.dart'; -import 'package:nc_photos/use_case/resync_album.dart'; +import 'package:nc_photos/use_case/preprocess_album.dart'; import 'package:nc_photos/use_case/update_album.dart'; import 'package:nc_photos/use_case/update_album_with_actual_items.dart'; @@ -16,7 +16,7 @@ class AddToAlbum { _log.info("[call] Add ${items.length} items to album '${album.name}'"); assert(album.provider is AlbumStaticProvider); // resync is needed to work out album cover and latest item - final oldItems = await ResyncAlbum()(account, album); + final oldItems = await PreProcessAlbum()(account, album); final newItems = makeDistinctAlbumItems([ ...items, ...oldItems, diff --git a/lib/use_case/preprocess_album.dart b/lib/use_case/preprocess_album.dart new file mode 100644 index 00000000..b4334674 --- /dev/null +++ b/lib/use_case/preprocess_album.dart @@ -0,0 +1,24 @@ +import 'package:nc_photos/account.dart'; +import 'package:nc_photos/entity/album.dart'; +import 'package:nc_photos/entity/album/item.dart'; +import 'package:nc_photos/entity/album/provider.dart'; +import 'package:nc_photos/use_case/populate_album.dart'; +import 'package:nc_photos/use_case/resync_album.dart'; + +/// Pre-process an album such that it's ready to be displayed +/// +/// Internally, it'll dispatch the work depending on the album: +/// - with AlbumStaticProvider: [ResyncAlbum] +/// - with AlbumDirProvider: [PopulateAlbum] +class PreProcessAlbum { + Future<List<AlbumItem>> call(Account account, Album album) { + if (album.provider is AlbumStaticProvider) { + return ResyncAlbum()(account, album); + } else if (album.provider is AlbumDynamicProvider) { + return PopulateAlbum()(account, album); + } else { + throw ArgumentError( + "Unknown album provider: ${album.provider.runtimeType}"); + } + } +} diff --git a/lib/use_case/remove_from_album.dart b/lib/use_case/remove_from_album.dart index d51e89dc..9dde6758 100644 --- a/lib/use_case/remove_from_album.dart +++ b/lib/use_case/remove_from_album.dart @@ -5,7 +5,7 @@ import 'package:nc_photos/entity/album/item.dart'; import 'package:nc_photos/entity/album/provider.dart'; import 'package:nc_photos/entity/file.dart'; import 'package:nc_photos/iterable_extension.dart'; -import 'package:nc_photos/use_case/resync_album.dart'; +import 'package:nc_photos/use_case/preprocess_album.dart'; import 'package:nc_photos/use_case/update_album.dart'; import 'package:nc_photos/use_case/update_album_with_actual_items.dart'; @@ -34,7 +34,7 @@ class RemoveFromAlbum { element.file.bestDateTime == album.provider.latestItemTime)) { _log.info("[call] Resync as latest item is being removed"); // need to update the album properties - final newItemsSynced = await ResyncAlbum()(account, newAlbum); + final newItemsSynced = await PreProcessAlbum()(account, newAlbum); newAlbum = await UpdateAlbumWithActualItems(null)( account, newAlbum, diff --git a/lib/widget/album_browser.dart b/lib/widget/album_browser.dart index 3d38ce2b..a8bfcb66 100644 --- a/lib/widget/album_browser.dart +++ b/lib/widget/album_browser.dart @@ -23,8 +23,8 @@ import 'package:nc_photos/session_storage.dart'; import 'package:nc_photos/share_handler.dart'; import 'package:nc_photos/snack_bar_manager.dart'; import 'package:nc_photos/theme.dart'; +import 'package:nc_photos/use_case/preprocess_album.dart'; import 'package:nc_photos/use_case/remove_from_album.dart'; -import 'package:nc_photos/use_case/resync_album.dart'; import 'package:nc_photos/use_case/update_album.dart'; import 'package:nc_photos/use_case/update_album_with_actual_items.dart'; import 'package:nc_photos/widget/album_browser_mixin.dart'; @@ -655,7 +655,7 @@ class _AlbumBrowserState extends State<AlbumBrowser> Future<void> _setAlbum(Album album) async { assert(album.provider is AlbumStaticProvider); - final items = await ResyncAlbum()(widget.account, album); + final items = await PreProcessAlbum()(widget.account, album); album = album.copyWith( provider: AlbumStaticProvider.of(album).copyWith( items: items, diff --git a/lib/widget/album_importer.dart b/lib/widget/album_importer.dart index f90ccdd4..9007872b 100644 --- a/lib/widget/album_importer.dart +++ b/lib/widget/album_importer.dart @@ -17,7 +17,7 @@ import 'package:nc_photos/k.dart' as k; import 'package:nc_photos/snack_bar_manager.dart'; import 'package:nc_photos/theme.dart'; import 'package:nc_photos/use_case/create_album.dart'; -import 'package:nc_photos/use_case/populate_album.dart'; +import 'package:nc_photos/use_case/preprocess_album.dart'; import 'package:nc_photos/use_case/update_album_with_actual_items.dart'; import 'package:nc_photos/widget/processing_dialog.dart'; import 'package:path/path.dart' as path; @@ -235,7 +235,7 @@ class _AlbumImporterState extends State<AlbumImporter> { ); _log.info("[_createAllAlbums] Creating dir album: $album"); - final items = await PopulateAlbum()(widget.account, album); + final items = await PreProcessAlbum()(widget.account, album); album = await UpdateAlbumWithActualItems(null)( widget.account, album, items); diff --git a/lib/widget/dynamic_album_browser.dart b/lib/widget/dynamic_album_browser.dart index cd885878..b186fb5a 100644 --- a/lib/widget/dynamic_album_browser.dart +++ b/lib/widget/dynamic_album_browser.dart @@ -25,7 +25,7 @@ import 'package:nc_photos/platform/k.dart' as platform_k; import 'package:nc_photos/share_handler.dart'; import 'package:nc_photos/snack_bar_manager.dart'; import 'package:nc_photos/theme.dart'; -import 'package:nc_photos/use_case/populate_album.dart'; +import 'package:nc_photos/use_case/preprocess_album.dart'; import 'package:nc_photos/use_case/remove.dart'; import 'package:nc_photos/use_case/update_album.dart'; import 'package:nc_photos/use_case/update_album_with_actual_items.dart'; @@ -161,7 +161,7 @@ class _DynamicAlbumBrowserState extends State<DynamicAlbumBrowser> Future<void> _initAlbum() async { assert(widget.album.provider is AlbumDynamicProvider); - final items = await PopulateAlbum()(widget.account, widget.album); + final items = await PreProcessAlbum()(widget.account, widget.album); final album = await _updateAlbumPostPopulate(widget.album, items); if (mounted) { setState(() {