added option to disable merged library navigation

This commit is contained in:
Schnitzel5 2025-07-03 02:44:15 +02:00
parent b4da640df8
commit c680427c0c
23 changed files with 325 additions and 144 deletions

View file

@ -479,5 +479,6 @@
"track_library_add_confirm": "Add tracked item to local library",
"track_library_not_logged": "Login to the corresponding tracker to use this feature!",
"track_library_switch": "Switch to another tracker",
"go_back": "Go back"
"go_back": "Go back",
"merge_library_nav_mobile": "Merge library navigation on mobile"
}

View file

@ -2999,6 +2999,12 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'Go back'**
String get go_back;
/// No description provided for @merge_library_nav_mobile.
///
/// In en, this message translates to:
/// **'Merge library navigation on mobile'**
String get merge_library_nav_mobile;
}
class _AppLocalizationsDelegate

View file

@ -1533,4 +1533,7 @@ class AppLocalizationsAr extends AppLocalizations {
@override
String get go_back => 'Go back';
@override
String get merge_library_nav_mobile => 'Merge library navigation on mobile';
}

View file

@ -1546,4 +1546,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get go_back => 'Zurück';
@override
String get merge_library_nav_mobile => 'Merge library navigation on mobile';
}

View file

@ -1533,4 +1533,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get go_back => 'Go back';
@override
String get merge_library_nav_mobile => 'Merge library navigation on mobile';
}

View file

@ -1550,6 +1550,9 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get go_back => 'Go back';
@override
String get merge_library_nav_mobile => 'Merge library navigation on mobile';
}
/// The translations for Spanish Castilian, as used in Latin America and the Caribbean (`es_419`).

View file

@ -1555,4 +1555,7 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get go_back => 'Go back';
@override
String get merge_library_nav_mobile => 'Merge library navigation on mobile';
}

View file

@ -1539,4 +1539,7 @@ class AppLocalizationsId extends AppLocalizations {
@override
String get go_back => 'Go back';
@override
String get merge_library_nav_mobile => 'Merge library navigation on mobile';
}

View file

@ -1549,4 +1549,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override
String get go_back => 'Go back';
@override
String get merge_library_nav_mobile => 'Merge library navigation on mobile';
}

View file

@ -1547,6 +1547,9 @@ class AppLocalizationsPt extends AppLocalizations {
@override
String get go_back => 'Go back';
@override
String get merge_library_nav_mobile => 'Merge library navigation on mobile';
}
/// The translations for Portuguese, as used in Brazil (`pt_BR`).

View file

@ -1549,4 +1549,7 @@ class AppLocalizationsRu extends AppLocalizations {
@override
String get go_back => 'Go back';
@override
String get merge_library_nav_mobile => 'Merge library navigation on mobile';
}

View file

@ -1534,4 +1534,7 @@ class AppLocalizationsTh extends AppLocalizations {
@override
String get go_back => 'Go back';
@override
String get merge_library_nav_mobile => 'Merge library navigation on mobile';
}

View file

@ -1540,4 +1540,7 @@ class AppLocalizationsTr extends AppLocalizations {
@override
String get go_back => 'Go back';
@override
String get merge_library_nav_mobile => 'Merge library navigation on mobile';
}

View file

@ -1502,4 +1502,7 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get go_back => 'Go back';
@override
String get merge_library_nav_mobile => 'Merge library navigation on mobile';
}

View file

