diff --git a/lib/main.dart b/lib/main.dart index f53a72d..33054f4 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -5,10 +5,10 @@ import 'package:flex_color_scheme/flex_color_scheme.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:intl/date_symbol_data_local.dart'; import 'package:intl/intl.dart'; import 'package:isar/isar.dart'; +import 'package:mangayomi/modules/more/settings/appearance/providers/app_font_family.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; import 'package:mangayomi/providers/storage_provider.dart'; import 'package:mangayomi/router/router.dart'; @@ -93,6 +93,7 @@ class _MyAppState extends ConsumerState { // Define light and dark theme data. final isDarkTheme = ref.watch(themeModeStateProvider); final blendLevel = ref.watch(blendLevelStateProvider); + final appFontFamily = ref.watch(appFontFamilyProvider); final pureBlackDarkMode = ref.watch(pureBlackDarkModeStateProvider); final locale = ref.watch(l10nLocaleStateProvider); ThemeData themeLight = FlexThemeData.light( @@ -111,7 +112,7 @@ class _MyAppState extends ConsumerState { useMaterial3ErrorColors: true, visualDensity: FlexColorScheme.comfortablePlatformDensity, useMaterial3: true, - fontFamily: GoogleFonts.aBeeZee().fontFamily, + fontFamily: appFontFamily, ); ThemeData themeDark = FlexThemeData.dark( colors: ref.watch(flexSchemeColorStateProvider), @@ -130,7 +131,7 @@ class _MyAppState extends ConsumerState { useMaterial3ErrorColors: true, visualDensity: FlexColorScheme.comfortablePlatformDensity, useMaterial3: true, - fontFamily: GoogleFonts.aBeeZee().fontFamily, + fontFamily: appFontFamily, ); final router = ref.watch(routerProvider); // Return the main MaterialApp with router, themes, and localization settings. diff --git a/lib/models/settings.dart b/lib/models/settings.dart index 526acfe..8ba7b0a 100644 --- a/lib/models/settings.dart +++ b/lib/models/settings.dart @@ -177,6 +177,8 @@ class Settings { @enumerated late DisplayType mangaHomeDisplayType; + String? appFontFamily; + Settings( {this.id = 227, this.displayType = DisplayType.compactGrid, @@ -254,7 +256,8 @@ class Settings { this.customColorFilter, this.colorFilterBlendMode = ColorFilterBlendMode.none, this.playerSubtitleSettings, - this.mangaHomeDisplayType = DisplayType.comfortableGrid}); + this.mangaHomeDisplayType = DisplayType.comfortableGrid, + this.appFontFamily}); Settings.fromJson(Map json) { animatePageTransitions = json['animatePageTransitions']; @@ -394,6 +397,7 @@ class Settings { ? PlayerSubtitleSettings.fromJson(json['customColorFilter']) : null; mangaHomeDisplayType = DisplayType.values[json['mangaHomeDisplayType']]; + appFontFamily = json['appFontFamily']; } Map toJson() => { @@ -498,6 +502,7 @@ class Settings { if (playerSubtitleSettings != null) 'playerSubtitleSettings': playerSubtitleSettings!.toJson(), 'mangaHomeDisplayType': mangaHomeDisplayType.index, + 'appFontFamily': appFontFamily }; } diff --git a/lib/models/settings.g.dart b/lib/models/settings.g.dart index 4c0ce25..ae10c9d 100644 --- a/lib/models/settings.g.dart +++ b/lib/models/settings.g.dart @@ -63,380 +63,385 @@ const SettingsSchema = CollectionSchema( name: r'animeLibraryShowNumbersOfItems', type: IsarType.bool, ), - r'autoBackupLocation': PropertySchema( + r'appFontFamily': PropertySchema( id: 9, + name: r'appFontFamily', + type: IsarType.string, + ), + r'autoBackupLocation': PropertySchema( + id: 10, name: r'autoBackupLocation', type: IsarType.string, ), r'autoExtensionsUpdates': PropertySchema( - id: 10, + id: 11, name: r'autoExtensionsUpdates', type: IsarType.bool, ), r'autoScrollPages': PropertySchema( - id: 11, + id: 12, name: r'autoScrollPages', type: IsarType.objectList, target: r'AutoScrollPages', ), r'backgroundColor': PropertySchema( - id: 12, + id: 13, name: r'backgroundColor', type: IsarType.byte, enumMap: _SettingsbackgroundColorEnumValueMap, ), r'backupFrequency': PropertySchema( - id: 13, + id: 14, name: r'backupFrequency', type: IsarType.long, ), r'backupFrequencyOptions': PropertySchema( - id: 14, + id: 15, name: r'backupFrequencyOptions', type: IsarType.longList, ), r'btServerAddress': PropertySchema( - id: 15, + id: 16, name: r'btServerAddress', type: IsarType.string, ), r'btServerPort': PropertySchema( - id: 16, + id: 17, name: r'btServerPort', type: IsarType.long, ), r'chapterFilterBookmarkedList': PropertySchema( - id: 17, + id: 18, name: r'chapterFilterBookmarkedList', type: IsarType.objectList, target: r'ChapterFilterBookmarked', ), r'chapterFilterDownloadedList': PropertySchema( - id: 18, + id: 19, name: r'chapterFilterDownloadedList', type: IsarType.objectList, target: r'ChapterFilterDownloaded', ), r'chapterFilterUnreadList': PropertySchema( - id: 19, + id: 20, name: r'chapterFilterUnreadList', type: IsarType.objectList, target: r'ChapterFilterUnread', ), r'chapterPageIndexList': PropertySchema( - id: 20, + id: 21, name: r'chapterPageIndexList', type: IsarType.objectList, target: r'ChapterPageIndex', ), r'chapterPageUrlsList': PropertySchema( - id: 21, + id: 22, name: r'chapterPageUrlsList', type: IsarType.objectList, target: r'ChapterPageurls', ), r'checkForExtensionUpdates': PropertySchema( - id: 22, + id: 23, name: r'checkForExtensionUpdates', type: IsarType.bool, ), r'colorFilterBlendMode': PropertySchema( - id: 23, + id: 24, name: r'colorFilterBlendMode', type: IsarType.byte, enumMap: _SettingscolorFilterBlendModeEnumValueMap, ), r'cookiesList': PropertySchema( - id: 24, + id: 25, name: r'cookiesList', type: IsarType.objectList, target: r'MCookie', ), r'cropBorders': PropertySchema( - id: 25, + id: 26, name: r'cropBorders', type: IsarType.bool, ), r'customColorFilter': PropertySchema( - id: 26, + id: 27, name: r'customColorFilter', type: IsarType.object, target: r'CustomColorFilter', ), r'dateFormat': PropertySchema( - id: 27, + id: 28, name: r'dateFormat', type: IsarType.string, ), r'defaultDoubleTapToSkipLength': PropertySchema( - id: 28, + id: 29, name: r'defaultDoubleTapToSkipLength', type: IsarType.long, ), r'defaultPlayBackSpeed': PropertySchema( - id: 29, + id: 30, name: r'defaultPlayBackSpeed', type: IsarType.double, ), r'defaultReaderMode': PropertySchema( - id: 30, + id: 31, name: r'defaultReaderMode', type: IsarType.byte, enumMap: _SettingsdefaultReaderModeEnumValueMap, ), r'defaultSkipIntroLength': PropertySchema( - id: 31, + id: 32, name: r'defaultSkipIntroLength', type: IsarType.long, ), r'displayType': PropertySchema( - id: 32, + id: 33, name: r'displayType', type: IsarType.byte, enumMap: _SettingsdisplayTypeEnumValueMap, ), r'doubleTapAnimationSpeed': PropertySchema( - id: 33, + id: 34, name: r'doubleTapAnimationSpeed', type: IsarType.long, ), r'downloadLocation': PropertySchema( - id: 34, + id: 35, name: r'downloadLocation', type: IsarType.string, ), r'downloadOnlyOnWifi': PropertySchema( - id: 35, + id: 36, name: r'downloadOnlyOnWifi', type: IsarType.bool, ), r'enableAniSkip': PropertySchema( - id: 36, + id: 37, name: r'enableAniSkip', type: IsarType.bool, ), r'enableAutoSkip': PropertySchema( - id: 37, + id: 38, name: r'enableAutoSkip', type: IsarType.bool, ), r'enableCustomColorFilter': PropertySchema( - id: 38, + id: 39, name: r'enableCustomColorFilter', type: IsarType.bool, ), r'filterScanlatorList': PropertySchema( - id: 39, + id: 40, name: r'filterScanlatorList', type: IsarType.objectList, target: r'FilterScanlator', ), r'flexColorSchemeBlendLevel': PropertySchema( - id: 40, + id: 41, name: r'flexColorSchemeBlendLevel', type: IsarType.double, ), r'flexSchemeColorIndex': PropertySchema( - id: 41, + id: 42, name: r'flexSchemeColorIndex', type: IsarType.long, ), r'fullScreenReader': PropertySchema( - id: 42, + id: 43, name: r'fullScreenReader', type: IsarType.bool, ), r'incognitoMode': PropertySchema( - id: 43, + id: 44, name: r'incognitoMode', type: IsarType.bool, ), r'libraryDownloadedChapters': PropertySchema( - id: 44, + id: 45, name: r'libraryDownloadedChapters', type: IsarType.bool, ), r'libraryFilterAnimeBookMarkedType': PropertySchema( - id: 45, + id: 46, name: r'libraryFilterAnimeBookMarkedType', type: IsarType.long, ), r'libraryFilterAnimeDownloadType': PropertySchema( - id: 46, + id: 47, name: r'libraryFilterAnimeDownloadType', type: IsarType.long, ), r'libraryFilterAnimeStartedType': PropertySchema( - id: 47, + id: 48, name: r'libraryFilterAnimeStartedType', type: IsarType.long, ), r'libraryFilterAnimeUnreadType': PropertySchema( - id: 48, + id: 49, name: r'libraryFilterAnimeUnreadType', type: IsarType.long, ), r'libraryFilterMangasBookMarkedType': PropertySchema( - id: 49, + id: 50, name: r'libraryFilterMangasBookMarkedType', type: IsarType.long, ), r'libraryFilterMangasDownloadType': PropertySchema( - id: 50, + id: 51, name: r'libraryFilterMangasDownloadType', type: IsarType.long, ), r'libraryFilterMangasStartedType': PropertySchema( - id: 51, + id: 52, name: r'libraryFilterMangasStartedType', type: IsarType.long, ), r'libraryFilterMangasUnreadType': PropertySchema( - id: 52, + id: 53, name: r'libraryFilterMangasUnreadType', type: IsarType.long, ), r'libraryLocalSource': PropertySchema( - id: 53, + id: 54, name: r'libraryLocalSource', type: IsarType.bool, ), r'libraryShowCategoryTabs': PropertySchema( - id: 54, + id: 55, name: r'libraryShowCategoryTabs', type: IsarType.bool, ), r'libraryShowContinueReadingButton': PropertySchema( - id: 55, + id: 56, name: r'libraryShowContinueReadingButton', type: IsarType.bool, ), r'libraryShowLanguage': PropertySchema( - id: 56, + id: 57, name: r'libraryShowLanguage', type: IsarType.bool, ), r'libraryShowNumbersOfItems': PropertySchema( - id: 57, + id: 58, name: r'libraryShowNumbersOfItems', type: IsarType.bool, ), r'locale': PropertySchema( - id: 58, + id: 59, name: r'locale', type: IsarType.object, target: r'L10nLocale', ), r'mangaHomeDisplayType': PropertySchema( - id: 59, + id: 60, name: r'mangaHomeDisplayType', type: IsarType.byte, enumMap: _SettingsmangaHomeDisplayTypeEnumValueMap, ), r'markEpisodeAsSeenType': PropertySchema( - id: 60, + id: 61, name: r'markEpisodeAsSeenType', type: IsarType.long, ), r'onlyIncludePinnedSources': PropertySchema( - id: 61, + id: 62, name: r'onlyIncludePinnedSources', type: IsarType.bool, ), r'pagePreloadAmount': PropertySchema( - id: 62, + id: 63, name: r'pagePreloadAmount', type: IsarType.long, ), r'personalPageModeList': PropertySchema( - id: 63, + id: 64, name: r'personalPageModeList', type: IsarType.objectList, target: r'PersonalPageMode', ), r'personalReaderModeList': PropertySchema( - id: 64, + id: 65, name: r'personalReaderModeList', type: IsarType.objectList, target: r'PersonalReaderMode', ), r'playerSubtitleSettings': PropertySchema( - id: 65, + id: 66, name: r'playerSubtitleSettings', type: IsarType.object, target: r'PlayerSubtitleSettings', ), r'pureBlackDarkMode': PropertySchema( - id: 66, + id: 67, name: r'pureBlackDarkMode', type: IsarType.bool, ), r'relativeTimesTamps': PropertySchema( - id: 67, + id: 68, name: r'relativeTimesTamps', type: IsarType.long, ), r'saveAsCBZArchive': PropertySchema( - id: 68, + id: 69, name: r'saveAsCBZArchive', type: IsarType.bool, ), r'scaleType': PropertySchema( - id: 69, + id: 70, name: r'scaleType', type: IsarType.byte, enumMap: _SettingsscaleTypeEnumValueMap, ), r'showNSFW': PropertySchema( - id: 70, + id: 71, name: r'showNSFW', type: IsarType.bool, ), r'showPagesNumber': PropertySchema( - id: 71, + id: 72, name: r'showPagesNumber', type: IsarType.bool, ), r'sortChapterList': PropertySchema( - id: 72, + id: 73, name: r'sortChapterList', type: IsarType.objectList, target: r'SortChapter', ), r'sortLibraryAnime': PropertySchema( - id: 73, + id: 74, name: r'sortLibraryAnime', type: IsarType.object, target: r'SortLibraryManga', ), r'sortLibraryManga': PropertySchema( - id: 74, + id: 75, name: r'sortLibraryManga', type: IsarType.object, target: r'SortLibraryManga', ), r'startDatebackup': PropertySchema( - id: 75, + id: 76, name: r'startDatebackup', type: IsarType.long, ), r'themeIsDark': PropertySchema( - id: 76, + id: 77, name: r'themeIsDark', type: IsarType.bool, ), r'updateProgressAfterReading': PropertySchema( - id: 77, + id: 78, name: r'updateProgressAfterReading', type: IsarType.bool, ), r'usePageTapZones': PropertySchema( - id: 78, + id: 79, name: r'usePageTapZones', type: IsarType.bool, ), r'userAgent': PropertySchema( - id: 79, + id: 80, name: r'userAgent', type: IsarType.string, ) @@ -484,6 +489,12 @@ int _settingsEstimateSize( Map> allOffsets, ) { var bytesCount = offsets.last; + { + final value = object.appFontFamily; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } { final value = object.autoBackupLocation; if (value != null) { @@ -731,157 +742,158 @@ void _settingsSerialize( writer.writeBool(offsets[6], object.animeLibraryShowContinueReadingButton); writer.writeBool(offsets[7], object.animeLibraryShowLanguage); writer.writeBool(offsets[8], object.animeLibraryShowNumbersOfItems); - writer.writeString(offsets[9], object.autoBackupLocation); - writer.writeBool(offsets[10], object.autoExtensionsUpdates); + writer.writeString(offsets[9], object.appFontFamily); + writer.writeString(offsets[10], object.autoBackupLocation); + writer.writeBool(offsets[11], object.autoExtensionsUpdates); writer.writeObjectList( - offsets[11], + offsets[12], allOffsets, AutoScrollPagesSchema.serialize, object.autoScrollPages, ); - writer.writeByte(offsets[12], object.backgroundColor.index); - writer.writeLong(offsets[13], object.backupFrequency); - writer.writeLongList(offsets[14], object.backupFrequencyOptions); - writer.writeString(offsets[15], object.btServerAddress); - writer.writeLong(offsets[16], object.btServerPort); + writer.writeByte(offsets[13], object.backgroundColor.index); + writer.writeLong(offsets[14], object.backupFrequency); + writer.writeLongList(offsets[15], object.backupFrequencyOptions); + writer.writeString(offsets[16], object.btServerAddress); + writer.writeLong(offsets[17], object.btServerPort); writer.writeObjectList( - offsets[17], + offsets[18], allOffsets, ChapterFilterBookmarkedSchema.serialize, object.chapterFilterBookmarkedList, ); writer.writeObjectList( - offsets[18], + offsets[19], allOffsets, ChapterFilterDownloadedSchema.serialize, object.chapterFilterDownloadedList, ); writer.writeObjectList( - offsets[19], + offsets[20], allOffsets, ChapterFilterUnreadSchema.serialize, object.chapterFilterUnreadList, ); writer.writeObjectList( - offsets[20], + offsets[21], allOffsets, ChapterPageIndexSchema.serialize, object.chapterPageIndexList, ); writer.writeObjectList( - offsets[21], + offsets[22], allOffsets, ChapterPageurlsSchema.serialize, object.chapterPageUrlsList, ); - writer.writeBool(offsets[22], object.checkForExtensionUpdates); - writer.writeByte(offsets[23], object.colorFilterBlendMode.index); + writer.writeBool(offsets[23], object.checkForExtensionUpdates); + writer.writeByte(offsets[24], object.colorFilterBlendMode.index); writer.writeObjectList( - offsets[24], + offsets[25], allOffsets, MCookieSchema.serialize, object.cookiesList, ); - writer.writeBool(offsets[25], object.cropBorders); + writer.writeBool(offsets[26], object.cropBorders); writer.writeObject( - offsets[26], + offsets[27], allOffsets, CustomColorFilterSchema.serialize, object.customColorFilter, ); - writer.writeString(offsets[27], object.dateFormat); - writer.writeLong(offsets[28], object.defaultDoubleTapToSkipLength); - writer.writeDouble(offsets[29], object.defaultPlayBackSpeed); - writer.writeByte(offsets[30], object.defaultReaderMode.index); - writer.writeLong(offsets[31], object.defaultSkipIntroLength); - writer.writeByte(offsets[32], object.displayType.index); - writer.writeLong(offsets[33], object.doubleTapAnimationSpeed); - writer.writeString(offsets[34], object.downloadLocation); - writer.writeBool(offsets[35], object.downloadOnlyOnWifi); - writer.writeBool(offsets[36], object.enableAniSkip); - writer.writeBool(offsets[37], object.enableAutoSkip); - writer.writeBool(offsets[38], object.enableCustomColorFilter); + writer.writeString(offsets[28], object.dateFormat); + writer.writeLong(offsets[29], object.defaultDoubleTapToSkipLength); + writer.writeDouble(offsets[30], object.defaultPlayBackSpeed); + writer.writeByte(offsets[31], object.defaultReaderMode.index); + writer.writeLong(offsets[32], object.defaultSkipIntroLength); + writer.writeByte(offsets[33], object.displayType.index); + writer.writeLong(offsets[34], object.doubleTapAnimationSpeed); + writer.writeString(offsets[35], object.downloadLocation); + writer.writeBool(offsets[36], object.downloadOnlyOnWifi); + writer.writeBool(offsets[37], object.enableAniSkip); + writer.writeBool(offsets[38], object.enableAutoSkip); + writer.writeBool(offsets[39], object.enableCustomColorFilter); writer.writeObjectList( - offsets[39], + offsets[40], allOffsets, FilterScanlatorSchema.serialize, object.filterScanlatorList, ); - writer.writeDouble(offsets[40], object.flexColorSchemeBlendLevel); - writer.writeLong(offsets[41], object.flexSchemeColorIndex); - writer.writeBool(offsets[42], object.fullScreenReader); - writer.writeBool(offsets[43], object.incognitoMode); - writer.writeBool(offsets[44], object.libraryDownloadedChapters); - writer.writeLong(offsets[45], object.libraryFilterAnimeBookMarkedType); - writer.writeLong(offsets[46], object.libraryFilterAnimeDownloadType); - writer.writeLong(offsets[47], object.libraryFilterAnimeStartedType); - writer.writeLong(offsets[48], object.libraryFilterAnimeUnreadType); - writer.writeLong(offsets[49], object.libraryFilterMangasBookMarkedType); - writer.writeLong(offsets[50], object.libraryFilterMangasDownloadType); - writer.writeLong(offsets[51], object.libraryFilterMangasStartedType); - writer.writeLong(offsets[52], object.libraryFilterMangasUnreadType); - writer.writeBool(offsets[53], object.libraryLocalSource); - writer.writeBool(offsets[54], object.libraryShowCategoryTabs); - writer.writeBool(offsets[55], object.libraryShowContinueReadingButton); - writer.writeBool(offsets[56], object.libraryShowLanguage); - writer.writeBool(offsets[57], object.libraryShowNumbersOfItems); + writer.writeDouble(offsets[41], object.flexColorSchemeBlendLevel); + writer.writeLong(offsets[42], object.flexSchemeColorIndex); + writer.writeBool(offsets[43], object.fullScreenReader); + writer.writeBool(offsets[44], object.incognitoMode); + writer.writeBool(offsets[45], object.libraryDownloadedChapters); + writer.writeLong(offsets[46], object.libraryFilterAnimeBookMarkedType); + writer.writeLong(offsets[47], object.libraryFilterAnimeDownloadType); + writer.writeLong(offsets[48], object.libraryFilterAnimeStartedType); + writer.writeLong(offsets[49], object.libraryFilterAnimeUnreadType); + writer.writeLong(offsets[50], object.libraryFilterMangasBookMarkedType); + writer.writeLong(offsets[51], object.libraryFilterMangasDownloadType); + writer.writeLong(offsets[52], object.libraryFilterMangasStartedType); + writer.writeLong(offsets[53], object.libraryFilterMangasUnreadType); + writer.writeBool(offsets[54], object.libraryLocalSource); + writer.writeBool(offsets[55], object.libraryShowCategoryTabs); + writer.writeBool(offsets[56], object.libraryShowContinueReadingButton); + writer.writeBool(offsets[57], object.libraryShowLanguage); + writer.writeBool(offsets[58], object.libraryShowNumbersOfItems); writer.writeObject( - offsets[58], + offsets[59], allOffsets, L10nLocaleSchema.serialize, object.locale, ); - writer.writeByte(offsets[59], object.mangaHomeDisplayType.index); - writer.writeLong(offsets[60], object.markEpisodeAsSeenType); - writer.writeBool(offsets[61], object.onlyIncludePinnedSources); - writer.writeLong(offsets[62], object.pagePreloadAmount); + writer.writeByte(offsets[60], object.mangaHomeDisplayType.index); + writer.writeLong(offsets[61], object.markEpisodeAsSeenType); + writer.writeBool(offsets[62], object.onlyIncludePinnedSources); + writer.writeLong(offsets[63], object.pagePreloadAmount); writer.writeObjectList( - offsets[63], + offsets[64], allOffsets, PersonalPageModeSchema.serialize, object.personalPageModeList, ); writer.writeObjectList( - offsets[64], + offsets[65], allOffsets, PersonalReaderModeSchema.serialize, object.personalReaderModeList, ); writer.writeObject( - offsets[65], + offsets[66], allOffsets, PlayerSubtitleSettingsSchema.serialize, object.playerSubtitleSettings, ); - writer.writeBool(offsets[66], object.pureBlackDarkMode); - writer.writeLong(offsets[67], object.relativeTimesTamps); - writer.writeBool(offsets[68], object.saveAsCBZArchive); - writer.writeByte(offsets[69], object.scaleType.index); - writer.writeBool(offsets[70], object.showNSFW); - writer.writeBool(offsets[71], object.showPagesNumber); + writer.writeBool(offsets[67], object.pureBlackDarkMode); + writer.writeLong(offsets[68], object.relativeTimesTamps); + writer.writeBool(offsets[69], object.saveAsCBZArchive); + writer.writeByte(offsets[70], object.scaleType.index); + writer.writeBool(offsets[71], object.showNSFW); + writer.writeBool(offsets[72], object.showPagesNumber); writer.writeObjectList( - offsets[72], + offsets[73], allOffsets, SortChapterSchema.serialize, object.sortChapterList, ); writer.writeObject( - offsets[73], + offsets[74], allOffsets, SortLibraryMangaSchema.serialize, object.sortLibraryAnime, ); writer.writeObject( - offsets[74], + offsets[75], allOffsets, SortLibraryMangaSchema.serialize, object.sortLibraryManga, ); - writer.writeLong(offsets[75], object.startDatebackup); - writer.writeBool(offsets[76], object.themeIsDark); - writer.writeBool(offsets[77], object.updateProgressAfterReading); - writer.writeBool(offsets[78], object.usePageTapZones); - writer.writeString(offsets[79], object.userAgent); + writer.writeLong(offsets[76], object.startDatebackup); + writer.writeBool(offsets[77], object.themeIsDark); + writer.writeBool(offsets[78], object.updateProgressAfterReading); + writer.writeBool(offsets[79], object.usePageTapZones); + writer.writeString(offsets[80], object.userAgent); } Settings _settingsDeserialize( @@ -902,164 +914,165 @@ Settings _settingsDeserialize( animeLibraryShowContinueReadingButton: reader.readBoolOrNull(offsets[6]), animeLibraryShowLanguage: reader.readBoolOrNull(offsets[7]), animeLibraryShowNumbersOfItems: reader.readBoolOrNull(offsets[8]), - autoBackupLocation: reader.readStringOrNull(offsets[9]), - autoExtensionsUpdates: reader.readBoolOrNull(offsets[10]), + appFontFamily: reader.readStringOrNull(offsets[9]), + autoBackupLocation: reader.readStringOrNull(offsets[10]), + autoExtensionsUpdates: reader.readBoolOrNull(offsets[11]), autoScrollPages: reader.readObjectList( - offsets[11], + offsets[12], AutoScrollPagesSchema.deserialize, allOffsets, AutoScrollPages(), ), backgroundColor: _SettingsbackgroundColorValueEnumMap[ - reader.readByteOrNull(offsets[12])] ?? + reader.readByteOrNull(offsets[13])] ?? BackgroundColor.black, - backupFrequency: reader.readLongOrNull(offsets[13]), - backupFrequencyOptions: reader.readLongList(offsets[14]), - btServerAddress: reader.readStringOrNull(offsets[15]), - btServerPort: reader.readLongOrNull(offsets[16]), + backupFrequency: reader.readLongOrNull(offsets[14]), + backupFrequencyOptions: reader.readLongList(offsets[15]), + btServerAddress: reader.readStringOrNull(offsets[16]), + btServerPort: reader.readLongOrNull(offsets[17]), chapterFilterDownloadedList: reader.readObjectList( - offsets[18], + offsets[19], ChapterFilterDownloadedSchema.deserialize, allOffsets, ChapterFilterDownloaded(), ), chapterPageIndexList: reader.readObjectList( - offsets[20], + offsets[21], ChapterPageIndexSchema.deserialize, allOffsets, ChapterPageIndex(), ), chapterPageUrlsList: reader.readObjectList( - offsets[21], + offsets[22], ChapterPageurlsSchema.deserialize, allOffsets, ChapterPageurls(), ), - checkForExtensionUpdates: reader.readBoolOrNull(offsets[22]), + checkForExtensionUpdates: reader.readBoolOrNull(offsets[23]), colorFilterBlendMode: _SettingscolorFilterBlendModeValueEnumMap[ - reader.readByteOrNull(offsets[23])] ?? + reader.readByteOrNull(offsets[24])] ?? ColorFilterBlendMode.none, cookiesList: reader.readObjectList( - offsets[24], + offsets[25], MCookieSchema.deserialize, allOffsets, MCookie(), ), - cropBorders: reader.readBoolOrNull(offsets[25]), + cropBorders: reader.readBoolOrNull(offsets[26]), customColorFilter: reader.readObjectOrNull( - offsets[26], + offsets[27], CustomColorFilterSchema.deserialize, allOffsets, ), - dateFormat: reader.readStringOrNull(offsets[27]), - defaultDoubleTapToSkipLength: reader.readLongOrNull(offsets[28]), - defaultPlayBackSpeed: reader.readDoubleOrNull(offsets[29]), + dateFormat: reader.readStringOrNull(offsets[28]), + defaultDoubleTapToSkipLength: reader.readLongOrNull(offsets[29]), + defaultPlayBackSpeed: reader.readDoubleOrNull(offsets[30]), defaultReaderMode: _SettingsdefaultReaderModeValueEnumMap[ - reader.readByteOrNull(offsets[30])] ?? + reader.readByteOrNull(offsets[31])] ?? ReaderMode.vertical, - defaultSkipIntroLength: reader.readLongOrNull(offsets[31]), + defaultSkipIntroLength: reader.readLongOrNull(offsets[32]), displayType: - _SettingsdisplayTypeValueEnumMap[reader.readByteOrNull(offsets[32])] ?? + _SettingsdisplayTypeValueEnumMap[reader.readByteOrNull(offsets[33])] ?? DisplayType.compactGrid, - doubleTapAnimationSpeed: reader.readLongOrNull(offsets[33]), - downloadLocation: reader.readStringOrNull(offsets[34]), - downloadOnlyOnWifi: reader.readBoolOrNull(offsets[35]), - enableAniSkip: reader.readBoolOrNull(offsets[36]), - enableAutoSkip: reader.readBoolOrNull(offsets[37]), - enableCustomColorFilter: reader.readBoolOrNull(offsets[38]), - flexColorSchemeBlendLevel: reader.readDoubleOrNull(offsets[40]), - flexSchemeColorIndex: reader.readLongOrNull(offsets[41]), - fullScreenReader: reader.readBoolOrNull(offsets[42]), + doubleTapAnimationSpeed: reader.readLongOrNull(offsets[34]), + downloadLocation: reader.readStringOrNull(offsets[35]), + downloadOnlyOnWifi: reader.readBoolOrNull(offsets[36]), + enableAniSkip: reader.readBoolOrNull(offsets[37]), + enableAutoSkip: reader.readBoolOrNull(offsets[38]), + enableCustomColorFilter: reader.readBoolOrNull(offsets[39]), + flexColorSchemeBlendLevel: reader.readDoubleOrNull(offsets[41]), + flexSchemeColorIndex: reader.readLongOrNull(offsets[42]), + fullScreenReader: reader.readBoolOrNull(offsets[43]), id: id, - incognitoMode: reader.readBoolOrNull(offsets[43]), - libraryDownloadedChapters: reader.readBoolOrNull(offsets[44]), - libraryFilterAnimeBookMarkedType: reader.readLongOrNull(offsets[45]), - libraryFilterAnimeDownloadType: reader.readLongOrNull(offsets[46]), - libraryFilterAnimeStartedType: reader.readLongOrNull(offsets[47]), - libraryFilterAnimeUnreadType: reader.readLongOrNull(offsets[48]), - libraryFilterMangasBookMarkedType: reader.readLongOrNull(offsets[49]), - libraryFilterMangasDownloadType: reader.readLongOrNull(offsets[50]), - libraryFilterMangasStartedType: reader.readLongOrNull(offsets[51]), - libraryFilterMangasUnreadType: reader.readLongOrNull(offsets[52]), - libraryLocalSource: reader.readBoolOrNull(offsets[53]), - libraryShowCategoryTabs: reader.readBoolOrNull(offsets[54]), - libraryShowContinueReadingButton: reader.readBoolOrNull(offsets[55]), - libraryShowLanguage: reader.readBoolOrNull(offsets[56]), - libraryShowNumbersOfItems: reader.readBoolOrNull(offsets[57]), + incognitoMode: reader.readBoolOrNull(offsets[44]), + libraryDownloadedChapters: reader.readBoolOrNull(offsets[45]), + libraryFilterAnimeBookMarkedType: reader.readLongOrNull(offsets[46]), + libraryFilterAnimeDownloadType: reader.readLongOrNull(offsets[47]), + libraryFilterAnimeStartedType: reader.readLongOrNull(offsets[48]), + libraryFilterAnimeUnreadType: reader.readLongOrNull(offsets[49]), + libraryFilterMangasBookMarkedType: reader.readLongOrNull(offsets[50]), + libraryFilterMangasDownloadType: reader.readLongOrNull(offsets[51]), + libraryFilterMangasStartedType: reader.readLongOrNull(offsets[52]), + libraryFilterMangasUnreadType: reader.readLongOrNull(offsets[53]), + libraryLocalSource: reader.readBoolOrNull(offsets[54]), + libraryShowCategoryTabs: reader.readBoolOrNull(offsets[55]), + libraryShowContinueReadingButton: reader.readBoolOrNull(offsets[56]), + libraryShowLanguage: reader.readBoolOrNull(offsets[57]), + libraryShowNumbersOfItems: reader.readBoolOrNull(offsets[58]), mangaHomeDisplayType: _SettingsmangaHomeDisplayTypeValueEnumMap[ - reader.readByteOrNull(offsets[59])] ?? + reader.readByteOrNull(offsets[60])] ?? DisplayType.comfortableGrid, - markEpisodeAsSeenType: reader.readLongOrNull(offsets[60]), - onlyIncludePinnedSources: reader.readBoolOrNull(offsets[61]), - pagePreloadAmount: reader.readLongOrNull(offsets[62]), + markEpisodeAsSeenType: reader.readLongOrNull(offsets[61]), + onlyIncludePinnedSources: reader.readBoolOrNull(offsets[62]), + pagePreloadAmount: reader.readLongOrNull(offsets[63]), personalPageModeList: reader.readObjectList( - offsets[63], + offsets[64], PersonalPageModeSchema.deserialize, allOffsets, PersonalPageMode(), ), personalReaderModeList: reader.readObjectList( - offsets[64], + offsets[65], PersonalReaderModeSchema.deserialize, allOffsets, PersonalReaderMode(), ), playerSubtitleSettings: reader.readObjectOrNull( - offsets[65], + offsets[66], PlayerSubtitleSettingsSchema.deserialize, allOffsets, ), - pureBlackDarkMode: reader.readBoolOrNull(offsets[66]), - relativeTimesTamps: reader.readLongOrNull(offsets[67]), - saveAsCBZArchive: reader.readBoolOrNull(offsets[68]), + pureBlackDarkMode: reader.readBoolOrNull(offsets[67]), + relativeTimesTamps: reader.readLongOrNull(offsets[68]), + saveAsCBZArchive: reader.readBoolOrNull(offsets[69]), scaleType: - _SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offsets[69])] ?? + _SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offsets[70])] ?? ScaleType.fitScreen, - showNSFW: reader.readBoolOrNull(offsets[70]), - showPagesNumber: reader.readBoolOrNull(offsets[71]), + showNSFW: reader.readBoolOrNull(offsets[71]), + showPagesNumber: reader.readBoolOrNull(offsets[72]), sortChapterList: reader.readObjectList( - offsets[72], + offsets[73], SortChapterSchema.deserialize, allOffsets, SortChapter(), ), sortLibraryAnime: reader.readObjectOrNull( - offsets[73], - SortLibraryMangaSchema.deserialize, - allOffsets, - ), - sortLibraryManga: reader.readObjectOrNull( offsets[74], SortLibraryMangaSchema.deserialize, allOffsets, ), - startDatebackup: reader.readLongOrNull(offsets[75]), - themeIsDark: reader.readBoolOrNull(offsets[76]), - updateProgressAfterReading: reader.readBoolOrNull(offsets[77]), - usePageTapZones: reader.readBoolOrNull(offsets[78]), - userAgent: reader.readStringOrNull(offsets[79]), + sortLibraryManga: reader.readObjectOrNull( + offsets[75], + SortLibraryMangaSchema.deserialize, + allOffsets, + ), + startDatebackup: reader.readLongOrNull(offsets[76]), + themeIsDark: reader.readBoolOrNull(offsets[77]), + updateProgressAfterReading: reader.readBoolOrNull(offsets[78]), + usePageTapZones: reader.readBoolOrNull(offsets[79]), + userAgent: reader.readStringOrNull(offsets[80]), ); object.chapterFilterBookmarkedList = reader.readObjectList( - offsets[17], + offsets[18], ChapterFilterBookmarkedSchema.deserialize, allOffsets, ChapterFilterBookmarked(), ); object.chapterFilterUnreadList = reader.readObjectList( - offsets[19], + offsets[20], ChapterFilterUnreadSchema.deserialize, allOffsets, ChapterFilterUnread(), ); object.filterScanlatorList = reader.readObjectList( - offsets[39], + offsets[40], FilterScanlatorSchema.deserialize, allOffsets, FilterScanlator(), ); object.locale = reader.readObjectOrNull( - offsets[58], + offsets[59], L10nLocaleSchema.deserialize, allOffsets, ); @@ -1096,103 +1109,103 @@ P _settingsDeserializeProp

