From 309df2143b554250449c61cded7a39a8416d0760 Mon Sep 17 00:00:00 2001 From: nyne Date: Thu, 13 Mar 2025 16:09:17 +0800 Subject: [PATCH] Make sure the follow updates is initialized correctly. --- lib/foundation/appdata.dart | 51 ++++++++++++++++++----------------- lib/foundation/favorites.dart | 18 ++++++++++--- 2 files changed, 42 insertions(+), 27 deletions(-) diff --git a/lib/foundation/appdata.dart b/lib/foundation/appdata.dart index 93c1405..718eb07 100644 --- a/lib/foundation/appdata.dart +++ b/lib/foundation/appdata.dart @@ -4,9 +4,10 @@ import 'package:flutter/foundation.dart'; import 'package:path_provider/path_provider.dart'; import 'package:venera/foundation/app.dart'; import 'package:venera/utils/data_sync.dart'; +import 'package:venera/utils/init.dart'; import 'package:venera/utils/io.dart'; -class Appdata { +class Appdata with Init { Appdata._create(); final Settings settings = Settings._create(); @@ -53,28 +54,6 @@ class Appdata { saveData(); } - Future init() async { - var dataPath = (await getApplicationSupportDirectory()).path; - var file = File(FilePath.join( - dataPath, - 'appdata.json', - )); - if (!await file.exists()) { - return; - } - var json = jsonDecode(await file.readAsString()); - for (var key in (json['settings'] as Map).keys) { - if (json['settings'][key] != null) { - settings[key] = json['settings'][key]; - } - } - searchHistory = List.from(json['searchHistory']); - var implicitDataFile = File(FilePath.join(dataPath, 'implicitData.json')); - if (await implicitDataFile.exists()) { - implicitData = jsonDecode(await implicitDataFile.readAsString()); - } - } - Map toJson() { return { 'settings': settings._data, @@ -110,6 +89,29 @@ class Appdata { var file = File(FilePath.join(App.dataPath, 'implicitData.json')); file.writeAsString(jsonEncode(implicitData)); } + + @override + Future doInit() async { + var dataPath = (await getApplicationSupportDirectory()).path; + var file = File(FilePath.join( + dataPath, + 'appdata.json', + )); + if (!await file.exists()) { + return; + } + var json = jsonDecode(await file.readAsString()); + for (var key in (json['settings'] as Map).keys) { + if (json['settings'][key] != null) { + settings[key] = json['settings'][key]; + } + } + searchHistory = List.from(json['searchHistory']); + var implicitDataFile = File(FilePath.join(dataPath, 'implicitData.json')); + if (await implicitDataFile.exists()) { + implicitData = jsonDecode(await implicitDataFile.readAsString()); + } + } } final appdata = Appdata._create(); @@ -160,7 +162,8 @@ class Settings with ChangeNotifier { 'customImageProcessing': defaultCustomImageProcessing, 'sni': true, 'autoAddLanguageFilter': 'none', // none, chinese, english, japanese - 'comicSourceListUrl': "https://cdn.jsdelivr.net/gh/venera-app/venera-configs@latest/index.json", + 'comicSourceListUrl': + "https://cdn.jsdelivr.net/gh/venera-app/venera-configs@latest/index.json", 'preloadImageCount': 4, 'followUpdatesFolder': null, 'initialPage': '0', diff --git a/lib/foundation/favorites.dart b/lib/foundation/favorites.dart index f7ac7a4..0b9f353 100644 --- a/lib/foundation/favorites.dart +++ b/lib/foundation/favorites.dart @@ -224,7 +224,8 @@ class LocalFavoritesManager with ChangeNotifier { source_folder text ); """); - for (var folder in _getFolderNamesWithDB()) { + var folderNames = _getFolderNamesWithDB(); + for (var folder in folderNames) { var columns = _db.select(""" pragma table_info("$folder"); """); @@ -246,6 +247,15 @@ class LocalFavoritesManager with ChangeNotifier { break; } } + await appdata.ensureInit(); + // Make sure the follow updates folder is ready + var followUpdateFolder = appdata.settings['followUpdatesFolder']; + if (followUpdateFolder is String && + folderNames.contains(followUpdateFolder)) { + prepareTableForFollowUpdates(followUpdateFolder, false); + } else { + appdata.settings['followUpdatesFolder'] = null; + } } List find(String id, ComicType type) { @@ -849,7 +859,7 @@ class LocalFavoritesManager with ChangeNotifier { } } - void prepareTableForFollowUpdates(String table) { + void prepareTableForFollowUpdates(String table, [bool clearData = true]) { // check if the table has the column "last_update_time" "has_new_update" "last_check_time" var columns = _db.select(""" pragma table_info("$table"); @@ -866,10 +876,12 @@ class LocalFavoritesManager with ChangeNotifier { add column has_new_update int; """); } - _db.execute(""" + if (clearData) { + _db.execute(""" update "$table" set has_new_update = 0; """); + } if (!columns.any((element) => element["name"] == "last_check_time")) { _db.execute(""" alter table "$table"