add auto fullscreen option to anime player

This commit is contained in:
Schnitzel5 2024-11-24 23:59:53 +01:00
parent 0546a2a1ea
commit 72a324ea7f
7 changed files with 293 additions and 150 deletions

View file

@ -205,6 +205,8 @@
"sync_confirm_download": "A full download will completely replace your current data with the remote one!", "sync_confirm_download": "A full download will completely replace your current data with the remote one!",
"dialog_confirm": "Confirm", "dialog_confirm": "Confirm",
"description": "Description", "description": "Description",
"full_screen_player": "Use Fullscreen",
"full_screen_player_info": "Automatically use fullscreen when playing a video.",
"episode_progress": "Progress: {n}", "episode_progress": "Progress: {n}",
"n_episodes": "{n} episodes", "n_episodes": "{n} episodes",
"manga_sources": "Manga Sources", "manga_sources": "Manga Sources",

View file

@ -153,6 +153,8 @@ class Settings {
double? defaultPlayBackSpeed; double? defaultPlayBackSpeed;
bool? fullScreenPlayer;
bool? updateProgressAfterReading; bool? updateProgressAfterReading;
bool? enableAniSkip; bool? enableAniSkip;
@ -257,6 +259,7 @@ class Settings {
this.defaultSkipIntroLength = 85, this.defaultSkipIntroLength = 85,
this.defaultDoubleTapToSkipLength = 10, this.defaultDoubleTapToSkipLength = 10,
this.defaultPlayBackSpeed = 1.0, this.defaultPlayBackSpeed = 1.0,
this.fullScreenPlayer = false,
this.updateProgressAfterReading = true, this.updateProgressAfterReading = true,
this.enableAniSkip, this.enableAniSkip,
this.enableAutoSkip, this.enableAutoSkip,
@ -405,6 +408,7 @@ class Settings {
defaultPlayBackSpeed = json['defaultPlayBackSpeed'] is double defaultPlayBackSpeed = json['defaultPlayBackSpeed'] is double
? json['defaultPlayBackSpeed'] ? json['defaultPlayBackSpeed']
: (json['defaultPlayBackSpeed'] as int).toDouble(); : (json['defaultPlayBackSpeed'] as int).toDouble();
fullScreenPlayer = json['fullScreenPlayer'];
updateProgressAfterReading = json['updateProgressAfterReading']; updateProgressAfterReading = json['updateProgressAfterReading'];
enableAniSkip = json['enableAniSkip']; enableAniSkip = json['enableAniSkip'];
enableAutoSkip = json['enableAutoSkip']; enableAutoSkip = json['enableAutoSkip'];
@ -509,6 +513,7 @@ class Settings {
'defaultSkipIntroLength': defaultSkipIntroLength, 'defaultSkipIntroLength': defaultSkipIntroLength,
'defaultDoubleTapToSkipLength': defaultDoubleTapToSkipLength, 'defaultDoubleTapToSkipLength': defaultDoubleTapToSkipLength,
'defaultPlayBackSpeed': defaultPlayBackSpeed, 'defaultPlayBackSpeed': defaultPlayBackSpeed,
'fullScreenPlayer': fullScreenPlayer,
'updateProgressAfterReading': updateProgressAfterReading, 'updateProgressAfterReading': updateProgressAfterReading,
'enableAniSkip': enableAniSkip, 'enableAniSkip': enableAniSkip,
'enableAutoSkip': enableAutoSkip, 'enableAutoSkip': enableAutoSkip,

View file

@ -257,217 +257,222 @@ const SettingsSchema = CollectionSchema(
name: r'flexSchemeColorIndex', name: r'flexSchemeColorIndex',
type: IsarType.long, type: IsarType.long,
), ),
r'fullScreenReader': PropertySchema( r'fullScreenPlayer': PropertySchema(
id: 45, id: 45,
name: r'fullScreenPlayer',
type: IsarType.bool,
),
r'fullScreenReader': PropertySchema(
id: 46,
name: r'fullScreenReader', name: r'fullScreenReader',
type: IsarType.bool, type: IsarType.bool,
), ),
r'incognitoMode': PropertySchema( r'incognitoMode': PropertySchema(
id: 46, id: 47,
name: r'incognitoMode', name: r'incognitoMode',
type: IsarType.bool, type: IsarType.bool,
), ),
r'libraryDownloadedChapters': PropertySchema( r'libraryDownloadedChapters': PropertySchema(
id: 47, id: 48,
name: r'libraryDownloadedChapters', name: r'libraryDownloadedChapters',
type: IsarType.bool, type: IsarType.bool,
), ),
r'libraryFilterAnimeBookMarkedType': PropertySchema( r'libraryFilterAnimeBookMarkedType': PropertySchema(
id: 48, id: 49,
name: r'libraryFilterAnimeBookMarkedType', name: r'libraryFilterAnimeBookMarkedType',
type: IsarType.long, type: IsarType.long,
), ),
r'libraryFilterAnimeDownloadType': PropertySchema( r'libraryFilterAnimeDownloadType': PropertySchema(
id: 49, id: 50,
name: r'libraryFilterAnimeDownloadType', name: r'libraryFilterAnimeDownloadType',
type: IsarType.long, type: IsarType.long,
), ),
r'libraryFilterAnimeStartedType': PropertySchema( r'libraryFilterAnimeStartedType': PropertySchema(
id: 50, id: 51,
name: r'libraryFilterAnimeStartedType', name: r'libraryFilterAnimeStartedType',
type: IsarType.long, type: IsarType.long,
), ),
r'libraryFilterAnimeUnreadType': PropertySchema( r'libraryFilterAnimeUnreadType': PropertySchema(
id: 51, id: 52,
name: r'libraryFilterAnimeUnreadType', name: r'libraryFilterAnimeUnreadType',
type: IsarType.long, type: IsarType.long,
), ),
r'libraryFilterMangasBookMarkedType': PropertySchema( r'libraryFilterMangasBookMarkedType': PropertySchema(
id: 52, id: 53,
name: r'libraryFilterMangasBookMarkedType', name: r'libraryFilterMangasBookMarkedType',
type: IsarType.long, type: IsarType.long,
), ),
r'libraryFilterMangasDownloadType': PropertySchema( r'libraryFilterMangasDownloadType': PropertySchema(
id: 53, id: 54,
name: r'libraryFilterMangasDownloadType', name: r'libraryFilterMangasDownloadType',
type: IsarType.long, type: IsarType.long,
), ),
r'libraryFilterMangasStartedType': PropertySchema( r'libraryFilterMangasStartedType': PropertySchema(
id: 54, id: 55,
name: r'libraryFilterMangasStartedType', name: r'libraryFilterMangasStartedType',
type: IsarType.long, type: IsarType.long,
), ),
r'libraryFilterMangasUnreadType': PropertySchema( r'libraryFilterMangasUnreadType': PropertySchema(
id: 55, id: 56,
name: r'libraryFilterMangasUnreadType', name: r'libraryFilterMangasUnreadType',
type: IsarType.long, type: IsarType.long,
), ),
r'libraryLocalSource': PropertySchema( r'libraryLocalSource': PropertySchema(
id: 56, id: 57,
name: r'libraryLocalSource', name: r'libraryLocalSource',
type: IsarType.bool, type: IsarType.bool,
), ),
r'libraryShowCategoryTabs': PropertySchema( r'libraryShowCategoryTabs': PropertySchema(
id: 57, id: 58,
name: r'libraryShowCategoryTabs', name: r'libraryShowCategoryTabs',
type: IsarType.bool, type: IsarType.bool,
), ),
r'libraryShowContinueReadingButton': PropertySchema( r'libraryShowContinueReadingButton': PropertySchema(
id: 58, id: 59,
name: r'libraryShowContinueReadingButton', name: r'libraryShowContinueReadingButton',
type: IsarType.bool, type: IsarType.bool,
), ),
r'libraryShowLanguage': PropertySchema( r'libraryShowLanguage': PropertySchema(
id: 59, id: 60,
name: r'libraryShowLanguage', name: r'libraryShowLanguage',
type: IsarType.bool, type: IsarType.bool,
), ),
r'libraryShowNumbersOfItems': PropertySchema( r'libraryShowNumbersOfItems': PropertySchema(
id: 60, id: 61,
name: r'libraryShowNumbersOfItems', name: r'libraryShowNumbersOfItems',
type: IsarType.bool, type: IsarType.bool,
), ),
r'locale': PropertySchema( r'locale': PropertySchema(
id: 61, id: 62,
name: r'locale', name: r'locale',
type: IsarType.object, type: IsarType.object,
target: r'L10nLocale', target: r'L10nLocale',
), ),
r'mangaGridSize': PropertySchema( r'mangaGridSize': PropertySchema(
id: 62, id: 63,
name: r'mangaGridSize', name: r'mangaGridSize',
type: IsarType.long, type: IsarType.long,
), ),
r'mangaHomeDisplayType': PropertySchema( r'mangaHomeDisplayType': PropertySchema(
id: 63, id: 64,
name: r'mangaHomeDisplayType', name: r'mangaHomeDisplayType',
type: IsarType.byte, type: IsarType.byte,
enumMap: _SettingsmangaHomeDisplayTypeEnumValueMap, enumMap: _SettingsmangaHomeDisplayTypeEnumValueMap,
), ),
r'markEpisodeAsSeenType': PropertySchema( r'markEpisodeAsSeenType': PropertySchema(
id: 64, id: 65,
name: r'markEpisodeAsSeenType', name: r'markEpisodeAsSeenType',
type: IsarType.long, type: IsarType.long,
), ),
r'onlyIncludePinnedSources': PropertySchema( r'onlyIncludePinnedSources': PropertySchema(
id: 65, id: 66,
name: r'onlyIncludePinnedSources', name: r'onlyIncludePinnedSources',
type: IsarType.bool, type: IsarType.bool,
), ),
r'pagePreloadAmount': PropertySchema( r'pagePreloadAmount': PropertySchema(
id: 66, id: 67,
name: r'pagePreloadAmount', name: r'pagePreloadAmount',
type: IsarType.long, type: IsarType.long,
), ),
r'personalPageModeList': PropertySchema( r'personalPageModeList': PropertySchema(
id: 67, id: 68,
name: r'personalPageModeList', name: r'personalPageModeList',
type: IsarType.objectList, type: IsarType.objectList,
target: r'PersonalPageMode', target: r'PersonalPageMode',
), ),
r'personalReaderModeList': PropertySchema( r'personalReaderModeList': PropertySchema(
id: 68, id: 69,
name: r'personalReaderModeList', name: r'personalReaderModeList',
type: IsarType.objectList, type: IsarType.objectList,
target: r'PersonalReaderMode', target: r'PersonalReaderMode',
), ),
r'playerSubtitleSettings': PropertySchema( r'playerSubtitleSettings': PropertySchema(
id: 69, id: 70,
name: r'playerSubtitleSettings', name: r'playerSubtitleSettings',
type: IsarType.object, type: IsarType.object,
target: r'PlayerSubtitleSettings', target: r'PlayerSubtitleSettings',
), ),
r'pureBlackDarkMode': PropertySchema( r'pureBlackDarkMode': PropertySchema(
id: 70, id: 71,
name: r'pureBlackDarkMode', name: r'pureBlackDarkMode',
type: IsarType.bool, type: IsarType.bool,
), ),
r'relativeTimesTamps': PropertySchema( r'relativeTimesTamps': PropertySchema(
id: 71, id: 72,
name: r'relativeTimesTamps', name: r'relativeTimesTamps',
type: IsarType.long, type: IsarType.long,
), ),
r'saveAsCBZArchive': PropertySchema( r'saveAsCBZArchive': PropertySchema(
id: 72, id: 73,
name: r'saveAsCBZArchive', name: r'saveAsCBZArchive',
type: IsarType.bool, type: IsarType.bool,
), ),
r'scaleType': PropertySchema( r'scaleType': PropertySchema(
id: 73, id: 74,
name: r'scaleType', name: r'scaleType',
type: IsarType.byte, type: IsarType.byte,
enumMap: _SettingsscaleTypeEnumValueMap, enumMap: _SettingsscaleTypeEnumValueMap,
), ),
r'showPagesNumber': PropertySchema( r'showPagesNumber': PropertySchema(
id: 74, id: 75,
name: r'showPagesNumber', name: r'showPagesNumber',
type: IsarType.bool, type: IsarType.bool,
), ),
r'sortChapterList': PropertySchema( r'sortChapterList': PropertySchema(
id: 75, id: 76,
name: r'sortChapterList', name: r'sortChapterList',
type: IsarType.objectList, type: IsarType.objectList,
target: r'SortChapter', target: r'SortChapter',
), ),
r'sortLibraryAnime': PropertySchema( r'sortLibraryAnime': PropertySchema(
id: 76, id: 77,
name: r'sortLibraryAnime', name: r'sortLibraryAnime',
type: IsarType.object, type: IsarType.object,
target: r'SortLibraryManga', target: r'SortLibraryManga',
), ),
r'sortLibraryManga': PropertySchema( r'sortLibraryManga': PropertySchema(
id: 77, id: 78,
name: r'sortLibraryManga', name: r'sortLibraryManga',
type: IsarType.object, type: IsarType.object,
target: r'SortLibraryManga', target: r'SortLibraryManga',
), ),
r'startDatebackup': PropertySchema( r'startDatebackup': PropertySchema(
id: 78, id: 79,
name: r'startDatebackup', name: r'startDatebackup',
type: IsarType.long, type: IsarType.long,
), ),
r'syncAfterReading': PropertySchema( r'syncAfterReading': PropertySchema(
id: 79, id: 80,
name: r'syncAfterReading', name: r'syncAfterReading',
type: IsarType.bool, type: IsarType.bool,
), ),
r'syncOnAppLaunch': PropertySchema( r'syncOnAppLaunch': PropertySchema(
id: 80, id: 81,
name: r'syncOnAppLaunch', name: r'syncOnAppLaunch',
type: IsarType.bool, type: IsarType.bool,
), ),
r'themeIsDark': PropertySchema( r'themeIsDark': PropertySchema(
id: 81, id: 82,
name: r'themeIsDark', name: r'themeIsDark',
type: IsarType.bool, type: IsarType.bool,
), ),
r'updateProgressAfterReading': PropertySchema( r'updateProgressAfterReading': PropertySchema(
id: 82, id: 83,
name: r'updateProgressAfterReading', name: r'updateProgressAfterReading',
type: IsarType.bool, type: IsarType.bool,
), ),
r'useLibass': PropertySchema( r'useLibass': PropertySchema(
id: 83, id: 84,
name: r'useLibass', name: r'useLibass',
type: IsarType.bool, type: IsarType.bool,
), ),
r'usePageTapZones': PropertySchema( r'usePageTapZones': PropertySchema(
id: 84, id: 85,
name: r'usePageTapZones', name: r'usePageTapZones',
type: IsarType.bool, type: IsarType.bool,
), ),
r'userAgent': PropertySchema( r'userAgent': PropertySchema(
id: 85, id: 86,
name: r'userAgent', name: r'userAgent',
type: IsarType.string, type: IsarType.string,
) )
@ -849,82 +854,83 @@ void _settingsSerialize(
); );
writer.writeDouble(offsets[43], object.flexColorSchemeBlendLevel); writer.writeDouble(offsets[43], object.flexColorSchemeBlendLevel);
writer.writeLong(offsets[44], object.flexSchemeColorIndex); writer.writeLong(offsets[44], object.flexSchemeColorIndex);
writer.writeBool(offsets[45], object.fullScreenReader); writer.writeBool(offsets[45], object.fullScreenPlayer);
writer.writeBool(offsets[46], object.incognitoMode); writer.writeBool(offsets[46], object.fullScreenReader);
writer.writeBool(offsets[47], object.libraryDownloadedChapters); writer.writeBool(offsets[47], object.incognitoMode);
writer.writeLong(offsets[48], object.libraryFilterAnimeBookMarkedType); writer.writeBool(offsets[48], object.libraryDownloadedChapters);
writer.writeLong(offsets[49], object.libraryFilterAnimeDownloadType); writer.writeLong(offsets[49], object.libraryFilterAnimeBookMarkedType);
writer.writeLong(offsets[50], object.libraryFilterAnimeStartedType); writer.writeLong(offsets[50], object.libraryFilterAnimeDownloadType);
writer.writeLong(offsets[51], object.libraryFilterAnimeUnreadType); writer.writeLong(offsets[51], object.libraryFilterAnimeStartedType);
writer.writeLong(offsets[52], object.libraryFilterMangasBookMarkedType); writer.writeLong(offsets[52], object.libraryFilterAnimeUnreadType);
writer.writeLong(offsets[53], object.libraryFilterMangasDownloadType); writer.writeLong(offsets[53], object.libraryFilterMangasBookMarkedType);
writer.writeLong(offsets[54], object.libraryFilterMangasStartedType); writer.writeLong(offsets[54], object.libraryFilterMangasDownloadType);
writer.writeLong(offsets[55], object.libraryFilterMangasUnreadType); writer.writeLong(offsets[55], object.libraryFilterMangasStartedType);
writer.writeBool(offsets[56], object.libraryLocalSource); writer.writeLong(offsets[56], object.libraryFilterMangasUnreadType);
writer.writeBool(offsets[57], object.libraryShowCategoryTabs); writer.writeBool(offsets[57], object.libraryLocalSource);
writer.writeBool(offsets[58], object.libraryShowContinueReadingButton); writer.writeBool(offsets[58], object.libraryShowCategoryTabs);
writer.writeBool(offsets[59], object.libraryShowLanguage); writer.writeBool(offsets[59], object.libraryShowContinueReadingButton);
writer.writeBool(offsets[60], object.libraryShowNumbersOfItems); writer.writeBool(offsets[60], object.libraryShowLanguage);
writer.writeBool(offsets[61], object.libraryShowNumbersOfItems);
writer.writeObject<L10nLocale>( writer.writeObject<L10nLocale>(
offsets[61], offsets[62],
allOffsets, allOffsets,
L10nLocaleSchema.serialize, L10nLocaleSchema.serialize,
object.locale, object.locale,
); );
writer.writeLong(offsets[62], object.mangaGridSize); writer.writeLong(offsets[63], object.mangaGridSize);
writer.writeByte(offsets[63], object.mangaHomeDisplayType.index); writer.writeByte(offsets[64], object.mangaHomeDisplayType.index);
writer.writeLong(offsets[64], object.markEpisodeAsSeenType); writer.writeLong(offsets[65], object.markEpisodeAsSeenType);
writer.writeBool(offsets[65], object.onlyIncludePinnedSources); writer.writeBool(offsets[66], object.onlyIncludePinnedSources);
writer.writeLong(offsets[66], object.pagePreloadAmount); writer.writeLong(offsets[67], object.pagePreloadAmount);
writer.writeObjectList<PersonalPageMode>( writer.writeObjectList<PersonalPageMode>(
offsets[67], offsets[68],
allOffsets, allOffsets,
PersonalPageModeSchema.serialize, PersonalPageModeSchema.serialize,
object.personalPageModeList, object.personalPageModeList,
); );
writer.writeObjectList<PersonalReaderMode>( writer.writeObjectList<PersonalReaderMode>(
offsets[68], offsets[69],
allOffsets, allOffsets,
PersonalReaderModeSchema.serialize, PersonalReaderModeSchema.serialize,
object.personalReaderModeList, object.personalReaderModeList,
); );
writer.writeObject<PlayerSubtitleSettings>( writer.writeObject<PlayerSubtitleSettings>(
offsets[69], offsets[70],
allOffsets, allOffsets,
PlayerSubtitleSettingsSchema.serialize, PlayerSubtitleSettingsSchema.serialize,
object.playerSubtitleSettings, object.playerSubtitleSettings,
); );
writer.writeBool(offsets[70], object.pureBlackDarkMode); writer.writeBool(offsets[71], object.pureBlackDarkMode);
writer.writeLong(offsets[71], object.relativeTimesTamps); writer.writeLong(offsets[72], object.relativeTimesTamps);
writer.writeBool(offsets[72], object.saveAsCBZArchive); writer.writeBool(offsets[73], object.saveAsCBZArchive);
writer.writeByte(offsets[73], object.scaleType.index); writer.writeByte(offsets[74], object.scaleType.index);
writer.writeBool(offsets[74], object.showPagesNumber); writer.writeBool(offsets[75], object.showPagesNumber);
writer.writeObjectList<SortChapter>( writer.writeObjectList<SortChapter>(
offsets[75], offsets[76],
allOffsets, allOffsets,
SortChapterSchema.serialize, SortChapterSchema.serialize,
object.sortChapterList, object.sortChapterList,
); );
writer.writeObject<SortLibraryManga>( writer.writeObject<SortLibraryManga>(
offsets[76], offsets[77],
allOffsets, allOffsets,
SortLibraryMangaSchema.serialize, SortLibraryMangaSchema.serialize,
object.sortLibraryAnime, object.sortLibraryAnime,
); );
writer.writeObject<SortLibraryManga>( writer.writeObject<SortLibraryManga>(
offsets[77], offsets[78],
allOffsets, allOffsets,
SortLibraryMangaSchema.serialize, SortLibraryMangaSchema.serialize,
object.sortLibraryManga, object.sortLibraryManga,
); );
writer.writeLong(offsets[78], object.startDatebackup); writer.writeLong(offsets[79], object.startDatebackup);
writer.writeBool(offsets[79], object.syncAfterReading); writer.writeBool(offsets[80], object.syncAfterReading);
writer.writeBool(offsets[80], object.syncOnAppLaunch); writer.writeBool(offsets[81], object.syncOnAppLaunch);
writer.writeBool(offsets[81], object.themeIsDark); writer.writeBool(offsets[82], object.themeIsDark);
writer.writeBool(offsets[82], object.updateProgressAfterReading); writer.writeBool(offsets[83], object.updateProgressAfterReading);
writer.writeBool(offsets[83], object.useLibass); writer.writeBool(offsets[84], object.useLibass);
writer.writeBool(offsets[84], object.usePageTapZones); writer.writeBool(offsets[85], object.usePageTapZones);
writer.writeString(offsets[85], object.userAgent); writer.writeString(offsets[86], object.userAgent);
} }
Settings _settingsDeserialize( Settings _settingsDeserialize(
@ -1017,78 +1023,79 @@ Settings _settingsDeserialize(
enableCustomColorFilter: reader.readBoolOrNull(offsets[41]), enableCustomColorFilter: reader.readBoolOrNull(offsets[41]),
flexColorSchemeBlendLevel: reader.readDoubleOrNull(offsets[43]), flexColorSchemeBlendLevel: reader.readDoubleOrNull(offsets[43]),
flexSchemeColorIndex: reader.readLongOrNull(offsets[44]), flexSchemeColorIndex: reader.readLongOrNull(offsets[44]),
fullScreenReader: reader.readBoolOrNull(offsets[45]), fullScreenPlayer: reader.readBoolOrNull(offsets[45]),
fullScreenReader: reader.readBoolOrNull(offsets[46]),
id: id, id: id,
incognitoMode: reader.readBoolOrNull(offsets[46]), incognitoMode: reader.readBoolOrNull(offsets[47]),
libraryDownloadedChapters: reader.readBoolOrNull(offsets[47]), libraryDownloadedChapters: reader.readBoolOrNull(offsets[48]),
libraryFilterAnimeBookMarkedType: reader.readLongOrNull(offsets[48]), libraryFilterAnimeBookMarkedType: reader.readLongOrNull(offsets[49]),
libraryFilterAnimeDownloadType: reader.readLongOrNull(offsets[49]), libraryFilterAnimeDownloadType: reader.readLongOrNull(offsets[50]),
libraryFilterAnimeStartedType: reader.readLongOrNull(offsets[50]), libraryFilterAnimeStartedType: reader.readLongOrNull(offsets[51]),
libraryFilterAnimeUnreadType: reader.readLongOrNull(offsets[51]), libraryFilterAnimeUnreadType: reader.readLongOrNull(offsets[52]),
libraryFilterMangasBookMarkedType: reader.readLongOrNull(offsets[52]), libraryFilterMangasBookMarkedType: reader.readLongOrNull(offsets[53]),
libraryFilterMangasDownloadType: reader.readLongOrNull(offsets[53]), libraryFilterMangasDownloadType: reader.readLongOrNull(offsets[54]),
libraryFilterMangasStartedType: reader.readLongOrNull(offsets[54]), libraryFilterMangasStartedType: reader.readLongOrNull(offsets[55]),
libraryFilterMangasUnreadType: reader.readLongOrNull(offsets[55]), libraryFilterMangasUnreadType: reader.readLongOrNull(offsets[56]),
libraryLocalSource: reader.readBoolOrNull(offsets[56]), libraryLocalSource: reader.readBoolOrNull(offsets[57]),
libraryShowCategoryTabs: reader.readBoolOrNull(offsets[57]), libraryShowCategoryTabs: reader.readBoolOrNull(offsets[58]),
libraryShowContinueReadingButton: reader.readBoolOrNull(offsets[58]), libraryShowContinueReadingButton: reader.readBoolOrNull(offsets[59]),
libraryShowLanguage: reader.readBoolOrNull(offsets[59]), libraryShowLanguage: reader.readBoolOrNull(offsets[60]),
libraryShowNumbersOfItems: reader.readBoolOrNull(offsets[60]), libraryShowNumbersOfItems: reader.readBoolOrNull(offsets[61]),
mangaGridSize: reader.readLongOrNull(offsets[62]), mangaGridSize: reader.readLongOrNull(offsets[63]),
mangaHomeDisplayType: _SettingsmangaHomeDisplayTypeValueEnumMap[ mangaHomeDisplayType: _SettingsmangaHomeDisplayTypeValueEnumMap[
reader.readByteOrNull(offsets[63])] ?? reader.readByteOrNull(offsets[64])] ??
DisplayType.comfortableGrid, DisplayType.comfortableGrid,
markEpisodeAsSeenType: reader.readLongOrNull(offsets[64]), markEpisodeAsSeenType: reader.readLongOrNull(offsets[65]),
onlyIncludePinnedSources: reader.readBoolOrNull(offsets[65]), onlyIncludePinnedSources: reader.readBoolOrNull(offsets[66]),
pagePreloadAmount: reader.readLongOrNull(offsets[66]), pagePreloadAmount: reader.readLongOrNull(offsets[67]),
personalPageModeList: reader.readObjectList<PersonalPageMode>( personalPageModeList: reader.readObjectList<PersonalPageMode>(
offsets[67], offsets[68],
PersonalPageModeSchema.deserialize, PersonalPageModeSchema.deserialize,
allOffsets, allOffsets,
PersonalPageMode(), PersonalPageMode(),
), ),
personalReaderModeList: reader.readObjectList<PersonalReaderMode>( personalReaderModeList: reader.readObjectList<PersonalReaderMode>(
offsets[68], offsets[69],
PersonalReaderModeSchema.deserialize, PersonalReaderModeSchema.deserialize,
allOffsets, allOffsets,
PersonalReaderMode(), PersonalReaderMode(),
), ),
playerSubtitleSettings: reader.readObjectOrNull<PlayerSubtitleSettings>( playerSubtitleSettings: reader.readObjectOrNull<PlayerSubtitleSettings>(
offsets[69], offsets[70],
PlayerSubtitleSettingsSchema.deserialize, PlayerSubtitleSettingsSchema.deserialize,
allOffsets, allOffsets,
), ),
pureBlackDarkMode: reader.readBoolOrNull(offsets[70]), pureBlackDarkMode: reader.readBoolOrNull(offsets[71]),
relativeTimesTamps: reader.readLongOrNull(offsets[71]), relativeTimesTamps: reader.readLongOrNull(offsets[72]),
saveAsCBZArchive: reader.readBoolOrNull(offsets[72]), saveAsCBZArchive: reader.readBoolOrNull(offsets[73]),
scaleType: scaleType:
_SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offsets[73])] ?? _SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offsets[74])] ??
ScaleType.fitScreen, ScaleType.fitScreen,
showPagesNumber: reader.readBoolOrNull(offsets[74]), showPagesNumber: reader.readBoolOrNull(offsets[75]),
sortChapterList: reader.readObjectList<SortChapter>( sortChapterList: reader.readObjectList<SortChapter>(
offsets[75], offsets[76],
SortChapterSchema.deserialize, SortChapterSchema.deserialize,
allOffsets, allOffsets,
SortChapter(), SortChapter(),
), ),
sortLibraryAnime: reader.readObjectOrNull<SortLibraryManga>( sortLibraryAnime: reader.readObjectOrNull<SortLibraryManga>(
offsets[76],
SortLibraryMangaSchema.deserialize,
allOffsets,
),
sortLibraryManga: reader.readObjectOrNull<SortLibraryManga>(
offsets[77], offsets[77],
SortLibraryMangaSchema.deserialize, SortLibraryMangaSchema.deserialize,
allOffsets, allOffsets,
), ),
startDatebackup: reader.readLongOrNull(offsets[78]), sortLibraryManga: reader.readObjectOrNull<SortLibraryManga>(
syncAfterReading: reader.readBoolOrNull(offsets[79]), offsets[78],
syncOnAppLaunch: reader.readBoolOrNull(offsets[80]), SortLibraryMangaSchema.deserialize,
themeIsDark: reader.readBoolOrNull(offsets[81]), allOffsets,
updateProgressAfterReading: reader.readBoolOrNull(offsets[82]), ),
useLibass: reader.readBoolOrNull(offsets[83]), startDatebackup: reader.readLongOrNull(offsets[79]),
usePageTapZones: reader.readBoolOrNull(offsets[84]), syncAfterReading: reader.readBoolOrNull(offsets[80]),
userAgent: reader.readStringOrNull(offsets[85]), syncOnAppLaunch: reader.readBoolOrNull(offsets[81]),
themeIsDark: reader.readBoolOrNull(offsets[82]),
updateProgressAfterReading: reader.readBoolOrNull(offsets[83]),
useLibass: reader.readBoolOrNull(offsets[84]),
usePageTapZones: reader.readBoolOrNull(offsets[85]),
userAgent: reader.readStringOrNull(offsets[86]),
); );
object.chapterFilterBookmarkedList = object.chapterFilterBookmarkedList =
reader.readObjectList<ChapterFilterBookmarked>( reader.readObjectList<ChapterFilterBookmarked>(
@ -1110,7 +1117,7 @@ Settings _settingsDeserialize(
FilterScanlator(), FilterScanlator(),
); );
object.locale = reader.readObjectOrNull<L10nLocale>( object.locale = reader.readObjectOrNull<L10nLocale>(
offsets[61], offsets[62],
L10nLocaleSchema.deserialize, L10nLocaleSchema.deserialize,
allOffsets, allOffsets,
); );
@ -1276,7 +1283,7 @@ P _settingsDeserializeProp<P>(
case 47: case 47:
return (reader.readBoolOrNull(offset)) as P; return (reader.readBoolOrNull(offset)) as P;
case 48: case 48:
return (reader.readLongOrNull(offset)) as P; return (reader.readBoolOrNull(offset)) as P;
case 49: case 49:
return (reader.readLongOrNull(offset)) as P; return (reader.readLongOrNull(offset)) as P;
case 50: case 50:
@ -1292,7 +1299,7 @@ P _settingsDeserializeProp<P>(
case 55: case 55:
return (reader.readLongOrNull(offset)) as P; return (reader.readLongOrNull(offset)) as P;
case 56: case 56:
return (reader.readBoolOrNull(offset)) as P; return (reader.readLongOrNull(offset)) as P;
case 57: case 57:
return (reader.readBoolOrNull(offset)) as P; return (reader.readBoolOrNull(offset)) as P;
case 58: case 58:
@ -1302,67 +1309,63 @@ P _settingsDeserializeProp<P>(
case 60: case 60:
return (reader.readBoolOrNull(offset)) as P; return (reader.readBoolOrNull(offset)) as P;
case 61: case 61:
return (reader.readBoolOrNull(offset)) as P;
case 62:
return (reader.readObjectOrNull<L10nLocale>( return (reader.readObjectOrNull<L10nLocale>(
offset, offset,
L10nLocaleSchema.deserialize, L10nLocaleSchema.deserialize,
allOffsets, allOffsets,
)) as P; )) as P;
case 62:
return (reader.readLongOrNull(offset)) as P;
case 63: case 63:
return (reader.readLongOrNull(offset)) as P;
case 64:
return (_SettingsmangaHomeDisplayTypeValueEnumMap[ return (_SettingsmangaHomeDisplayTypeValueEnumMap[
reader.readByteOrNull(offset)] ?? reader.readByteOrNull(offset)] ??
DisplayType.comfortableGrid) as P; DisplayType.comfortableGrid) as P;
case 64:
return (reader.readLongOrNull(offset)) as P;
case 65: case 65:
return (reader.readBoolOrNull(offset)) as P;
case 66:
return (reader.readLongOrNull(offset)) as P; return (reader.readLongOrNull(offset)) as P;
case 66:
return (reader.readBoolOrNull(offset)) as P;
case 67: case 67:
return (reader.readLongOrNull(offset)) as P;
case 68:
return (reader.readObjectList<PersonalPageMode>( return (reader.readObjectList<PersonalPageMode>(
offset, offset,
PersonalPageModeSchema.deserialize, PersonalPageModeSchema.deserialize,
allOffsets, allOffsets,
PersonalPageMode(), PersonalPageMode(),
)) as P; )) as P;
case 68: case 69:
return (reader.readObjectList<PersonalReaderMode>( return (reader.readObjectList<PersonalReaderMode>(
offset, offset,
PersonalReaderModeSchema.deserialize, PersonalReaderModeSchema.deserialize,
allOffsets, allOffsets,
PersonalReaderMode(), PersonalReaderMode(),
)) as P; )) as P;
case 69: case 70:
return (reader.readObjectOrNull<PlayerSubtitleSettings>( return (reader.readObjectOrNull<PlayerSubtitleSettings>(
offset, offset,
PlayerSubtitleSettingsSchema.deserialize, PlayerSubtitleSettingsSchema.deserialize,
allOffsets, allOffsets,
)) as P; )) as P;
case 70:
return (reader.readBoolOrNull(offset)) as P;
case 71: case 71:
return (reader.readLongOrNull(offset)) as P;
case 72:
return (reader.readBoolOrNull(offset)) as P; return (reader.readBoolOrNull(offset)) as P;
case 72:
return (reader.readLongOrNull(offset)) as P;
case 73: case 73:
return (reader.readBoolOrNull(offset)) as P;
case 74:
return (_SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offset)] ?? return (_SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offset)] ??
ScaleType.fitScreen) as P; ScaleType.fitScreen) as P;
case 74:
return (reader.readBoolOrNull(offset)) as P;
case 75: case 75:
return (reader.readBoolOrNull(offset)) as P;
case 76:
return (reader.readObjectList<SortChapter>( return (reader.readObjectList<SortChapter>(
offset, offset,
SortChapterSchema.deserialize, SortChapterSchema.deserialize,
allOffsets, allOffsets,
SortChapter(), SortChapter(),
)) as P; )) as P;
case 76:
return (reader.readObjectOrNull<SortLibraryManga>(
offset,
SortLibraryMangaSchema.deserialize,
allOffsets,
)) as P;
case 77: case 77:
return (reader.readObjectOrNull<SortLibraryManga>( return (reader.readObjectOrNull<SortLibraryManga>(
offset, offset,
@ -1370,9 +1373,13 @@ P _settingsDeserializeProp<P>(
allOffsets, allOffsets,
)) as P; )) as P;
case 78: case 78:
return (reader.readLongOrNull(offset)) as P; return (reader.readObjectOrNull<SortLibraryManga>(
offset,
SortLibraryMangaSchema.deserialize,
allOffsets,
)) as P;
case 79: case 79:
return (reader.readBoolOrNull(offset)) as P; return (reader.readLongOrNull(offset)) as P;
case 80: case 80:
return (reader.readBoolOrNull(offset)) as P; return (reader.readBoolOrNull(offset)) as P;
case 81: case 81:
@ -1384,6 +1391,8 @@ P _settingsDeserializeProp<P>(
case 84: case 84:
return (reader.readBoolOrNull(offset)) as P; return (reader.readBoolOrNull(offset)) as P;
case 85: case 85:
return (reader.readBoolOrNull(offset)) as P;
case 86:
return (reader.readStringOrNull(offset)) as P; return (reader.readStringOrNull(offset)) as P;
default: default:
throw IsarError('Unknown property with id $propertyId'); throw IsarError('Unknown property with id $propertyId');
@ -4878,6 +4887,34 @@ extension SettingsQueryFilter
}); });
} }
QueryBuilder<Settings, Settings, QAfterFilterCondition>
fullScreenPlayerIsNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNull(
property: r'fullScreenPlayer',
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
fullScreenPlayerIsNotNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNotNull(
property: r'fullScreenPlayer',
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
fullScreenPlayerEqualTo(bool? value) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'fullScreenPlayer',
value: value,
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition> QueryBuilder<Settings, Settings, QAfterFilterCondition>
fullScreenReaderIsNull() { fullScreenReaderIsNull() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
@ -7689,6 +7726,18 @@ extension SettingsQuerySortBy on QueryBuilder<Settings, Settings, QSortBy> {
}); });
} }
QueryBuilder<Settings, Settings, QAfterSortBy> sortByFullScreenPlayer() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'fullScreenPlayer', Sort.asc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> sortByFullScreenPlayerDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'fullScreenPlayer', Sort.desc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> sortByFullScreenReader() { QueryBuilder<Settings, Settings, QAfterSortBy> sortByFullScreenReader() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'fullScreenReader', Sort.asc); return query.addSortBy(r'fullScreenReader', Sort.asc);
@ -8589,6 +8638,18 @@ extension SettingsQuerySortThenBy
}); });
} }
QueryBuilder<Settings, Settings, QAfterSortBy> thenByFullScreenPlayer() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'fullScreenPlayer', Sort.asc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> thenByFullScreenPlayerDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'fullScreenPlayer', Sort.desc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> thenByFullScreenReader() { QueryBuilder<Settings, Settings, QAfterSortBy> thenByFullScreenReader() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'fullScreenReader', Sort.asc); return query.addSortBy(r'fullScreenReader', Sort.asc);
@ -9285,6 +9346,12 @@ extension SettingsQueryWhereDistinct
}); });
} }
QueryBuilder<Settings, Settings, QDistinct> distinctByFullScreenPlayer() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'fullScreenPlayer');
});
}
QueryBuilder<Settings, Settings, QDistinct> distinctByFullScreenReader() { QueryBuilder<Settings, Settings, QDistinct> distinctByFullScreenReader() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'fullScreenReader'); return query.addDistinctBy(r'fullScreenReader');
@ -9817,6 +9884,12 @@ extension SettingsQueryProperty
}); });
} }
QueryBuilder<Settings, bool?, QQueryOperations> fullScreenPlayerProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'fullScreenPlayer');
});
}
QueryBuilder<Settings, bool?, QQueryOperations> fullScreenReaderProperty() { QueryBuilder<Settings, bool?, QQueryOperations> fullScreenReaderProperty() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'fullScreenReader'); return query.addPropertyName(r'fullScreenReader');

