From 17ef17ca5bf0bdda7b545823ca9ce06094058716 Mon Sep 17 00:00:00 2001 From: nyne Date: Sun, 9 Feb 2025 18:22:38 +0800 Subject: [PATCH] Add a button for managing network folders. --- lib/pages/favorites/favorites_page.dart | 1 + lib/pages/favorites/side_bar.dart | 45 +++++++++++++++++------- lib/pages/settings/explore_settings.dart | 28 ++++++++------- 3 files changed, 49 insertions(+), 25 deletions(-) diff --git a/lib/pages/favorites/favorites_page.dart b/lib/pages/favorites/favorites_page.dart index 80445b2..e9dc5aa 100644 --- a/lib/pages/favorites/favorites_page.dart +++ b/lib/pages/favorites/favorites_page.dart @@ -16,6 +16,7 @@ import 'package:venera/foundation/res.dart'; import 'package:venera/network/download.dart'; import 'package:venera/pages/comic_page.dart'; import 'package:venera/pages/reader/reader.dart'; +import 'package:venera/pages/settings/settings_page.dart'; import 'package:venera/utils/io.dart'; import 'package:venera/utils/translations.dart'; diff --git a/lib/pages/favorites/side_bar.dart b/lib/pages/favorites/side_bar.dart index 9246836..f2535bb 100644 --- a/lib/pages/favorites/side_bar.dart +++ b/lib/pages/favorites/side_bar.dart @@ -20,22 +20,35 @@ class _LeftBarState extends State<_LeftBar> implements FolderList { var networkFolders = []; + void findNetworkFolders() { + networkFolders.clear(); + var all = ComicSource.all() + .where((e) => e.favoriteData != null) + .map((e) => e.favoriteData!.key) + .toList(); + var settings = appdata.settings['favorites'] as List; + for (var p in settings) { + if (all.contains(p) && !networkFolders.contains(p)) { + networkFolders.add(p); + } + } + } + @override void initState() { favPage = widget.favPage ?? context.findAncestorStateOfType<_FavoritesPageState>()!; favPage.folderList = this; folders = LocalFavoritesManager().folderNames; - networkFolders = ComicSource.all() - .where((e) => e.favoriteData != null && e.isLogged) - .map((e) => e.favoriteData!.key) - .toList(); + findNetworkFolders(); + appdata.settings.addListener(updateFolders); super.initState(); } @override void dispose() { super.dispose(); + appdata.settings.removeListener(updateFolders); } @override @@ -102,7 +115,8 @@ class _LeftBarState extends State<_LeftBar> implements FolderList { onClick: () { newFolder().then((value) { setState(() { - folders = LocalFavoritesManager().folderNames; + folders = + LocalFavoritesManager().folderNames; }); }); }, @@ -113,7 +127,8 @@ class _LeftBarState extends State<_LeftBar> implements FolderList { onClick: () { sortFolders().then((value) { setState(() { - folders = LocalFavoritesManager().folderNames; + folders = + LocalFavoritesManager().folderNames; }); }); }, @@ -143,15 +158,24 @@ class _LeftBarState extends State<_LeftBar> implements FolderList { ), child: Row( children: [ - const SizedBox(width: 16), Icon( Icons.cloud, color: context.colorScheme.secondary, ), const SizedBox(width: 12), Text("Network".tl), + const Spacer(), + IconButton( + icon: const Icon(Icons.settings), + onPressed: () { + showPopUpWidget( + App.rootContext, + setFavoritesPagesWidget(), + ); + }, + ), ], - ), + ).paddingHorizontal(16), ); } index--; @@ -241,10 +265,7 @@ class _LeftBarState extends State<_LeftBar> implements FolderList { if (!mounted) return; setState(() { folders = LocalFavoritesManager().folderNames; - networkFolders = ComicSource.all() - .where((e) => e.favoriteData != null) - .map((e) => e.favoriteData!.key) - .toList(); + findNetworkFolders(); }); } } diff --git a/lib/pages/settings/explore_settings.dart b/lib/pages/settings/explore_settings.dart index dc40018..d945d08 100644 --- a/lib/pages/settings/explore_settings.dart +++ b/lib/pages/settings/explore_settings.dart @@ -38,19 +38,7 @@ class _ExploreSettingsState extends State { ).toSliver(), _PopupWindowSetting( title: "Network Favorite Pages".tl, - builder: () { - var pages = {}; - for (var c in ComicSource.all()) { - if (c.favoriteData != null) { - pages[c.favoriteData!.key] = c.favoriteData!.title; - } - } - return _MultiPagesFilter( - title: "Network Favorite Pages".tl, - settingsIndex: "favorites", - pages: pages, - ); - }, + builder: setFavoritesPagesWidget, ).toSliver(), _SwitchSetting( title: "Show favorite status on comic tile".tl, @@ -208,4 +196,18 @@ Widget setCategoryPagesWidget() { settingsIndex: "categories", pages: pages, ); +} + +Widget setFavoritesPagesWidget() { + var pages = {}; + for (var c in ComicSource.all()) { + if (c.favoriteData != null) { + pages[c.favoriteData!.key] = c.favoriteData!.title; + } + } + return _MultiPagesFilter( + title: "Network Favorite Pages".tl, + settingsIndex: "favorites", + pages: pages, + ); } \ No newline at end of file