From f997f0638de7f87094dfaa961f9a8319f584e919 Mon Sep 17 00:00:00 2001 From: Ming Ming Date: Fri, 5 Nov 2021 19:18:29 +0800 Subject: [PATCH] Fix cover not updating after removing manual cover --- lib/use_case/remove_from_album.dart | 52 ++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/lib/use_case/remove_from_album.dart b/lib/use_case/remove_from_album.dart index a0a30b13..6af4b5ba 100644 --- a/lib/use_case/remove_from_album.dart +++ b/lib/use_case/remove_from_album.dart @@ -2,6 +2,7 @@ import 'package:logging/logging.dart'; import 'package:nc_photos/account.dart'; import 'package:nc_photos/app_db.dart'; import 'package:nc_photos/entity/album.dart'; +import 'package:nc_photos/entity/album/cover_provider.dart'; import 'package:nc_photos/entity/album/item.dart'; import 'package:nc_photos/entity/album/provider.dart'; import 'package:nc_photos/entity/file.dart'; @@ -35,18 +36,7 @@ class RemoveFromAlbum { items: newItems, ), ); - // check if any of the removed items was the latest item - if (items.whereType().any((element) => - 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 PreProcessAlbum(appDb)(account, newAlbum); - newAlbum = await UpdateAlbumWithActualItems(null)( - account, - newAlbum, - newItemsSynced, - ); - } + newAlbum = await _fixAlbumPostRemove(account, newAlbum, items); await UpdateAlbum(albumRepo)(account, newAlbum); if (pref.isLabEnableSharedAlbumOr(false)) { @@ -68,6 +58,44 @@ class RemoveFromAlbum { return newAlbum; } + /// Update the album accordingly if any of the removed items is interesting + /// (e.g., cover, latest item, etc) + Future _fixAlbumPostRemove( + Account account, Album newAlbum, List items) async { + bool isNeedUpdate = false; + for (final fileItem in items.whereType()) { + if (newAlbum.coverProvider + .getCover(newAlbum) + ?.compareServerIdentity(fileItem.file) == + true) { + // revert to auto cover so [UpdateAutoAlbumCover] can do its work + newAlbum = newAlbum.copyWith( + coverProvider: AlbumAutoCoverProvider(), + ); + isNeedUpdate = true; + break; + } + if (fileItem.file.bestDateTime == newAlbum.provider.latestItemTime) { + isNeedUpdate = true; + break; + } + } + if (!isNeedUpdate) { + return newAlbum; + } + + _log.info( + "[_fixAlbumPostRemove] Resync as interesting item is being removed"); + // need to update the album properties + final newItemsSynced = await PreProcessAlbum(appDb)(account, newAlbum); + newAlbum = await UpdateAlbumWithActualItems(null)( + account, + newAlbum, + newItemsSynced, + ); + return newAlbum; + } + final AlbumRepo albumRepo; final ShareRepo shareRepo; final FileRepo fileRepo;