View file

@ -210,6 +210,12 @@ class _AnimeStreamPageState extends riv.ConsumerState<AnimeStreamPage>
_player.stream.completed.listen( _player.stream.completed.listen(
(val) async { (val) async {
if (_streamController.getEpisodeIndex().$1 != 0 && val == true) { if (_streamController.getEpisodeIndex().$1 != 0 && val == true) {
if (isDesktop) {
final isFullScreen = await windowManager.isFullScreen();
if (isFullScreen) {
await setFullScreen(value: false);
}
}
if (mounted) { if (mounted) {
pushReplacementMangaReaderView( pushReplacementMangaReaderView(
context: context, context: context,
@ -243,6 +249,9 @@ class _AnimeStreamPageState extends riv.ConsumerState<AnimeStreamPage>
_initAniSkip(); _initAniSkip();
}, },
); );
if (isDesktop) {
setFullScreen(value: ref.read(fullScreenPlayerStateProvider));
}
super.initState(); super.initState();
} }
@ -737,6 +746,12 @@ class _AnimeStreamPageState extends riv.ConsumerState<AnimeStreamPage>
if (hasPrevEpisode) if (hasPrevEpisode)
IconButton( IconButton(
onPressed: () async { onPressed: () async {
if (isDesktop) {
final isFullScreen = await windowManager.isFullScreen();
if (isFullScreen) {
await setFullScreen(value: false);
}
}
if (context.mounted) { if (context.mounted) {
pushReplacementMangaReaderView( pushReplacementMangaReaderView(
context: context, context: context,
@ -754,6 +769,12 @@ class _AnimeStreamPageState extends riv.ConsumerState<AnimeStreamPage>
if (hasNextEpisode) if (hasNextEpisode)
IconButton( IconButton(
onPressed: () async { onPressed: () async {
if (isDesktop) {
final isFullScreen = await windowManager.isFullScreen();
if (isFullScreen) {
await setFullScreen(value: false);
}
}
if (context.mounted) { if (context.mounted) {
pushReplacementMangaReaderView( pushReplacementMangaReaderView(
context: context, context: context,

View file

@ -20,6 +20,7 @@ class PlayerScreen extends ConsumerWidget {
final enableAutoSkip = ref.watch(enableAutoSkipStateProvider); final enableAutoSkip = ref.watch(enableAutoSkipStateProvider);
final aniSkipTimeoutLength = ref.watch(aniSkipTimeoutLengthStateProvider); final aniSkipTimeoutLength = ref.watch(aniSkipTimeoutLengthStateProvider);
final useLibass = ref.watch(useLibassStateProvider); final useLibass = ref.watch(useLibassStateProvider);
final fullScreenPlayer = ref.watch(fullScreenPlayerStateProvider);
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text(context.l10n.player), title: Text(context.l10n.player),
@ -372,6 +373,15 @@ class PlayerScreen extends ConsumerWidget {
), ),
], ],
), ),
SwitchListTile(
value: fullScreenPlayer,
title: Text(context.l10n.full_screen_player),
subtitle: Text(context.l10n.full_screen_player_info,
style:
TextStyle(fontSize: 11, color: context.secondaryColor)),
onChanged: (value) {
ref.read(fullScreenPlayerStateProvider.notifier).set(value);
}),
], ],
), ),
), ),

View file

@ -64,6 +64,21 @@ class DefaultPlayBackSpeedState extends _$DefaultPlayBackSpeedState {
} }
} }
@riverpod
class FullScreenPlayerState extends _$FullScreenPlayerState {
@override
bool build() {
return isar.settings.getSync(227)!.fullScreenPlayer ?? false;
}
void set(bool value) {
final settings = isar.settings.getSync(227);
state = value;
isar.writeTxnSync(
() => isar.settings.putSync(settings!..fullScreenPlayer = value));
}
}
@riverpod @riverpod
class EnableAniSkipState extends _$EnableAniSkipState { class EnableAniSkipState extends _$EnableAniSkipState {
@override @override

View file

@ -74,6 +74,23 @@ final defaultPlayBackSpeedStateProvider =
); );
typedef _$DefaultPlayBackSpeedState = AutoDisposeNotifier<double>; typedef _$DefaultPlayBackSpeedState = AutoDisposeNotifier<double>;
String _$fullScreenPlayerStateHash() =>
r'c041e3caa51c8320a3f136c19890120b38bb86be';
/// See also [FullScreenPlayerState].
@ProviderFor(FullScreenPlayerState)
final fullScreenPlayerStateProvider =
AutoDisposeNotifierProvider<FullScreenPlayerState, bool>.internal(
FullScreenPlayerState.new,
name: r'fullScreenPlayerStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$fullScreenPlayerStateHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$FullScreenPlayerState = AutoDisposeNotifier<bool>;
String _$enableAniSkipStateHash() => String _$enableAniSkipStateHash() =>
r'1b448453e54f2a261820d40ca2d82971d165372a'; r'1b448453e54f2a261820d40ca2d82971d165372a';