Add autocroll page , code refactor

This commit is contained in:
kodjomoustapha 2023-12-05 18:15:16 +01:00
parent a2224fc632
commit 0c9de22c94
24 changed files with 1456 additions and 1062 deletions

View file

@ -267,6 +267,7 @@
"backups":"Backups",
"by_scanlator":"By scanlator",
"by_name":"By name",
"installed":"Installed"
"installed":"Installed",
"auto_scroll":"Auto scroll"
}

View file

@ -267,5 +267,6 @@
"backups":"Sauvegardes",
"by_scanlator":"Par traducteur",
"by_name":"Par nom",
"installed":"Installé"
"installed":"Installé",
"auto_scroll":"Défilement automatique"
}

View file

@ -18,12 +18,6 @@ class Category {
forManga = json['forManga'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['name'] = name;
data['forManga'] = forManga;
return data;
}
Map<String, dynamic> toJson() =>
{'id': id, 'name': name, 'forManga': forManga};
}

View file

@ -53,18 +53,16 @@ class Chapter {
url = json['url'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['archivePath'] = archivePath;
data['dateUpload'] = dateUpload;
data['id'] = id;
data['isBookmarked'] = isBookmarked;
data['isRead'] = isRead;
data['lastPageRead'] = lastPageRead;
data['mangaId'] = mangaId;
data['name'] = name;
data['scanlator'] = scanlator;
data['url'] = url;
return data;
}
Map<String, dynamic> toJson() => {
'archivePath': archivePath,
'dateUpload': dateUpload,
'id': id,
'isBookmarked': isBookmarked,
'isRead': isRead,
'lastPageRead': lastPageRead,
'mangaId': mangaId,
'name': name,
'scanlator': scanlator,
'url': url
};
}

View file

@ -49,17 +49,15 @@ class Download {
total = json['total'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['chapterId'] = chapterId;
data['failed'] = failed;
data['id'] = id;
data['isDownload'] = isDownload;
data['isStartDownload'] = isStartDownload;
data['mangaId'] = mangaId;
data['succeeded'] = succeeded;
data['taskIds'] = taskIds;
data['total'] = total;
return data;
}
Map<String, dynamic> toJson() => {
'chapterId': chapterId,
'failed': failed,
'id': id,
'isDownload': isDownload,
'isStartDownload': isStartDownload,
'mangaId': mangaId,
'succeeded': succeeded,
'taskIds': taskIds,
'total': total
};
}

View file

@ -33,13 +33,11 @@ class History {
mangaId = json['mangaId'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['chapterId'] = chapterId;
data['date'] = date;
data['id'] = id;
data['isManga'] = isManga;
data['mangaId'] = mangaId;
return data;
}
Map<String, dynamic> toJson() => {
'chapterId': chapterId,
'date': date,
'id': id,
'isManga': isManga,
'mangaId': mangaId
};
}

View file

