From a0ebe46fa0de0144b38636bdede7fd4ec4922b59 Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Sat, 7 Jun 2025 01:46:30 +0200 Subject: [PATCH] added option to change hwdec --- lib/l10n/app_en.arb | 5 +- lib/l10n/generated/app_localizations.dart | 6 + lib/l10n/generated/app_localizations_ar.dart | 3 + lib/l10n/generated/app_localizations_de.dart | 3 + lib/l10n/generated/app_localizations_en.dart | 3 + lib/l10n/generated/app_localizations_es.dart | 3 + lib/l10n/generated/app_localizations_fr.dart | 3 + lib/l10n/generated/app_localizations_id.dart | 3 + lib/l10n/generated/app_localizations_it.dart | 3 + lib/l10n/generated/app_localizations_pt.dart | 3 + lib/l10n/generated/app_localizations_ru.dart | 3 + lib/l10n/generated/app_localizations_th.dart | 3 + lib/l10n/generated/app_localizations_tr.dart | 3 + lib/l10n/generated/app_localizations_zh.dart | 3 + lib/models/settings.dart | 5 + lib/models/settings.g.dart | 605 ++++++++++++------ lib/modules/anime/anime_player_view.dart | 6 +- .../providers/download_provider.g.dart | 2 +- .../about/providers/check_for_update.g.dart | 2 +- .../more/settings/player/player_screen.dart | 75 +++ .../providers/player_state_provider.dart | 40 ++ .../providers/player_state_provider.g.dart | 164 +++++ lib/services/aniskip.g.dart | 2 +- lib/services/get_chapter_pages.g.dart | 2 +- lib/services/get_video_list.g.dart | 2 +- lib/services/trackers/anilist.g.dart | 2 +- 26 files changed, 741 insertions(+), 213 deletions(-) diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 3efabc40..ab1d4457 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -473,7 +473,6 @@ "continue_to_next_chapter": "Continue scrolling to read the next chapter", "no_next_chapter": "No next chapter", "you_have_finished_reading": "You have finished reading", - "return_to_the_list_of_chapters": "Return to the list of chapters" - - + "return_to_the_list_of_chapters": "Return to the list of chapters", + "hwdec": "Hardware Decoder" } \ No newline at end of file diff --git a/lib/l10n/generated/app_localizations.dart b/lib/l10n/generated/app_localizations.dart index 2beeeb53..efb19f25 100644 --- a/lib/l10n/generated/app_localizations.dart +++ b/lib/l10n/generated/app_localizations.dart @@ -2963,6 +2963,12 @@ abstract class AppLocalizations { /// In en, this message translates to: /// **'Return to the list of chapters'** String get return_to_the_list_of_chapters; + + /// No description provided for @hwdec. + /// + /// In en, this message translates to: + /// **'Hardware Decoder'** + String get hwdec; } class _AppLocalizationsDelegate diff --git a/lib/l10n/generated/app_localizations_ar.dart b/lib/l10n/generated/app_localizations_ar.dart index 46e7426d..b6a703d2 100644 --- a/lib/l10n/generated/app_localizations_ar.dart +++ b/lib/l10n/generated/app_localizations_ar.dart @@ -1514,4 +1514,7 @@ class AppLocalizationsAr extends AppLocalizations { @override String get return_to_the_list_of_chapters => 'Return to the list of chapters'; + + @override + String get hwdec => 'Hardware Decoder'; } diff --git a/lib/l10n/generated/app_localizations_de.dart b/lib/l10n/generated/app_localizations_de.dart index db5cc8b2..94186c1e 100644 --- a/lib/l10n/generated/app_localizations_de.dart +++ b/lib/l10n/generated/app_localizations_de.dart @@ -1525,4 +1525,7 @@ class AppLocalizationsDe extends AppLocalizations { @override String get return_to_the_list_of_chapters => 'Return to the list of chapters'; + + @override + String get hwdec => 'Hardware Decoder'; } diff --git a/lib/l10n/generated/app_localizations_en.dart b/lib/l10n/generated/app_localizations_en.dart index b21795be..729a9cf3 100644 --- a/lib/l10n/generated/app_localizations_en.dart +++ b/lib/l10n/generated/app_localizations_en.dart @@ -1514,4 +1514,7 @@ class AppLocalizationsEn extends AppLocalizations { @override String get return_to_the_list_of_chapters => 'Return to the list of chapters'; + + @override + String get hwdec => 'Hardware Decoder'; } diff --git a/lib/l10n/generated/app_localizations_es.dart b/lib/l10n/generated/app_localizations_es.dart index 55ad0b19..0d2239c4 100644 --- a/lib/l10n/generated/app_localizations_es.dart +++ b/lib/l10n/generated/app_localizations_es.dart @@ -1531,6 +1531,9 @@ class AppLocalizationsEs extends AppLocalizations { @override String get return_to_the_list_of_chapters => 'Return to the list of chapters'; + + @override + String get hwdec => 'Hardware Decoder'; } /// The translations for Spanish Castilian, as used in Latin America and the Caribbean (`es_419`). diff --git a/lib/l10n/generated/app_localizations_fr.dart b/lib/l10n/generated/app_localizations_fr.dart index e9a3c927..308b36f0 100644 --- a/lib/l10n/generated/app_localizations_fr.dart +++ b/lib/l10n/generated/app_localizations_fr.dart @@ -1536,4 +1536,7 @@ class AppLocalizationsFr extends AppLocalizations { @override String get return_to_the_list_of_chapters => 'Retournez à la liste des chapitres'; + + @override + String get hwdec => 'Hardware Decoder'; } diff --git a/lib/l10n/generated/app_localizations_id.dart b/lib/l10n/generated/app_localizations_id.dart index e1a8133d..90f19e6f 100644 --- a/lib/l10n/generated/app_localizations_id.dart +++ b/lib/l10n/generated/app_localizations_id.dart @@ -1520,4 +1520,7 @@ class AppLocalizationsId extends AppLocalizations { @override String get return_to_the_list_of_chapters => 'Return to the list of chapters'; + + @override + String get hwdec => 'Hardware Decoder'; } diff --git a/lib/l10n/generated/app_localizations_it.dart b/lib/l10n/generated/app_localizations_it.dart index 50c8697b..2ab0a6c6 100644 --- a/lib/l10n/generated/app_localizations_it.dart +++ b/lib/l10n/generated/app_localizations_it.dart @@ -1530,4 +1530,7 @@ class AppLocalizationsIt extends AppLocalizations { @override String get return_to_the_list_of_chapters => 'Return to the list of chapters'; + + @override + String get hwdec => 'Hardware Decoder'; } diff --git a/lib/l10n/generated/app_localizations_pt.dart b/lib/l10n/generated/app_localizations_pt.dart index 1c485350..45e14e2e 100644 --- a/lib/l10n/generated/app_localizations_pt.dart +++ b/lib/l10n/generated/app_localizations_pt.dart @@ -1528,6 +1528,9 @@ class AppLocalizationsPt extends AppLocalizations { @override String get return_to_the_list_of_chapters => 'Return to the list of chapters'; + + @override + String get hwdec => 'Hardware Decoder'; } /// The translations for Portuguese, as used in Brazil (`pt_BR`). diff --git a/lib/l10n/generated/app_localizations_ru.dart b/lib/l10n/generated/app_localizations_ru.dart index bc0de95c..6eaed9f5 100644 --- a/lib/l10n/generated/app_localizations_ru.dart +++ b/lib/l10n/generated/app_localizations_ru.dart @@ -1530,4 +1530,7 @@ class AppLocalizationsRu extends AppLocalizations { @override String get return_to_the_list_of_chapters => 'Return to the list of chapters'; + + @override + String get hwdec => 'Hardware Decoder'; } diff --git a/lib/l10n/generated/app_localizations_th.dart b/lib/l10n/generated/app_localizations_th.dart index 98249c58..b8afd7f8 100644 --- a/lib/l10n/generated/app_localizations_th.dart +++ b/lib/l10n/generated/app_localizations_th.dart @@ -1515,4 +1515,7 @@ class AppLocalizationsTh extends AppLocalizations { @override String get return_to_the_list_of_chapters => 'Return to the list of chapters'; + + @override + String get hwdec => 'Hardware Decoder'; } diff --git a/lib/l10n/generated/app_localizations_tr.dart b/lib/l10n/generated/app_localizations_tr.dart index 92bad3f2..0130c582 100644 --- a/lib/l10n/generated/app_localizations_tr.dart +++ b/lib/l10n/generated/app_localizations_tr.dart @@ -1521,4 +1521,7 @@ class AppLocalizationsTr extends AppLocalizations { @override String get return_to_the_list_of_chapters => 'Return to the list of chapters'; + + @override + String get hwdec => 'Hardware Decoder'; } diff --git a/lib/l10n/generated/app_localizations_zh.dart b/lib/l10n/generated/app_localizations_zh.dart index f4fad62a..691ba362 100644 --- a/lib/l10n/generated/app_localizations_zh.dart +++ b/lib/l10n/generated/app_localizations_zh.dart @@ -1483,4 +1483,7 @@ class AppLocalizationsZh extends AppLocalizations { @override String get return_to_the_list_of_chapters => 'Return to the list of chapters'; + + @override + String get hwdec => 'Hardware Decoder'; } diff --git a/lib/models/settings.dart b/lib/models/settings.dart index 4ff8497a..054d99bf 100644 --- a/lib/models/settings.dart +++ b/lib/models/settings.dart @@ -204,6 +204,8 @@ class Settings { bool? useLibass; + String? hwdecMode; + int? libraryFilterNovelDownloadType; int? libraryFilterNovelUnreadType; @@ -326,6 +328,7 @@ class Settings { this.animeGridSize, this.disableSectionType = SectionType.all, this.useLibass = true, + this.hwdecMode = "auto", this.libraryFilterNovelDownloadType = 0, this.libraryFilterNovelUnreadType = 0, this.libraryFilterNovelStartedType = 0, @@ -509,6 +512,7 @@ class Settings { disableSectionType = SectionType.values[json['disableSectionType'] ?? SectionType.all.index]; useLibass = json['useLibass']; + hwdecMode = json['hwdecMode']; libraryFilterNovelBookMarkedType = json['libraryFilterNovelBookMarkedType']; libraryFilterNovelDownloadType = json['libraryFilterNovelDownloadType']; libraryFilterNovelStartedType = json['libraryFilterNovelStartedType']; @@ -666,6 +670,7 @@ class Settings { 'animeGridSize': animeGridSize, 'disableSectionType': disableSectionType.index, 'useLibass': useLibass, + 'hwdecMode': hwdecMode, 'libraryFilterNovelBookMarkedType': libraryFilterNovelBookMarkedType, 'libraryFilterNovelDownloadType': libraryFilterNovelDownloadType, 'libraryFilterNovelStartedType': libraryFilterNovelStartedType, diff --git a/lib/models/settings.g.dart b/lib/models/settings.g.dart index 756e4905..3fdbe2f3 100644 --- a/lib/models/settings.g.dart +++ b/lib/models/settings.g.dart @@ -304,297 +304,302 @@ const SettingsSchema = CollectionSchema( name: r'hideItems', type: IsarType.stringList, ), - r'incognitoMode': PropertySchema( + r'hwdecMode': PropertySchema( id: 54, + name: r'hwdecMode', + type: IsarType.string, + ), + r'incognitoMode': PropertySchema( + id: 55, name: r'incognitoMode', type: IsarType.bool, ), r'libraryDownloadedChapters': PropertySchema( - id: 55, + id: 56, name: r'libraryDownloadedChapters', type: IsarType.bool, ), r'libraryFilterAnimeBookMarkedType': PropertySchema( - id: 56, + id: 57, name: r'libraryFilterAnimeBookMarkedType', type: IsarType.long, ), r'libraryFilterAnimeDownloadType': PropertySchema( - id: 57, + id: 58, name: r'libraryFilterAnimeDownloadType', type: IsarType.long, ), r'libraryFilterAnimeStartedType': PropertySchema( - id: 58, + id: 59, name: r'libraryFilterAnimeStartedType', type: IsarType.long, ), r'libraryFilterAnimeUnreadType': PropertySchema( - id: 59, + id: 60, name: r'libraryFilterAnimeUnreadType', type: IsarType.long, ), r'libraryFilterMangasBookMarkedType': PropertySchema( - id: 60, + id: 61, name: r'libraryFilterMangasBookMarkedType', type: IsarType.long, ), r'libraryFilterMangasDownloadType': PropertySchema( - id: 61, + id: 62, name: r'libraryFilterMangasDownloadType', type: IsarType.long, ), r'libraryFilterMangasStartedType': PropertySchema( - id: 62, + id: 63, name: r'libraryFilterMangasStartedType', type: IsarType.long, ), r'libraryFilterMangasUnreadType': PropertySchema( - id: 63, + id: 64, name: r'libraryFilterMangasUnreadType', type: IsarType.long, ), r'libraryFilterNovelBookMarkedType': PropertySchema( - id: 64, + id: 65, name: r'libraryFilterNovelBookMarkedType', type: IsarType.long, ), r'libraryFilterNovelDownloadType': PropertySchema( - id: 65, + id: 66, name: r'libraryFilterNovelDownloadType', type: IsarType.long, ), r'libraryFilterNovelStartedType': PropertySchema( - id: 66, + id: 67, name: r'libraryFilterNovelStartedType', type: IsarType.long, ), r'libraryFilterNovelUnreadType': PropertySchema( - id: 67, + id: 68, name: r'libraryFilterNovelUnreadType', type: IsarType.long, ), r'libraryLocalSource': PropertySchema( - id: 68, + id: 69, name: r'libraryLocalSource', type: IsarType.bool, ), r'libraryShowCategoryTabs': PropertySchema( - id: 69, + id: 70, name: r'libraryShowCategoryTabs', type: IsarType.bool, ), r'libraryShowContinueReadingButton': PropertySchema( - id: 70, + id: 71, name: r'libraryShowContinueReadingButton', type: IsarType.bool, ), r'libraryShowLanguage': PropertySchema( - id: 71, + id: 72, name: r'libraryShowLanguage', type: IsarType.bool, ), r'libraryShowNumbersOfItems': PropertySchema( - id: 72, + id: 73, name: r'libraryShowNumbersOfItems', type: IsarType.bool, ), r'locale': PropertySchema( - id: 73, + id: 74, name: r'locale', type: IsarType.object, target: r'L10nLocale', ), r'mangaExtensionsRepo': PropertySchema( - id: 74, + id: 75, name: r'mangaExtensionsRepo', type: IsarType.objectList, target: r'Repo', ), r'mangaGridSize': PropertySchema( - id: 75, + id: 76, name: r'mangaGridSize', type: IsarType.long, ), r'mangaHomeDisplayType': PropertySchema( - id: 76, + id: 77, name: r'mangaHomeDisplayType', type: IsarType.byte, enumMap: _SettingsmangaHomeDisplayTypeEnumValueMap, ), r'markEpisodeAsSeenType': PropertySchema( - id: 77, + id: 78, name: r'markEpisodeAsSeenType', type: IsarType.long, ), r'navigationOrder': PropertySchema( - id: 78, + id: 79, name: r'navigationOrder', type: IsarType.stringList, ), r'novelDisplayType': PropertySchema( - id: 79, + id: 80, name: r'novelDisplayType', type: IsarType.byte, enumMap: _SettingsnovelDisplayTypeEnumValueMap, ), r'novelExtensionsRepo': PropertySchema( - id: 80, + id: 81, name: r'novelExtensionsRepo', type: IsarType.objectList, target: r'Repo', ), r'novelFontSize': PropertySchema( - id: 81, + id: 82, name: r'novelFontSize', type: IsarType.long, ), r'novelGridSize': PropertySchema( - id: 82, + id: 83, name: r'novelGridSize', type: IsarType.long, ), r'novelLibraryDownloadedChapters': PropertySchema( - id: 83, + id: 84, name: r'novelLibraryDownloadedChapters', type: IsarType.bool, ), r'novelLibraryLocalSource': PropertySchema( - id: 84, + id: 85, name: r'novelLibraryLocalSource', type: IsarType.bool, ), r'novelLibraryShowCategoryTabs': PropertySchema( - id: 85, + id: 86, name: r'novelLibraryShowCategoryTabs', type: IsarType.bool, ), r'novelLibraryShowContinueReadingButton': PropertySchema( - id: 86, + id: 87, name: r'novelLibraryShowContinueReadingButton', type: IsarType.bool, ), r'novelLibraryShowLanguage': PropertySchema( - id: 87, + id: 88, name: r'novelLibraryShowLanguage', type: IsarType.bool, ), r'novelLibraryShowNumbersOfItems': PropertySchema( - id: 88, + id: 89, name: r'novelLibraryShowNumbersOfItems', type: IsarType.bool, ), r'novelTextAlign': PropertySchema( - id: 89, + id: 90, name: r'novelTextAlign', type: IsarType.byte, enumMap: _SettingsnovelTextAlignEnumValueMap, ), r'onlyIncludePinnedSources': PropertySchema( - id: 90, + id: 91, name: r'onlyIncludePinnedSources', type: IsarType.bool, ), r'pagePreloadAmount': PropertySchema( - id: 91, + id: 92, name: r'pagePreloadAmount', type: IsarType.long, ), r'personalPageModeList': PropertySchema( - id: 92, + id: 93, name: r'personalPageModeList', type: IsarType.objectList, target: r'PersonalPageMode', ), r'personalReaderModeList': PropertySchema( - id: 93, + id: 94, name: r'personalReaderModeList', type: IsarType.objectList, target: r'PersonalReaderMode', ), r'playerSubtitleSettings': PropertySchema( - id: 94, + id: 95, name: r'playerSubtitleSettings', type: IsarType.object, target: r'PlayerSubtitleSettings', ), r'pureBlackDarkMode': PropertySchema( - id: 95, + id: 96, name: r'pureBlackDarkMode', type: IsarType.bool, ), r'relativeTimesTamps': PropertySchema( - id: 96, + id: 97, name: r'relativeTimesTamps', type: IsarType.long, ), r'saveAsCBZArchive': PropertySchema( - id: 97, + id: 98, name: r'saveAsCBZArchive', type: IsarType.bool, ), r'scaleType': PropertySchema( - id: 98, + id: 99, name: r'scaleType', type: IsarType.byte, enumMap: _SettingsscaleTypeEnumValueMap, ), r'showPagesNumber': PropertySchema( - id: 99, + id: 100, name: r'showPagesNumber', type: IsarType.bool, ), r'sortChapterList': PropertySchema( - id: 100, + id: 101, name: r'sortChapterList', type: IsarType.objectList, target: r'SortChapter', ), r'sortLibraryAnime': PropertySchema( - id: 101, + id: 102, name: r'sortLibraryAnime', type: IsarType.object, target: r'SortLibraryManga', ), r'sortLibraryManga': PropertySchema( - id: 102, + id: 103, name: r'sortLibraryManga', type: IsarType.object, target: r'SortLibraryManga', ), r'sortLibraryNovel': PropertySchema( - id: 103, + id: 104, name: r'sortLibraryNovel', type: IsarType.object, target: r'SortLibraryManga', ), r'startDatebackup': PropertySchema( - id: 104, + id: 105, name: r'startDatebackup', type: IsarType.long, ), r'themeIsDark': PropertySchema( - id: 105, + id: 106, name: r'themeIsDark', type: IsarType.bool, ), r'updateProgressAfterReading': PropertySchema( - id: 106, + id: 107, name: r'updateProgressAfterReading', type: IsarType.bool, ), r'useLibass': PropertySchema( - id: 107, + id: 108, name: r'useLibass', type: IsarType.bool, ), r'usePageTapZones': PropertySchema( - id: 108, + id: 109, name: r'usePageTapZones', type: IsarType.bool, ), r'userAgent': PropertySchema( - id: 109, + id: 110, name: r'userAgent', type: IsarType.string, ) @@ -831,6 +836,12 @@ int _settingsEstimateSize( } } } + { + final value = object.hwdecMode; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } { final value = object.locale; if (value != null) { @@ -1075,112 +1086,113 @@ void _settingsSerialize( writer.writeBool(offsets[51], object.fullScreenPlayer); writer.writeBool(offsets[52], object.fullScreenReader); writer.writeStringList(offsets[53], object.hideItems); - writer.writeBool(offsets[54], object.incognitoMode); - writer.writeBool(offsets[55], object.libraryDownloadedChapters); - writer.writeLong(offsets[56], object.libraryFilterAnimeBookMarkedType); - writer.writeLong(offsets[57], object.libraryFilterAnimeDownloadType); - writer.writeLong(offsets[58], object.libraryFilterAnimeStartedType); - writer.writeLong(offsets[59], object.libraryFilterAnimeUnreadType); - writer.writeLong(offsets[60], object.libraryFilterMangasBookMarkedType); - writer.writeLong(offsets[61], object.libraryFilterMangasDownloadType); - writer.writeLong(offsets[62], object.libraryFilterMangasStartedType); - writer.writeLong(offsets[63], object.libraryFilterMangasUnreadType); - writer.writeLong(offsets[64], object.libraryFilterNovelBookMarkedType); - writer.writeLong(offsets[65], object.libraryFilterNovelDownloadType); - writer.writeLong(offsets[66], object.libraryFilterNovelStartedType); - writer.writeLong(offsets[67], object.libraryFilterNovelUnreadType); - writer.writeBool(offsets[68], object.libraryLocalSource); - writer.writeBool(offsets[69], object.libraryShowCategoryTabs); - writer.writeBool(offsets[70], object.libraryShowContinueReadingButton); - writer.writeBool(offsets[71], object.libraryShowLanguage); - writer.writeBool(offsets[72], object.libraryShowNumbersOfItems); + writer.writeString(offsets[54], object.hwdecMode); + writer.writeBool(offsets[55], object.incognitoMode); + writer.writeBool(offsets[56], object.libraryDownloadedChapters); + writer.writeLong(offsets[57], object.libraryFilterAnimeBookMarkedType); + writer.writeLong(offsets[58], object.libraryFilterAnimeDownloadType); + writer.writeLong(offsets[59], object.libraryFilterAnimeStartedType); + writer.writeLong(offsets[60], object.libraryFilterAnimeUnreadType); + writer.writeLong(offsets[61], object.libraryFilterMangasBookMarkedType); + writer.writeLong(offsets[62], object.libraryFilterMangasDownloadType); + writer.writeLong(offsets[63], object.libraryFilterMangasStartedType); + writer.writeLong(offsets[64], object.libraryFilterMangasUnreadType); + writer.writeLong(offsets[65], object.libraryFilterNovelBookMarkedType); + writer.writeLong(offsets[66], object.libraryFilterNovelDownloadType); + writer.writeLong(offsets[67], object.libraryFilterNovelStartedType); + writer.writeLong(offsets[68], object.libraryFilterNovelUnreadType); + writer.writeBool(offsets[69], object.libraryLocalSource); + writer.writeBool(offsets[70], object.libraryShowCategoryTabs); + writer.writeBool(offsets[71], object.libraryShowContinueReadingButton); + writer.writeBool(offsets[72], object.libraryShowLanguage); + writer.writeBool(offsets[73], object.libraryShowNumbersOfItems); writer.writeObject( - offsets[73], + offsets[74], allOffsets, L10nLocaleSchema.serialize, object.locale, ); writer.writeObjectList( - offsets[74], + offsets[75], allOffsets, RepoSchema.serialize, object.mangaExtensionsRepo, ); - writer.writeLong(offsets[75], object.mangaGridSize); - writer.writeByte(offsets[76], object.mangaHomeDisplayType.index); - writer.writeLong(offsets[77], object.markEpisodeAsSeenType); - writer.writeStringList(offsets[78], object.navigationOrder); - writer.writeByte(offsets[79], object.novelDisplayType.index); + writer.writeLong(offsets[76], object.mangaGridSize); + writer.writeByte(offsets[77], object.mangaHomeDisplayType.index); + writer.writeLong(offsets[78], object.markEpisodeAsSeenType); + writer.writeStringList(offsets[79], object.navigationOrder); + writer.writeByte(offsets[80], object.novelDisplayType.index); writer.writeObjectList( - offsets[80], + offsets[81], allOffsets, RepoSchema.serialize, object.novelExtensionsRepo, ); - writer.writeLong(offsets[81], object.novelFontSize); - writer.writeLong(offsets[82], object.novelGridSize); - writer.writeBool(offsets[83], object.novelLibraryDownloadedChapters); - writer.writeBool(offsets[84], object.novelLibraryLocalSource); - writer.writeBool(offsets[85], object.novelLibraryShowCategoryTabs); - writer.writeBool(offsets[86], object.novelLibraryShowContinueReadingButton); - writer.writeBool(offsets[87], object.novelLibraryShowLanguage); - writer.writeBool(offsets[88], object.novelLibraryShowNumbersOfItems); - writer.writeByte(offsets[89], object.novelTextAlign.index); - writer.writeBool(offsets[90], object.onlyIncludePinnedSources); - writer.writeLong(offsets[91], object.pagePreloadAmount); + writer.writeLong(offsets[82], object.novelFontSize); + writer.writeLong(offsets[83], object.novelGridSize); + writer.writeBool(offsets[84], object.novelLibraryDownloadedChapters); + writer.writeBool(offsets[85], object.novelLibraryLocalSource); + writer.writeBool(offsets[86], object.novelLibraryShowCategoryTabs); + writer.writeBool(offsets[87], object.novelLibraryShowContinueReadingButton); + writer.writeBool(offsets[88], object.novelLibraryShowLanguage); + writer.writeBool(offsets[89], object.novelLibraryShowNumbersOfItems); + writer.writeByte(offsets[90], object.novelTextAlign.index); + writer.writeBool(offsets[91], object.onlyIncludePinnedSources); + writer.writeLong(offsets[92], object.pagePreloadAmount); writer.writeObjectList( - offsets[92], + offsets[93], allOffsets, PersonalPageModeSchema.serialize, object.personalPageModeList, ); writer.writeObjectList( - offsets[93], + offsets[94], allOffsets, PersonalReaderModeSchema.serialize, object.personalReaderModeList, ); writer.writeObject( - offsets[94], + offsets[95], allOffsets, PlayerSubtitleSettingsSchema.serialize, object.playerSubtitleSettings, ); - writer.writeBool(offsets[95], object.pureBlackDarkMode); - writer.writeLong(offsets[96], object.relativeTimesTamps); - writer.writeBool(offsets[97], object.saveAsCBZArchive); - writer.writeByte(offsets[98], object.scaleType.index); - writer.writeBool(offsets[99], object.showPagesNumber); + writer.writeBool(offsets[96], object.pureBlackDarkMode); + writer.writeLong(offsets[97], object.relativeTimesTamps); + writer.writeBool(offsets[98], object.saveAsCBZArchive); + writer.writeByte(offsets[99], object.scaleType.index); + writer.writeBool(offsets[100], object.showPagesNumber); writer.writeObjectList( - offsets[100], + offsets[101], allOffsets, SortChapterSchema.serialize, object.sortChapterList, ); writer.writeObject( - offsets[101], + offsets[102], allOffsets, SortLibraryMangaSchema.serialize, object.sortLibraryAnime, ); writer.writeObject( - offsets[102], + offsets[103], allOffsets, SortLibraryMangaSchema.serialize, object.sortLibraryManga, ); writer.writeObject( - offsets[103], + offsets[104], allOffsets, SortLibraryMangaSchema.serialize, object.sortLibraryNovel, ); - writer.writeLong(offsets[104], object.startDatebackup); - writer.writeBool(offsets[105], object.themeIsDark); - writer.writeBool(offsets[106], object.updateProgressAfterReading); - writer.writeBool(offsets[107], object.useLibass); - writer.writeBool(offsets[108], object.usePageTapZones); - writer.writeString(offsets[109], object.userAgent); + writer.writeLong(offsets[105], object.startDatebackup); + writer.writeBool(offsets[106], object.themeIsDark); + writer.writeBool(offsets[107], object.updateProgressAfterReading); + writer.writeBool(offsets[108], object.useLibass); + writer.writeBool(offsets[109], object.usePageTapZones); + writer.writeString(offsets[110], object.userAgent); } Settings _settingsDeserialize( @@ -1286,110 +1298,111 @@ Settings _settingsDeserialize( fullScreenPlayer: reader.readBoolOrNull(offsets[51]), fullScreenReader: reader.readBoolOrNull(offsets[52]), hideItems: reader.readStringList(offsets[53]), + hwdecMode: reader.readStringOrNull(offsets[54]), id: id, - incognitoMode: reader.readBoolOrNull(offsets[54]), - libraryDownloadedChapters: reader.readBoolOrNull(offsets[55]), - libraryFilterAnimeBookMarkedType: reader.readLongOrNull(offsets[56]), - libraryFilterAnimeDownloadType: reader.readLongOrNull(offsets[57]), - libraryFilterAnimeStartedType: reader.readLongOrNull(offsets[58]), - libraryFilterAnimeUnreadType: reader.readLongOrNull(offsets[59]), - libraryFilterMangasBookMarkedType: reader.readLongOrNull(offsets[60]), - libraryFilterMangasDownloadType: reader.readLongOrNull(offsets[61]), - libraryFilterMangasStartedType: reader.readLongOrNull(offsets[62]), - libraryFilterMangasUnreadType: reader.readLongOrNull(offsets[63]), - libraryFilterNovelBookMarkedType: reader.readLongOrNull(offsets[64]), - libraryFilterNovelDownloadType: reader.readLongOrNull(offsets[65]), - libraryFilterNovelStartedType: reader.readLongOrNull(offsets[66]), - libraryFilterNovelUnreadType: reader.readLongOrNull(offsets[67]), - libraryLocalSource: reader.readBoolOrNull(offsets[68]), - libraryShowCategoryTabs: reader.readBoolOrNull(offsets[69]), - libraryShowContinueReadingButton: reader.readBoolOrNull(offsets[70]), - libraryShowLanguage: reader.readBoolOrNull(offsets[71]), - libraryShowNumbersOfItems: reader.readBoolOrNull(offsets[72]), + incognitoMode: reader.readBoolOrNull(offsets[55]), + libraryDownloadedChapters: reader.readBoolOrNull(offsets[56]), + libraryFilterAnimeBookMarkedType: reader.readLongOrNull(offsets[57]), + libraryFilterAnimeDownloadType: reader.readLongOrNull(offsets[58]), + libraryFilterAnimeStartedType: reader.readLongOrNull(offsets[59]), + libraryFilterAnimeUnreadType: reader.readLongOrNull(offsets[60]), + libraryFilterMangasBookMarkedType: reader.readLongOrNull(offsets[61]), + libraryFilterMangasDownloadType: reader.readLongOrNull(offsets[62]), + libraryFilterMangasStartedType: reader.readLongOrNull(offsets[63]), + libraryFilterMangasUnreadType: reader.readLongOrNull(offsets[64]), + libraryFilterNovelBookMarkedType: reader.readLongOrNull(offsets[65]), + libraryFilterNovelDownloadType: reader.readLongOrNull(offsets[66]), + libraryFilterNovelStartedType: reader.readLongOrNull(offsets[67]), + libraryFilterNovelUnreadType: reader.readLongOrNull(offsets[68]), + libraryLocalSource: reader.readBoolOrNull(offsets[69]), + libraryShowCategoryTabs: reader.readBoolOrNull(offsets[70]), + libraryShowContinueReadingButton: reader.readBoolOrNull(offsets[71]), + libraryShowLanguage: reader.readBoolOrNull(offsets[72]), + libraryShowNumbersOfItems: reader.readBoolOrNull(offsets[73]), mangaExtensionsRepo: reader.readObjectList( - offsets[74], + offsets[75], RepoSchema.deserialize, allOffsets, Repo(), ), - mangaGridSize: reader.readLongOrNull(offsets[75]), + mangaGridSize: reader.readLongOrNull(offsets[76]), mangaHomeDisplayType: _SettingsmangaHomeDisplayTypeValueEnumMap[ - reader.readByteOrNull(offsets[76])] ?? + reader.readByteOrNull(offsets[77])] ?? DisplayType.comfortableGrid, - markEpisodeAsSeenType: reader.readLongOrNull(offsets[77]), - navigationOrder: reader.readStringList(offsets[78]), + markEpisodeAsSeenType: reader.readLongOrNull(offsets[78]), + navigationOrder: reader.readStringList(offsets[79]), novelDisplayType: _SettingsnovelDisplayTypeValueEnumMap[ - reader.readByteOrNull(offsets[79])] ?? + reader.readByteOrNull(offsets[80])] ?? DisplayType.comfortableGrid, novelExtensionsRepo: reader.readObjectList( - offsets[80], + offsets[81], RepoSchema.deserialize, allOffsets, Repo(), ), - novelFontSize: reader.readLongOrNull(offsets[81]), - novelLibraryDownloadedChapters: reader.readBoolOrNull(offsets[83]), - novelLibraryLocalSource: reader.readBoolOrNull(offsets[84]), - novelLibraryShowCategoryTabs: reader.readBoolOrNull(offsets[85]), - novelLibraryShowContinueReadingButton: reader.readBoolOrNull(offsets[86]), - novelLibraryShowLanguage: reader.readBoolOrNull(offsets[87]), - novelLibraryShowNumbersOfItems: reader.readBoolOrNull(offsets[88]), + novelFontSize: reader.readLongOrNull(offsets[82]), + novelLibraryDownloadedChapters: reader.readBoolOrNull(offsets[84]), + novelLibraryLocalSource: reader.readBoolOrNull(offsets[85]), + novelLibraryShowCategoryTabs: reader.readBoolOrNull(offsets[86]), + novelLibraryShowContinueReadingButton: reader.readBoolOrNull(offsets[87]), + novelLibraryShowLanguage: reader.readBoolOrNull(offsets[88]), + novelLibraryShowNumbersOfItems: reader.readBoolOrNull(offsets[89]), novelTextAlign: _SettingsnovelTextAlignValueEnumMap[ - reader.readByteOrNull(offsets[89])] ?? + reader.readByteOrNull(offsets[90])] ?? NovelTextAlign.left, - onlyIncludePinnedSources: reader.readBoolOrNull(offsets[90]), - pagePreloadAmount: reader.readLongOrNull(offsets[91]), + onlyIncludePinnedSources: reader.readBoolOrNull(offsets[91]), + pagePreloadAmount: reader.readLongOrNull(offsets[92]), personalPageModeList: reader.readObjectList( - offsets[92], + offsets[93], PersonalPageModeSchema.deserialize, allOffsets, PersonalPageMode(), ), personalReaderModeList: reader.readObjectList( - offsets[93], + offsets[94], PersonalReaderModeSchema.deserialize, allOffsets, PersonalReaderMode(), ), playerSubtitleSettings: reader.readObjectOrNull( - offsets[94], + offsets[95], PlayerSubtitleSettingsSchema.deserialize, allOffsets, ), - pureBlackDarkMode: reader.readBoolOrNull(offsets[95]), - relativeTimesTamps: reader.readLongOrNull(offsets[96]), - saveAsCBZArchive: reader.readBoolOrNull(offsets[97]), + pureBlackDarkMode: reader.readBoolOrNull(offsets[96]), + relativeTimesTamps: reader.readLongOrNull(offsets[97]), + saveAsCBZArchive: reader.readBoolOrNull(offsets[98]), scaleType: - _SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offsets[98])] ?? + _SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offsets[99])] ?? ScaleType.fitScreen, - showPagesNumber: reader.readBoolOrNull(offsets[99]), + showPagesNumber: reader.readBoolOrNull(offsets[100]), sortChapterList: reader.readObjectList( - offsets[100], + offsets[101], SortChapterSchema.deserialize, allOffsets, SortChapter(), ), sortLibraryAnime: reader.readObjectOrNull( - offsets[101], - SortLibraryMangaSchema.deserialize, - allOffsets, - ), - sortLibraryManga: reader.readObjectOrNull( offsets[102], SortLibraryMangaSchema.deserialize, allOffsets, ), - sortLibraryNovel: reader.readObjectOrNull( + sortLibraryManga: reader.readObjectOrNull( offsets[103], SortLibraryMangaSchema.deserialize, allOffsets, ), - startDatebackup: reader.readLongOrNull(offsets[104]), - themeIsDark: reader.readBoolOrNull(offsets[105]), - updateProgressAfterReading: reader.readBoolOrNull(offsets[106]), - useLibass: reader.readBoolOrNull(offsets[107]), - usePageTapZones: reader.readBoolOrNull(offsets[108]), - userAgent: reader.readStringOrNull(offsets[109]), + sortLibraryNovel: reader.readObjectOrNull( + offsets[104], + SortLibraryMangaSchema.deserialize, + allOffsets, + ), + startDatebackup: reader.readLongOrNull(offsets[105]), + themeIsDark: reader.readBoolOrNull(offsets[106]), + updateProgressAfterReading: reader.readBoolOrNull(offsets[107]), + useLibass: reader.readBoolOrNull(offsets[108]), + usePageTapZones: reader.readBoolOrNull(offsets[109]), + userAgent: reader.readStringOrNull(offsets[110]), ); object.chapterFilterBookmarkedList = reader.readObjectList( @@ -1416,11 +1429,11 @@ Settings _settingsDeserialize( FilterScanlator(), ); object.locale = reader.readObjectOrNull( - offsets[73], + offsets[74], L10nLocaleSchema.deserialize, allOffsets, ); - object.novelGridSize = reader.readLongOrNull(offsets[82]); + object.novelGridSize = reader.readLongOrNull(offsets[83]); return object; } @@ -1604,11 +1617,11 @@ P _settingsDeserializeProp

( case 53: return (reader.readStringList(offset)) as P; case 54: - return (reader.readBoolOrNull(offset)) as P; + return (reader.readStringOrNull(offset)) as P; case 55: return (reader.readBoolOrNull(offset)) as P; case 56: - return (reader.readLongOrNull(offset)) as P; + return (reader.readBoolOrNull(offset)) as P; case 57: return (reader.readLongOrNull(offset)) as P; case 58: @@ -1632,7 +1645,7 @@ P _settingsDeserializeProp

( case 67: return (reader.readLongOrNull(offset)) as P; case 68: - return (reader.readBoolOrNull(offset)) as P; + return (reader.readLongOrNull(offset)) as P; case 69: return (reader.readBoolOrNull(offset)) as P; case 70: @@ -1642,45 +1655,45 @@ P _settingsDeserializeProp

( case 72: return (reader.readBoolOrNull(offset)) as P; case 73: + return (reader.readBoolOrNull(offset)) as P; + case 74: return (reader.readObjectOrNull( offset, L10nLocaleSchema.deserialize, allOffsets, )) as P; - case 74: + case 75: return (reader.readObjectList( offset, RepoSchema.deserialize, allOffsets, Repo(), )) as P; - case 75: - return (reader.readLongOrNull(offset)) as P; case 76: + return (reader.readLongOrNull(offset)) as P; + case 77: return (_SettingsmangaHomeDisplayTypeValueEnumMap[ reader.readByteOrNull(offset)] ?? DisplayType.comfortableGrid) as P; - case 77: - return (reader.readLongOrNull(offset)) as P; case 78: - return (reader.readStringList(offset)) as P; + return (reader.readLongOrNull(offset)) as P; case 79: + return (reader.readStringList(offset)) as P; + case 80: return (_SettingsnovelDisplayTypeValueEnumMap[ reader.readByteOrNull(offset)] ?? DisplayType.comfortableGrid) as P; - case 80: + case 81: return (reader.readObjectList( offset, RepoSchema.deserialize, allOffsets, Repo(), )) as P; - case 81: - return (reader.readLongOrNull(offset)) as P; case 82: return (reader.readLongOrNull(offset)) as P; case 83: - return (reader.readBoolOrNull(offset)) as P; + return (reader.readLongOrNull(offset)) as P; case 84: return (reader.readBoolOrNull(offset)) as P; case 85: @@ -1692,57 +1705,53 @@ P _settingsDeserializeProp

( case 88: return (reader.readBoolOrNull(offset)) as P; case 89: + return (reader.readBoolOrNull(offset)) as P; + case 90: return (_SettingsnovelTextAlignValueEnumMap[ reader.readByteOrNull(offset)] ?? NovelTextAlign.left) as P; - case 90: - return (reader.readBoolOrNull(offset)) as P; case 91: - return (reader.readLongOrNull(offset)) as P; + return (reader.readBoolOrNull(offset)) as P; case 92: + return (reader.readLongOrNull(offset)) as P; + case 93: return (reader.readObjectList( offset, PersonalPageModeSchema.deserialize, allOffsets, PersonalPageMode(), )) as P; - case 93: + case 94: return (reader.readObjectList( offset, PersonalReaderModeSchema.deserialize, allOffsets, PersonalReaderMode(), )) as P; - case 94: + case 95: return (reader.readObjectOrNull( offset, PlayerSubtitleSettingsSchema.deserialize, allOffsets, )) as P; - case 95: - return (reader.readBoolOrNull(offset)) as P; case 96: - return (reader.readLongOrNull(offset)) as P; - case 97: return (reader.readBoolOrNull(offset)) as P; + case 97: + return (reader.readLongOrNull(offset)) as P; case 98: + return (reader.readBoolOrNull(offset)) as P; + case 99: return (_SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offset)] ?? ScaleType.fitScreen) as P; - case 99: - return (reader.readBoolOrNull(offset)) as P; case 100: + return (reader.readBoolOrNull(offset)) as P; + case 101: return (reader.readObjectList( offset, SortChapterSchema.deserialize, allOffsets, SortChapter(), )) as P; - case 101: - return (reader.readObjectOrNull( - offset, - SortLibraryMangaSchema.deserialize, - allOffsets, - )) as P; case 102: return (reader.readObjectOrNull( offset, @@ -1756,9 +1765,13 @@ P _settingsDeserializeProp

( allOffsets, )) as P; case 104: - return (reader.readLongOrNull(offset)) as P; + return (reader.readObjectOrNull( + offset, + SortLibraryMangaSchema.deserialize, + allOffsets, + )) as P; case 105: - return (reader.readBoolOrNull(offset)) as P; + return (reader.readLongOrNull(offset)) as P; case 106: return (reader.readBoolOrNull(offset)) as P; case 107: @@ -1766,6 +1779,8 @@ P _settingsDeserializeProp

( case 108: return (reader.readBoolOrNull(offset)) as P; case 109: + return (reader.readBoolOrNull(offset)) as P; + case 110: return (reader.readStringOrNull(offset)) as P; default: throw IsarError('Unknown property with id $propertyId'); @@ -5863,6 +5878,153 @@ extension SettingsQueryFilter }); } + QueryBuilder hwdecModeIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'hwdecMode', + )); + }); + } + + QueryBuilder hwdecModeIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'hwdecMode', + )); + }); + } + + QueryBuilder hwdecModeEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'hwdecMode', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder hwdecModeGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'hwdecMode', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder hwdecModeLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'hwdecMode', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder hwdecModeBetween( + 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'hwdecMode', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder hwdecModeStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'hwdecMode', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder hwdecModeEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'hwdecMode', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder hwdecModeContains( + String value, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'hwdecMode', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder hwdecModeMatches( + String pattern, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'hwdecMode', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder hwdecModeIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'hwdecMode', + value: '', + )); + }); + } + + QueryBuilder + hwdecModeIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'hwdecMode', + value: '', + )); + }); + } + QueryBuilder idIsNull() { return QueryBuilder.apply(this, (query) { return query.addFilterCondition(const FilterCondition.isNull( @@ -9897,6 +10059,18 @@ extension SettingsQuerySortBy on QueryBuilder { }); } + QueryBuilder sortByHwdecMode() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'hwdecMode', Sort.asc); + }); + } + + QueryBuilder sortByHwdecModeDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'hwdecMode', Sort.desc); + }); + } + QueryBuilder sortByIncognitoMode() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'incognitoMode', Sort.asc); @@ -11027,6 +11201,18 @@ extension SettingsQuerySortThenBy }); } + QueryBuilder thenByHwdecMode() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'hwdecMode', Sort.asc); + }); + } + + QueryBuilder thenByHwdecModeDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'hwdecMode', Sort.desc); + }); + } + QueryBuilder thenById() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'id', Sort.asc); @@ -11919,6 +12105,13 @@ extension SettingsQueryWhereDistinct }); } + QueryBuilder distinctByHwdecMode( + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'hwdecMode', caseSensitive: caseSensitive); + }); + } + QueryBuilder distinctByIncognitoMode() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'incognitoMode'); @@ -12590,6 +12783,12 @@ extension SettingsQueryProperty }); } + QueryBuilder hwdecModeProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'hwdecMode'); + }); + } + QueryBuilder incognitoModeProperty() { return QueryBuilder.apply(this, (query) { return query.addPropertyName(r'incognitoMode'); diff --git a/lib/modules/anime/anime_player_view.dart b/lib/modules/anime/anime_player_view.dart index 5137b59a..28bdc2ae 100644 --- a/lib/modules/anime/anime_player_view.dart +++ b/lib/modules/anime/anime_player_view.dart @@ -183,7 +183,11 @@ class _AnimeStreamPageState extends riv.ConsumerState late final Player _player = Player( configuration: PlayerConfiguration(libass: useLibass), ); - late final VideoController _controller = VideoController(_player); + late final hwdecMode = ref.read(hwdecModeStateProvider()); + late final VideoController _controller = VideoController( + _player, + configuration: VideoControllerConfiguration(hwdec: hwdecMode), + ); late final _streamController = ref.read( animeStreamControllerProvider(episode: widget.episode).notifier, ); diff --git a/lib/modules/manga/download/providers/download_provider.g.dart b/lib/modules/manga/download/providers/download_provider.g.dart index 1ca575df..88e69271 100644 --- a/lib/modules/manga/download/providers/download_provider.g.dart +++ b/lib/modules/manga/download/providers/download_provider.g.dart @@ -158,7 +158,7 @@ class _AddDownloadToQueueProviderElement Chapter get chapter => (origin as AddDownloadToQueueProvider).chapter; } -String _$downloadChapterHash() => r'ee2f93aaa7fd64b46d5ce729d1e58ba20a6fa0fc'; +String _$downloadChapterHash() => r'199d0cba47ae8839c23def9c0b012f92472193e9'; /// See also [downloadChapter]. @ProviderFor(downloadChapter) diff --git a/lib/modules/more/about/providers/check_for_update.g.dart b/lib/modules/more/about/providers/check_for_update.g.dart index cab58dd9..a1f5b632 100644 --- a/lib/modules/more/about/providers/check_for_update.g.dart +++ b/lib/modules/more/about/providers/check_for_update.g.dart @@ -6,7 +6,7 @@ part of 'check_for_update.dart'; // RiverpodGenerator // ************************************************************************** -String _$checkForUpdateHash() => r'c59c08b12062030079f9592d907d1009b2681227'; +String _$checkForUpdateHash() => r'644316334ac3e95d37f54d7197d744c9de1260b6'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/modules/more/settings/player/player_screen.dart b/lib/modules/more/settings/player/player_screen.dart index 3ceced30..e9407515 100644 --- a/lib/modules/more/settings/player/player_screen.dart +++ b/lib/modules/more/settings/player/player_screen.dart @@ -26,6 +26,7 @@ class PlayerScreen extends ConsumerWidget { final enableAutoSkip = ref.watch(enableAutoSkipStateProvider); final aniSkipTimeoutLength = ref.watch(aniSkipTimeoutLengthStateProvider); final useLibass = ref.watch(useLibassStateProvider); + final hwdecMode = ref.watch(hwdecModeStateProvider(rawValue: true)); final fullScreenPlayer = ref.watch(fullScreenPlayerStateProvider); return Scaffold( @@ -467,6 +468,80 @@ class PlayerScreen extends ConsumerWidget { ref.read(fullScreenPlayerStateProvider.notifier).set(value); }, ), + ListTile( + onTap: () { + final values = [ + ("no", ""), + ("auto", ""), + ("d3d11va", "(Windows 8+)"), + ("d3d11va-copy", "(Windows 8+)"), + ("videotoolbox", "(iOS 9.0+)"), + ("videotoolbox-copy", "(iOS 9.0+)"), + ("nvdec", "(CUDA)"), + ("nvdec-copy", "(CUDA)"), + ("mediacodec", "- HW (Android)"), + ("mediacodec-copy", "- HW+ (Android)"), + ("crystalhd", ""), + ]; + showDialog( + context: context, + builder: (context) { + return AlertDialog( + title: Text(context.l10n.hwdec), + content: SizedBox( + width: context.width(0.8), + child: SuperListView.builder( + shrinkWrap: true, + itemCount: values.length, + itemBuilder: (context, index) { + return RadioListTile( + dense: true, + contentPadding: const EdgeInsets.all(0), + value: values[index].$1, + groupValue: hwdecMode, + onChanged: (value) { + ref + .read(hwdecModeStateProvider(rawValue: true).notifier) + .set(value!); + Navigator.pop(context); + }, + title: Row( + children: [ + Text( + "${values[index].$1} ${values[index].$2}", + ), + ], + ), + ); + }, + ), + ), + actions: [ + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + TextButton( + onPressed: () async { + Navigator.pop(context); + }, + child: Text( + context.l10n.cancel, + style: TextStyle(color: context.primaryColor), + ), + ), + ], + ), + ], + ); + }, + ); + }, + title: Text(context.l10n.hwdec), + subtitle: Text( + hwdecMode, + style: TextStyle(fontSize: 11, color: context.secondaryColor), + ), + ), ], ), ), diff --git a/lib/modules/more/settings/player/providers/player_state_provider.dart b/lib/modules/more/settings/player/providers/player_state_provider.dart index fd2859c3..0ba8e9a6 100644 --- a/lib/modules/more/settings/player/providers/player_state_provider.dart +++ b/lib/modules/more/settings/player/providers/player_state_provider.dart @@ -1,3 +1,4 @@ +import 'dart:io'; import 'dart:ui'; import 'package:mangayomi/main.dart'; @@ -181,3 +182,42 @@ class UseLibassState extends _$UseLibassState { ); } } + +final hwdecs = { + "no": ["all"], + "auto": ["all"], + "d3d11va": ["windows"], + "d3d11va-copy": ["windows"], + "videotoolbox": ["ios"], + "videotoolbox-copy": ["ios"], + "nvdec": ["all"], + "nvdec-copy": ["all"], + "mediacodec": ["android"], + "mediacodec-copy": ["android"], + "crystalhd": ["all"], +}; + +@riverpod +class HwdecModeState extends _$HwdecModeState { + @override + String build({bool rawValue = false}) { + final hwdecMode = isar.settings.getSync(227)!.hwdecMode ?? "auto"; + if (rawValue) { + return hwdecMode; + } + final hwdecSupport = hwdecs[hwdecMode] ?? []; + if (!hwdecSupport.contains("all") && + !hwdecSupport.contains(Platform.operatingSystem)) { + return Platform.isAndroid ? "auto-safe" : "auto"; + } + return hwdecMode; + } + + void set(String value) { + final settings = isar.settings.getSync(227); + state = value; + isar.writeTxnSync( + () => isar.settings.putSync(settings!..hwdecMode = value), + ); + } +} diff --git a/lib/modules/more/settings/player/providers/player_state_provider.g.dart b/lib/modules/more/settings/player/providers/player_state_provider.g.dart index c55b10cf..67236f59 100644 --- a/lib/modules/more/settings/player/providers/player_state_provider.g.dart +++ b/lib/modules/more/settings/player/providers/player_state_provider.g.dart @@ -175,5 +175,169 @@ final useLibassStateProvider = ); typedef _$UseLibassState = AutoDisposeNotifier; +String _$hwdecModeStateHash() => r'e8b8e2b378eb9ac687bd8dad5637a816ad33fedb'; + +/// Copied from Dart SDK +class _SystemHash { + _SystemHash._(); + + static int combine(int hash, int value) { + // ignore: parameter_assignments + hash = 0x1fffffff & (hash + value); + // ignore: parameter_assignments + hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10)); + return hash ^ (hash >> 6); + } + + static int finish(int hash) { + // ignore: parameter_assignments + hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3)); + // ignore: parameter_assignments + hash = hash ^ (hash >> 11); + return 0x1fffffff & (hash + ((0x00003fff & hash) << 15)); + } +} + +abstract class _$HwdecModeState extends BuildlessAutoDisposeNotifier { + late final bool rawValue; + + String build({ + bool rawValue = false, + }); +} + +/// See also [HwdecModeState]. +@ProviderFor(HwdecModeState) +const hwdecModeStateProvider = HwdecModeStateFamily(); + +/// See also [HwdecModeState]. +class HwdecModeStateFamily extends Family { + /// See also [HwdecModeState]. + const HwdecModeStateFamily(); + + /// See also [HwdecModeState]. + HwdecModeStateProvider call({ + bool rawValue = false, + }) { + return HwdecModeStateProvider( + rawValue: rawValue, + ); + } + + @override + HwdecModeStateProvider getProviderOverride( + covariant HwdecModeStateProvider provider, + ) { + return call( + rawValue: provider.rawValue, + ); + } + + static const Iterable? _dependencies = null; + + @override + Iterable? get dependencies => _dependencies; + + static const Iterable? _allTransitiveDependencies = null; + + @override + Iterable? get allTransitiveDependencies => + _allTransitiveDependencies; + + @override + String? get name => r'hwdecModeStateProvider'; +} + +/// See also [HwdecModeState]. +class HwdecModeStateProvider + extends AutoDisposeNotifierProviderImpl { + /// See also [HwdecModeState]. + HwdecModeStateProvider({ + bool rawValue = false, + }) : this._internal( + () => HwdecModeState()..rawValue = rawValue, + from: hwdecModeStateProvider, + name: r'hwdecModeStateProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$hwdecModeStateHash, + dependencies: HwdecModeStateFamily._dependencies, + allTransitiveDependencies: + HwdecModeStateFamily._allTransitiveDependencies, + rawValue: rawValue, + ); + + HwdecModeStateProvider._internal( + super._createNotifier, { + required super.name, + required super.dependencies, + required super.allTransitiveDependencies, + required super.debugGetCreateSourceHash, + required super.from, + required this.rawValue, + }) : super.internal(); + + final bool rawValue; + + @override + String runNotifierBuild( + covariant HwdecModeState notifier, + ) { + return notifier.build( + rawValue: rawValue, + ); + } + + @override + Override overrideWith(HwdecModeState Function() create) { + return ProviderOverride( + origin: this, + override: HwdecModeStateProvider._internal( + () => create()..rawValue = rawValue, + from: from, + name: null, + dependencies: null, + allTransitiveDependencies: null, + debugGetCreateSourceHash: null, + rawValue: rawValue, + ), + ); + } + + @override + AutoDisposeNotifierProviderElement createElement() { + return _HwdecModeStateProviderElement(this); + } + + @override + bool operator ==(Object other) { + return other is HwdecModeStateProvider && other.rawValue == rawValue; + } + + @override + int get hashCode { + var hash = _SystemHash.combine(0, runtimeType.hashCode); + hash = _SystemHash.combine(hash, rawValue.hashCode); + + return _SystemHash.finish(hash); + } +} + +@Deprecated('Will be removed in 3.0. Use Ref instead') +// ignore: unused_element +mixin HwdecModeStateRef on AutoDisposeNotifierProviderRef { + /// The parameter `rawValue` of this provider. + bool get rawValue; +} + +class _HwdecModeStateProviderElement + extends AutoDisposeNotifierProviderElement + with HwdecModeStateRef { + _HwdecModeStateProviderElement(super.provider); + + @override + bool get rawValue => (origin as HwdecModeStateProvider).rawValue; +} // ignore_for_file: type=lint // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package diff --git a/lib/services/aniskip.g.dart b/lib/services/aniskip.g.dart index b2e1defb..c05db920 100644 --- a/lib/services/aniskip.g.dart +++ b/lib/services/aniskip.g.dart @@ -6,7 +6,7 @@ part of 'aniskip.dart'; // RiverpodGenerator // ************************************************************************** -String _$aniSkipHash() => r'887869b54e2e151633efd46da83bde845e14f421'; +String _$aniSkipHash() => r'2e5d19b025a2207ff64da7bf7908450ea9e5ff8c'; /// See also [AniSkip]. @ProviderFor(AniSkip) diff --git a/lib/services/get_chapter_pages.g.dart b/lib/services/get_chapter_pages.g.dart index d80f6a2a..04e13652 100644 --- a/lib/services/get_chapter_pages.g.dart +++ b/lib/services/get_chapter_pages.g.dart @@ -6,7 +6,7 @@ part of 'get_chapter_pages.dart'; // RiverpodGenerator // ************************************************************************** -String _$getChapterPagesHash() => r'7ec8b6adb94e33df9b5374bd423f7864a4c2f8ef'; +String _$getChapterPagesHash() => r'69bdb90a1ec142dbdb069a675cfb13ad69e18998'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/services/get_video_list.g.dart b/lib/services/get_video_list.g.dart index 35d4a260..533d297d 100644 --- a/lib/services/get_video_list.g.dart +++ b/lib/services/get_video_list.g.dart @@ -6,7 +6,7 @@ part of 'get_video_list.dart'; // RiverpodGenerator // ************************************************************************** -String _$getVideoListHash() => r'bae6a3cbc064163148577d0646b87a3f16d44da7'; +String _$getVideoListHash() => r'1d34225b32d5c0475f06c7066792837d4b800800'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/services/trackers/anilist.g.dart b/lib/services/trackers/anilist.g.dart index 40610576..703c90a8 100644 --- a/lib/services/trackers/anilist.g.dart +++ b/lib/services/trackers/anilist.g.dart @@ -6,7 +6,7 @@ part of 'anilist.dart'; // RiverpodGenerator // ************************************************************************** -String _$anilistHash() => r'80c9c6e9028e8a8180795366729acbe6c248d9ce'; +String _$anilistHash() => r'd672e47052f0b40088dd477b7918dc1e06654b48'; /// Copied from Dart SDK class _SystemHash {