@ -244,6 +244,8 @@ class Settings {
String? lastTrackerLibraryLocation;
bool? mergeLibraryNavMobile;
Settings({
this.id = 227,
this.displayType = DisplayType.compactGrid,
@ -352,6 +354,7 @@ class Settings {
this.animeExtensionsRepo,
this.novelExtensionsRepo,
this.lastTrackerLibraryLocation,
this.mergeLibraryNavMobile = false,
});
Settings.fromJson(Map<String, dynamic> json) {
@ -566,6 +569,7 @@ class Settings {
.toList();
}
lastTrackerLibraryLocation = json['lastTrackerLibraryLocation'];
mergeLibraryNavMobile = json['mergeLibraryNavMobile'];
}
Map<String, dynamic> toJson() => {
@ -697,6 +701,7 @@ class Settings {
'animeExtensionsRepo': animeExtensionsRepo?.map((e) => e.toJson()).toList(),
'novelExtensionsRepo': novelExtensionsRepo?.map((e) => e.toJson()).toList(),
'lastTrackerLibraryLocation': lastTrackerLibraryLocation,
'mergeLibraryNavMobile': mergeLibraryNavMobile,
};
}

View file

@ -437,174 +437,179 @@ const SettingsSchema = CollectionSchema(
name: r'markEpisodeAsSeenType',
type: IsarType.long,
),
r'navigationOrder': PropertySchema(
r'mergeLibraryNavMobile': PropertySchema(
id: 80,
name: r'mergeLibraryNavMobile',
type: IsarType.bool,
),
r'navigationOrder': PropertySchema(
id: 81,
name: r'navigationOrder',
type: IsarType.stringList,
),
r'novelDisplayType': PropertySchema(
id: 81,
id: 82,
name: r'novelDisplayType',
type: IsarType.byte,
enumMap: _SettingsnovelDisplayTypeEnumValueMap,
),
r'novelExtensionsRepo': PropertySchema(
id: 82,
id: 83,
name: r'novelExtensionsRepo',
type: IsarType.objectList,
target: r'Repo',
),
r'novelFontSize': PropertySchema(
id: 83,
id: 84,
name: r'novelFontSize',
type: IsarType.long,
),
r'novelGridSize': PropertySchema(
id: 84,
id: 85,
name: r'novelGridSize',
type: IsarType.long,
),
r'novelLibraryDownloadedChapters': PropertySchema(
id: 85,
id: 86,
name: r'novelLibraryDownloadedChapters',
type: IsarType.bool,
),
r'novelLibraryLocalSource': PropertySchema(
id: 86,
id: 87,
name: r'novelLibraryLocalSource',
type: IsarType.bool,
),
r'novelLibraryShowCategoryTabs': PropertySchema(
id: 87,
id: 88,
name: r'novelLibraryShowCategoryTabs',
type: IsarType.bool,
),
r'novelLibraryShowContinueReadingButton': PropertySchema(
id: 88,
id: 89,
name: r'novelLibraryShowContinueReadingButton',
type: IsarType.bool,
),
r'novelLibraryShowLanguage': PropertySchema(
id: 89,
id: 90,
name: r'novelLibraryShowLanguage',
type: IsarType.bool,
),
r'novelLibraryShowNumbersOfItems': PropertySchema(
id: 90,
id: 91,
name: r'novelLibraryShowNumbersOfItems',
type: IsarType.bool,
),
r'novelTextAlign': PropertySchema(
id: 91,
id: 92,
name: r'novelTextAlign',
type: IsarType.byte,
enumMap: _SettingsnovelTextAlignEnumValueMap,
),
r'onlyIncludePinnedSources': PropertySchema(
id: 92,
id: 93,
name: r'onlyIncludePinnedSources',
type: IsarType.bool,
),
r'pagePreloadAmount': PropertySchema(
id: 93,
id: 94,
name: r'pagePreloadAmount',
type: IsarType.long,
),
r'personalPageModeList': PropertySchema(
id: 94,
id: 95,
name: r'personalPageModeList',
type: IsarType.objectList,
target: r'PersonalPageMode',
),
r'personalReaderModeList': PropertySchema(
id: 95,
id: 96,
name: r'personalReaderModeList',
type: IsarType.objectList,
target: r'PersonalReaderMode',
),
r'playerSubtitleSettings': PropertySchema(
id: 96,
id: 97,
name: r'playerSubtitleSettings',
type: IsarType.object,
target: r'PlayerSubtitleSettings',
),
r'pureBlackDarkMode': PropertySchema(
id: 97,
id: 98,
name: r'pureBlackDarkMode',
type: IsarType.bool,
),
r'relativeTimesTamps': PropertySchema(
id: 98,
id: 99,
name: r'relativeTimesTamps',
type: IsarType.long,
),
r'saveAsCBZArchive': PropertySchema(
id: 99,
id: 100,
name: r'saveAsCBZArchive',
type: IsarType.bool,
),
r'scaleType': PropertySchema(
id: 100,
id: 101,
name: r'scaleType',
type: IsarType.byte,
enumMap: _SettingsscaleTypeEnumValueMap,
),
r'showPagesNumber': PropertySchema(
id: 101,
id: 102,
name: r'showPagesNumber',
type: IsarType.bool,
),
r'sortChapterList': PropertySchema(
id: 102,
id: 103,
name: r'sortChapterList',
type: IsarType.objectList,
target: r'SortChapter',
),
r'sortLibraryAnime': PropertySchema(
id: 103,
id: 104,
name: r'sortLibraryAnime',
type: IsarType.object,
target: r'SortLibraryManga',
),
r'sortLibraryManga': PropertySchema(
id: 104,
id: 105,
name: r'sortLibraryManga',
type: IsarType.object,
target: r'SortLibraryManga',
),
r'sortLibraryNovel': PropertySchema(
id: 105,
id: 106,
name: r'sortLibraryNovel',
type: IsarType.object,
target: r'SortLibraryManga',
),
r'startDatebackup': PropertySchema(
id: 106,
id: 107,
name: r'startDatebackup',
type: IsarType.long,
),
r'themeIsDark': PropertySchema(
id: 107,
id: 108,
name: r'themeIsDark',
type: IsarType.bool,
),
r'updateProgressAfterReading': PropertySchema(
id: 108,
id: 109,
name: r'updateProgressAfterReading',
type: IsarType.bool,
),
r'useLibass': PropertySchema(
id: 109,
id: 110,
name: r'useLibass',
type: IsarType.bool,
),
r'usePageTapZones': PropertySchema(
id: 110,
id: 111,
name: r'usePageTapZones',
type: IsarType.bool,
),
r'userAgent': PropertySchema(
id: 111,
id: 112,
name: r'userAgent',
type: IsarType.string,
)
@ -1133,78 +1138,79 @@ void _settingsSerialize(
writer.writeLong(offsets[77], object.mangaGridSize);
writer.writeByte(offsets[78], object.mangaHomeDisplayType.index);
writer.writeLong(offsets[79], object.markEpisodeAsSeenType);
writer.writeStringList(offsets[80], object.navigationOrder);
writer.writeByte(offsets[81], object.novelDisplayType.index);
writer.writeBool(offsets[80], object.mergeLibraryNavMobile);
writer.writeStringList(offsets[81], object.navigationOrder);
writer.writeByte(offsets[82], object.novelDisplayType.index);
writer.writeObjectList<Repo>(
offsets[82],
offsets[83],
allOffsets,
RepoSchema.serialize,
object.novelExtensionsRepo,
);
writer.writeLong(offsets[83], object.novelFontSize);
writer.writeLong(offsets[84], object.novelGridSize);
writer.writeBool(offsets[85], object.novelLibraryDownloadedChapters);
writer.writeBool(offsets[86], object.novelLibraryLocalSource);
writer.writeBool(offsets[87], object.novelLibraryShowCategoryTabs);
writer.writeBool(offsets[88], object.novelLibraryShowContinueReadingButton);
writer.writeBool(offsets[89], object.novelLibraryShowLanguage);
writer.writeBool(offsets[90], object.novelLibraryShowNumbersOfItems);
writer.writeByte(offsets[91], object.novelTextAlign.index);
writer.writeBool(offsets[92], object.onlyIncludePinnedSources);
writer.writeLong(offsets[93], object.pagePreloadAmount);
writer.writeLong(offsets[84], object.novelFontSize);
writer.writeLong(offsets[85], object.novelGridSize);
writer.writeBool(offsets[86], object.novelLibraryDownloadedChapters);
writer.writeBool(offsets[87], object.novelLibraryLocalSource);
writer.writeBool(offsets[88], object.novelLibraryShowCategoryTabs);
writer.writeBool(offsets[89], object.novelLibraryShowContinueReadingButton);
writer.writeBool(offsets[90], object.novelLibraryShowLanguage);
writer.writeBool(offsets[91], object.novelLibraryShowNumbersOfItems);
writer.writeByte(offsets[92], object.novelTextAlign.index);
writer.writeBool(offsets[93], object.onlyIncludePinnedSources);
writer.writeLong(offsets[94], object.pagePreloadAmount);
writer.writeObjectList<PersonalPageMode>(
offsets[94],
offsets[95],
allOffsets,
PersonalPageModeSchema.serialize,
object.personalPageModeList,
);
writer.writeObjectList<PersonalReaderMode>(
offsets[95],
offsets[96],
allOffsets,
PersonalReaderModeSchema.serialize,
object.personalReaderModeList,
);
writer.writeObject<PlayerSubtitleSettings>(
offsets[96],
offsets[97],
allOffsets,
PlayerSubtitleSettingsSchema.serialize,
object.playerSubtitleSettings,
);
writer.writeBool(offsets[97], object.pureBlackDarkMode);
writer.writeLong(offsets[98], object.relativeTimesTamps);
writer.writeBool(offsets[99], object.saveAsCBZArchive);
writer.writeByte(offsets[100], object.scaleType.index);
writer.writeBool(offsets[101], object.showPagesNumber);
writer.writeBool(offsets[98], object.pureBlackDarkMode);
writer.writeLong(offsets[99], object.relativeTimesTamps);
writer.writeBool(offsets[100], object.saveAsCBZArchive);
writer.writeByte(offsets[101], object.scaleType.index);
writer.writeBool(offsets[102], object.showPagesNumber);
writer.writeObjectList<SortChapter>(
offsets[102],
offsets[103],
allOffsets,
SortChapterSchema.serialize,
object.sortChapterList,
);
writer.writeObject<SortLibraryManga>(
offsets[103],
offsets[104],
allOffsets,
SortLibraryMangaSchema.serialize,
object.sortLibraryAnime,
);
writer.writeObject<SortLibraryManga>(
offsets[104],
offsets[105],
allOffsets,
SortLibraryMangaSchema.serialize,
object.sortLibraryManga,
);
writer.writeObject<SortLibraryManga>(
offsets[105],
offsets[106],
allOffsets,
SortLibraryMangaSchema.serialize,
object.sortLibraryNovel,
);
writer.writeLong(offsets[106], object.startDatebackup);
writer.writeBool(offsets[107], object.themeIsDark);
writer.writeBool(offsets[108], object.updateProgressAfterReading);
writer.writeBool(offsets[109], object.useLibass);
writer.writeBool(offsets[110], object.usePageTapZones);
writer.writeString(offsets[111], object.userAgent);
writer.writeLong(offsets[107], object.startDatebackup);
writer.writeBool(offsets[108], object.themeIsDark);
writer.writeBool(offsets[109], object.updateProgressAfterReading);
writer.writeBool(offsets[110], object.useLibass);
writer.writeBool(offsets[111], object.usePageTapZones);
writer.writeString(offsets[112], object.userAgent);
}
Settings _settingsDeserialize(
@ -1343,79 +1349,80 @@ Settings _settingsDeserialize(
reader.readByteOrNull(offsets[78])] ??
DisplayType.comfortableGrid,
markEpisodeAsSeenType: reader.readLongOrNull(offsets[79]),
navigationOrder: reader.readStringList(offsets[80]),
mergeLibraryNavMobile: reader.readBoolOrNull(offsets[80]),
navigationOrder: reader.readStringList(offsets[81]),
novelDisplayType: _SettingsnovelDisplayTypeValueEnumMap[
reader.readByteOrNull(offsets[81])] ??
reader.readByteOrNull(offsets[82])] ??
DisplayType.comfortableGrid,
novelExtensionsRepo: reader.readObjectList<Repo>(
offsets[82],
offsets[83],
RepoSchema.deserialize,
allOffsets,
Repo(),
),
novelFontSize: reader.readLongOrNull(offsets[83]),
novelLibraryDownloadedChapters: reader.readBoolOrNull(offsets[85]),
novelLibraryLocalSource: reader.readBoolOrNull(offsets[86]),
novelLibraryShowCategoryTabs: reader.readBoolOrNull(offsets[87]),
novelLibraryShowContinueReadingButton: reader.readBoolOrNull(offsets[88]),
novelLibraryShowLanguage: reader.readBoolOrNull(offsets[89]),
novelLibraryShowNumbersOfItems: reader.readBoolOrNull(offsets[90]),
novelFontSize: reader.readLongOrNull(offsets[84]),
novelLibraryDownloadedChapters: reader.readBoolOrNull(offsets[86]),
novelLibraryLocalSource: reader.readBoolOrNull(offsets[87]),
novelLibraryShowCategoryTabs: reader.readBoolOrNull(offsets[88]),
novelLibraryShowContinueReadingButton: reader.readBoolOrNull(offsets[89]),
novelLibraryShowLanguage: reader.readBoolOrNull(offsets[90]),
novelLibraryShowNumbersOfItems: reader.readBoolOrNull(offsets[91]),
novelTextAlign: _SettingsnovelTextAlignValueEnumMap[
reader.readByteOrNull(offsets[91])] ??
reader.readByteOrNull(offsets[92])] ??
NovelTextAlign.left,
onlyIncludePinnedSources: reader.readBoolOrNull(offsets[92]),
pagePreloadAmount: reader.readLongOrNull(offsets[93]),
onlyIncludePinnedSources: reader.readBoolOrNull(offsets[93]),
pagePreloadAmount: reader.readLongOrNull(offsets[94]),
personalPageModeList: reader.readObjectList<PersonalPageMode>(
offsets[94],
offsets[95],
PersonalPageModeSchema.deserialize,
allOffsets,
PersonalPageMode(),
),
personalReaderModeList: reader.readObjectList<PersonalReaderMode>(
offsets[95],
offsets[96],
PersonalReaderModeSchema.deserialize,
allOffsets,
PersonalReaderMode(),
),
playerSubtitleSettings: reader.readObjectOrNull<PlayerSubtitleSettings>(
offsets[96],
offsets[97],
PlayerSubtitleSettingsSchema.deserialize,
allOffsets,
),
pureBlackDarkMode: reader.readBoolOrNull(offsets[97]),
relativeTimesTamps: reader.readLongOrNull(offsets[98]),
saveAsCBZArchive: reader.readBoolOrNull(offsets[99]),
pureBlackDarkMode: reader.readBoolOrNull(offsets[98]),
relativeTimesTamps: reader.readLongOrNull(offsets[99]),
saveAsCBZArchive: reader.readBoolOrNull(offsets[100]),
scaleType:
_SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offsets[100])] ??
_SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offsets[101])] ??
ScaleType.fitScreen,
showPagesNumber: reader.readBoolOrNull(offsets[101]),
showPagesNumber: reader.readBoolOrNull(offsets[102]),
sortChapterList: reader.readObjectList<SortChapter>(
offsets[102],
offsets[103],
SortChapterSchema.deserialize,
allOffsets,
SortChapter(),
),
sortLibraryAnime: reader.readObjectOrNull<SortLibraryManga>(
offsets[103],
SortLibraryMangaSchema.deserialize,
allOffsets,
),
sortLibraryManga: reader.readObjectOrNull<SortLibraryManga>(
offsets[104],
SortLibraryMangaSchema.deserialize,
allOffsets,
),
sortLibraryNovel: reader.readObjectOrNull<SortLibraryManga>(
sortLibraryManga: reader.readObjectOrNull<SortLibraryManga>(
offsets[105],
SortLibraryMangaSchema.deserialize,
allOffsets,
),
startDatebackup: reader.readLongOrNull(offsets[106]),
themeIsDark: reader.readBoolOrNull(offsets[107]),
updateProgressAfterReading: reader.readBoolOrNull(offsets[108]),
useLibass: reader.readBoolOrNull(offsets[109]),
usePageTapZones: reader.readBoolOrNull(offsets[110]),
userAgent: reader.readStringOrNull(offsets[111]),
sortLibraryNovel: reader.readObjectOrNull<SortLibraryManga>(
offsets[106],
SortLibraryMangaSchema.deserialize,
allOffsets,
),
startDatebackup: reader.readLongOrNull(offsets[107]),
themeIsDark: reader.readBoolOrNull(offsets[108]),
updateProgressAfterReading: reader.readBoolOrNull(offsets[109]),
useLibass: reader.readBoolOrNull(offsets[110]),
usePageTapZones: reader.readBoolOrNull(offsets[111]),
userAgent: reader.readStringOrNull(offsets[112]),
);
object.chapterFilterBookmarkedList =
reader.readObjectList<ChapterFilterBookmarked>(
@ -1446,7 +1453,7 @@ Settings _settingsDeserialize(
L10nLocaleSchema.deserialize,
allOffsets,
);
object.novelGridSize = reader.readLongOrNull(offsets[84]);
object.novelGridSize = reader.readLongOrNull(offsets[85]);
return object;
}
@ -1693,24 +1700,24 @@ P _settingsDeserializeProp<P>(
case 79:
return (reader.readLongOrNull(offset)) as P;
case 80:
return (reader.readStringList(offset)) as P;
return (reader.readBoolOrNull(offset)) as P;
case 81:
return (reader.readStringList(offset)) as P;
case 82:
return (_SettingsnovelDisplayTypeValueEnumMap[
reader.readByteOrNull(offset)] ??
DisplayType.comfortableGrid) as P;
case 82:
case 83:
return (reader.readObjectList<Repo>(
offset,
RepoSchema.deserialize,
allOffsets,
Repo(),
)) as P;
case 83:
return (reader.readLongOrNull(offset)) as P;
case 84:
return (reader.readLongOrNull(offset)) as P;
case 85:
return (reader.readBoolOrNull(offset)) as P;
return (reader.readLongOrNull(offset)) as P;
case 86:
return (reader.readBoolOrNull(offset)) as P;
case 87:
@ -1722,57 +1729,53 @@ P _settingsDeserializeProp<P>(
case 90:
return (reader.readBoolOrNull(offset)) as P;
case 91:
return (reader.readBoolOrNull(offset)) as P;
case 92:
return (_SettingsnovelTextAlignValueEnumMap[
reader.readByteOrNull(offset)] ??
NovelTextAlign.left) as P;
case 92:
return (reader.readBoolOrNull(offset)) as P;
case 93:
return (reader.readLongOrNull(offset)) as P;
return (reader.readBoolOrNull(offset)) as P;
case 94:
return (reader.readLongOrNull(offset)) as P;
case 95:
return (reader.readObjectList<PersonalPageMode>(
offset,
PersonalPageModeSchema.deserialize,
allOffsets,
PersonalPageMode(),
)) as P;
case 95:
case 96:
return (reader.readObjectList<PersonalReaderMode>(
offset,
PersonalReaderModeSchema.deserialize,
allOffsets,
PersonalReaderMode(),
)) as P;
case 96:
case 97:
return (reader.readObjectOrNull<PlayerSubtitleSettings>(
offset,
PlayerSubtitleSettingsSchema.deserialize,
allOffsets,
)) as P;
case 97:
return (reader.readBoolOrNull(offset)) as P;
case 98:
return (reader.readLongOrNull(offset)) as P;
case 99:
return (reader.readBoolOrNull(offset)) as P;
case 99:
return (reader.readLongOrNull(offset)) as P;
case 100:
return (reader.readBoolOrNull(offset)) as P;
case 101:
return (_SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offset)] ??
ScaleType.fitScreen) as P;
case 101:
return (reader.readBoolOrNull(offset)) as P;
case 102:
return (reader.readBoolOrNull(offset)) as P;
case 103:
return (reader.readObjectList<SortChapter>(
offset,
SortChapterSchema.deserialize,
allOffsets,
SortChapter(),
)) as P;
case 103:
return (reader.readObjectOrNull<SortLibraryManga>(
offset,
SortLibraryMangaSchema.deserialize,
allOffsets,
)) as P;
case 104:
return (reader.readObjectOrNull<SortLibraryManga>(
offset,
@ -1786,9 +1789,13 @@ P _settingsDeserializeProp<P>(
allOffsets,
)) as P;
case 106:
return (reader.readLongOrNull(offset)) as P;
return (reader.readObjectOrNull<SortLibraryManga>(
offset,
SortLibraryMangaSchema.deserialize,
allOffsets,
)) as P;
case 107:
return (reader.readBoolOrNull(offset)) as P;
return (reader.readLongOrNull(offset)) as P;
case 108:
return (reader.readBoolOrNull(offset)) as P;
case 109:
@ -1796,6 +1803,8 @@ P _settingsDeserializeProp<P>(
case 110:
return (reader.readBoolOrNull(offset)) as P;
case 111:
return (reader.readBoolOrNull(offset)) as P;
case 112:
return (reader.readStringOrNull(offset)) as P;
default:
throw IsarError('Unknown property with id $propertyId');
@ -7673,6 +7682,34 @@ extension SettingsQueryFilter
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
mergeLibraryNavMobileIsNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNull(
property: r'mergeLibraryNavMobile',
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
mergeLibraryNavMobileIsNotNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNotNull(
property: r'mergeLibraryNavMobile',
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
mergeLibraryNavMobileEqualTo(bool? value) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'mergeLibraryNavMobile',
value: value,
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
navigationOrderIsNull() {
return QueryBuilder.apply(this, (query) {
@ -10556,6 +10593,19 @@ extension SettingsQuerySortBy on QueryBuilder<Settings, Settings, QSortBy> {
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> sortByMergeLibraryNavMobile() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'mergeLibraryNavMobile', Sort.asc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy>
sortByMergeLibraryNavMobileDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'mergeLibraryNavMobile', Sort.desc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> sortByNovelDisplayType() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'novelDisplayType', Sort.asc);
@ -11724,6 +11774,19 @@ extension SettingsQuerySortThenBy
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> thenByMergeLibraryNavMobile() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'mergeLibraryNavMobile', Sort.asc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy>
thenByMergeLibraryNavMobileDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'mergeLibraryNavMobile', Sort.desc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> thenByNovelDisplayType() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'novelDisplayType', Sort.asc);
@ -12468,6 +12531,13 @@ extension SettingsQueryWhereDistinct
});
}
QueryBuilder<Settings, Settings, QDistinct>
distinctByMergeLibraryNavMobile() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'mergeLibraryNavMobile');
});
}
QueryBuilder<Settings, Settings, QDistinct> distinctByNavigationOrder() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'navigationOrder');
@ -13167,6 +13237,13 @@ extension SettingsQueryProperty
});
}
QueryBuilder<Settings, bool?, QQueryOperations>
mergeLibraryNavMobileProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'mergeLibraryNavMobile');
});
}
QueryBuilder<Settings, List<String>?, QQueryOperations>
navigationOrderProperty() {
return QueryBuilder.apply(this, (query) {

View file

@ -160,6 +160,7 @@ class _MainScreenState extends ConsumerState<MainScreen> {
final route = GoRouter.of(context);
final navigationOrder = ref.watch(navigationOrderStateProvider);
final hideItems = ref.watch(hideItemsStateProvider);
final mergeLibraryNavMobile = ref.watch(mergeLibraryNavMobileStateProvider);
final location = ref.watch(routerCurrentLocationStateProvider);
return ref
@ -169,7 +170,7 @@ class _MainScreenState extends ConsumerState<MainScreen> {
builder: (context, ref, child) {
final isReadingScreen = _isReadingScreen(location);
bool uniqueSwitch = false;
final dest = !context.isTablet && isLibSwitch
List<String> dest = !context.isTablet && isLibSwitch
? [
"_disableLibSwitch",
...navigationOrder.where(
@ -178,30 +179,35 @@ class _MainScreenState extends ConsumerState<MainScreen> {
].where((nav) => !hideItems.contains(nav)).toList()
: navigationOrder
.where((nav) => !hideItems.contains(nav))
.map((nav) {
if (!context.isTablet &&
!isLibSwitch &&
[
"/MangaLibrary",
"/AnimeLibrary",
"/NovelLibrary",
].contains(nav)) {
if (uniqueSwitch) return null;
uniqueSwitch = true;
return "_enableLibSwitch";
}
return nav;
})
.nonNulls
.toList();
if (mergeLibraryNavMobile && !context.isTablet && !isLibSwitch) {
dest = dest
.map((nav) {
if ([
"/MangaLibrary",
"/AnimeLibrary",
"/NovelLibrary",
].contains(nav)) {
if (uniqueSwitch) return null;
uniqueSwitch = true;
return "_enableLibSwitch";
}
return nav;
})
.nonNulls
.toList();
}
if (isLibSwitch &&
(currentIndex >= dest.length ||
!libLocationRegex.hasMatch(location ?? ""))) {
currentIndex = 0;
} else {
String? libLocation;
if (!context.isTablet && !isLibSwitch) {
if (mergeLibraryNavMobile &&
!context.isTablet &&
!isLibSwitch) {
libLocation = location?.replaceAll(
libLocationRegex,
"_enableLibSwitch",

View file

@ -19,11 +19,28 @@ class _CustomNavigationSettingsState
final l10n = context.l10n;
final navigationOrder = ref.watch(navigationOrderStateProvider);
final hideItems = ref.watch(hideItemsStateProvider);
final mergeLibraryNavMobile = ref.watch(mergeLibraryNavMobileStateProvider);
return Scaffold(
appBar: AppBar(title: Text(l10n.reorder_navigation)),
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 15),
child: ReorderableListView.builder(
header: Padding(
padding: const EdgeInsets.symmetric(vertical: 10),
child: Stack(
children: [
SwitchListTile(
value: mergeLibraryNavMobile,
title: Text(context.l10n.merge_library_nav_mobile),
onChanged: (value) {
ref
.read(mergeLibraryNavMobileStateProvider.notifier)
.set(value);
},
),
],
),
),
buildDefaultDragHandles: false,
itemCount: navigationOrder.length,
itemBuilder: (context, index) {

View file

@ -199,6 +199,22 @@ class HideItemsState extends _$HideItemsState {
}
}
@riverpod
class MergeLibraryNavMobileState extends _$MergeLibraryNavMobileState {
@override
bool build() {
return isar.settings.getSync(227)!.mergeLibraryNavMobile ?? false;
}
void set(bool value) {
final settings = isar.settings.getSync(227);
state = value;
isar.writeTxnSync(
() => isar.settings.putSync(settings!..mergeLibraryNavMobile = value),
);
}
}
@riverpod
class NovelFontSizeState extends _$NovelFontSizeState {
@override

View file

@ -190,6 +190,23 @@ final hideItemsStateProvider =
);
typedef _$HideItemsState = AutoDisposeNotifier<List<String>>;
String _$mergeLibraryNavMobileStateHash() =>
r'a69f669b69d036835128b2b922ed7da37877aaa8';
/// See also [MergeLibraryNavMobileState].
@ProviderFor(MergeLibraryNavMobileState)
final mergeLibraryNavMobileStateProvider =
AutoDisposeNotifierProvider<MergeLibraryNavMobileState, bool>.internal(
MergeLibraryNavMobileState.new,
name: r'mergeLibraryNavMobileStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$mergeLibraryNavMobileStateHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$MergeLibraryNavMobileState = AutoDisposeNotifier<bool>;
String _$novelFontSizeStateHash() =>
r'fd104e358203d3f86e14d933518f2dbd067cec13';

View file

@ -6,7 +6,7 @@ part of 'router.dart';
// RiverpodGenerator
// **************************************************************************
String _$routerHash() => r'52271f834e5242820afdb209d765c3cee8f3fe5b';
String _$routerHash() => r'fe1b18b9e03bd3df71cf66eabd78f0da3ac36247';
/// See also [router].
@ProviderFor(router)

View file

@ -6,7 +6,7 @@ part of 'anilist.dart';
// RiverpodGenerator
// **************************************************************************
String _$anilistHash() => r'530f1aaee260808ae894e4da0604b8b34e4f3742';
String _$anilistHash() => r'179af3d1b13b4a03d5009e5519195fee1f8ec0f7';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -6,7 +6,7 @@ part of 'myanimelist.dart';
// RiverpodGenerator
// **************************************************************************
String _$myAnimeListHash() => r'885e6c50439c699f12c4f17c9e26b4a53b1d2036';
String _$myAnimeListHash() => r'98746d3f3ac88a6165b46de18acb268dc32a16f8';
/// Copied from Dart SDK
class _SystemHash {