( case 9: return (reader.readStringOrNull(offset)) as P; case 10: - return (reader.readBoolOrNull(offset)) as P; + return (reader.readStringOrNull(offset)) as P; case 11: + return (reader.readBoolOrNull(offset)) as P; + case 12: return (reader.readObjectList( offset, AutoScrollPagesSchema.deserialize, allOffsets, AutoScrollPages(), )) as P; - case 12: + case 13: return (_SettingsbackgroundColorValueEnumMap[ reader.readByteOrNull(offset)] ?? BackgroundColor.black) as P; - case 13: - return (reader.readLongOrNull(offset)) as P; case 14: - return (reader.readLongList(offset)) as P; - case 15: - return (reader.readStringOrNull(offset)) as P; - case 16: return (reader.readLongOrNull(offset)) as P; + case 15: + return (reader.readLongList(offset)) as P; + case 16: + return (reader.readStringOrNull(offset)) as P; case 17: + return (reader.readLongOrNull(offset)) as P; + case 18: return (reader.readObjectList( offset, ChapterFilterBookmarkedSchema.deserialize, allOffsets, ChapterFilterBookmarked(), )) as P; - case 18: + case 19: return (reader.readObjectList( offset, ChapterFilterDownloadedSchema.deserialize, allOffsets, ChapterFilterDownloaded(), )) as P; - case 19: + case 20: return (reader.readObjectList( offset, ChapterFilterUnreadSchema.deserialize, allOffsets, ChapterFilterUnread(), )) as P; - case 20: + case 21: return (reader.readObjectList( offset, ChapterPageIndexSchema.deserialize, allOffsets, ChapterPageIndex(), )) as P; - case 21: + case 22: return (reader.readObjectList( offset, ChapterPageurlsSchema.deserialize, allOffsets, ChapterPageurls(), )) as P; - case 22: - return (reader.readBoolOrNull(offset)) as P; case 23: + return (reader.readBoolOrNull(offset)) as P; + case 24: return (_SettingscolorFilterBlendModeValueEnumMap[ reader.readByteOrNull(offset)] ?? ColorFilterBlendMode.none) as P; - case 24: + case 25: return (reader.readObjectList( offset, MCookieSchema.deserialize, allOffsets, MCookie(), )) as P; - case 25: - return (reader.readBoolOrNull(offset)) as P; case 26: + return (reader.readBoolOrNull(offset)) as P; + case 27: return (reader.readObjectOrNull( offset, CustomColorFilterSchema.deserialize, allOffsets, )) as P; - case 27: - return (reader.readStringOrNull(offset)) as P; case 28: - return (reader.readLongOrNull(offset)) as P; + return (reader.readStringOrNull(offset)) as P; case 29: - return (reader.readDoubleOrNull(offset)) as P; + return (reader.readLongOrNull(offset)) as P; case 30: + return (reader.readDoubleOrNull(offset)) as P; + case 31: return (_SettingsdefaultReaderModeValueEnumMap[ reader.readByteOrNull(offset)] ?? ReaderMode.vertical) as P; - case 31: - return (reader.readLongOrNull(offset)) as P; case 32: + return (reader.readLongOrNull(offset)) as P; + case 33: return (_SettingsdisplayTypeValueEnumMap[reader.readByteOrNull(offset)] ?? DisplayType.compactGrid) as P; - case 33: - return (reader.readLongOrNull(offset)) as P; case 34: - return (reader.readStringOrNull(offset)) as P; + return (reader.readLongOrNull(offset)) as P; case 35: - return (reader.readBoolOrNull(offset)) as P; + return (reader.readStringOrNull(offset)) as P; case 36: return (reader.readBoolOrNull(offset)) as P; case 37: @@ -1200,24 +1213,24 @@ P _settingsDeserializeProp

( case 38: return (reader.readBoolOrNull(offset)) as P; case 39: + return (reader.readBoolOrNull(offset)) as P; + case 40: return (reader.readObjectList( offset, FilterScanlatorSchema.deserialize, allOffsets, FilterScanlator(), )) as P; - case 40: - return (reader.readDoubleOrNull(offset)) as P; case 41: - return (reader.readLongOrNull(offset)) as P; + return (reader.readDoubleOrNull(offset)) as P; case 42: - return (reader.readBoolOrNull(offset)) as P; + return (reader.readLongOrNull(offset)) as P; case 43: return (reader.readBoolOrNull(offset)) as P; case 44: return (reader.readBoolOrNull(offset)) as P; case 45: - return (reader.readLongOrNull(offset)) as P; + return (reader.readBoolOrNull(offset)) as P; case 46: return (reader.readLongOrNull(offset)) as P; case 47: @@ -1233,7 +1246,7 @@ P _settingsDeserializeProp

( case 52: return (reader.readLongOrNull(offset)) as P; case 53: - return (reader.readBoolOrNull(offset)) as P; + return (reader.readLongOrNull(offset)) as P; case 54: return (reader.readBoolOrNull(offset)) as P; case 55: @@ -1243,67 +1256,63 @@ P _settingsDeserializeProp

( case 57: return (reader.readBoolOrNull(offset)) as P; case 58: + return (reader.readBoolOrNull(offset)) as P; + case 59: return (reader.readObjectOrNull( offset, L10nLocaleSchema.deserialize, allOffsets, )) as P; - case 59: + case 60: return (_SettingsmangaHomeDisplayTypeValueEnumMap[ reader.readByteOrNull(offset)] ?? DisplayType.comfortableGrid) as P; - case 60: - return (reader.readLongOrNull(offset)) as P; case 61: - return (reader.readBoolOrNull(offset)) as P; - case 62: return (reader.readLongOrNull(offset)) as P; + case 62: + return (reader.readBoolOrNull(offset)) as P; case 63: + return (reader.readLongOrNull(offset)) as P; + case 64: return (reader.readObjectList( offset, PersonalPageModeSchema.deserialize, allOffsets, PersonalPageMode(), )) as P; - case 64: + case 65: return (reader.readObjectList( offset, PersonalReaderModeSchema.deserialize, allOffsets, PersonalReaderMode(), )) as P; - case 65: + case 66: return (reader.readObjectOrNull( offset, PlayerSubtitleSettingsSchema.deserialize, allOffsets, )) as P; - case 66: - return (reader.readBoolOrNull(offset)) as P; case 67: - return (reader.readLongOrNull(offset)) as P; - case 68: return (reader.readBoolOrNull(offset)) as P; + case 68: + return (reader.readLongOrNull(offset)) as P; case 69: + return (reader.readBoolOrNull(offset)) as P; + case 70: return (_SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offset)] ?? ScaleType.fitScreen) as P; - case 70: - return (reader.readBoolOrNull(offset)) as P; case 71: return (reader.readBoolOrNull(offset)) as P; case 72: + return (reader.readBoolOrNull(offset)) as P; + case 73: return (reader.readObjectList( offset, SortChapterSchema.deserialize, allOffsets, SortChapter(), )) as P; - case 73: - return (reader.readObjectOrNull( - offset, - SortLibraryMangaSchema.deserialize, - allOffsets, - )) as P; case 74: return (reader.readObjectOrNull( offset, @@ -1311,14 +1320,20 @@ P _settingsDeserializeProp

( allOffsets, )) as P; case 75: - return (reader.readLongOrNull(offset)) as P; + return (reader.readObjectOrNull( + offset, + SortLibraryMangaSchema.deserialize, + allOffsets, + )) as P; case 76: - return (reader.readBoolOrNull(offset)) as P; + return (reader.readLongOrNull(offset)) as P; case 77: return (reader.readBoolOrNull(offset)) as P; case 78: return (reader.readBoolOrNull(offset)) as P; case 79: + return (reader.readBoolOrNull(offset)) as P; + case 80: return (reader.readStringOrNull(offset)) as P; default: throw IsarError('Unknown property with id $propertyId'); @@ -1850,6 +1865,158 @@ extension SettingsQueryFilter }); } + QueryBuilder + appFontFamilyIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'appFontFamily', + )); + }); + } + + QueryBuilder + appFontFamilyIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'appFontFamily', + )); + }); + } + + QueryBuilder appFontFamilyEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'appFontFamily', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + appFontFamilyGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'appFontFamily', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder appFontFamilyLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'appFontFamily', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder appFontFamilyBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'appFontFamily', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + appFontFamilyStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'appFontFamily', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder appFontFamilyEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'appFontFamily', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder appFontFamilyContains( + String value, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'appFontFamily', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder appFontFamilyMatches( + String pattern, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'appFontFamily', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + appFontFamilyIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'appFontFamily', + value: '', + )); + }); + } + + QueryBuilder + appFontFamilyIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'appFontFamily', + value: '', + )); + }); + } + QueryBuilder autoBackupLocationIsNull() { return QueryBuilder.apply(this, (query) { @@ -6873,6 +7040,18 @@ extension SettingsQuerySortBy on QueryBuilder { }); } + QueryBuilder sortByAppFontFamily() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'appFontFamily', Sort.asc); + }); + } + + QueryBuilder sortByAppFontFamilyDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'appFontFamily', Sort.desc); + }); + } + QueryBuilder sortByAutoBackupLocation() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'autoBackupLocation', Sort.asc); @@ -7700,6 +7879,18 @@ extension SettingsQuerySortThenBy }); } + QueryBuilder thenByAppFontFamily() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'appFontFamily', Sort.asc); + }); + } + + QueryBuilder thenByAppFontFamilyDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'appFontFamily', Sort.desc); + }); + } + QueryBuilder thenByAutoBackupLocation() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'autoBackupLocation', Sort.asc); @@ -8475,6 +8666,14 @@ extension SettingsQueryWhereDistinct }); } + QueryBuilder distinctByAppFontFamily( + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'appFontFamily', + caseSensitive: caseSensitive); + }); + } + QueryBuilder distinctByAutoBackupLocation( {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { @@ -8908,6 +9107,12 @@ extension SettingsQueryProperty }); } + QueryBuilder appFontFamilyProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'appFontFamily'); + }); + } + QueryBuilder autoBackupLocationProperty() { return QueryBuilder.apply(this, (query) { diff --git a/lib/modules/anime/anime_player_view.dart b/lib/modules/anime/anime_player_view.dart index 1931e2c..a3aa636 100644 --- a/lib/modules/anime/anime_player_view.dart +++ b/lib/modules/anime/anime_player_view.dart @@ -303,13 +303,17 @@ class _AnimeStreamPageState extends riv.ConsumerState Widget textWidget(String text, bool selected) => Row( children: [ Flexible( - child: Text(text, - style: Theme.of(context).textTheme.bodyLarge!.copyWith( - fontSize: 16, - fontStyle: selected ? FontStyle.italic : null, - color: selected ? context.primaryColor : null), - maxLines: 1, - overflow: TextOverflow.ellipsis)), + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: MediaQuery.of(context).padding.top), + child: Text(text, + style: Theme.of(context).textTheme.bodyLarge!.copyWith( + fontSize: 16, + fontStyle: selected ? FontStyle.italic : null, + color: selected ? context.primaryColor : null), + maxLines: 1, + overflow: TextOverflow.ellipsis), + )), ], ); diff --git a/lib/modules/anime/widgets/subtitle_view.dart b/lib/modules/anime/widgets/subtitle_view.dart index 398ffa8..2c93df1 100644 --- a/lib/modules/anime/widgets/subtitle_view.dart +++ b/lib/modules/anime/widgets/subtitle_view.dart @@ -116,7 +116,6 @@ TextStyle subtileTextStyle(WidgetRef ref) { fontStyle: subSets.useItalic! ? FontStyle.italic : null, color: Color.fromARGB(subSets.textColorA!, subSets.textColorR!, subSets.textColorG!, subSets.textColorB!), - fontFamily: "", shadows: [ Shadow( offset: const Offset(-1.5, -1.5), color: borderColor, blurRadius: 1.4), diff --git a/lib/modules/library/providers/library_state_provider.g.dart b/lib/modules/library/providers/library_state_provider.g.dart index 2218a3c..71a7892 100644 --- a/lib/modules/library/providers/library_state_provider.g.dart +++ b/lib/modules/library/providers/library_state_provider.g.dart @@ -7,7 +7,7 @@ part of 'library_state_provider.dart'; // ************************************************************************** String _$libraryDisplayTypeStateHash() => - r'6a18446eb49bc55d64fabfb0aa35ff1f2dd52d88'; + r'9756e17b70fcb76aa6bac2a50e0927c2ad28717f'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/modules/manga/home/providers/state_provider.g.dart b/lib/modules/manga/home/providers/state_provider.g.dart index 059f7d8..625e481 100644 --- a/lib/modules/manga/home/providers/state_provider.g.dart +++ b/lib/modules/manga/home/providers/state_provider.g.dart @@ -7,7 +7,7 @@ part of 'state_provider.dart'; // ************************************************************************** String _$mangaHomeDisplayTypeStateHash() => - r'd59cd15db8c2884a77c72f5af9d659e0b07c0556'; + r'48582d80d07c966d5765f20ecc92947e9dd0881c'; /// See also [MangaHomeDisplayTypeState]. @ProviderFor(MangaHomeDisplayTypeState) diff --git a/lib/modules/manga/reader/widgets/btn_chapter_list_dialog.dart b/lib/modules/manga/reader/widgets/btn_chapter_list_dialog.dart index f7313ca..e428616 100644 --- a/lib/modules/manga/reader/widgets/btn_chapter_list_dialog.dart +++ b/lib/modules/manga/reader/widgets/btn_chapter_list_dialog.dart @@ -8,7 +8,8 @@ import 'package:mangayomi/modules/widgets/draggable_scroll_bar.dart'; import 'package:mangayomi/utils/date.dart'; import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; -Widget btnToShowChapterListDialog(BuildContext context, String title, Chapter chapter) { +Widget btnToShowChapterListDialog( + BuildContext context, String title, Chapter chapter) { return IconButton( onPressed: () { showDialog( @@ -59,6 +60,7 @@ class _ChapterListWidgetState extends State { return DraggableScrollbarWidget( controller: controller, child: ListView.builder( + shrinkWrap: true, padding: const EdgeInsets.symmetric(vertical: 2), controller: controller, itemCount: chapterList.length, diff --git a/lib/modules/more/settings/appearance/appearance_screen.dart b/lib/modules/more/settings/appearance/appearance_screen.dart index 4698bf1..97d48aa 100644 --- a/lib/modules/more/settings/appearance/appearance_screen.dart +++ b/lib/modules/more/settings/appearance/appearance_screen.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:mangayomi/modules/more/settings/appearance/providers/app_font_family.dart'; import 'package:mangayomi/modules/more/settings/appearance/providers/theme_mode_state_provider.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; @@ -23,6 +25,15 @@ class AppearanceScreen extends ConsumerWidget { final pureBlackDarkMode = ref.watch(pureBlackDarkModeStateProvider); final isDarkTheme = ref.watch(themeModeStateProvider); final l10nLocale = ref.watch(l10nLocaleStateProvider); + final appFontFamily = ref.watch(appFontFamilyProvider); + final appFontFamilySub = appFontFamily == null + ? context.l10n.default0 + : GoogleFonts.asMap() + .entries + .toList() + .firstWhere( + (element) => element.value().fontFamily! == appFontFamily) + .key; return Scaffold( appBar: AppBar( title: Text(l10n!.appearance), @@ -138,6 +149,128 @@ class AppearanceScreen extends ConsumerWidget { fontSize: 11, color: context.secondaryColor), ), ), + ListTile( + onTap: () { + String textValue = ""; + showDialog( + context: context, + builder: (context) { + return AlertDialog( + title: Text(context.l10n.font), + content: + StatefulBuilder(builder: (context, setState) { + return SizedBox( + width: context.mediaWidth(0.8), + child: Column( + children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: TextField( + onChanged: (v) { + setState(() { + textValue = v; + }); + }, + decoration: InputDecoration( + isDense: true, + filled: false, + enabledBorder: + OutlineInputBorder( + borderSide: BorderSide( + color: context + .secondaryColor), + ), + focusedBorder: + OutlineInputBorder( + borderSide: BorderSide( + color: context + .primaryColor), + ), + border: + const OutlineInputBorder( + borderSide: + BorderSide()), + hintText: l10n.search)), + ), + Builder(builder: (context) { + List values = GoogleFonts.asMap() + .entries + .toList(); + values = values + .where((values) => values.key + .toLowerCase() + .contains( + textValue.toLowerCase())) + .toList(); + return Flexible( + child: ListView.builder( + shrinkWrap: true, + itemCount: values.length, + itemBuilder: (context, index) { + final value = values[index]; + return RadioListTile( + dense: true, + contentPadding: + const EdgeInsets.all(0), + value: + value.value().fontFamily, + groupValue: appFontFamily, + onChanged: (value) { + ref + .read( + appFontFamilyProvider + .notifier) + .set(value); + Navigator.pop(context); + }, + title: Text(value.key), + ); + }, + ), + ); + }), + ], + )); + }), + actions: [ + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + TextButton( + onPressed: () async { + ref + .read(appFontFamilyProvider + .notifier) + .set(null); + Navigator.pop(context); + }, + child: Text( + l10n.default0, + style: TextStyle( + color: context.primaryColor), + )), + TextButton( + onPressed: () async { + Navigator.pop(context); + }, + child: Text( + l10n.cancel, + style: TextStyle( + color: context.primaryColor), + )), + ], + ) + ], + ); + }); + }, + title: Text(context.l10n.font), + subtitle: Text( + appFontFamilySub, + style: TextStyle( + fontSize: 11, color: context.secondaryColor), + ), + ), ], ), ), diff --git a/lib/modules/more/settings/appearance/providers/app_font_family.dart b/lib/modules/more/settings/appearance/providers/app_font_family.dart new file mode 100644 index 0000000..710f786 --- /dev/null +++ b/lib/modules/more/settings/appearance/providers/app_font_family.dart @@ -0,0 +1,19 @@ +import 'package:mangayomi/main.dart'; +import 'package:mangayomi/models/settings.dart'; +import 'package:riverpod_annotation/riverpod_annotation.dart'; +part 'app_font_family.g.dart'; + +@riverpod +class AppFontFamily extends _$AppFontFamily { + @override + String? build() { + return isar.settings.getSync(227)!.appFontFamily; + } + + void set(String? fontFamily) { + final settings = isar.settings.getSync(227); + state = fontFamily; + isar.writeTxnSync( + () => isar.settings.putSync(settings!..appFontFamily = fontFamily)); + } +} diff --git a/lib/modules/more/settings/appearance/providers/app_font_family.g.dart b/lib/modules/more/settings/appearance/providers/app_font_family.g.dart new file mode 100644 index 0000000..108b2d9 --- /dev/null +++ b/lib/modules/more/settings/appearance/providers/app_font_family.g.dart @@ -0,0 +1,26 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'app_font_family.dart'; + +// ************************************************************************** +// RiverpodGenerator +// ************************************************************************** + +String _$appFontFamilyHash() => r'500f9cd0c0b0dd27d7026c4aa029c33fed337430'; + +/// See also [AppFontFamily]. +@ProviderFor(AppFontFamily) +final appFontFamilyProvider = + AutoDisposeNotifierProvider.internal( + AppFontFamily.new, + name: r'appFontFamilyProvider', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$appFontFamilyHash, + dependencies: null, + allTransitiveDependencies: null, +); + +typedef _$AppFontFamily = AutoDisposeNotifier; +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member diff --git a/lib/router/router.g.dart b/lib/router/router.g.dart index d15f450..5716c42 100644 --- a/lib/router/router.g.dart +++ b/lib/router/router.g.dart @@ -6,7 +6,7 @@ part of 'router.dart'; // RiverpodGenerator // ************************************************************************** -String _$routerHash() => r'50d606dbd2d70fb41bf26613e12475e787990319'; +String _$routerHash() => r'b995df5ff14b21e89769cbb0f0955a4a41b39386'; /// See also [router]. @ProviderFor(router)