From c4f531a4638227f5705652a1492b5da3056cd917 Mon Sep 17 00:00:00 2001 From: nyne Date: Tue, 12 Nov 2024 16:36:02 +0800 Subject: [PATCH] Exported data should contain cookies --- lib/foundation/comic_source/comic_source.dart | 2 + lib/utils/data.dart | 38 +++++++++++++------ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/lib/foundation/comic_source/comic_source.dart b/lib/foundation/comic_source/comic_source.dart index f4c64df..758d8f3 100644 --- a/lib/foundation/comic_source/comic_source.dart +++ b/lib/foundation/comic_source/comic_source.dart @@ -10,6 +10,7 @@ import 'package:venera/foundation/app.dart'; import 'package:venera/foundation/comic_type.dart'; import 'package:venera/foundation/history.dart'; import 'package:venera/foundation/res.dart'; +import 'package:venera/utils/data_sync.dart'; import 'package:venera/utils/ext.dart'; import 'package:venera/utils/io.dart'; import 'package:venera/utils/translations.dart'; @@ -236,6 +237,7 @@ class ComicSource { } await file.writeAsString(jsonEncode(data)); _isSaving = false; + DataSync().uploadData(); } Future reLogin() async { diff --git a/lib/utils/data.dart b/lib/utils/data.dart index 5895a2b..9a13426 100644 --- a/lib/utils/data.dart +++ b/lib/utils/data.dart @@ -6,6 +6,7 @@ import 'package:venera/foundation/appdata.dart'; import 'package:venera/foundation/comic_source/comic_source.dart'; import 'package:venera/foundation/favorites.dart'; import 'package:venera/foundation/history.dart'; +import 'package:venera/network/cookie_jar.dart'; import 'package:zip_flutter/zip_flutter.dart'; import 'io.dart'; @@ -15,7 +16,7 @@ Future exportAppData() async { var cacheFilePath = FilePath.join(App.cachePath, '$time.venera'); var cacheFile = File(cacheFilePath); var dataPath = App.dataPath; - if(await cacheFile.exists()) { + if (await cacheFile.exists()) { await cacheFile.delete(); } await Isolate.run(() { @@ -23,11 +24,14 @@ Future exportAppData() async { var historyFile = FilePath.join(dataPath, "history.db"); var localFavoriteFile = FilePath.join(dataPath, "local_favorite.db"); var appdata = FilePath.join(dataPath, "appdata.json"); + var cookies = FilePath.join(dataPath, "cookie.db"); zipFile.addFile("history.db", historyFile); zipFile.addFile("local_favorite.db", localFavoriteFile); zipFile.addFile("appdata.json", appdata); - for(var file in Directory(FilePath.join(dataPath, "comic_source")).listSync()) { - if(file is File) { + zipFile.addFile("cookie.db", cookies); + for (var file + in Directory(FilePath.join(dataPath, "comic_source")).listSync()) { + if (file is File) { zipFile.addFile("comic_source/${file.name}", file.path); } } @@ -45,26 +49,28 @@ Future importAppData(File file, [bool checkVersion = false]) async { var historyFile = cacheDir.joinFile("history.db"); var localFavoriteFile = cacheDir.joinFile("local_favorite.db"); var appdataFile = cacheDir.joinFile("appdata.json"); - if(checkVersion && appdataFile.existsSync()) { + var cookieFile = cacheDir.joinFile("cookie.db"); + if (checkVersion && appdataFile.existsSync()) { var data = jsonDecode(await appdataFile.readAsString()); var version = data["settings"]["dataVersion"]; - if(version is int && version <= appdata.settings["dataVersion"]) { + if (version is int && version <= appdata.settings["dataVersion"]) { return; } } - if(await historyFile.exists()) { + if (await historyFile.exists()) { HistoryManager().close(); File(FilePath.join(App.dataPath, "history.db")).deleteIfExistsSync(); historyFile.renameSync(FilePath.join(App.dataPath, "history.db")); HistoryManager().init(); } - if(await localFavoriteFile.exists()) { + if (await localFavoriteFile.exists()) { LocalFavoritesManager().close(); File(FilePath.join(App.dataPath, "local_favorite.db")).deleteIfExistsSync(); - localFavoriteFile.renameSync(FilePath.join(App.dataPath, "local_favorite.db")); + localFavoriteFile + .renameSync(FilePath.join(App.dataPath, "local_favorite.db")); LocalFavoritesManager().init(); } - if(await appdataFile.exists()) { + if (await appdataFile.exists()) { // proxy settings should be kept var proxySettings = appdata.settings["proxy"]; File(FilePath.join(App.dataPath, "appdata.json")).deleteIfExistsSync(); @@ -73,10 +79,18 @@ Future importAppData(File file, [bool checkVersion = false]) async { appdata.settings["proxy"] = proxySettings; appdata.saveData(); } + if (await cookieFile.exists()) { + SingleInstanceCookieJar.instance?.dispose(); + File(FilePath.join(App.dataPath, "cookie.db")).deleteIfExistsSync(); + cookieFile.renameSync(FilePath.join(App.dataPath, "cookie.db")); + SingleInstanceCookieJar.instance = + SingleInstanceCookieJar(FilePath.join(App.dataPath, "cookie.db")) + ..init(); + } var comicSourceDir = FilePath.join(cacheDirPath, "comic_source"); - if(Directory(comicSourceDir).existsSync()) { - for(var file in Directory(comicSourceDir).listSync()) { - if(file is File) { + if (Directory(comicSourceDir).existsSync()) { + for (var file in Directory(comicSourceDir).listSync()) { + if (file is File) { var targetFile = FilePath.join(App.dataPath, "comic_source", file.name); File(targetFile).deleteIfExistsSync(); await file.copy(targetFile);