Settings features: check for extension updates, auto extension updates

This commit is contained in:
kodjomoustapha 2023-08-25 19:10:35 +01:00
parent 2eb4efe435
commit a914f6edaa
16 changed files with 545 additions and 345 deletions

View file

@ -215,6 +215,9 @@
"image_loading_error":"This image couldn't be loaded",
"add_episodes":"Add Episodes",
"select_video_quality":"Select video quality",
"select_video_subtitle":"Select video subtitle"
"select_video_subtitle":"Select video subtitle",
"check_for_extension_updates":"Check for extension updates",
"auto_extensions_updates":"Auto extension updates",
"auto_extensions_updates_subtitle":"Will automatically update the extension when a new version is available."
}

View file

@ -106,7 +106,7 @@
"only_on_wifi":"Uniquement en Wi-Fi",
"save_as_cbz_archive":"Enregistrer comme archive CBZ",
"browse_subtitle":"Sources, extensions, recherche globale",
"only_include_pinned_sources":"Rechercher uniquement les sources épinglées dans la recherche globale",
"only_include_pinned_sources":"N'inclure que les sources épinglées",
"nsfw_sources":"Contenu +18",
"nsfw_sources_show":"Afficher dans les listes de sources et d'extensions",
"nsfw_sources_info":"Ceci n'empêche pas les extensions non officielles ou potentiellement mal signalées de diffuser du contenu +18 dans l'application.",
@ -215,5 +215,8 @@
"image_loading_error":"L'image n'a pas pu être chargée",
"add_episodes":"Ajouter Épisodes",
"select_video_quality":"Selectionner une qualité video",
"select_video_subtitle":"Selectionner un sous-titrage video"
"select_video_subtitle":"Selectionner un sous-titrage video",
"check_for_extension_updates":"Vérifier les mise à jour d'extensions",
"auto_extensions_updates":"Mises à jour auto des extensions",
"auto_extensions_updates_subtitle":"Mettra automatiquement à jour l'extension lorsqu'une nouvelle version est disponible."
}

View file

