From 3ff2f6aa36879817fee31b4feeda9b2da6763f64 Mon Sep 17 00:00:00 2001 From: nyne Date: Sat, 15 Feb 2025 16:32:51 +0800 Subject: [PATCH] When adding a favorite, also add the update time. --- lib/foundation/favorites.dart | 15 ++++++++++- lib/pages/comic_details_page/actions.dart | 3 +++ lib/pages/comic_details_page/favorite.dart | 30 ++++++++++++++-------- 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/lib/foundation/favorites.dart b/lib/foundation/favorites.dart index a1f05ed..ff80b43 100644 --- a/lib/foundation/favorites.dart +++ b/lib/foundation/favorites.dart @@ -462,7 +462,8 @@ class LocalFavoritesManager with ChangeNotifier { /// add comic to a folder. /// return true if success, false if already exists - bool addComic(String folder, FavoriteItem comic, [int? order]) { + bool addComic(String folder, FavoriteItem comic, + [int? order, String? updateTime]) { _modifiedAfterLastCache = true; if (!existsFolder(folder)) { throw Exception("Folder does not exists"); @@ -501,6 +502,18 @@ class LocalFavoritesManager with ChangeNotifier { values (?, ?, ?, ?, ?, ?, ?, ?, ?); """, [...params, minValue(folder) - 1]); } + if (updateTime != null) { + var columns = _db.select(""" + pragma table_info("$folder"); + """); + if (columns.any((element) => element["name"] == "last_update_time")) { + _db.execute(""" + update "$folder" + set last_update_time = ? + where id == ? and type == ?; + """, [updateTime, comic.id, comic.type.value]); + } + } notifyListeners(); return true; } diff --git a/lib/pages/comic_details_page/actions.dart b/lib/pages/comic_details_page/actions.dart index 5ca4e89..7636426 100644 --- a/lib/pages/comic_details_page/actions.dart +++ b/lib/pages/comic_details_page/actions.dart @@ -61,6 +61,7 @@ abstract mixin class _ComicPageActions { update(); }, favoriteItem: _toFavoriteItem(), + updateTime: comic.findUpdateTime(), ), ); } @@ -73,6 +74,8 @@ abstract mixin class _ComicPageActions { LocalFavoritesManager().addComic( folder, _toFavoriteItem(), + null, + comic.findUpdateTime(), ); isAddToLocalFav = true; update(); diff --git a/lib/pages/comic_details_page/favorite.dart b/lib/pages/comic_details_page/favorite.dart index d81b2e2..697122e 100644 --- a/lib/pages/comic_details_page/favorite.dart +++ b/lib/pages/comic_details_page/favorite.dart @@ -7,6 +7,7 @@ class _FavoritePanel extends StatefulWidget { required this.isFavorite, required this.onFavorite, required this.favoriteItem, + this.updateTime, }); final String cid; @@ -22,6 +23,8 @@ class _FavoritePanel extends StatefulWidget { final FavoriteItem favoriteItem; + final String? updateTime; + @override State<_FavoritePanel> createState() => _FavoritePanelState(); } @@ -164,14 +167,14 @@ class _FavoritePanelState extends State<_FavoritePanel> onChanged: disabled ? null : (v) { - setState(() { - if (v!) { - selectedLocalFolders.add(folder); - } else { - selectedLocalFolders.remove(folder); - } - }); - }, + setState(() { + if (v!) { + selectedLocalFolders.add(folder); + } else { + selectedLocalFolders.remove(folder); + } + }); + }, ); }, ), @@ -190,7 +193,12 @@ class _FavoritePanelState extends State<_FavoritePanel> widget.onFavorite(false, null); } else { for (var folder in selectedLocalFolders) { - LocalFavoritesManager().addComic(folder, widget.favoriteItem); + LocalFavoritesManager().addComic( + folder, + widget.favoriteItem, + null, + widget.updateTime, + ); } widget.onFavorite(true, null); } @@ -396,7 +404,7 @@ class _NetworkFavoritesState extends State<_NetworkFavorites> { isLoading = true; }); var res = - await widget.comicSource.favoriteData!.addOrDelFavorite!( + await widget.comicSource.favoriteData!.addOrDelFavorite!( widget.cid, selected!, !addedFolders.contains(selected!), @@ -421,4 +429,4 @@ class _NetworkFavoritesState extends State<_NetworkFavorites> { ); } } -} \ No newline at end of file +}