Files
venera/lib/foundation/comic_source/favorites.dart
luckyray d874920c88 Feat: Image favorites (#126)
* feat: 增加图片收藏

* feat: 主体图片收藏页面实现

* feat: 点击打开大图浏览

* feat: 数据结构变更

* feat: 基本完成

* feat: 翻译与bug修复

* feat: 实机测试和问题修复

* feat: jm导入, pica历史记录nhentai有问题, 一键反转

* fix: 大小写不一致, 一个htManga, 一个htmanga

* feat: 拉取收藏优化

* feat: 改成以ep为准

* feat: 兜底一些可能报错场景

* chore: 没有用到

* feat: 尽量保证和网络收藏顺序一致

* feat: 支持显示热点tag

* feat: 支持双击收藏, 不过此时禁止放大图片

* fix: 自动塞封面逻辑完善, 切换快速收藏图片立刻生效

* Refactor

* fix updateValue

* feat: 双击功能提示

* fix: 被确定取消收藏的才删除

* Refactor ImageFavoritesPage

* translate author

* feat: 功能提示改到dialog中

* fix text editing

* fix text editing

* feat: 功能提示放到邮件或长按菜单中

* fix: 修复tag过滤不生效问题

* Improve image loading

* The default value of quickCollectImage should be false.

* Refactor DragListener

* Refactor ImageFavoriteItem & ImageFavoritePhotoView

* Refactor

* Fix `ImageFavoriteManager.has`

* Fix UI

* Improve UI

---------

Co-authored-by: nyne <me@nyne.dev>
2025-01-15 16:07:08 +08:00

64 lines
1.7 KiB
Dart

part of 'comic_source.dart';
typedef AddOrDelFavFunc = Future<Res<bool>> Function(
String comicId, String folderId, bool isAdding, String? favId);
class FavoriteData {
final String key;
final String title;
final bool multiFolder;
// 这个收藏时间新旧顺序, 是为了最小成本同步远端的收藏, 只拉取远程最新收藏的漫画, 就不需要全拉取一遍了
// 如果为 null, 当做从新到旧
final bool? isOldToNewSort;
final Future<Res<List<Comic>>> Function(int page, [String? folder])?
loadComic;
final Future<Res<List<Comic>>> Function(String? next, [String? folder])?
loadNext;
/// key-id, value-name
///
/// if comicId is not null, Res.subData is the folders that the comic is in
final Future<Res<Map<String, String>>> Function([String? comicId])?
loadFolders;
/// A value of null disables this feature
final Future<Res<bool>> Function(String key)? deleteFolder;
/// A value of null disables this feature
final Future<Res<bool>> Function(String name)? addFolder;
/// A value of null disables this feature
final String? allFavoritesId;
final AddOrDelFavFunc? addOrDelFavorite;
const FavoriteData({
required this.key,
required this.title,
required this.multiFolder,
required this.loadComic,
required this.loadNext,
this.loadFolders,
this.deleteFolder,
this.addFolder,
this.allFavoritesId,
this.addOrDelFavorite,
this.isOldToNewSort,
});
}
FavoriteData getFavoriteData(String key) {
var source = ComicSource.find(key) ?? (throw "Unknown source key: $key");
return source.favoriteData!;
}
FavoriteData? getFavoriteDataOrNull(String key) {
var source = ComicSource.find(key);
return source?.favoriteData;
}