@ -88,7 +88,7 @@ class Settings {
final sources = IsarLinks<Source>();
bool? autoUpdateExtensions;
bool? autoExtensionsUpdates;
bool? cropBorders;
@ -121,6 +121,8 @@ class Settings {
int? pagePreloadAmount;
bool? checkForExtensionUpdates;
@enumerated
ScaleType scaleType;
@ -162,7 +164,7 @@ class Settings {
this.downloadLocation = "",
this.cropBorders = false,
this.libraryLocalSource,
this.autoUpdateExtensions = false,
this.autoExtensionsUpdates = false,
this.animeDisplayType = DisplayType.compactGrid,
this.libraryFilterAnimeDownloadType = 0,
this.libraryFilterAnimeUnreadType = 0,
@ -176,7 +178,8 @@ class Settings {
this.animeLibraryLocalSource,
this.sortLibraryAnime,
this.pagePreloadAmount = 6,
this.scaleType = ScaleType.fitScreen});
this.scaleType = ScaleType.fitScreen,
this.checkForExtensionUpdates = true});
}
enum DisplayType {

View file

@ -58,9 +58,9 @@ const SettingsSchema = CollectionSchema(
name: r'animeLibraryShowNumbersOfItems',
type: IsarType.bool,
),
r'autoUpdateExtensions': PropertySchema(
r'autoExtensionsUpdates': PropertySchema(
id: 8,
name: r'autoUpdateExtensions',
name: r'autoExtensionsUpdates',
type: IsarType.bool,
),
r'chapterFilterBookmarkedList': PropertySchema(
@ -93,218 +93,223 @@ const SettingsSchema = CollectionSchema(
type: IsarType.objectList,
target: r'ChapterPageurls',
),
r'cookiesList': PropertySchema(
r'checkForExtensionUpdates': PropertySchema(
id: 14,
name: r'checkForExtensionUpdates',
type: IsarType.bool,
),
r'cookiesList': PropertySchema(
id: 15,
name: r'cookiesList',
type: IsarType.objectList,
target: r'Cookie',
),
r'cropBorders': PropertySchema(
id: 15,
id: 16,
name: r'cropBorders',
type: IsarType.bool,
),
r'dateFormat': PropertySchema(
id: 16,
id: 17,
name: r'dateFormat',
type: IsarType.string,
),
r'defaultReaderMode': PropertySchema(
id: 17,
id: 18,
name: r'defaultReaderMode',
type: IsarType.byte,
enumMap: _SettingsdefaultReaderModeEnumValueMap,
),
r'displayType': PropertySchema(
id: 18,
id: 19,
name: r'displayType',
type: IsarType.byte,
enumMap: _SettingsdisplayTypeEnumValueMap,
),
r'doubleTapAnimationSpeed': PropertySchema(
id: 19,
id: 20,
name: r'doubleTapAnimationSpeed',
type: IsarType.long,
),
r'downloadLocation': PropertySchema(
id: 20,
id: 21,
name: r'downloadLocation',
type: IsarType.string,
),
r'downloadOnlyOnWifi': PropertySchema(
id: 21,
id: 22,
name: r'downloadOnlyOnWifi',
type: IsarType.bool,
),
r'filterScanlatorList': PropertySchema(
id: 22,
id: 23,
name: r'filterScanlatorList',
type: IsarType.objectList,
target: r'FilterScanlator',
),
r'flexColorSchemeBlendLevel': PropertySchema(
id: 23,
id: 24,
name: r'flexColorSchemeBlendLevel',
type: IsarType.double,
),
r'flexSchemeColorIndex': PropertySchema(
id: 24,
id: 25,
name: r'flexSchemeColorIndex',
type: IsarType.long,
),
r'incognitoMode': PropertySchema(
id: 25,
id: 26,
name: r'incognitoMode',
type: IsarType.bool,
),
r'libraryDownloadedChapters': PropertySchema(
id: 26,
id: 27,
name: r'libraryDownloadedChapters',
type: IsarType.bool,
),
r'libraryFilterAnimeBookMarkedType': PropertySchema(
id: 27,
id: 28,
name: r'libraryFilterAnimeBookMarkedType',
type: IsarType.long,
),
r'libraryFilterAnimeDownloadType': PropertySchema(
id: 28,
id: 29,
name: r'libraryFilterAnimeDownloadType',
type: IsarType.long,
),
r'libraryFilterAnimeStartedType': PropertySchema(
id: 29,
id: 30,
name: r'libraryFilterAnimeStartedType',
type: IsarType.long,
),
r'libraryFilterAnimeUnreadType': PropertySchema(
id: 30,
id: 31,
name: r'libraryFilterAnimeUnreadType',
type: IsarType.long,
),
r'libraryFilterMangasBookMarkedType': PropertySchema(
id: 31,
id: 32,
name: r'libraryFilterMangasBookMarkedType',
type: IsarType.long,
),
r'libraryFilterMangasDownloadType': PropertySchema(
id: 32,
id: 33,
name: r'libraryFilterMangasDownloadType',
type: IsarType.long,
),
r'libraryFilterMangasStartedType': PropertySchema(
id: 33,
id: 34,
name: r'libraryFilterMangasStartedType',
type: IsarType.long,
),
r'libraryFilterMangasUnreadType': PropertySchema(
id: 34,
id: 35,
name: r'libraryFilterMangasUnreadType',
type: IsarType.long,
),
r'libraryLocalSource': PropertySchema(
id: 35,
id: 36,
name: r'libraryLocalSource',
type: IsarType.bool,
),
r'libraryShowCategoryTabs': PropertySchema(
id: 36,
id: 37,
name: r'libraryShowCategoryTabs',
type: IsarType.bool,
),
r'libraryShowContinueReadingButton': PropertySchema(
id: 37,
id: 38,
name: r'libraryShowContinueReadingButton',
type: IsarType.bool,
),
r'libraryShowLanguage': PropertySchema(
id: 38,
id: 39,
name: r'libraryShowLanguage',
type: IsarType.bool,
),
r'libraryShowNumbersOfItems': PropertySchema(
id: 39,
id: 40,
name: r'libraryShowNumbersOfItems',
type: IsarType.bool,
),
r'locale': PropertySchema(
id: 40,
id: 41,
name: r'locale',
type: IsarType.object,
target: r'L10nLocale',
),
r'onlyIncludePinnedSources': PropertySchema(
id: 41,
id: 42,
name: r'onlyIncludePinnedSources',
type: IsarType.bool,
),
r'pagePreloadAmount': PropertySchema(
id: 42,
id: 43,
name: r'pagePreloadAmount',
type: IsarType.long,
),
r'personalReaderModeList': PropertySchema(
id: 43,
id: 44,
name: r'personalReaderModeList',
type: IsarType.objectList,
target: r'PersonalReaderMode',
),
r'pureBlackDarkMode': PropertySchema(
id: 44,
id: 45,
name: r'pureBlackDarkMode',
type: IsarType.bool,
),
r'relativeTimesTamps': PropertySchema(
id: 45,
id: 46,
name: r'relativeTimesTamps',
type: IsarType.long,
),
r'saveAsCBZArchive': PropertySchema(
id: 46,
id: 47,
name: r'saveAsCBZArchive',
type: IsarType.bool,
),
r'scaleType': PropertySchema(
id: 47,
id: 48,
name: r'scaleType',
type: IsarType.byte,
enumMap: _SettingsscaleTypeEnumValueMap,
),
r'showNSFW': PropertySchema(
id: 48,
id: 49,
name: r'showNSFW',
type: IsarType.bool,
),
r'showPagesNumber': PropertySchema(
id: 49,
id: 50,
name: r'showPagesNumber',
type: IsarType.bool,
),
r'sortChapterList': PropertySchema(
id: 50,
id: 51,
name: r'sortChapterList',
type: IsarType.objectList,
target: r'SortChapter',
),
r'sortLibraryAnime': PropertySchema(
id: 51,
id: 52,
name: r'sortLibraryAnime',
type: IsarType.object,
target: r'SortLibraryManga',
),
r'sortLibraryManga': PropertySchema(
id: 52,
id: 53,
name: r'sortLibraryManga',
type: IsarType.object,
target: r'SortLibraryManga',
),
r'themeIsDark': PropertySchema(
id: 53,
id: 54,
name: r'themeIsDark',
type: IsarType.bool,
),
r'userAgent': PropertySchema(
id: 54,
id: 55,
name: r'userAgent',
type: IsarType.string,
)
@ -532,7 +537,7 @@ void _settingsSerialize(
writer.writeBool(offsets[5], object.animeLibraryShowContinueReadingButton);
writer.writeBool(offsets[6], object.animeLibraryShowLanguage);
writer.writeBool(offsets[7], object.animeLibraryShowNumbersOfItems);
writer.writeBool(offsets[8], object.autoUpdateExtensions);
writer.writeBool(offsets[8], object.autoExtensionsUpdates);
writer.writeObjectList<ChapterFilterBookmarked>(
offsets[9],
allOffsets,
@ -563,82 +568,83 @@ void _settingsSerialize(
ChapterPageurlsSchema.serialize,
object.chapterPageUrlsList,
);
writer.writeBool(offsets[14], object.checkForExtensionUpdates);
writer.writeObjectList<Cookie>(
offsets[14],
offsets[15],
allOffsets,
CookieSchema.serialize,
object.cookiesList,
);
writer.writeBool(offsets[15], object.cropBorders);
writer.writeString(offsets[16], object.dateFormat);
writer.writeByte(offsets[17], object.defaultReaderMode.index);
writer.writeByte(offsets[18], object.displayType.index);
writer.writeLong(offsets[19], object.doubleTapAnimationSpeed);
writer.writeString(offsets[20], object.downloadLocation);
writer.writeBool(offsets[21], object.downloadOnlyOnWifi);
writer.writeBool(offsets[16], object.cropBorders);
writer.writeString(offsets[17], object.dateFormat);
writer.writeByte(offsets[18], object.defaultReaderMode.index);
writer.writeByte(offsets[19], object.displayType.index);
writer.writeLong(offsets[20], object.doubleTapAnimationSpeed);
writer.writeString(offsets[21], object.downloadLocation);
writer.writeBool(offsets[22], object.downloadOnlyOnWifi);
writer.writeObjectList<FilterScanlator>(
offsets[22],
offsets[23],
allOffsets,
FilterScanlatorSchema.serialize,
object.filterScanlatorList,
);
writer.writeDouble(offsets[23], object.flexColorSchemeBlendLevel);
writer.writeLong(offsets[24], object.flexSchemeColorIndex);
writer.writeBool(offsets[25], object.incognitoMode);
writer.writeBool(offsets[26], object.libraryDownloadedChapters);
writer.writeLong(offsets[27], object.libraryFilterAnimeBookMarkedType);
writer.writeLong(offsets[28], object.libraryFilterAnimeDownloadType);
writer.writeLong(offsets[29], object.libraryFilterAnimeStartedType);
writer.writeLong(offsets[30], object.libraryFilterAnimeUnreadType);
writer.writeLong(offsets[31], object.libraryFilterMangasBookMarkedType);
writer.writeLong(offsets[32], object.libraryFilterMangasDownloadType);
writer.writeLong(offsets[33], object.libraryFilterMangasStartedType);
writer.writeLong(offsets[34], object.libraryFilterMangasUnreadType);
writer.writeBool(offsets[35], object.libraryLocalSource);
writer.writeBool(offsets[36], object.libraryShowCategoryTabs);
writer.writeBool(offsets[37], object.libraryShowContinueReadingButton);
writer.writeBool(offsets[38], object.libraryShowLanguage);
writer.writeBool(offsets[39], object.libraryShowNumbersOfItems);
writer.writeDouble(offsets[24], object.flexColorSchemeBlendLevel);
writer.writeLong(offsets[25], object.flexSchemeColorIndex);
writer.writeBool(offsets[26], object.incognitoMode);
writer.writeBool(offsets[27], object.libraryDownloadedChapters);
writer.writeLong(offsets[28], object.libraryFilterAnimeBookMarkedType);
writer.writeLong(offsets[29], object.libraryFilterAnimeDownloadType);
writer.writeLong(offsets[30], object.libraryFilterAnimeStartedType);
writer.writeLong(offsets[31], object.libraryFilterAnimeUnreadType);
writer.writeLong(offsets[32], object.libraryFilterMangasBookMarkedType);
writer.writeLong(offsets[33], object.libraryFilterMangasDownloadType);
writer.writeLong(offsets[34], object.libraryFilterMangasStartedType);
writer.writeLong(offsets[35], object.libraryFilterMangasUnreadType);
writer.writeBool(offsets[36], object.libraryLocalSource);
writer.writeBool(offsets[37], object.libraryShowCategoryTabs);
writer.writeBool(offsets[38], object.libraryShowContinueReadingButton);
writer.writeBool(offsets[39], object.libraryShowLanguage);
writer.writeBool(offsets[40], object.libraryShowNumbersOfItems);
writer.writeObject<L10nLocale>(
offsets[40],
offsets[41],
allOffsets,
L10nLocaleSchema.serialize,
object.locale,
);
writer.writeBool(offsets[41], object.onlyIncludePinnedSources);
writer.writeLong(offsets[42], object.pagePreloadAmount);
writer.writeBool(offsets[42], object.onlyIncludePinnedSources);
writer.writeLong(offsets[43], object.pagePreloadAmount);
writer.writeObjectList<PersonalReaderMode>(
offsets[43],
offsets[44],
allOffsets,
PersonalReaderModeSchema.serialize,
object.personalReaderModeList,
);
writer.writeBool(offsets[44], object.pureBlackDarkMode);
writer.writeLong(offsets[45], object.relativeTimesTamps);
writer.writeBool(offsets[46], object.saveAsCBZArchive);
writer.writeByte(offsets[47], object.scaleType.index);
writer.writeBool(offsets[48], object.showNSFW);
writer.writeBool(offsets[49], object.showPagesNumber);
writer.writeBool(offsets[45], object.pureBlackDarkMode);
writer.writeLong(offsets[46], object.relativeTimesTamps);
writer.writeBool(offsets[47], object.saveAsCBZArchive);
writer.writeByte(offsets[48], object.scaleType.index);
writer.writeBool(offsets[49], object.showNSFW);
writer.writeBool(offsets[50], object.showPagesNumber);
writer.writeObjectList<SortChapter>(
offsets[50],
offsets[51],
allOffsets,
SortChapterSchema.serialize,
object.sortChapterList,
);
writer.writeObject<SortLibraryManga>(
offsets[51],
offsets[52],
allOffsets,
SortLibraryMangaSchema.serialize,
object.sortLibraryAnime,
);
writer.writeObject<SortLibraryManga>(
offsets[52],
offsets[53],
allOffsets,
SortLibraryMangaSchema.serialize,
object.sortLibraryManga,
);
writer.writeBool(offsets[53], object.themeIsDark);
writer.writeString(offsets[54], object.userAgent);
writer.writeBool(offsets[54], object.themeIsDark);
writer.writeString(offsets[55], object.userAgent);
}
Settings _settingsDeserialize(
@ -658,7 +664,7 @@ Settings _settingsDeserialize(
animeLibraryShowContinueReadingButton: reader.readBoolOrNull(offsets[5]),
animeLibraryShowLanguage: reader.readBoolOrNull(offsets[6]),
animeLibraryShowNumbersOfItems: reader.readBoolOrNull(offsets[7]),
autoUpdateExtensions: reader.readBoolOrNull(offsets[8]),
autoExtensionsUpdates: reader.readBoolOrNull(offsets[8]),
chapterFilterDownloadedList: reader.readObjectList<ChapterFilterDownloaded>(
offsets[10],
ChapterFilterDownloadedSchema.deserialize,
@ -677,75 +683,76 @@ Settings _settingsDeserialize(
allOffsets,
ChapterPageurls(),
),
checkForExtensionUpdates: reader.readBoolOrNull(offsets[14]),
cookiesList: reader.readObjectList<Cookie>(
offsets[14],
offsets[15],
CookieSchema.deserialize,
allOffsets,
Cookie(),
),
cropBorders: reader.readBoolOrNull(offsets[15]),
dateFormat: reader.readStringOrNull(offsets[16]),
cropBorders: reader.readBoolOrNull(offsets[16]),
dateFormat: reader.readStringOrNull(offsets[17]),
defaultReaderMode: _SettingsdefaultReaderModeValueEnumMap[
reader.readByteOrNull(offsets[17])] ??
reader.readByteOrNull(offsets[18])] ??
ReaderMode.vertical,
displayType:
_SettingsdisplayTypeValueEnumMap[reader.readByteOrNull(offsets[18])] ??
_SettingsdisplayTypeValueEnumMap[reader.readByteOrNull(offsets[19])] ??
DisplayType.compactGrid,
doubleTapAnimationSpeed: reader.readLongOrNull(offsets[19]),
downloadLocation: reader.readStringOrNull(offsets[20]),
downloadOnlyOnWifi: reader.readBoolOrNull(offsets[21]),
flexColorSchemeBlendLevel: reader.readDoubleOrNull(offsets[23]),
flexSchemeColorIndex: reader.readLongOrNull(offsets[24]),
doubleTapAnimationSpeed: reader.readLongOrNull(offsets[20]),
downloadLocation: reader.readStringOrNull(offsets[21]),
downloadOnlyOnWifi: reader.readBoolOrNull(offsets[22]),
flexColorSchemeBlendLevel: reader.readDoubleOrNull(offsets[24]),
flexSchemeColorIndex: reader.readLongOrNull(offsets[25]),
id: id,
incognitoMode: reader.readBoolOrNull(offsets[25]),
libraryDownloadedChapters: reader.readBoolOrNull(offsets[26]),
libraryFilterAnimeBookMarkedType: reader.readLongOrNull(offsets[27]),
libraryFilterAnimeDownloadType: reader.readLongOrNull(offsets[28]),
libraryFilterAnimeStartedType: reader.readLongOrNull(offsets[29]),
libraryFilterAnimeUnreadType: reader.readLongOrNull(offsets[30]),
libraryFilterMangasBookMarkedType: reader.readLongOrNull(offsets[31]),
libraryFilterMangasDownloadType: reader.readLongOrNull(offsets[32]),
libraryFilterMangasStartedType: reader.readLongOrNull(offsets[33]),
libraryFilterMangasUnreadType: reader.readLongOrNull(offsets[34]),
libraryLocalSource: reader.readBoolOrNull(offsets[35]),
libraryShowCategoryTabs: reader.readBoolOrNull(offsets[36]),
libraryShowContinueReadingButton: reader.readBoolOrNull(offsets[37]),
libraryShowLanguage: reader.readBoolOrNull(offsets[38]),
libraryShowNumbersOfItems: reader.readBoolOrNull(offsets[39]),
onlyIncludePinnedSources: reader.readBoolOrNull(offsets[41]),
pagePreloadAmount: reader.readLongOrNull(offsets[42]),
incognitoMode: reader.readBoolOrNull(offsets[26]),
libraryDownloadedChapters: reader.readBoolOrNull(offsets[27]),
libraryFilterAnimeBookMarkedType: reader.readLongOrNull(offsets[28]),
libraryFilterAnimeDownloadType: reader.readLongOrNull(offsets[29]),
libraryFilterAnimeStartedType: reader.readLongOrNull(offsets[30]),
libraryFilterAnimeUnreadType: reader.readLongOrNull(offsets[31]),
libraryFilterMangasBookMarkedType: reader.readLongOrNull(offsets[32]),
libraryFilterMangasDownloadType: reader.readLongOrNull(offsets[33]),
libraryFilterMangasStartedType: reader.readLongOrNull(offsets[34]),
libraryFilterMangasUnreadType: reader.readLongOrNull(offsets[35]),
libraryLocalSource: reader.readBoolOrNull(offsets[36]),
libraryShowCategoryTabs: reader.readBoolOrNull(offsets[37]),
libraryShowContinueReadingButton: reader.readBoolOrNull(offsets[38]),
libraryShowLanguage: reader.readBoolOrNull(offsets[39]),
libraryShowNumbersOfItems: reader.readBoolOrNull(offsets[40]),
onlyIncludePinnedSources: reader.readBoolOrNull(offsets[42]),
pagePreloadAmount: reader.readLongOrNull(offsets[43]),
personalReaderModeList: reader.readObjectList<PersonalReaderMode>(
offsets[43],
offsets[44],
PersonalReaderModeSchema.deserialize,
allOffsets,
PersonalReaderMode(),
),
pureBlackDarkMode: reader.readBoolOrNull(offsets[44]),
relativeTimesTamps: reader.readLongOrNull(offsets[45]),
saveAsCBZArchive: reader.readBoolOrNull(offsets[46]),
pureBlackDarkMode: reader.readBoolOrNull(offsets[45]),
relativeTimesTamps: reader.readLongOrNull(offsets[46]),
saveAsCBZArchive: reader.readBoolOrNull(offsets[47]),
scaleType:
_SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offsets[47])] ??
_SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offsets[48])] ??
ScaleType.fitScreen,
showNSFW: reader.readBoolOrNull(offsets[48]),
showPagesNumber: reader.readBoolOrNull(offsets[49]),
showNSFW: reader.readBoolOrNull(offsets[49]),
showPagesNumber: reader.readBoolOrNull(offsets[50]),
sortChapterList: reader.readObjectList<SortChapter>(
offsets[50],
offsets[51],
SortChapterSchema.deserialize,
allOffsets,
SortChapter(),
),
sortLibraryAnime: reader.readObjectOrNull<SortLibraryManga>(
offsets[51],
SortLibraryMangaSchema.deserialize,
allOffsets,
),
sortLibraryManga: reader.readObjectOrNull<SortLibraryManga>(
offsets[52],
SortLibraryMangaSchema.deserialize,
allOffsets,
),
themeIsDark: reader.readBoolOrNull(offsets[53]),
userAgent: reader.readStringOrNull(offsets[54]),
sortLibraryManga: reader.readObjectOrNull<SortLibraryManga>(
offsets[53],
SortLibraryMangaSchema.deserialize,
allOffsets,
),
themeIsDark: reader.readBoolOrNull(offsets[54]),
userAgent: reader.readStringOrNull(offsets[55]),
);
object.chapterFilterBookmarkedList =
reader.readObjectList<ChapterFilterBookmarked>(
@ -761,13 +768,13 @@ Settings _settingsDeserialize(
ChapterFilterUnread(),
);
object.filterScanlatorList = reader.readObjectList<FilterScanlator>(
offsets[22],
offsets[23],
FilterScanlatorSchema.deserialize,
allOffsets,
FilterScanlator(),
);
object.locale = reader.readObjectOrNull<L10nLocale>(
offsets[40],
offsets[41],
L10nLocaleSchema.deserialize,
allOffsets,
);
@ -837,46 +844,46 @@ P _settingsDeserializeProp<P>(
ChapterPageurls(),
)) as P;
case 14:
return (reader.readBoolOrNull(offset)) as P;
case 15:
return (reader.readObjectList<Cookie>(
offset,
CookieSchema.deserialize,
allOffsets,
Cookie(),
)) as P;
case 15:
return (reader.readBoolOrNull(offset)) as P;
case 16:
return (reader.readStringOrNull(offset)) as P;
return (reader.readBoolOrNull(offset)) as P;
case 17:
return (reader.readStringOrNull(offset)) as P;
case 18:
return (_SettingsdefaultReaderModeValueEnumMap[
reader.readByteOrNull(offset)] ??
ReaderMode.vertical) as P;
case 18:
case 19:
return (_SettingsdisplayTypeValueEnumMap[reader.readByteOrNull(offset)] ??
DisplayType.compactGrid) as P;
case 19:
return (reader.readLongOrNull(offset)) as P;
case 20:
return (reader.readStringOrNull(offset)) as P;
return (reader.readLongOrNull(offset)) as P;
case 21:
return (reader.readBoolOrNull(offset)) as P;
return (reader.readStringOrNull(offset)) as P;
case 22:
return (reader.readBoolOrNull(offset)) as P;
case 23:
return (reader.readObjectList<FilterScanlator>(
offset,
FilterScanlatorSchema.deserialize,
allOffsets,
FilterScanlator(),
)) as P;
case 23:
return (reader.readDoubleOrNull(offset)) as P;
case 24:
return (reader.readLongOrNull(offset)) as P;
return (reader.readDoubleOrNull(offset)) as P;
case 25:
return (reader.readBoolOrNull(offset)) as P;
return (reader.readLongOrNull(offset)) as P;
case 26:
return (reader.readBoolOrNull(offset)) as P;
case 27:
return (reader.readLongOrNull(offset)) as P;
return (reader.readBoolOrNull(offset)) as P;
case 28:
return (reader.readLongOrNull(offset)) as P;
case 29:
@ -892,7 +899,7 @@ P _settingsDeserializeProp<P>(
case 34:
return (reader.readLongOrNull(offset)) as P;
case 35:
return (reader.readBoolOrNull(offset)) as P;
return (reader.readLongOrNull(offset)) as P;
case 36:
return (reader.readBoolOrNull(offset)) as P;
case 37:
@ -902,48 +909,44 @@ P _settingsDeserializeProp<P>(
case 39:
return (reader.readBoolOrNull(offset)) as P;
case 40:
return (reader.readBoolOrNull(offset)) as P;
case 41:
return (reader.readObjectOrNull<L10nLocale>(
offset,
L10nLocaleSchema.deserialize,
allOffsets,
)) as P;
case 41:
return (reader.readBoolOrNull(offset)) as P;
case 42:
return (reader.readLongOrNull(offset)) as P;
return (reader.readBoolOrNull(offset)) as P;
case 43:
return (reader.readLongOrNull(offset)) as P;
case 44:
return (reader.readObjectList<PersonalReaderMode>(
offset,
PersonalReaderModeSchema.deserialize,
allOffsets,
PersonalReaderMode(),
)) as P;
case 44:
return (reader.readBoolOrNull(offset)) as P;
case 45:
return (reader.readLongOrNull(offset)) as P;
case 46:
return (reader.readBoolOrNull(offset)) as P;
case 46:
return (reader.readLongOrNull(offset)) as P;
case 47:
return (reader.readBoolOrNull(offset)) as P;
case 48:
return (_SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offset)] ??
ScaleType.fitScreen) as P;
case 48:
return (reader.readBoolOrNull(offset)) as P;
case 49:
return (reader.readBoolOrNull(offset)) as P;
case 50:
return (reader.readBoolOrNull(offset)) as P;
case 51:
return (reader.readObjectList<SortChapter>(
offset,
SortChapterSchema.deserialize,
allOffsets,
SortChapter(),
)) as P;
case 51:
return (reader.readObjectOrNull<SortLibraryManga>(
offset,
SortLibraryMangaSchema.deserialize,
allOffsets,
)) as P;
case 52:
return (reader.readObjectOrNull<SortLibraryManga>(
offset,
@ -951,8 +954,14 @@ P _settingsDeserializeProp<P>(
allOffsets,
)) as P;
case 53:
return (reader.readBoolOrNull(offset)) as P;
return (reader.readObjectOrNull<SortLibraryManga>(
offset,
SortLibraryMangaSchema.deserialize,
allOffsets,
)) as P;
case 54:
return (reader.readBoolOrNull(offset)) as P;
case 55:
return (reader.readStringOrNull(offset)) as P;
default:
throw IsarError('Unknown property with id $propertyId');
@ -1357,28 +1366,28 @@ extension SettingsQueryFilter
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
autoUpdateExtensionsIsNull() {
autoExtensionsUpdatesIsNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNull(
property: r'autoUpdateExtensions',
property: r'autoExtensionsUpdates',
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
autoUpdateExtensionsIsNotNull() {
autoExtensionsUpdatesIsNotNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNotNull(
property: r'autoUpdateExtensions',
property: r'autoExtensionsUpdates',
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
autoUpdateExtensionsEqualTo(bool? value) {
autoExtensionsUpdatesEqualTo(bool? value) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'autoUpdateExtensions',
property: r'autoExtensionsUpdates',
value: value,
));
});
@ -1919,6 +1928,34 @@ extension SettingsQueryFilter
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
checkForExtensionUpdatesIsNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNull(
property: r'checkForExtensionUpdates',
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
checkForExtensionUpdatesIsNotNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNotNull(
property: r'checkForExtensionUpdates',
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
checkForExtensionUpdatesEqualTo(bool? value) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'checkForExtensionUpdates',
value: value,
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition> cookiesListIsNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNull(
@ -4728,16 +4765,30 @@ extension SettingsQuerySortBy on QueryBuilder<Settings, Settings, QSortBy> {
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> sortByAutoUpdateExtensions() {
QueryBuilder<Settings, Settings, QAfterSortBy> sortByAutoExtensionsUpdates() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'autoUpdateExtensions', Sort.asc);
return query.addSortBy(r'autoExtensionsUpdates', Sort.asc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy>
sortByAutoUpdateExtensionsDesc() {
sortByAutoExtensionsUpdatesDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'autoUpdateExtensions', Sort.desc);
return query.addSortBy(r'autoExtensionsUpdates', Sort.desc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy>
sortByCheckForExtensionUpdates() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'checkForExtensionUpdates', Sort.asc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy>
sortByCheckForExtensionUpdatesDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'checkForExtensionUpdates', Sort.desc);
});
}
@ -5299,16 +5350,30 @@ extension SettingsQuerySortThenBy
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> thenByAutoUpdateExtensions() {
QueryBuilder<Settings, Settings, QAfterSortBy> thenByAutoExtensionsUpdates() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'autoUpdateExtensions', Sort.asc);
return query.addSortBy(r'autoExtensionsUpdates', Sort.asc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy>
thenByAutoUpdateExtensionsDesc() {
thenByAutoExtensionsUpdatesDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'autoUpdateExtensions', Sort.desc);
return query.addSortBy(r'autoExtensionsUpdates', Sort.desc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy>
thenByCheckForExtensionUpdates() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'checkForExtensionUpdates', Sort.asc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy>
thenByCheckForExtensionUpdatesDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'checkForExtensionUpdates', Sort.desc);
});
}
@ -5825,9 +5890,17 @@ extension SettingsQueryWhereDistinct
});
}
QueryBuilder<Settings, Settings, QDistinct> distinctByAutoUpdateExtensions() {
QueryBuilder<Settings, Settings, QDistinct>
distinctByAutoExtensionsUpdates() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'autoUpdateExtensions');
return query.addDistinctBy(r'autoExtensionsUpdates');
});
}
QueryBuilder<Settings, Settings, QDistinct>
distinctByCheckForExtensionUpdates() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'checkForExtensionUpdates');
});
}
@ -6120,9 +6193,9 @@ extension SettingsQueryProperty
}
QueryBuilder<Settings, bool?, QQueryOperations>
autoUpdateExtensionsProperty() {
autoExtensionsUpdatesProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'autoUpdateExtensions');
return query.addPropertyName(r'autoExtensionsUpdates');
});
}
@ -6161,6 +6234,13 @@ extension SettingsQueryProperty
});
}
QueryBuilder<Settings, bool?, QQueryOperations>
checkForExtensionUpdatesProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'checkForExtensionUpdates');
});
}
QueryBuilder<Settings, List<Cookie>?, QQueryOperations>
cookiesListProperty() {
return QueryBuilder.apply(this, (query) {

View file

@ -1,8 +1,8 @@
import 'dart:convert';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/settings.dart';
import 'package:mangayomi/models/source.dart';
import 'package:mangayomi/modules/browse/extension/providers/fetch_manga_sources.dart';
import 'package:mangayomi/modules/more/settings/browse/providers/browse_state_provider.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:http/http.dart' as http;
@ -10,62 +10,31 @@ part 'fetch_anime_sources.g.dart';
@riverpod
Future fetchAnimeSourcesList(FetchAnimeSourcesListRef ref, {int? id}) async {
final info = await PackageInfo.fromPlatform();
final req = await http.get(Uri.parse(
"https://kodjodevf.github.io/mangayomi-extensions/anime_index.json"));
final res = jsonDecode(req.body) as List;
if (ref.watch(checkForExtensionsUpdateStateProvider)) {
final info = await PackageInfo.fromPlatform();
final req = await http.get(Uri.parse(
"https://kodjodevf.github.io/mangayomi-extensions/anime_index.json"));
final res = jsonDecode(req.body) as List;
final sourceList = res.map((e) => Source.fromJson(e)).toList();
final sourceList = res.map((e) => Source.fromJson(e)).toList();
isar.writeTxnSync(() async {
for (var source in sourceList) {
if (source.appMinVerReq != null) {
if (compareVersions(info.version, source.appMinVerReq!) > -1) {
if (!source.isManga!) {
if (id != null) {
if (id == source.id) {
final sourc = isar.sources.getSync(id)!;
final req = await http.get(Uri.parse(source.sourceCodeUrl!));
final headers = await getHeaders(req.body, source.baseUrl!);
isar.writeTxnSync(() {
isar.sources.putSync(sourc
..headers = headers ?? ""
..isAdded = true
..sourceCode = req.body
..sourceCodeUrl = source.sourceCodeUrl
..id = id
..apiUrl = source.apiUrl
..baseUrl = source.baseUrl
..dateFormat = source.dateFormat
..dateFormatLocale = source.dateFormatLocale
..hasCloudflare = source.hasCloudflare
..iconUrl = source.iconUrl
..typeSource = source.typeSource
..lang = source.lang
..isNsfw = source.isNsfw
..name = source.name
..version = source.version
..versionLast = source.version
..isManga = source.isManga
..isFullData = source.isFullData ?? false
..appMinVerReq = source.appMinVerReq);
});
// log("successfully installed");
}
} else if (isar.sources.getSync(source.id!) != null) {
// log("exist");
final sourc = isar.sources.getSync(source.id!)!;
if (compareVersions(sourc.version!, source.version!) < 0) {
// log("update aivalable auto update");
if (isar.settings.getSync(227)!.autoUpdateExtensions ?? false) {
isar.writeTxnSync(() async {
for (var source in sourceList) {
if (source.appMinVerReq != null) {
if (compareVersions(info.version, source.appMinVerReq!) > -1) {
if (!source.isManga!) {
if (id != null) {
if (id == source.id) {
final sourc = isar.sources.getSync(id)!;
final req = await http.get(Uri.parse(source.sourceCodeUrl!));
final headers = await getHeaders(req.body, source.baseUrl!);
isar.writeTxnSync(() {
isar.sources.putSync(sourc
..headers = headers
..headers = headers ?? ""
..isAdded = true
..sourceCode = req.body
..sourceCodeUrl = source.sourceCodeUrl
..id = source.id
..id = id
..apiUrl = source.apiUrl
..baseUrl = source.baseUrl
..dateFormat = source.dateFormat
@ -73,46 +42,80 @@ Future fetchAnimeSourcesList(FetchAnimeSourcesListRef ref, {int? id}) async {
..hasCloudflare = source.hasCloudflare
..iconUrl = source.iconUrl
..typeSource = source.typeSource
..isFullData = source.isFullData ?? false
..lang = source.lang
..isNsfw = source.isNsfw
..name = source.name
..version = source.version
..versionLast = source.version
..isManga = source.isManga
..isFullData = source.isFullData
..isFullData = source.isFullData ?? false
..appMinVerReq = source.appMinVerReq);
});
} else {
// log("update aivalable");
isar.sources.putSync(sourc..versionLast = source.version);
// log("successfully installed");
}
} else if (isar.sources.getSync(source.id!) != null) {
// log("exist");
final sourc = isar.sources.getSync(source.id!)!;
if (compareVersions(sourc.version!, source.version!) < 0) {
// log("update aivalable auto update");
if (ref.watch(autoUpdateExtensionsStateProvider)) {
final req =
await http.get(Uri.parse(source.sourceCodeUrl!));
final headers = await getHeaders(req.body, source.baseUrl!);
isar.writeTxnSync(() {
isar.sources.putSync(sourc
..headers = headers
..sourceCode = req.body
..sourceCodeUrl = source.sourceCodeUrl
..id = source.id
..apiUrl = source.apiUrl
..baseUrl = source.baseUrl
..dateFormat = source.dateFormat
..dateFormatLocale = source.dateFormatLocale
..hasCloudflare = source.hasCloudflare
..iconUrl = source.iconUrl
..typeSource = source.typeSource
..isFullData = source.isFullData ?? false
..lang = source.lang
..isNsfw = source.isNsfw
..name = source.name
..version = source.version
..versionLast = source.version
..isManga = source.isManga
..isFullData = source.isFullData
..appMinVerReq = source.appMinVerReq);
});
} else {
// log("update aivalable");
isar.sources.putSync(sourc..versionLast = source.version);
}
}
} else {
isar.sources.putSync(Source()
..sourceCodeUrl = source.sourceCodeUrl
..id = source.id
..sourceCode = source.sourceCode
..apiUrl = source.apiUrl
..baseUrl = source.baseUrl
..dateFormat = source.dateFormat
..dateFormatLocale = source.dateFormatLocale
..hasCloudflare = source.hasCloudflare
..iconUrl = source.iconUrl
..typeSource = source.typeSource
..lang = source.lang
..isNsfw = source.isNsfw
..name = source.name
..version = source.version
..versionLast = source.version
..isManga = source.isManga
..isFullData = source.isFullData ?? false
..appMinVerReq = source.appMinVerReq);
// log("new source");
}
} else {
isar.sources.putSync(Source()
..sourceCodeUrl = source.sourceCodeUrl
..id = source.id
..sourceCode = source.sourceCode
..apiUrl = source.apiUrl
..baseUrl = source.baseUrl
..dateFormat = source.dateFormat
..dateFormatLocale = source.dateFormatLocale
..hasCloudflare = source.hasCloudflare
..iconUrl = source.iconUrl
..typeSource = source.typeSource
..lang = source.lang
..isNsfw = source.isNsfw
..name = source.name
..version = source.version
..versionLast = source.version
..isManga = source.isManga
..isFullData = source.isFullData ?? false
..appMinVerReq = source.appMinVerReq);
// log("new source");
}
}
}
}
}
});
});
}
}

View file

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

View file

@ -3,8 +3,8 @@ import 'package:dart_eval/stdlib/core.dart';
import 'package:mangayomi/eval/compiler/compiler.dart';
import 'package:mangayomi/eval/runtime/runtime.dart';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/settings.dart';
import 'package:mangayomi/models/source.dart';
import 'package:mangayomi/modules/more/settings/browse/providers/browse_state_provider.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:http/http.dart' as http;
@ -12,62 +12,31 @@ part 'fetch_manga_sources.g.dart';
@riverpod
Future fetchMangaSourcesList(FetchMangaSourcesListRef ref, {int? id}) async {
final info = await PackageInfo.fromPlatform();
final req = await http.get(
Uri.parse("https://kodjodevf.github.io/mangayomi-extensions/index.json"));
final res = jsonDecode(req.body) as List;
if (ref.watch(checkForExtensionsUpdateStateProvider)) {
final info = await PackageInfo.fromPlatform();
final req = await http.get(Uri.parse(
"https://kodjodevf.github.io/mangayomi-extensions/index.json"));
final res = jsonDecode(req.body) as List;
final sourceList = res.map((e) => Source.fromJson(e)).toList();
final sourceList = res.map((e) => Source.fromJson(e)).toList();
isar.writeTxnSync(() async {
for (var source in sourceList) {
if (source.appMinVerReq != null) {
if (compareVersions(info.version, source.appMinVerReq!) > -1) {
if (source.isManga!) {
if (id != null) {
if (id == source.id) {
final sourc = isar.sources.getSync(id)!;
final req = await http.get(Uri.parse(source.sourceCodeUrl!));
final headers = await getHeaders(req.body, source.baseUrl!);
isar.writeTxnSync(() {
isar.sources.putSync(sourc
..headers = headers ?? ""
..isAdded = true
..sourceCode = req.body
..sourceCodeUrl = source.sourceCodeUrl
..id = id
..apiUrl = source.apiUrl
..baseUrl = source.baseUrl
..dateFormat = source.dateFormat
..dateFormatLocale = source.dateFormatLocale
..hasCloudflare = source.hasCloudflare
..iconUrl = source.iconUrl
..typeSource = source.typeSource
..lang = source.lang
..isNsfw = source.isNsfw
..name = source.name
..version = source.version
..versionLast = source.version
..isManga = source.isManga
..isFullData = source.isFullData ?? false
..appMinVerReq = source.appMinVerReq);
});
// log("successfully installed");
}
} else if (isar.sources.getSync(source.id!) != null) {
// log("exist");
final sourc = isar.sources.getSync(source.id!)!;
if (compareVersions(sourc.version!, source.version!) < 0) {
// log("update aivalable auto update");
if (isar.settings.getSync(227)!.autoUpdateExtensions ?? false) {
isar.writeTxnSync(() async {
for (var source in sourceList) {
if (source.appMinVerReq != null) {
if (compareVersions(info.version, source.appMinVerReq!) > -1) {
if (source.isManga!) {
if (id != null) {
if (id == source.id) {
final sourc = isar.sources.getSync(id)!;
final req = await http.get(Uri.parse(source.sourceCodeUrl!));
final headers = await getHeaders(req.body, source.baseUrl!);
isar.writeTxnSync(() {
isar.sources.putSync(sourc
..headers = headers
..headers = headers ?? ""
..isAdded = true
..sourceCode = req.body
..sourceCodeUrl = source.sourceCodeUrl
..id = source.id
..id = id
..apiUrl = source.apiUrl
..baseUrl = source.baseUrl
..dateFormat = source.dateFormat
@ -75,48 +44,82 @@ Future fetchMangaSourcesList(FetchMangaSourcesListRef ref, {int? id}) async {
..hasCloudflare = source.hasCloudflare
..iconUrl = source.iconUrl
..typeSource = source.typeSource
..isFullData = source.isFullData ?? false
..lang = source.lang
..isNsfw = source.isNsfw
..name = source.name
..version = source.version
..versionLast = source.version
..isManga = source.isManga
..isFullData = source.isFullData
..isFullData = source.isFullData ?? false
..appMinVerReq = source.appMinVerReq);
});
} else {
// log("update aivalable");
isar.sources.putSync(sourc..versionLast = source.version);
// log("successfully installed");
}
} else if (isar.sources.getSync(source.id!) != null) {
// log("exist");
final sourc = isar.sources.getSync(source.id!)!;
if (compareVersions(sourc.version!, source.version!) < 0) {
// log("update aivalable auto update");
if (ref.watch(autoUpdateExtensionsStateProvider)) {
final req =
await http.get(Uri.parse(source.sourceCodeUrl!));
final headers = await getHeaders(req.body, source.baseUrl!);
isar.writeTxnSync(() {
isar.sources.putSync(sourc
..headers = headers
..sourceCode = req.body
..sourceCodeUrl = source.sourceCodeUrl
..id = source.id
..apiUrl = source.apiUrl
..baseUrl = source.baseUrl
..dateFormat = source.dateFormat
..dateFormatLocale = source.dateFormatLocale
..hasCloudflare = source.hasCloudflare
..iconUrl = source.iconUrl
..typeSource = source.typeSource
..isFullData = source.isFullData ?? false
..lang = source.lang
..isNsfw = source.isNsfw
..name = source.name
..version = source.version
..versionLast = source.version
..isManga = source.isManga
..isFullData = source.isFullData
..appMinVerReq = source.appMinVerReq);
});
} else {
// log("update aivalable");
isar.sources.putSync(sourc..versionLast = source.version);
}
}
} else {
isar.sources.putSync(Source()
..sourceCodeUrl = source.sourceCodeUrl
..id = source.id
..sourceCode = source.sourceCode
..apiUrl = source.apiUrl
..baseUrl = source.baseUrl
..dateFormat = source.dateFormat
..dateFormatLocale = source.dateFormatLocale
..hasCloudflare = source.hasCloudflare
..iconUrl = source.iconUrl
..typeSource = source.typeSource
..lang = source.lang
..isNsfw = source.isNsfw
..name = source.name
..version = source.version
..versionLast = source.version
..isManga = source.isManga
..isFullData = source.isFullData ?? false
..appMinVerReq = source.appMinVerReq);
// log("new source");
}
} else {
isar.sources.putSync(Source()
..sourceCodeUrl = source.sourceCodeUrl
..id = source.id
..sourceCode = source.sourceCode
..apiUrl = source.apiUrl
..baseUrl = source.baseUrl
..dateFormat = source.dateFormat
..dateFormatLocale = source.dateFormatLocale
..hasCloudflare = source.hasCloudflare
..iconUrl = source.iconUrl
..typeSource = source.typeSource
..lang = source.lang
..isNsfw = source.isNsfw
..name = source.name
..version = source.version
..versionLast = source.version
..isManga = source.isManga
..isFullData = source.isFullData ?? false
..appMinVerReq = source.appMinVerReq);
// log("new source");
}
}
}
}
}
});
});
}
}
int compareVersions(String version1, String version2) {

View file

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

View file

@ -7,7 +7,7 @@ part of 'local_archive.dart';
// **************************************************************************
String _$importArchivesFromFileHash() =>
r'afa44597ec3e225e22be1207958b6f4553420fb8';
r'421b9f4f54cd22968cfc6447f174470712d684fc';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -12,6 +12,9 @@ class BrowseSScreen extends ConsumerWidget {
final showNSFWS = ref.watch(showNSFWStateProvider);
final onlyIncludePinnedSource =
ref.watch(onlyIncludePinnedSourceStateProvider);
final checkForExtensionUpdates =
ref.watch(checkForExtensionsUpdateStateProvider);
final autoUpdateExtensions = ref.watch(autoUpdateExtensionsStateProvider);
final l10n = l10nLocalizations(context);
return Scaffold(
appBar: AppBar(
@ -19,6 +22,44 @@ class BrowseSScreen extends ConsumerWidget {
),
body: Column(
children: [
Padding(
padding: const EdgeInsets.only(bottom: 30, top: 20),
child: Column(
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 15),
child: Row(
children: [
Text(l10n.extensions,
style: TextStyle(
fontSize: 13, color: primaryColor(context))),
],
),
),
SwitchListTile(
value: checkForExtensionUpdates,
title: Text(l10n.check_for_extension_updates),
onChanged: (value) {
ref
.read(checkForExtensionsUpdateStateProvider.notifier)
.set(value);
}),
if (checkForExtensionUpdates)
SwitchListTile(
value: autoUpdateExtensions,
title: Text(l10n.auto_extensions_updates),
subtitle: Text(
l10n.auto_extensions_updates_subtitle,
style: TextStyle(
fontSize: 11, color: secondaryColor(context))),
onChanged: (value) {
ref
.read(autoUpdateExtensionsStateProvider.notifier)
.set(value);
}),
],
),
),
Padding(
padding: const EdgeInsets.only(bottom: 30),
child: Column(

View file

@ -31,3 +31,33 @@ class ShowNSFWState extends _$ShowNSFWState {
isar.writeTxnSync(() => isar.settings.putSync(settings!..showNSFW = value));
}
}
@riverpod
class AutoUpdateExtensionsState extends _$AutoUpdateExtensionsState {
@override
bool build() {
return isar.settings.getSync(227)!.autoExtensionsUpdates ?? false;
}
void set(bool value) {
final settings = isar.settings.getSync(227);
state = value;
isar.writeTxnSync(
() => isar.settings.putSync(settings!..autoExtensionsUpdates = value));
}
}
@riverpod
class CheckForExtensionsUpdateState extends _$CheckForExtensionsUpdateState {
@override
bool build() {
return isar.settings.getSync(227)!.checkForExtensionUpdates ?? true;
}
void set(bool value) {
final settings = isar.settings.getSync(227);
state = value;
isar.writeTxnSync(() =>
isar.settings.putSync(settings!..checkForExtensionUpdates = value));
}
}

View file

@ -39,5 +39,39 @@ final showNSFWStateProvider =
);
typedef _$ShowNSFWState = AutoDisposeNotifier<bool>;
String _$autoUpdateExtensionsStateHash() =>
r'dda58b6f78d486f82150e1edee4c1dadb9776df4';
/// See also [AutoUpdateExtensionsState].
@ProviderFor(AutoUpdateExtensionsState)
final autoUpdateExtensionsStateProvider =
AutoDisposeNotifierProvider<AutoUpdateExtensionsState, bool>.internal(
AutoUpdateExtensionsState.new,
name: r'autoUpdateExtensionsStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$autoUpdateExtensionsStateHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$AutoUpdateExtensionsState = AutoDisposeNotifier<bool>;
String _$checkForExtensionsUpdateStateHash() =>
r'1b1f22a50e0862a7d643fbe0fcb5d563bd0169c2';
/// See also [CheckForExtensionsUpdateState].
@ProviderFor(CheckForExtensionsUpdateState)
final checkForExtensionsUpdateStateProvider =
AutoDisposeNotifierProvider<CheckForExtensionsUpdateState, bool>.internal(
CheckForExtensionsUpdateState.new,
name: r'checkForExtensionsUpdateStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$checkForExtensionsUpdateStateHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$CheckForExtensionsUpdateState = AutoDisposeNotifier<bool>;
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member

View file

@ -6,7 +6,7 @@ part of 'get_anime_servers.dart';
// RiverpodGenerator
// **************************************************************************
String _$getAnimeServersHash() => r'8ca741fabdfe469251370c89edf3405f6738c52f';
String _$getAnimeServersHash() => r'26be3f4055c08947e6dca4d8e62abe07ddb98481';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -7,7 +7,7 @@ part of 'get_latest_updates_manga.dart';
// **************************************************************************
String _$getLatestUpdatesMangaHash() =>
r'ae5b5ed757a02801592ff62617d1bdea4f763cda';
r'b4de1c71b935893780b02be6a4fa1980651a833d';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -6,7 +6,7 @@ part of 'get_popular_manga.dart';
// RiverpodGenerator
// **************************************************************************
String _$getPopularMangaHash() => r'0ba0bb05d0e47aac2f5f1efb742b0b0f8739b1e8';
String _$getPopularMangaHash() => r'f5a1f5a66bad652cb461ef0ed9d30f60ff7a000a';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -6,7 +6,7 @@ part of 'search_manga.dart';
// RiverpodGenerator
// **************************************************************************
String _$searchMangaHash() => r'99e54e1c87c86e992e4e8234672c4fccac2d3ad0';
String _$searchMangaHash() => r'9bbf3d7b3cb8f1aa92201200e6a4616721cd3037';
/// Copied from Dart SDK
class _SystemHash {