@ -86,28 +86,26 @@ class Manga {
status = Status.values[json['status']];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['author'] = author;
data['categories'] = categories;
data['customCoverImage'] = customCoverImage;
data['dateAdded'] = dateAdded;
data['description'] = description;
data['favorite'] = favorite;
data['genre'] = genre;
data['id'] = id;
data['imageUrl'] = imageUrl;
data['isLocalArchive'] = isLocalArchive;
data['isManga'] = isManga;
data['lang'] = lang;
data['lastRead'] = lastRead;
data['lastUpdate'] = lastUpdate;
data['link'] = link;
data['name'] = name;
data['source'] = source;
data['status'] = status.index;
return data;
}
Map<String, dynamic> toJson() => {
'author': author,
'categories': categories,
'customCoverImage': customCoverImage,
'dateAdded': dateAdded,
'description': description,
'favorite': favorite,
'genre': genre,
'id': id,
'imageUrl': imageUrl,
'isLocalArchive': isLocalArchive,
'isManga': isManga,
'lang': lang,
'lastRead': lastRead,
'lastUpdate': lastUpdate,
'link': link,
'name': name,
'source': source,
'status': status.index
};
}
enum Status {

View file

@ -141,6 +141,8 @@ class Settings {
bool? usePageTapZones;
List<AutoScrollPages>? autoScrollPages;
Settings(
{this.id = 227,
this.displayType = DisplayType.compactGrid,
@ -316,104 +318,89 @@ class Settings {
usePageTapZones = json['usePageTapZones'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['animatePageTransitions'] = animatePageTransitions;
data['animeDisplayType'] = animeDisplayType.index;
data['animeLibraryDownloadedChapters'] = animeLibraryDownloadedChapters;
data['animeLibraryLocalSource'] = animeLibraryLocalSource;
data['animeLibraryShowCategoryTabs'] = animeLibraryShowCategoryTabs;
data['animeLibraryShowContinueReadingButton'] =
animeLibraryShowContinueReadingButton;
data['animeLibraryShowLanguage'] = animeLibraryShowLanguage;
data['animeLibraryShowNumbersOfItems'] = animeLibraryShowNumbersOfItems;
data['autoExtensionsUpdates'] = autoExtensionsUpdates;
data['backgroundColor'] = backgroundColor.index;
if (chapterFilterBookmarkedList != null) {
data['chapterFilterBookmarkedList'] =
chapterFilterBookmarkedList!.map((v) => v.toJson()).toList();
}
if (chapterFilterDownloadedList != null) {
data['chapterFilterDownloadedList'] =
chapterFilterDownloadedList!.map((v) => v.toJson()).toList();
}
if (chapterFilterUnreadList != null) {
data['chapterFilterUnreadList'] =
chapterFilterUnreadList!.map((v) => v.toJson()).toList();
}
if (chapterPageIndexList != null) {
data['chapterPageIndexList'] =
chapterPageIndexList!.map((v) => v.toJson()).toList();
}
if (chapterPageUrlsList != null) {
data['chapterPageUrlsList'] =
chapterPageUrlsList!.map((v) => v.toJson()).toList();
}
data['checkForExtensionUpdates'] = checkForExtensionUpdates;
data['cookiesList'] = cookiesList;
data['cropBorders'] = cropBorders;
data['dateFormat'] = dateFormat;
data['defaultReaderMode'] = defaultReaderMode.index;
data['displayType'] = displayType.index;
data['doubleTapAnimationSpeed'] = doubleTapAnimationSpeed;
data['downloadLocation'] = downloadLocation;
data['downloadOnlyOnWifi'] = downloadOnlyOnWifi;
data['filterScanlatorList'] = filterScanlatorList;
data['flexColorSchemeBlendLevel'] = flexColorSchemeBlendLevel;
data['flexSchemeColorIndex'] = flexSchemeColorIndex;
data['id'] = id;
data['incognitoMode'] = incognitoMode;
data['libraryDownloadedChapters'] = libraryDownloadedChapters;
data['libraryFilterAnimeBookMarkedType'] = libraryFilterAnimeBookMarkedType;
data['libraryFilterAnimeDownloadType'] = libraryFilterAnimeDownloadType;
data['libraryFilterAnimeStartedType'] = libraryFilterAnimeStartedType;
data['libraryFilterAnimeUnreadType'] = libraryFilterAnimeUnreadType;
data['libraryFilterMangasBookMarkedType'] =
libraryFilterMangasBookMarkedType;
data['libraryFilterMangasDownloadType'] = libraryFilterMangasDownloadType;
data['libraryFilterMangasStartedType'] = libraryFilterMangasStartedType;
data['libraryFilterMangasUnreadType'] = libraryFilterMangasUnreadType;
data['libraryLocalSource'] = libraryLocalSource;
data['libraryShowCategoryTabs'] = libraryShowCategoryTabs;
data['libraryShowContinueReadingButton'] = libraryShowContinueReadingButton;
data['libraryShowLanguage'] = libraryShowLanguage;
data['libraryShowNumbersOfItems'] = libraryShowNumbersOfItems;
if (locale != null) {
data['locale'] = locale!.toJson();
}
data['onlyIncludePinnedSources'] = onlyIncludePinnedSources;
data['pagePreloadAmount'] = pagePreloadAmount;
if (personalPageModeList != null) {
data['personalPageModeList'] =
personalPageModeList!.map((v) => v.toJson()).toList();
}
if (personalReaderModeList != null) {
data['personalReaderModeList'] =
personalReaderModeList!.map((v) => v.toJson()).toList();
}
data['pureBlackDarkMode'] = pureBlackDarkMode;
data['relativeTimesTamps'] = relativeTimesTamps;
data['saveAsCBZArchive'] = saveAsCBZArchive;
data['scaleType'] = scaleType.index;
data['showNSFW'] = showNSFW;
data['showPagesNumber'] = showPagesNumber;
if (sortChapterList != null) {
data['sortChapterList'] =
sortChapterList!.map((v) => v.toJson()).toList();
}
data['sortLibraryAnime'] = sortLibraryAnime;
if (sortLibraryManga != null) {
data['sortLibraryManga'] = sortLibraryManga!.toJson();
}
data['themeIsDark'] = themeIsDark;
data['userAgent'] = userAgent;
data['backupFrequency'] = backupFrequency;
data['backupFrequencyOptions'] = backupFrequencyOptions;
data['autoBackupLocation'] = autoBackupLocation;
data['startDatebackup'] = startDatebackup;
data['usePageTapZones'] = usePageTapZones;
return data;
}
Map<String, dynamic> toJson() => {
'animatePageTransitions': animatePageTransitions,
'animeDisplayType': animeDisplayType.index,
'animeLibraryDownloadedChapters': animeLibraryDownloadedChapters,
'animeLibraryLocalSource': animeLibraryLocalSource,
'animeLibraryShowCategoryTabs': animeLibraryShowCategoryTabs,
'animeLibraryShowContinueReadingButton':
animeLibraryShowContinueReadingButton,
'animeLibraryShowLanguage': animeLibraryShowLanguage,
'animeLibraryShowNumbersOfItems': animeLibraryShowNumbersOfItems,
'autoExtensionsUpdates': autoExtensionsUpdates,
'backgroundColor': backgroundColor.index,
if (chapterFilterBookmarkedList != null)
'chapterFilterBookmarkedList':
chapterFilterBookmarkedList!.map((v) => v.toJson()).toList(),
if (chapterFilterDownloadedList != null)
'chapterFilterDownloadedList':
chapterFilterDownloadedList!.map((v) => v.toJson()).toList(),
if (chapterFilterUnreadList != null)
'chapterFilterUnreadList':
chapterFilterUnreadList!.map((v) => v.toJson()).toList(),
if (chapterPageIndexList != null)
'chapterPageIndexList':
chapterPageIndexList!.map((v) => v.toJson()).toList(),
if (chapterPageUrlsList != null)
'chapterPageUrlsList':
chapterPageUrlsList!.map((v) => v.toJson()).toList(),
'checkForExtensionUpdates': checkForExtensionUpdates,
'cookiesList': cookiesList,
'cropBorders': cropBorders,
'dateFormat': dateFormat,
'defaultReaderMode': defaultReaderMode.index,
'displayType': displayType.index,
'doubleTapAnimationSpeed': doubleTapAnimationSpeed,
'downloadLocation': downloadLocation,
'downloadOnlyOnWifi': downloadOnlyOnWifi,
'filterScanlatorList': filterScanlatorList,
'flexColorSchemeBlendLevel': flexColorSchemeBlendLevel,
'flexSchemeColorIndex': flexSchemeColorIndex,
'id': id,
'incognitoMode': incognitoMode,
'libraryDownloadedChapters': libraryDownloadedChapters,
'libraryFilterAnimeBookMarkedType': libraryFilterAnimeBookMarkedType,
'libraryFilterAnimeDownloadType': libraryFilterAnimeDownloadType,
'libraryFilterAnimeStartedType': libraryFilterAnimeStartedType,
'libraryFilterAnimeUnreadType': libraryFilterAnimeUnreadType,
'libraryFilterMangasBookMarkedType': libraryFilterMangasBookMarkedType,
'libraryFilterMangasDownloadType': libraryFilterMangasDownloadType,
'libraryFilterMangasStartedType': libraryFilterMangasStartedType,
'libraryFilterMangasUnreadType': libraryFilterMangasUnreadType,
'libraryLocalSource': libraryLocalSource,
'libraryShowCategoryTabs': libraryShowCategoryTabs,
'libraryShowContinueReadingButton': libraryShowContinueReadingButton,
'libraryShowLanguage': libraryShowLanguage,
'libraryShowNumbersOfItems': libraryShowNumbersOfItems,
if (locale != null) 'locale': locale!.toJson(),
'onlyIncludePinnedSources': onlyIncludePinnedSources,
'pagePreloadAmount': pagePreloadAmount,
if (personalPageModeList != null)
'personalPageModeList':
personalPageModeList!.map((v) => v.toJson()).toList(),
if (personalReaderModeList != null)
'personalReaderModeList':
personalReaderModeList!.map((v) => v.toJson()).toList(),
'pureBlackDarkMode': pureBlackDarkMode,
'relativeTimesTamps': relativeTimesTamps,
'saveAsCBZArchive': saveAsCBZArchive,
'scaleType': scaleType.index,
'showNSFW': showNSFW,
'showPagesNumber': showPagesNumber,
if (sortChapterList != null)
'sortChapterList': sortChapterList!.map((v) => v.toJson()).toList(),
'sortLibraryAnime': sortLibraryAnime,
if (sortLibraryManga != null)
'sortLibraryManga': sortLibraryManga!.toJson(),
'themeIsDark': themeIsDark,
'userAgent': userAgent,
'backupFrequency': backupFrequency,
'backupFrequencyOptions': backupFrequencyOptions,
'autoBackupLocation': autoBackupLocation,
'startDatebackup': startDatebackup,
'usePageTapZones': usePageTapZones
};
}
enum DisplayType {
@ -444,12 +431,7 @@ class SortLibraryManga {
reverse = json['reverse'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['index'] = index;
data['reverse'] = reverse;
return data;
}
Map<String, dynamic> toJson() => {'index': index, 'reverse': reverse};
}
@embedded
@ -464,13 +446,8 @@ class SortChapter {
reverse = json['reverse'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['index'] = index;
data['mangaId'] = mangaId;
data['reverse'] = reverse;
return data;
}
Map<String, dynamic> toJson() =>
{'index': index, 'mangaId': mangaId, 'reverse': reverse};
}
@embedded
@ -483,12 +460,7 @@ class ChapterFilterDownloaded {
type = json['type'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['mangaId'] = mangaId;
data['type'] = type;
return data;
}
Map<String, dynamic> toJson() => {'mangaId': mangaId, 'type': type};
}
@embedded
@ -501,12 +473,7 @@ class ChapterFilterUnread {
type = json['type'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['mangaId'] = mangaId;
data['type'] = type;
return data;
}
Map<String, dynamic> toJson() => {'mangaId': mangaId, 'type': type};
}
@embedded
@ -519,12 +486,7 @@ class ChapterFilterBookmarked {
type = json['type'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['mangaId'] = mangaId;
data['type'] = type;
return data;
}
Map<String, dynamic> toJson() => {'mangaId': mangaId, 'type': type};
}
@embedded
@ -538,12 +500,7 @@ class ChapterPageurls {
urls = json['urls']?.cast<String>();
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['chapterId'] = chapterId;
data['urls'] = urls;
return data;
}
Map<String, dynamic> toJson() => {'chapterId': chapterId, 'urls': urls};
}
@embedded
@ -557,12 +514,7 @@ class ChapterPageIndex {
index = json['index'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['chapterId'] = chapterId;
data['index'] = index;
return data;
}
Map<String, dynamic> toJson() => {'chapterId': chapterId, 'index': index};
}
@embedded
@ -576,12 +528,7 @@ class Cookie {
cookie = json['cookie'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['idSource'] = idSource;
data['cookie'] = cookie;
return data;
}
Map<String, dynamic> toJson() => {'idSource': idSource, 'cookie': cookie};
}
@embedded
@ -597,12 +544,26 @@ class PersonalReaderMode {
readerMode = ReaderMode.values[json['readerMode']];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['mangaId'] = mangaId;
data['readerMode'] = readerMode.index;
return data;
Map<String, dynamic> toJson() =>
{'mangaId': mangaId, 'readerMode': readerMode.index};
}
@embedded
class AutoScrollPages {
int? mangaId;
double? pageOffset;
bool? autoScroll;
AutoScrollPages(
{this.mangaId, this.pageOffset = 10, this.autoScroll = false});
AutoScrollPages.fromJson(Map<String, dynamic> json) {
mangaId = json['mangaId'];
pageOffset = json['pageOffset'];
autoScroll = json['autoScroll'];
}
Map<String, dynamic> toJson() =>
{'mangaId': mangaId, 'pageOffset': pageOffset, 'autoScroll': autoScroll};
}
@embedded
@ -618,17 +579,13 @@ class PersonalPageMode {
pageMode = PageMode.values[json['pageMode']];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['mangaId'] = mangaId;
data['pageMode'] = pageMode.index;
return data;
}
Map<String, dynamic> toJson() =>
{'mangaId': mangaId, 'pageMode': pageMode.index};
}
enum ReaderMode { vertical, ltr, rtl, verticalContinuous, webtoon }
enum PageMode { onePage, doubleColumm }
enum PageMode { onePage, doublePage }
@embedded
class FilterScanlator {
@ -641,12 +598,8 @@ class FilterScanlator {
scanlators = json['scanlators']?.cast<String>();
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['mangaId'] = mangaId;
data['scanlators'] = scanlators;
return data;
}
Map<String, dynamic> toJson() =>
{'mangaId': mangaId, 'scanlators': scanlators};
}
@embedded
@ -660,10 +613,6 @@ class L10nLocale {
languageCode = json['languageCode'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['countryCode'] = countryCode;
data['languageCode'] = languageCode;
return data;
}
Map<String, dynamic> toJson() =>
{'countryCode': countryCode, 'languageCode': languageCode};
}

File diff suppressed because it is too large Load diff

View file

@ -106,34 +106,32 @@ class Source {
additionalParams = json['additionalParams'] ?? "";
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['apiUrl'] = apiUrl;
data['appMinVerReq'] = appMinVerReq;
data['baseUrl'] = baseUrl;
data['dateFormat'] = dateFormat;
data['dateFormatLocale'] = dateFormatLocale;
data['hasCloudflare'] = hasCloudflare;
data['headers'] = headers;
data['iconUrl'] = iconUrl;
data['id'] = id;
data['isActive'] = isActive;
data['isAdded'] = isAdded;
data['isFullData'] = isFullData;
data['isManga'] = isManga;
data['isNsfw'] = isNsfw;
data['isPinned'] = isPinned;
data['lang'] = lang;
data['lastUsed'] = lastUsed;
data['name'] = name;
data['sourceCode'] = sourceCode;
data['sourceCodeUrl'] = sourceCodeUrl;
data['typeSource'] = typeSource;
data['version'] = version;
data['versionLast'] = versionLast;
data['additionalParams'] = additionalParams;
return data;
}
Map<String, dynamic> toJson() => {
'apiUrl': apiUrl,
'appMinVerReq': appMinVerReq,
'baseUrl': baseUrl,
'dateFormat': dateFormat,
'dateFormatLocale': dateFormatLocale,
'hasCloudflare': hasCloudflare,
'headers': headers,
'iconUrl': iconUrl,
'id': id,
'isActive': isActive,
'isAdded': isAdded,
'isFullData': isFullData,
'isManga': isManga,
'isNsfw': isNsfw,
'isPinned': isPinned,
'lang': lang,
'lastUsed': lastUsed,
'name': name,
'sourceCode': sourceCode,
'sourceCodeUrl': sourceCodeUrl,
'typeSource': typeSource,
'version': version,
'versionLast': versionLast,
'additionalParams': additionalParams,
};
MSource toMSource() {
return MSource(

View file

@ -65,24 +65,22 @@ class Track {
isManga = json['isManga'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['finishedReadingDate'] = finishedReadingDate;
data['id'] = id;
data['lastChapterRead'] = lastChapterRead;
data['libraryId'] = libraryId;
data['mangaId'] = mangaId;
data['mediaId'] = mediaId;
data['score'] = score;
data['startedReadingDate'] = startedReadingDate;
data['status'] = status.index;
data['syncId'] = syncId;
data['title'] = title;
data['totalChapter'] = totalChapter;
data['trackingUrl'] = trackingUrl;
data['isManga'] = isManga;
return data;
}
Map<String, dynamic> toJson() => {
'finishedReadingDate': finishedReadingDate,
'id': id,
'lastChapterRead': lastChapterRead,
'libraryId': libraryId,
'mangaId': mangaId,
'mediaId': mediaId,
'score': score,
'startedReadingDate': startedReadingDate,
'status': status.index,
'syncId': syncId,
'title': title,
'totalChapter': totalChapter,
'trackingUrl': trackingUrl,
'isManga': isManga,
};
}
enum TrackStatus {

View file

@ -26,13 +26,6 @@ class TrackPreference {
prefs = json['prefs'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['syncId'] = syncId;
data['username'] = username;
data['oAuth'] = oAuth;
data['prefs'] = prefs;
return data;
}
Map<String, dynamic> toJson() =>
{'syncId': syncId, 'username': username, 'oAuth': oAuth, 'prefs': prefs};
}

View file

@ -7,7 +7,7 @@ part of 'fetch_anime_sources.dart';
// **************************************************************************
String _$fetchAnimeSourcesListHash() =>
r'f249fc2761491c8109bdd253d1ec434177f29b21';
r'3f9cf47efce8e6e207c59e0d936727959c1fe982';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -7,7 +7,7 @@ part of 'fetch_manga_sources.dart';
// **************************************************************************
String _$fetchMangaSourcesListHash() =>
r'4830433a410607ed401c6c004af2377c0262a733';
r'a74557098c49877942a296abe110fb6ef1dce580';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -62,6 +62,34 @@ class ReaderController {
return isar.settings.getSync(227)!.defaultReaderMode;
}
(bool, double) isAutoValues() {
final autoScrollPagesList = getIsarSetting().autoScrollPages ?? [];
final autoScrollPages = autoScrollPagesList
.where((element) => element.mangaId == getManga().id);
if (autoScrollPages.isNotEmpty) {
return (
autoScrollPages.first.autoScroll ?? false,
autoScrollPages.first.pageOffset ?? 10
);
}
return (false, 10);
}
void setAutoScroll(bool value, double offset) {
List<AutoScrollPages>? autoScrollPagesList = [];
for (var autoScrollPages in getIsarSetting().autoScrollPages ?? []) {
if (autoScrollPages.mangaId != getManga().id) {
autoScrollPagesList.add(autoScrollPages);
}
}
autoScrollPagesList.add(AutoScrollPages()
..mangaId = getManga().id
..pageOffset = offset
..autoScroll = value);
isar.writeTxnSync(() => isar.settings
.putSync(getIsarSetting()..autoScrollPages = autoScrollPagesList));
}
PageMode getPageMode() {
final personalPageModeList = getIsarSetting().personalPageModeList ?? [];
final personalPageMode = personalPageModeList

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,3 @@
import 'dart:io';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
@ -9,16 +8,13 @@ import 'package:mangayomi/modules/more/backup_and_restore/providers/backup.dart'
import 'package:mangayomi/modules/more/backup_and_restore/providers/restore.dart';
import 'package:mangayomi/providers/l10n_providers.dart';
import 'package:mangayomi/utils/colors.dart';
import 'package:mangayomi/utils/extensions.dart';
import 'package:mangayomi/utils/media_query.dart';
import 'package:share_plus/share_plus.dart';
class BackupAndRestore extends ConsumerWidget {
const BackupAndRestore({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
// final isIOS = Platform.isIOS;
final backupFrequency = ref.watch(backupFrequencyStateProvider);
final backupFrequencyOptions =
ref.watch(backupFrequencyOptionsStateProvider);
@ -81,22 +77,14 @@ class BackupAndRestore extends ConsumerWidget {
)),
TextButton(
onPressed: () async {
// if (isIOS) {
// ref.watch(doBackUpProvider(
// list: indexList,
// path: autoBackupLocation.$1,
// context: context));
// } else {
final result = await FilePicker.platform
.getDirectoryPath();
final result = await FilePicker.platform
.getDirectoryPath();
if (result != null && context.mounted) {
ref.watch(doBackUpProvider(
list: indexList,
path: result,
context: context));
// }
if (result != null && context.mounted) {
ref.watch(doBackUpProvider(
list: indexList,
path: result,
context: context));
}
},
child: Text(
@ -260,24 +248,22 @@ class BackupAndRestore extends ConsumerWidget {
),
),
// if (!isIOS)
ListTile(
onTap: () async {
String? result = await FilePicker.platform.getDirectoryPath();
ListTile(
onTap: () async {
String? result = await FilePicker.platform.getDirectoryPath();
if (result != null) {
ref
.read(autoBackupLocationStateProvider.notifier)
.set(result);
}
},
title: Text(l10n.backup_location),
subtitle: Text(
autoBackupLocation.$2.isEmpty
? autoBackupLocation.$1
: autoBackupLocation.$2,
style: TextStyle(fontSize: 11, color: secondaryColor(context)),
),
if (result != null) {
ref.read(autoBackupLocationStateProvider.notifier).set(result);
}
},
title: Text(l10n.backup_location),
subtitle: Text(
autoBackupLocation.$2.isEmpty
? autoBackupLocation.$1
: autoBackupLocation.$2,
style: TextStyle(fontSize: 11, color: secondaryColor(context)),
),
),
ListTile(
onTap: () {
final list = _getList(context);
@ -355,8 +341,6 @@ class BackupAndRestore extends ConsumerWidget {
style: TextStyle(fontSize: 11, color: secondaryColor(context)),
),
),
// if (isIOS)
// ListBackupFilesFromDirectory(directory: autoBackupLocation.$1),
ListTile(
title: Padding(
padding: const EdgeInsets.only(bottom: 8),
@ -400,67 +384,3 @@ List<String> _getBackupFrequencyList(BuildContext context) {
l10n.weekly
];
}
class ListBackupFilesFromDirectory extends ConsumerWidget {
final String directory;
const ListBackupFilesFromDirectory({super.key, required this.directory});
@override
Widget build(BuildContext context, WidgetRef ref) {
final files = Directory(directory)
.listSync()
.where((element) =>
element.path.contains('mangayomi_') &&
element.path.endsWith('.backup'))
.toList()
.reversed
.toList();
return files.isNotEmpty
? SizedBox(
height: 200,
child: Column(
children: [
Padding(
padding:
const EdgeInsets.symmetric(horizontal: 15, vertical: 5),
child: Row(
children: [
Text(context.l10n.backups,
style: TextStyle(
fontSize: 13, color: primaryColor(context))),
],
),
),
Expanded(
child: ListView.builder(
itemCount: files.length,
itemBuilder: (_, index) {
final file = files[index];
final name =
'mangayomi_${file.path.substringAfter('mangayomi_')}';
return ListTile(
title: Text(name),
trailing: PopupMenuButton(itemBuilder: (context) {
return [
PopupMenuItem<int>(
value: 0, child: Text(context.l10n.share)),
PopupMenuItem<int>(
value: 1, child: Text(context.l10n.restore)),
];
}, onSelected: (value) {
if (value == 0) {
Share.shareXFiles([XFile(file.path)], text: name);
} else if (value == 1) {
ref.watch(doRestoreProvider(
path: file.path, context: context));
}
}),
);
}),
),
],
),
)
: Container();
}
}

View file

@ -4,6 +4,7 @@ import 'package:archive/archive_io.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/material.dart';
import 'package:isar/isar.dart';
import 'package:mangayomi/eval/model/source_preference.dart';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/category.dart';
import 'package:mangayomi/models/chapter.dart';
@ -104,6 +105,14 @@ void doBackUp(DoBackUpRef ref,
.map((e) => e.toJson())
.toList();
datas.addAll({"extensions": res});
final resSourePref = isar.sourcePreferences
.filter()
.idIsNotNull()
.keyIsNotNull()
.findAllSync()
.map((e) => e.toJson())
.toList();
datas.addAll({"extensions_preferences": resSourePref});
}
final name =
'mangayomi_${DateTime.now().toString().substringBefore(' ').replaceAll('-', '_')}';

View file

@ -6,7 +6,7 @@ part of 'backup.dart';
// RiverpodGenerator
// **************************************************************************
String _$doBackUpHash() => r'4418d6aa9ea87ffa30195af59f9e93f95f7915f6';
String _$doBackUpHash() => r'44abdf2cffcd6c6470234cd378f5b802a2aff7ba';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -3,6 +3,7 @@ import 'package:archive/archive_io.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/material.dart';
import 'package:mangayomi/eval/model/m_bridge.dart';
import 'package:mangayomi/eval/model/source_preference.dart';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/category.dart';
import 'package:mangayomi/models/chapter.dart';
@ -55,6 +56,9 @@ void doRestore(DoRestoreRef ref,
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();
isar.writeTxnSync(() {
isar.mangas.clearSync();
@ -114,6 +118,11 @@ void doRestore(DoRestoreRef ref,
isar.sources.putAllSync(extensions);
}
isar.sourcePreferences.clearSync();
if (extensionsPref != null) {
isar.sourcePreferences.putAllSync(extensionsPref);
}
isar.settings.clearSync();
if (settings != null) {
isar.settings.putAllSync(settings);

View file

@ -6,7 +6,7 @@ part of 'restore.dart';
// RiverpodGenerator
// **************************************************************************
String _$doRestoreHash() => r'3faca290a7217c27da2cdf21a559cec077a0201e';
String _$doRestoreHash() => r'3c88ad8ba80c245a4b511961111f7ab79c0d330f';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -7,7 +7,7 @@ final testSourceModel = Source(
name: "Test Source",
// Example: https://gogoanime3.net
baseUrl: "",
//
// source code
sourceCode: testSourceCode,
// Example: en
lang: "",

View file

@ -61,8 +61,8 @@ packages:
dependency: "direct main"
description:
path: "."
ref: "357595bb930360f2a153f84aeb85b8614a0eb4c3"
resolved-ref: "357595bb930360f2a153f84aeb85b8614a0eb4c3"
ref: c66de6ad76ddaf74399cbdeeed42d04126e88e4b
resolved-ref: c66de6ad76ddaf74399cbdeeed42d04126e88e4b
url: "https://github.com/kodjodevf/background_downloader.git"
source: git
version: "7.12.3"

View file

@ -32,7 +32,7 @@ dependencies:
background_downloader:
git:
url: https://github.com/kodjodevf/background_downloader.git
ref: 357595bb930360f2a153f84aeb85b8614a0eb4c3
ref: c66de6ad76ddaf74399cbdeeed42d04126e88e4b
permission_handler: ^11.0.1
flutter_inappwebview: ^5.7.2+3
draggable_menu: ^4.4.0