fix
This commit is contained in:
parent
2af2729559
commit
a9e91a1237
12 changed files with 193 additions and 503 deletions
|
|
@ -34,22 +34,11 @@ class History {
|
|||
chapterId = json['chapterId'];
|
||||
date = json['date'];
|
||||
id = json['id'];
|
||||
isManga = json['isManga'];
|
||||
itemType = ItemType.values[json['itemType'] ?? 0];
|
||||
mangaId = json['mangaId'];
|
||||
}
|
||||
|
||||
History.fromJsonV1(Map<String, dynamic> json) {
|
||||
chapterId = json['chapterId'];
|
||||
date = json['date'];
|
||||
id = json['id'];
|
||||
itemType = json['isManga'] is bool
|
||||
? json['isManga'] == true
|
||||
? ItemType.manga
|
||||
: ItemType.anime
|
||||
: ItemType.manga;
|
||||
mangaId = json['mangaId'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'chapterId': chapterId,
|
||||
'date': date,
|
||||
|
|
|
|||
|
|
@ -87,6 +87,7 @@ class Manga {
|
|||
id = json['id'];
|
||||
imageUrl = json['imageUrl'];
|
||||
isLocalArchive = json['isLocalArchive'];
|
||||
isManga = json['isManga'];
|
||||
itemType = ItemType.values[json['itemType'] ?? 0];
|
||||
lang = json['lang'];
|
||||
lastRead = json['lastRead'];
|
||||
|
|
@ -98,33 +99,6 @@ class Manga {
|
|||
customCoverFromTracker = json['customCoverFromTracker'];
|
||||
}
|
||||
|
||||
Manga.fromJsonV1(Map<String, dynamic> json) {
|
||||
author = json['author'];
|
||||
artist = json['artist'];
|
||||
categories = json['categories']?.cast<int>();
|
||||
customCoverImage = json['customCoverImage']?.cast<int>();
|
||||
dateAdded = json['dateAdded'];
|
||||
description = json['description'];
|
||||
favorite = json['favorite']!;
|
||||
genre = json['genre']?.cast<String>();
|
||||
id = json['id'];
|
||||
imageUrl = json['imageUrl'];
|
||||
isLocalArchive = json['isLocalArchive'];
|
||||
itemType = json['isManga'] is bool
|
||||
? json['isManga'] == true
|
||||
? ItemType.manga
|
||||
: ItemType.anime
|
||||
: ItemType.manga;
|
||||
lang = json['lang'];
|
||||
lastRead = json['lastRead'];
|
||||
lastUpdate = json['lastUpdate'];
|
||||
link = json['link'];
|
||||
name = json['name'];
|
||||
source = json['source'];
|
||||
status = Status.values[json['status']];
|
||||
customCoverFromTracker = json['customCoverFromTracker'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'author': author,
|
||||
'artist': artist,
|
||||
|
|
|
|||
|
|
@ -459,8 +459,8 @@ class Settings {
|
|||
? CustomColorFilter.fromJson(json['customColorFilter'])
|
||||
: null;
|
||||
enableCustomColorFilter = json['enableCustomColorFilter'];
|
||||
colorFilterBlendMode = ColorFilterBlendMode
|
||||
.values[json['colorFilterBlendMode'] ?? ColorFilterBlendMode.none];
|
||||
colorFilterBlendMode = ColorFilterBlendMode.values[
|
||||
json['colorFilterBlendMode'] ?? ColorFilterBlendMode.none.index];
|
||||
playerSubtitleSettings = json['playerSubtitleSettings'] != null
|
||||
? PlayerSubtitleSettings.fromJson(json['playerSubtitleSettings'])
|
||||
: null;
|
||||
|
|
@ -470,7 +470,7 @@ class Settings {
|
|||
mangaGridSize = json['mangaGridSize'];
|
||||
animeGridSize = json['animeGridSize'];
|
||||
disableSectionType =
|
||||
SectionType.values[json['disableSectionType'] ?? SectionType.all];
|
||||
SectionType.values[json['disableSectionType'] ?? SectionType.all.index];
|
||||
useLibass = json['useLibass'];
|
||||
libraryFilterNovelBookMarkedType = json['libraryFilterNovelBookMarkedType'];
|
||||
libraryFilterNovelDownloadType = json['libraryFilterNovelDownloadType'];
|
||||
|
|
@ -487,7 +487,7 @@ class Settings {
|
|||
? SortLibraryManga.fromJson(json['sortLibraryNovel'])
|
||||
: null;
|
||||
novelDisplayType = DisplayType
|
||||
.values[json['novelDisplayType'] ?? DisplayType.compactGrid.index];
|
||||
.values[json['novelDisplayType'] ?? DisplayType.comfortableGrid.index];
|
||||
hideManga = json['hideManga'];
|
||||
hideAnime = json['hideAnime'];
|
||||
hideNovel = json['hideNovel'];
|
||||
|
|
|
|||
|
|
@ -125,38 +125,6 @@ class Source {
|
|||
SourceCodeLanguage.values[json['sourceCodeLanguage'] ?? 0];
|
||||
}
|
||||
|
||||
Source.fromJsonV1(Map<String, dynamic> json) {
|
||||
apiUrl = json['apiUrl'];
|
||||
appMinVerReq = json['appMinVerReq'];
|
||||
baseUrl = json['baseUrl'];
|
||||
dateFormat = json['dateFormat'];
|
||||
dateFormatLocale = json['dateFormatLocale'];
|
||||
hasCloudflare = json['hasCloudflare'];
|
||||
headers = json['headers'];
|
||||
iconUrl = json['iconUrl'];
|
||||
id = json['id'];
|
||||
isActive = json['isActive'];
|
||||
isAdded = json['isAdded'];
|
||||
isFullData = json['isFullData'];
|
||||
isManga = json['isManga'];
|
||||
itemType = isManga == true ? ItemType.manga : ItemType.anime;
|
||||
isNsfw = json['isNsfw'];
|
||||
isPinned = json['isPinned'];
|
||||
lang = json['lang'];
|
||||
lastUsed = json['lastUsed'];
|
||||
name = json['name'];
|
||||
sourceCode = json['sourceCode'];
|
||||
sourceCodeUrl = json['sourceCodeUrl'];
|
||||
typeSource = json['typeSource'];
|
||||
version = json['version'];
|
||||
versionLast = json['versionLast'];
|
||||
additionalParams = json['additionalParams'] ?? "";
|
||||
isObsolete = json['isObsolete'];
|
||||
isLocal = json['isLocal'];
|
||||
sourceCodeLanguage =
|
||||
SourceCodeLanguage.values[json['sourceCodeLanguage'] ?? 0];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'apiUrl': apiUrl,
|
||||
'appMinVerReq': appMinVerReq,
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'migration.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$migrationHash() => r'748a99069dd212f5eacce8185e414d80fefeaae9';
|
||||
String _$migrationHash() => r'7354a8368b73fdfcfd284848b9837b4bc9047e7f';
|
||||
|
||||
/// See also [migration].
|
||||
@ProviderFor(migration)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'track_state_providers.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$trackStateHash() => r'996bec4204e84eb74a2b818410788e5fbf81fec2';
|
||||
String _$trackStateHash() => r'f8d5a962cfbff41400945c0e7140071c76fa80fd';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'update_manga_detail_providers.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$updateMangaDetailHash() => r'a86fe8fea46e411203182287c970cd80cc9a1a0c';
|
||||
String _$updateMangaDetailHash() => r'dcc5fd8f666959f62ee9ad6540eb0493ac9759f1';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -158,10 +158,8 @@ class BackupAndRestore extends ConsumerWidget {
|
|||
onPressed: () async {
|
||||
try {
|
||||
FilePickerResult? result =
|
||||
await FilePicker.platform.pickFiles(
|
||||
allowMultiple: false,
|
||||
type: FileType.custom,
|
||||
allowedExtensions: ["backup"]);
|
||||
await FilePicker.platform
|
||||
.pickFiles(allowMultiple: false);
|
||||
|
||||
if (result != null && context.mounted) {
|
||||
ref.watch(doRestoreProvider(
|
||||
|
|
|
|||
|
|
@ -31,275 +31,168 @@ void doRestore(Ref ref, {required String path, required BuildContext context}) {
|
|||
final archive = ZipDecoder().decodeStream(inputStream);
|
||||
final backup = jsonDecode(utf8.decode(archive.files.first.content))
|
||||
as Map<String, dynamic>;
|
||||
if (backup['version'] == "1") {
|
||||
restoreV1(ref, backup);
|
||||
} else if (backup['version'] == "2") {
|
||||
restoreV2(ref, backup);
|
||||
}
|
||||
BotToast.showNotification(
|
||||
animationDuration: const Duration(milliseconds: 200),
|
||||
animationReverseDuration: const Duration(milliseconds: 200),
|
||||
duration: const Duration(seconds: 5),
|
||||
backButtonBehavior: BackButtonBehavior.none,
|
||||
leading: (_) => Image.asset('assets/app_icons/icon-red.png', height: 40),
|
||||
title: (_) => const Text(
|
||||
"Backup restored!",
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
enableSlideOff: true,
|
||||
onlyOne: true,
|
||||
crossPage: true);
|
||||
}
|
||||
|
||||
@riverpod
|
||||
void restoreV1(Ref ref, Map<String, dynamic> backup) {
|
||||
try {
|
||||
final manga =
|
||||
(backup["manga"] as List?)?.map((e) => Manga.fromJsonV1(e)).toList();
|
||||
final chapters =
|
||||
(backup["chapters"] as List?)?.map((e) => Chapter.fromJson(e)).toList();
|
||||
final categories = (backup["categories"] as List?)
|
||||
?.map((e) => Category.fromJsonV1(e))
|
||||
.toList();
|
||||
final track =
|
||||
(backup["tracks"] as List?)?.map((e) => Track.fromJson(e)).toList();
|
||||
final trackPreferences = (backup["trackPreferences"] as List?)
|
||||
?.map((e) => TrackPreference.fromJson(e))
|
||||
.toList();
|
||||
final history = (backup["history"] as List?)
|
||||
?.map((e) => History.fromJsonV1(e))
|
||||
.toList();
|
||||
final downloads = (backup["downloads"] as List?)
|
||||
?.map((e) => Download.fromJson(e))
|
||||
.toList();
|
||||
final settings = (backup["settings"] as List?)
|
||||
?.map((e) => Settings.fromJson(e))
|
||||
.toList();
|
||||
final extensions = (backup["extensions"] as List?)
|
||||
?.map((e) => Source.fromJsonV1(e))
|
||||
.toList();
|
||||
final extensionsPref = (backup["extensions_preferences"] as List?)
|
||||
?.map((e) => SourcePreference.fromJson(e))
|
||||
.toList();
|
||||
final updates =
|
||||
(backup["updates"] as List?)?.map((e) => Update.fromJson(e)).toList();
|
||||
|
||||
isar.writeTxnSync(() {
|
||||
isar.mangas.clearSync();
|
||||
if (manga != null) {
|
||||
isar.mangas.putAllSync(manga);
|
||||
if (chapters != null) {
|
||||
isar.chapters.clearSync();
|
||||
for (var chapter in chapters) {
|
||||
final manga = isar.mangas.getSync(chapter.mangaId!);
|
||||
if (manga != null) {
|
||||
isar.chapters.putSync(chapter..manga.value = manga);
|
||||
chapter.manga.saveSync();
|
||||
}
|
||||
}
|
||||
|
||||
isar.downloads.clearSync();
|
||||
if (downloads != null) {
|
||||
for (var download in downloads) {
|
||||
final chapter = isar.chapters.getSync(download.chapterId!);
|
||||
if (chapter != null) {
|
||||
isar.downloads.putSync(download..chapter.value = chapter);
|
||||
download.chapter.saveSync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
isar.historys.clearSync();
|
||||
if (history != null) {
|
||||
for (var element in history) {
|
||||
final chapter = isar.chapters.getSync(element.chapterId!);
|
||||
if (chapter != null) {
|
||||
isar.historys.putSync(element..chapter.value = chapter);
|
||||
element.chapter.saveSync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
isar.updates.clearSync();
|
||||
if (updates != null) {
|
||||
final tempChapters =
|
||||
isar.chapters.filter().idIsNotNull().findAllSync().toList();
|
||||
for (var update in updates) {
|
||||
final matchingChapter = tempChapters
|
||||
.where((chapter) =>
|
||||
chapter.mangaId == update.mangaId &&
|
||||
chapter.name == update.chapterName)
|
||||
.firstOrNull;
|
||||
if (matchingChapter != null) {
|
||||
isar.updates.putSync(update..chapter.value = matchingChapter);
|
||||
update.chapter.saveSync();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
isar.categorys.clearSync();
|
||||
if (categories != null) {
|
||||
isar.categorys.putAllSync(categories);
|
||||
}
|
||||
}
|
||||
|
||||
isar.tracks.clearSync();
|
||||
if (track != null) {
|
||||
isar.tracks.putAllSync(track);
|
||||
}
|
||||
|
||||
isar.trackPreferences.clearSync();
|
||||
if (trackPreferences != null) {
|
||||
isar.trackPreferences.putAllSync(trackPreferences);
|
||||
}
|
||||
|
||||
isar.sources.clearSync();
|
||||
if (extensions != null) {
|
||||
isar.sources.putAllSync(extensions);
|
||||
}
|
||||
|
||||
isar.sourcePreferences.clearSync();
|
||||
if (extensionsPref != null) {
|
||||
isar.sourcePreferences.putAllSync(extensionsPref);
|
||||
}
|
||||
isar.settings.clearSync();
|
||||
if (settings != null) {
|
||||
isar.settings.putAllSync(settings);
|
||||
}
|
||||
ref.invalidate(themeModeStateProvider);
|
||||
ref.invalidate(blendLevelStateProvider);
|
||||
ref.invalidate(flexSchemeColorStateProvider);
|
||||
ref.invalidate(pureBlackDarkModeStateProvider);
|
||||
ref.invalidate(l10nLocaleStateProvider);
|
||||
});
|
||||
ref.read(restoreBackupProvider(backup));
|
||||
BotToast.showNotification(
|
||||
animationDuration: const Duration(milliseconds: 200),
|
||||
animationReverseDuration: const Duration(milliseconds: 200),
|
||||
duration: const Duration(seconds: 5),
|
||||
backButtonBehavior: BackButtonBehavior.none,
|
||||
leading: (_) =>
|
||||
Image.asset('assets/app_icons/icon-red.png', height: 40),
|
||||
title: (_) => const Text(
|
||||
"Backup restored!",
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
enableSlideOff: true,
|
||||
onlyOne: true,
|
||||
crossPage: true);
|
||||
} catch (e) {
|
||||
botToast(e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@riverpod
|
||||
void restoreV2(Ref ref, Map<String, dynamic> backup) {
|
||||
try {
|
||||
final manga =
|
||||
(backup["manga"] as List?)?.map((e) => Manga.fromJson(e)).toList();
|
||||
final chapters =
|
||||
(backup["chapters"] as List?)?.map((e) => Chapter.fromJson(e)).toList();
|
||||
final categories = (backup["categories"] as List?)
|
||||
?.map((e) => Category.fromJson(e))
|
||||
.toList();
|
||||
final track =
|
||||
(backup["tracks"] as List?)?.map((e) => Track.fromJson(e)).toList();
|
||||
final trackPreferences = (backup["trackPreferences"] as List?)
|
||||
?.map((e) => TrackPreference.fromJson(e))
|
||||
.toList();
|
||||
final history =
|
||||
(backup["history"] as List?)?.map((e) => History.fromJson(e)).toList();
|
||||
final downloads = (backup["downloads"] as List?)
|
||||
?.map((e) => Download.fromJson(e))
|
||||
.toList();
|
||||
final settings = (backup["settings"] as List?)
|
||||
?.map((e) => Settings.fromJson(e))
|
||||
.toList();
|
||||
final extensions = (backup["extensions"] as List?)
|
||||
?.map((e) => Source.fromJson(e))
|
||||
.toList();
|
||||
final extensionsPref = (backup["extensions_preferences"] as List?)
|
||||
?.map((e) => SourcePreference.fromJson(e))
|
||||
.toList();
|
||||
final updates =
|
||||
(backup["updates"] as List?)?.map((e) => Update.fromJson(e)).toList();
|
||||
void restoreBackup(Ref ref, Map<String, dynamic> backup) {
|
||||
final version = backup['version'];
|
||||
if (["1", "2"].any((e) => e == version)) {
|
||||
try {
|
||||
final manga = (backup["manga"] as List?)
|
||||
?.map((e) => Manga.fromJson(e)..itemType = _convertToItemType(e))
|
||||
.toList();
|
||||
final chapters = (backup["chapters"] as List?)
|
||||
?.map((e) => Chapter.fromJson(e))
|
||||
.toList();
|
||||
final categories = (backup["categories"] as List?)
|
||||
?.map((e) => Category.fromJson(e))
|
||||
.toList();
|
||||
final track = (backup["tracks"] as List?)
|
||||
?.map((e) => Track.fromJson(e)..itemType = _convertToItemType(e))
|
||||
.toList();
|
||||
final trackPreferences = (backup["trackPreferences"] as List?)
|
||||
?.map((e) => TrackPreference.fromJson(e))
|
||||
.toList();
|
||||
final history = (backup["history"] as List?)
|
||||
?.map((e) => History.fromJson(e)..itemType = _convertToItemType(e))
|
||||
.toList();
|
||||
final downloads = (backup["downloads"] as List?)
|
||||
?.map((e) => Download.fromJson(e))
|
||||
.toList();
|
||||
final settings = (backup["settings"] as List?)
|
||||
?.map((e) => Settings.fromJson(e))
|
||||
.toList();
|
||||
final extensions = (backup["extensions"] as List?)
|
||||
?.map((e) => Source.fromJson(e)..itemType = _convertToItemType(e))
|
||||
.toList();
|
||||
final extensionsPref = (backup["extensions_preferences"] as List?)
|
||||
?.map((e) => SourcePreference.fromJson(e))
|
||||
.toList();
|
||||
final updates =
|
||||
(backup["updates"] as List?)?.map((e) => Update.fromJson(e)).toList();
|
||||
|
||||
isar.writeTxnSync(() {
|
||||
isar.mangas.clearSync();
|
||||
if (manga != null) {
|
||||
isar.mangas.putAllSync(manga);
|
||||
if (chapters != null) {
|
||||
isar.chapters.clearSync();
|
||||
for (var chapter in chapters) {
|
||||
final manga = isar.mangas.getSync(chapter.mangaId!);
|
||||
if (manga != null) {
|
||||
isar.chapters.putSync(chapter..manga.value = manga);
|
||||
chapter.manga.saveSync();
|
||||
isar.writeTxnSync(() {
|
||||
isar.mangas.clearSync();
|
||||
if (manga != null) {
|
||||
isar.mangas.putAllSync(manga);
|
||||
if (chapters != null) {
|
||||
isar.chapters.clearSync();
|
||||
for (var chapter in chapters) {
|
||||
final manga = isar.mangas.getSync(chapter.mangaId!);
|
||||
if (manga != null) {
|
||||
isar.chapters.putSync(chapter..manga.value = manga);
|
||||
chapter.manga.saveSync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
isar.downloads.clearSync();
|
||||
if (downloads != null) {
|
||||
for (var download in downloads) {
|
||||
final chapter = isar.chapters.getSync(download.chapterId!);
|
||||
if (chapter != null) {
|
||||
isar.downloads.putSync(download..chapter.value = chapter);
|
||||
download.chapter.saveSync();
|
||||
isar.downloads.clearSync();
|
||||
if (downloads != null) {
|
||||
for (var download in downloads) {
|
||||
final chapter = isar.chapters.getSync(download.chapterId!);
|
||||
if (chapter != null) {
|
||||
isar.downloads.putSync(download..chapter.value = chapter);
|
||||
download.chapter.saveSync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
isar.historys.clearSync();
|
||||
if (history != null) {
|
||||
for (var element in history) {
|
||||
final chapter = isar.chapters.getSync(element.chapterId!);
|
||||
if (chapter != null) {
|
||||
isar.historys.putSync(element..chapter.value = chapter);
|
||||
element.chapter.saveSync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
isar.updates.clearSync();
|
||||
if (updates != null) {
|
||||
final tempChapters =
|
||||
isar.chapters.filter().idIsNotNull().findAllSync().toList();
|
||||
for (var update in updates) {
|
||||
final matchingChapter = tempChapters
|
||||
.where((chapter) =>
|
||||
chapter.mangaId == update.mangaId &&
|
||||
chapter.name == update.chapterName)
|
||||
.firstOrNull;
|
||||
if (matchingChapter != null) {
|
||||
isar.updates.putSync(update..chapter.value = matchingChapter);
|
||||
update.chapter.saveSync();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
isar.historys.clearSync();
|
||||
if (history != null) {
|
||||
for (var element in history) {
|
||||
final chapter = isar.chapters.getSync(element.chapterId!);
|
||||
if (chapter != null) {
|
||||
isar.historys.putSync(element..chapter.value = chapter);
|
||||
element.chapter.saveSync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
isar.updates.clearSync();
|
||||
if (updates != null) {
|
||||
final tempChapters =
|
||||
isar.chapters.filter().idIsNotNull().findAllSync().toList();
|
||||
for (var update in updates) {
|
||||
final matchingChapter = tempChapters
|
||||
.where((chapter) =>
|
||||
chapter.mangaId == update.mangaId &&
|
||||
chapter.name == update.chapterName)
|
||||
.firstOrNull;
|
||||
if (matchingChapter != null) {
|
||||
isar.updates.putSync(update..chapter.value = matchingChapter);
|
||||
update.chapter.saveSync();
|
||||
}
|
||||
}
|
||||
isar.categorys.clearSync();
|
||||
if (categories != null) {
|
||||
isar.categorys.putAllSync(categories);
|
||||
}
|
||||
}
|
||||
|
||||
isar.categorys.clearSync();
|
||||
if (categories != null) {
|
||||
isar.categorys.putAllSync(categories);
|
||||
isar.tracks.clearSync();
|
||||
if (track != null) {
|
||||
isar.tracks.putAllSync(track);
|
||||
}
|
||||
}
|
||||
|
||||
isar.tracks.clearSync();
|
||||
if (track != null) {
|
||||
isar.tracks.putAllSync(track);
|
||||
}
|
||||
isar.trackPreferences.clearSync();
|
||||
if (trackPreferences != null) {
|
||||
isar.trackPreferences.putAllSync(trackPreferences);
|
||||
}
|
||||
|
||||
isar.trackPreferences.clearSync();
|
||||
if (trackPreferences != null) {
|
||||
isar.trackPreferences.putAllSync(trackPreferences);
|
||||
}
|
||||
isar.sources.clearSync();
|
||||
if (extensions != null) {
|
||||
isar.sources.putAllSync(extensions);
|
||||
}
|
||||
|
||||
isar.sources.clearSync();
|
||||
if (extensions != null) {
|
||||
isar.sources.putAllSync(extensions);
|
||||
}
|
||||
|
||||
isar.sourcePreferences.clearSync();
|
||||
if (extensionsPref != null) {
|
||||
isar.sourcePreferences.putAllSync(extensionsPref);
|
||||
}
|
||||
isar.settings.clearSync();
|
||||
if (settings != null) {
|
||||
isar.settings.putAllSync(settings);
|
||||
}
|
||||
ref.invalidate(themeModeStateProvider);
|
||||
ref.invalidate(blendLevelStateProvider);
|
||||
ref.invalidate(flexSchemeColorStateProvider);
|
||||
ref.invalidate(pureBlackDarkModeStateProvider);
|
||||
ref.invalidate(l10nLocaleStateProvider);
|
||||
});
|
||||
} catch (e) {
|
||||
botToast(e.toString());
|
||||
isar.sourcePreferences.clearSync();
|
||||
if (extensionsPref != null) {
|
||||
isar.sourcePreferences.putAllSync(extensionsPref);
|
||||
}
|
||||
isar.settings.clearSync();
|
||||
if (settings != null) {
|
||||
isar.settings.putAllSync(settings);
|
||||
}
|
||||
ref.invalidate(themeModeStateProvider);
|
||||
ref.invalidate(blendLevelStateProvider);
|
||||
ref.invalidate(flexSchemeColorStateProvider);
|
||||
ref.invalidate(pureBlackDarkModeStateProvider);
|
||||
ref.invalidate(l10nLocaleStateProvider);
|
||||
});
|
||||
} catch (e) {
|
||||
rethrow;
|
||||
}
|
||||
} else {
|
||||
throw "Failed to restore the backup";
|
||||
}
|
||||
}
|
||||
|
||||
ItemType _convertToItemType(Map<String, dynamic> backup) {
|
||||
final isManga = backup['isManga'];
|
||||
final version = backup['version'];
|
||||
return version == "2"
|
||||
? ItemType.values[backup['itemType'] ?? 0]
|
||||
: isManga
|
||||
? ItemType.manga
|
||||
: ItemType.anime;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'restore.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$doRestoreHash() => r'508725e75a03ac5f561c2cf8bf4943052d605d5b';
|
||||
String _$doRestoreHash() => r'e3236bf60efbd24cc07281927ffd0ca3d43d0a9c';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
@ -173,29 +173,29 @@ class _DoRestoreProviderElement extends AutoDisposeProviderElement<void>
|
|||
BuildContext get context => (origin as DoRestoreProvider).context;
|
||||
}
|
||||
|
||||
String _$restoreV1Hash() => r'4dca1ac4cec79fdc78bec4d71367e77caf696f17';
|
||||
String _$restoreBackupHash() => r'cde06db62878869fe086453e1c7de57238650909';
|
||||
|
||||
/// See also [restoreV1].
|
||||
@ProviderFor(restoreV1)
|
||||
const restoreV1Provider = RestoreV1Family();
|
||||
/// See also [restoreBackup].
|
||||
@ProviderFor(restoreBackup)
|
||||
const restoreBackupProvider = RestoreBackupFamily();
|
||||
|
||||
/// See also [restoreV1].
|
||||
class RestoreV1Family extends Family<void> {
|
||||
/// See also [restoreV1].
|
||||
const RestoreV1Family();
|
||||
/// See also [restoreBackup].
|
||||
class RestoreBackupFamily extends Family<void> {
|
||||
/// See also [restoreBackup].
|
||||
const RestoreBackupFamily();
|
||||
|
||||
/// See also [restoreV1].
|
||||
RestoreV1Provider call(
|
||||
/// See also [restoreBackup].
|
||||
RestoreBackupProvider call(
|
||||
Map<String, dynamic> backup,
|
||||
) {
|
||||
return RestoreV1Provider(
|
||||
return RestoreBackupProvider(
|
||||
backup,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
RestoreV1Provider getProviderOverride(
|
||||
covariant RestoreV1Provider provider,
|
||||
RestoreBackupProvider getProviderOverride(
|
||||
covariant RestoreBackupProvider provider,
|
||||
) {
|
||||
return call(
|
||||
provider.backup,
|
||||
|
|
@ -214,31 +214,32 @@ class RestoreV1Family extends Family<void> {
|
|||
_allTransitiveDependencies;
|
||||
|
||||
@override
|
||||
String? get name => r'restoreV1Provider';
|
||||
String? get name => r'restoreBackupProvider';
|
||||
}
|
||||
|
||||
/// See also [restoreV1].
|
||||
class RestoreV1Provider extends AutoDisposeProvider<void> {
|
||||
/// See also [restoreV1].
|
||||
RestoreV1Provider(
|
||||
/// See also [restoreBackup].
|
||||
class RestoreBackupProvider extends AutoDisposeProvider<void> {
|
||||
/// See also [restoreBackup].
|
||||
RestoreBackupProvider(
|
||||
Map<String, dynamic> backup,
|
||||
) : this._internal(
|
||||
(ref) => restoreV1(
|
||||
ref as RestoreV1Ref,
|
||||
(ref) => restoreBackup(
|
||||
ref as RestoreBackupRef,
|
||||
backup,
|
||||
),
|
||||
from: restoreV1Provider,
|
||||
name: r'restoreV1Provider',
|
||||
from: restoreBackupProvider,
|
||||
name: r'restoreBackupProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$restoreV1Hash,
|
||||
dependencies: RestoreV1Family._dependencies,
|
||||
allTransitiveDependencies: RestoreV1Family._allTransitiveDependencies,
|
||||
: _$restoreBackupHash,
|
||||
dependencies: RestoreBackupFamily._dependencies,
|
||||
allTransitiveDependencies:
|
||||
RestoreBackupFamily._allTransitiveDependencies,
|
||||
backup: backup,
|
||||
);
|
||||
|
||||
RestoreV1Provider._internal(
|
||||
RestoreBackupProvider._internal(
|
||||
super._createNotifier, {
|
||||
required super.name,
|
||||
required super.dependencies,
|
||||
|
|
@ -252,12 +253,12 @@ class RestoreV1Provider extends AutoDisposeProvider<void> {
|
|||
|
||||
@override
|
||||
Override overrideWith(
|
||||
void Function(RestoreV1Ref provider) create,
|
||||
void Function(RestoreBackupRef provider) create,
|
||||
) {
|
||||
return ProviderOverride(
|
||||
origin: this,
|
||||
override: RestoreV1Provider._internal(
|
||||
(ref) => create(ref as RestoreV1Ref),
|
||||
override: RestoreBackupProvider._internal(
|
||||
(ref) => create(ref as RestoreBackupRef),
|
||||
from: from,
|
||||
name: null,
|
||||
dependencies: null,
|
||||
|
|
@ -270,12 +271,12 @@ class RestoreV1Provider extends AutoDisposeProvider<void> {
|
|||
|
||||
@override
|
||||
AutoDisposeProviderElement<void> createElement() {
|
||||
return _RestoreV1ProviderElement(this);
|
||||
return _RestoreBackupProviderElement(this);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is RestoreV1Provider && other.backup == backup;
|
||||
return other is RestoreBackupProvider && other.backup == backup;
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
@ -289,146 +290,17 @@ class RestoreV1Provider extends AutoDisposeProvider<void> {
|
|||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
mixin RestoreV1Ref on AutoDisposeProviderRef<void> {
|
||||
mixin RestoreBackupRef on AutoDisposeProviderRef<void> {
|
||||
/// The parameter `backup` of this provider.
|
||||
Map<String, dynamic> get backup;
|
||||
}
|
||||
|
||||
class _RestoreV1ProviderElement extends AutoDisposeProviderElement<void>
|
||||
with RestoreV1Ref {
|
||||
_RestoreV1ProviderElement(super.provider);
|
||||
class _RestoreBackupProviderElement extends AutoDisposeProviderElement<void>
|
||||
with RestoreBackupRef {
|
||||
_RestoreBackupProviderElement(super.provider);
|
||||
|
||||
@override
|
||||
Map<String, dynamic> get backup => (origin as RestoreV1Provider).backup;
|
||||
}
|
||||
|
||||
String _$restoreV2Hash() => r'fbdd1978f8be7512277620e351b9a0eee1827bfc';
|
||||
|
||||
/// See also [restoreV2].
|
||||
@ProviderFor(restoreV2)
|
||||
const restoreV2Provider = RestoreV2Family();
|
||||
|
||||
/// See also [restoreV2].
|
||||
class RestoreV2Family extends Family<void> {
|
||||
/// See also [restoreV2].
|
||||
const RestoreV2Family();
|
||||
|
||||
/// See also [restoreV2].
|
||||
RestoreV2Provider call(
|
||||
Map<String, dynamic> backup,
|
||||
) {
|
||||
return RestoreV2Provider(
|
||||
backup,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
RestoreV2Provider getProviderOverride(
|
||||
covariant RestoreV2Provider provider,
|
||||
) {
|
||||
return call(
|
||||
provider.backup,
|
||||
);
|
||||
}
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
|
||||
_allTransitiveDependencies;
|
||||
|
||||
@override
|
||||
String? get name => r'restoreV2Provider';
|
||||
}
|
||||
|
||||
/// See also [restoreV2].
|
||||
class RestoreV2Provider extends AutoDisposeProvider<void> {
|
||||
/// See also [restoreV2].
|
||||
RestoreV2Provider(
|
||||
Map<String, dynamic> backup,
|
||||
) : this._internal(
|
||||
(ref) => restoreV2(
|
||||
ref as RestoreV2Ref,
|
||||
backup,
|
||||
),
|
||||
from: restoreV2Provider,
|
||||
name: r'restoreV2Provider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$restoreV2Hash,
|
||||
dependencies: RestoreV2Family._dependencies,
|
||||
allTransitiveDependencies: RestoreV2Family._allTransitiveDependencies,
|
||||
backup: backup,
|
||||
);
|
||||
|
||||
RestoreV2Provider._internal(
|
||||
super._createNotifier, {
|
||||
required super.name,
|
||||
required super.dependencies,
|
||||
required super.allTransitiveDependencies,
|
||||
required super.debugGetCreateSourceHash,
|
||||
required super.from,
|
||||
required this.backup,
|
||||
}) : super.internal();
|
||||
|
||||
final Map<String, dynamic> backup;
|
||||
|
||||
@override
|
||||
Override overrideWith(
|
||||
void Function(RestoreV2Ref provider) create,
|
||||
) {
|
||||
return ProviderOverride(
|
||||
origin: this,
|
||||
override: RestoreV2Provider._internal(
|
||||
(ref) => create(ref as RestoreV2Ref),
|
||||
from: from,
|
||||
name: null,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
debugGetCreateSourceHash: null,
|
||||
backup: backup,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
AutoDisposeProviderElement<void> createElement() {
|
||||
return _RestoreV2ProviderElement(this);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is RestoreV2Provider && other.backup == backup;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
||||
hash = _SystemHash.combine(hash, backup.hashCode);
|
||||
|
||||
return _SystemHash.finish(hash);
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
mixin RestoreV2Ref on AutoDisposeProviderRef<void> {
|
||||
/// The parameter `backup` of this provider.
|
||||
Map<String, dynamic> get backup;
|
||||
}
|
||||
|
||||
class _RestoreV2ProviderElement extends AutoDisposeProviderElement<void>
|
||||
with RestoreV2Ref {
|
||||
_RestoreV2ProviderElement(super.provider);
|
||||
|
||||
@override
|
||||
Map<String, dynamic> get backup => (origin as RestoreV2Provider).backup;
|
||||
Map<String, dynamic> get backup => (origin as RestoreBackupProvider).backup;
|
||||
}
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package
|
||||
|
|
|
|||
|
|
@ -190,11 +190,7 @@ class SyncServer extends _$SyncServer {
|
|||
}
|
||||
|
||||
void _restore(Map<String, dynamic> backup) {
|
||||
if (backup['version'] == "1") {
|
||||
ref.watch(restoreV1Provider(backup));
|
||||
} else if (backup['version'] == "2") {
|
||||
ref.watch(restoreV2Provider(backup));
|
||||
}
|
||||
ref.read(restoreBackupProvider(backup));
|
||||
}
|
||||
|
||||
String _getAccessToken() {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'myanimelist.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$myAnimeListHash() => r'607fd673cf3cf2382874b9a413472129043589d5';
|
||||
String _$myAnimeListHash() => r'824a23f46282baa0562b98c21ef0a5c7e8d80b40';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
Loading…
Reference in a new issue