add download settings

This commit is contained in:
kodjomoustapha 2023-06-04 14:09:38 +01:00
parent 92b04a62aa
commit e2115f0a0a
15 changed files with 731 additions and 119 deletions

View file

@ -75,6 +75,12 @@ class Settings {
bool? pureBlackDarkMode;
bool? downloadOnlyOnWifi;
bool? saveAsCBZArchive;
String? downloadLocation;
Settings(
{this.id = 227,
this.displayType = DisplayType.compactGrid,
@ -107,7 +113,10 @@ class Settings {
this.doubleTapAnimationSpeed = 1,
this.showNSFW = true,
this.onlyIncludePinnedSources = false,
this.pureBlackDarkMode = false});
this.pureBlackDarkMode = false,
this.downloadOnlyOnWifi = false,
this.saveAsCBZArchive = false,
this.downloadLocation = ""});
}
enum DisplayType {

View file

@ -80,116 +80,131 @@ const SettingsSchema = CollectionSchema(
name: r'doubleTapAnimationSpeed',
type: IsarType.long,
),
r'flexColorSchemeBlendLevel': PropertySchema(
r'downloadLocation': PropertySchema(
id: 11,
name: r'downloadLocation',
type: IsarType.string,
),
r'downloadOnlyOnWifi': PropertySchema(
id: 12,
name: r'downloadOnlyOnWifi',
type: IsarType.bool,
),
r'flexColorSchemeBlendLevel': PropertySchema(
id: 13,
name: r'flexColorSchemeBlendLevel',
type: IsarType.double,
),
r'flexSchemeColorIndex': PropertySchema(
id: 12,
id: 14,
name: r'flexSchemeColorIndex',
type: IsarType.long,
),
r'incognitoMode': PropertySchema(
id: 13,
id: 15,
name: r'incognitoMode',
type: IsarType.bool,
),
r'libraryDownloadedChapters': PropertySchema(
id: 14,
id: 16,
name: r'libraryDownloadedChapters',
type: IsarType.bool,
),
r'libraryFilterMangasBookMarkedType': PropertySchema(
id: 15,
id: 17,
name: r'libraryFilterMangasBookMarkedType',
type: IsarType.long,
),
r'libraryFilterMangasDownloadType': PropertySchema(
id: 16,
id: 18,
name: r'libraryFilterMangasDownloadType',
type: IsarType.long,
),
r'libraryFilterMangasStartedType': PropertySchema(
id: 17,
id: 19,
name: r'libraryFilterMangasStartedType',
type: IsarType.long,
),
r'libraryFilterMangasUnreadType': PropertySchema(
id: 18,
id: 20,
name: r'libraryFilterMangasUnreadType',
type: IsarType.long,
),
r'libraryShowCategoryTabs': PropertySchema(
id: 19,
id: 21,
name: r'libraryShowCategoryTabs',
type: IsarType.bool,
),
r'libraryShowContinueReadingButton': PropertySchema(
id: 20,
id: 22,
name: r'libraryShowContinueReadingButton',
type: IsarType.bool,
),
r'libraryShowLanguage': PropertySchema(
id: 21,
id: 23,
name: r'libraryShowLanguage',
type: IsarType.bool,
),
r'libraryShowNumbersOfItems': PropertySchema(
id: 22,
id: 24,
name: r'libraryShowNumbersOfItems',
type: IsarType.bool,
),
r'onlyIncludePinnedSources': PropertySchema(
id: 23,
id: 25,
name: r'onlyIncludePinnedSources',
type: IsarType.bool,
),
r'personalReaderModeList': PropertySchema(
id: 24,
id: 26,
name: r'personalReaderModeList',
type: IsarType.objectList,
target: r'PersonalReaderMode',
),
r'pureBlackDarkMode': PropertySchema(
id: 25,
id: 27,
name: r'pureBlackDarkMode',
type: IsarType.bool,
),
r'relativeTimesTamps': PropertySchema(
id: 26,
id: 28,
name: r'relativeTimesTamps',
type: IsarType.long,
),
r'saveAsCBZArchive': PropertySchema(
id: 29,
name: r'saveAsCBZArchive',
type: IsarType.bool,
),
r'showNSFW': PropertySchema(
id: 27,
id: 30,
name: r'showNSFW',
type: IsarType.bool,
),
r'showPagesNumber': PropertySchema(
id: 28,
id: 31,
name: r'showPagesNumber',
type: IsarType.bool,
),
r'sortChapterList': PropertySchema(
id: 29,
id: 32,
name: r'sortChapterList',
type: IsarType.objectList,
target: r'SortChapter',
),
r'sortLibraryManga': PropertySchema(
id: 30,
id: 33,
name: r'sortLibraryManga',
type: IsarType.object,
target: r'SortLibraryManga',
),
r'themeIsDark': PropertySchema(
id: 31,
id: 34,
name: r'themeIsDark',
type: IsarType.bool,
),
r'userAgent': PropertySchema(
id: 32,
id: 35,
name: r'userAgent',
type: IsarType.string,
)
@ -313,6 +328,12 @@ int _settingsEstimateSize(
bytesCount += 3 + value.length * 3;
}
}
{
final value = object.downloadLocation;
if (value != null) {
bytesCount += 3 + value.length * 3;
}
}
{
final list = object.personalReaderModeList;
if (list != null) {
@ -405,43 +426,46 @@ void _settingsSerialize(
writer.writeByte(offsets[8], object.defaultReaderMode.index);
writer.writeByte(offsets[9], object.displayType.index);
writer.writeLong(offsets[10], object.doubleTapAnimationSpeed);
writer.writeDouble(offsets[11], object.flexColorSchemeBlendLevel);
writer.writeLong(offsets[12], object.flexSchemeColorIndex);
writer.writeBool(offsets[13], object.incognitoMode);
writer.writeBool(offsets[14], object.libraryDownloadedChapters);
writer.writeLong(offsets[15], object.libraryFilterMangasBookMarkedType);
writer.writeLong(offsets[16], object.libraryFilterMangasDownloadType);
writer.writeLong(offsets[17], object.libraryFilterMangasStartedType);
writer.writeLong(offsets[18], object.libraryFilterMangasUnreadType);
writer.writeBool(offsets[19], object.libraryShowCategoryTabs);
writer.writeBool(offsets[20], object.libraryShowContinueReadingButton);
writer.writeBool(offsets[21], object.libraryShowLanguage);
writer.writeBool(offsets[22], object.libraryShowNumbersOfItems);
writer.writeBool(offsets[23], object.onlyIncludePinnedSources);
writer.writeString(offsets[11], object.downloadLocation);
writer.writeBool(offsets[12], object.downloadOnlyOnWifi);
writer.writeDouble(offsets[13], object.flexColorSchemeBlendLevel);
writer.writeLong(offsets[14], object.flexSchemeColorIndex);
writer.writeBool(offsets[15], object.incognitoMode);
writer.writeBool(offsets[16], object.libraryDownloadedChapters);
writer.writeLong(offsets[17], object.libraryFilterMangasBookMarkedType);
writer.writeLong(offsets[18], object.libraryFilterMangasDownloadType);
writer.writeLong(offsets[19], object.libraryFilterMangasStartedType);
writer.writeLong(offsets[20], object.libraryFilterMangasUnreadType);
writer.writeBool(offsets[21], object.libraryShowCategoryTabs);
writer.writeBool(offsets[22], object.libraryShowContinueReadingButton);
writer.writeBool(offsets[23], object.libraryShowLanguage);
writer.writeBool(offsets[24], object.libraryShowNumbersOfItems);
writer.writeBool(offsets[25], object.onlyIncludePinnedSources);
writer.writeObjectList<PersonalReaderMode>(
offsets[24],
offsets[26],
allOffsets,
PersonalReaderModeSchema.serialize,
object.personalReaderModeList,
);
writer.writeBool(offsets[25], object.pureBlackDarkMode);
writer.writeLong(offsets[26], object.relativeTimesTamps);
writer.writeBool(offsets[27], object.showNSFW);
writer.writeBool(offsets[28], object.showPagesNumber);
writer.writeBool(offsets[27], object.pureBlackDarkMode);
writer.writeLong(offsets[28], object.relativeTimesTamps);
writer.writeBool(offsets[29], object.saveAsCBZArchive);
writer.writeBool(offsets[30], object.showNSFW);
writer.writeBool(offsets[31], object.showPagesNumber);
writer.writeObjectList<SortChapter>(
offsets[29],
offsets[32],
allOffsets,
SortChapterSchema.serialize,
object.sortChapterList,
);
writer.writeObject<SortLibraryManga>(
offsets[30],
offsets[33],
allOffsets,
SortLibraryMangaSchema.serialize,
object.sortLibraryManga,
);
writer.writeBool(offsets[31], object.themeIsDark);
writer.writeString(offsets[32], object.userAgent);
writer.writeBool(offsets[34], object.themeIsDark);
writer.writeString(offsets[35], object.userAgent);
}
Settings _settingsDeserialize(
@ -484,43 +508,46 @@ Settings _settingsDeserialize(
_SettingsdisplayTypeValueEnumMap[reader.readByteOrNull(offsets[9])] ??
DisplayType.compactGrid,
doubleTapAnimationSpeed: reader.readLongOrNull(offsets[10]),
flexColorSchemeBlendLevel: reader.readDoubleOrNull(offsets[11]),
flexSchemeColorIndex: reader.readLongOrNull(offsets[12]),
downloadLocation: reader.readStringOrNull(offsets[11]),
downloadOnlyOnWifi: reader.readBoolOrNull(offsets[12]),
flexColorSchemeBlendLevel: reader.readDoubleOrNull(offsets[13]),
flexSchemeColorIndex: reader.readLongOrNull(offsets[14]),
id: id,
incognitoMode: reader.readBoolOrNull(offsets[13]),
libraryDownloadedChapters: reader.readBoolOrNull(offsets[14]),
libraryFilterMangasBookMarkedType: reader.readLongOrNull(offsets[15]),
libraryFilterMangasDownloadType: reader.readLongOrNull(offsets[16]),
libraryFilterMangasStartedType: reader.readLongOrNull(offsets[17]),
libraryFilterMangasUnreadType: reader.readLongOrNull(offsets[18]),
libraryShowCategoryTabs: reader.readBoolOrNull(offsets[19]),
libraryShowContinueReadingButton: reader.readBoolOrNull(offsets[20]),
libraryShowLanguage: reader.readBoolOrNull(offsets[21]),
libraryShowNumbersOfItems: reader.readBoolOrNull(offsets[22]),
onlyIncludePinnedSources: reader.readBoolOrNull(offsets[23]),
incognitoMode: reader.readBoolOrNull(offsets[15]),
libraryDownloadedChapters: reader.readBoolOrNull(offsets[16]),
libraryFilterMangasBookMarkedType: reader.readLongOrNull(offsets[17]),
libraryFilterMangasDownloadType: reader.readLongOrNull(offsets[18]),
libraryFilterMangasStartedType: reader.readLongOrNull(offsets[19]),
libraryFilterMangasUnreadType: reader.readLongOrNull(offsets[20]),
libraryShowCategoryTabs: reader.readBoolOrNull(offsets[21]),
libraryShowContinueReadingButton: reader.readBoolOrNull(offsets[22]),
libraryShowLanguage: reader.readBoolOrNull(offsets[23]),
libraryShowNumbersOfItems: reader.readBoolOrNull(offsets[24]),
onlyIncludePinnedSources: reader.readBoolOrNull(offsets[25]),
personalReaderModeList: reader.readObjectList<PersonalReaderMode>(
offsets[24],
offsets[26],
PersonalReaderModeSchema.deserialize,
allOffsets,
PersonalReaderMode(),
),
pureBlackDarkMode: reader.readBoolOrNull(offsets[25]),
relativeTimesTamps: reader.readLongOrNull(offsets[26]),
showNSFW: reader.readBoolOrNull(offsets[27]),
showPagesNumber: reader.readBoolOrNull(offsets[28]),
pureBlackDarkMode: reader.readBoolOrNull(offsets[27]),
relativeTimesTamps: reader.readLongOrNull(offsets[28]),
saveAsCBZArchive: reader.readBoolOrNull(offsets[29]),
showNSFW: reader.readBoolOrNull(offsets[30]),
showPagesNumber: reader.readBoolOrNull(offsets[31]),
sortChapterList: reader.readObjectList<SortChapter>(
offsets[29],
offsets[32],
SortChapterSchema.deserialize,
allOffsets,
SortChapter(),
),
sortLibraryManga: reader.readObjectOrNull<SortLibraryManga>(
offsets[30],
offsets[33],
SortLibraryMangaSchema.deserialize,
allOffsets,
),
themeIsDark: reader.readBoolOrNull(offsets[31]),
userAgent: reader.readStringOrNull(offsets[32]),
themeIsDark: reader.readBoolOrNull(offsets[34]),
userAgent: reader.readStringOrNull(offsets[35]),
);
object.chapterFilterBookmarkedList =
reader.readObjectList<ChapterFilterBookmarked>(
@ -601,25 +628,25 @@ P _settingsDeserializeProp<P>(
case 10:
return (reader.readLongOrNull(offset)) as P;
case 11:
return (reader.readDoubleOrNull(offset)) as P;
return (reader.readStringOrNull(offset)) as P;
case 12:
return (reader.readLongOrNull(offset)) as P;
return (reader.readBoolOrNull(offset)) as P;
case 13:
return (reader.readBoolOrNull(offset)) as P;
return (reader.readDoubleOrNull(offset)) as P;
case 14:
return (reader.readBoolOrNull(offset)) as P;
return (reader.readLongOrNull(offset)) as P;
case 15:
return (reader.readLongOrNull(offset)) as P;
return (reader.readBoolOrNull(offset)) as P;
case 16:
return (reader.readLongOrNull(offset)) as P;
return (reader.readBoolOrNull(offset)) as P;
case 17:
return (reader.readLongOrNull(offset)) as P;
case 18:
return (reader.readLongOrNull(offset)) as P;
case 19:
return (reader.readBoolOrNull(offset)) as P;
return (reader.readLongOrNull(offset)) as P;
case 20:
return (reader.readBoolOrNull(offset)) as P;
return (reader.readLongOrNull(offset)) as P;
case 21:
return (reader.readBoolOrNull(offset)) as P;
case 22:
@ -627,36 +654,42 @@ P _settingsDeserializeProp<P>(
case 23:
return (reader.readBoolOrNull(offset)) as P;
case 24:
return (reader.readBoolOrNull(offset)) as P;
case 25:
return (reader.readBoolOrNull(offset)) as P;
case 26:
return (reader.readObjectList<PersonalReaderMode>(
offset,
PersonalReaderModeSchema.deserialize,
allOffsets,
PersonalReaderMode(),
)) as P;
case 25:
return (reader.readBoolOrNull(offset)) as P;
case 26:
return (reader.readLongOrNull(offset)) as P;
case 27:
return (reader.readBoolOrNull(offset)) as P;
case 28:
return (reader.readBoolOrNull(offset)) as P;
return (reader.readLongOrNull(offset)) as P;
case 29:
return (reader.readBoolOrNull(offset)) as P;
case 30:
return (reader.readBoolOrNull(offset)) as P;
case 31:
return (reader.readBoolOrNull(offset)) as P;
case 32:
return (reader.readObjectList<SortChapter>(
offset,
SortChapterSchema.deserialize,
allOffsets,
SortChapter(),
)) as P;
case 30:
case 33:
return (reader.readObjectOrNull<SortLibraryManga>(
offset,
SortLibraryMangaSchema.deserialize,
allOffsets,
)) as P;
case 31:
case 34:
return (reader.readBoolOrNull(offset)) as P;
case 32:
case 35:
return (reader.readStringOrNull(offset)) as P;
default:
throw IsarError('Unknown property with id $propertyId');
@ -1779,6 +1812,188 @@ extension SettingsQueryFilter
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
downloadLocationIsNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNull(
property: r'downloadLocation',
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
downloadLocationIsNotNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNotNull(
property: r'downloadLocation',
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
downloadLocationEqualTo(
String? value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'downloadLocation',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
downloadLocationGreaterThan(
String? value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
include: include,
property: r'downloadLocation',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
downloadLocationLessThan(
String? value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.lessThan(
include: include,
property: r'downloadLocation',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
downloadLocationBetween(
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'downloadLocation',
lower: lower,
includeLower: includeLower,
upper: upper,
includeUpper: includeUpper,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
downloadLocationStartsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.startsWith(
property: r'downloadLocation',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
downloadLocationEndsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.endsWith(
property: r'downloadLocation',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
downloadLocationContains(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.contains(
property: r'downloadLocation',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
downloadLocationMatches(String pattern, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.matches(
property: r'downloadLocation',
wildcard: pattern,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
downloadLocationIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'downloadLocation',
value: '',
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
downloadLocationIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
property: r'downloadLocation',
value: '',
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
downloadOnlyOnWifiIsNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNull(
property: r'downloadOnlyOnWifi',
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
downloadOnlyOnWifiIsNotNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNotNull(
property: r'downloadOnlyOnWifi',
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
downloadOnlyOnWifiEqualTo(bool? value) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'downloadOnlyOnWifi',
value: value,
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
flexColorSchemeBlendLevelIsNull() {
return QueryBuilder.apply(this, (query) {
@ -2706,6 +2921,34 @@ extension SettingsQueryFilter
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
saveAsCBZArchiveIsNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNull(
property: r'saveAsCBZArchive',
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
saveAsCBZArchiveIsNotNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNotNull(
property: r'saveAsCBZArchive',
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition>
saveAsCBZArchiveEqualTo(bool? value) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'saveAsCBZArchive',
value: value,
));
});
}
QueryBuilder<Settings, Settings, QAfterFilterCondition> showNSFWIsNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNull(
@ -3196,6 +3439,31 @@ extension SettingsQuerySortBy on QueryBuilder<Settings, Settings, QSortBy> {
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> sortByDownloadLocation() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'downloadLocation', Sort.asc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> sortByDownloadLocationDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'downloadLocation', Sort.desc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> sortByDownloadOnlyOnWifi() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'downloadOnlyOnWifi', Sort.asc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy>
sortByDownloadOnlyOnWifiDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'downloadOnlyOnWifi', Sort.desc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy>
sortByFlexColorSchemeBlendLevel() {
return QueryBuilder.apply(this, (query) {
@ -3399,6 +3667,18 @@ extension SettingsQuerySortBy on QueryBuilder<Settings, Settings, QSortBy> {
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> sortBySaveAsCBZArchive() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'saveAsCBZArchive', Sort.asc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> sortBySaveAsCBZArchiveDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'saveAsCBZArchive', Sort.desc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> sortByShowNSFW() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'showNSFW', Sort.asc);
@ -3514,6 +3794,31 @@ extension SettingsQuerySortThenBy
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> thenByDownloadLocation() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'downloadLocation', Sort.asc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> thenByDownloadLocationDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'downloadLocation', Sort.desc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> thenByDownloadOnlyOnWifi() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'downloadOnlyOnWifi', Sort.asc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy>
thenByDownloadOnlyOnWifiDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'downloadOnlyOnWifi', Sort.desc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy>
thenByFlexColorSchemeBlendLevel() {
return QueryBuilder.apply(this, (query) {
@ -3729,6 +4034,18 @@ extension SettingsQuerySortThenBy
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> thenBySaveAsCBZArchive() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'saveAsCBZArchive', Sort.asc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> thenBySaveAsCBZArchiveDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'saveAsCBZArchive', Sort.desc);
});
}
QueryBuilder<Settings, Settings, QAfterSortBy> thenByShowNSFW() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'showNSFW', Sort.asc);
@ -3813,6 +4130,20 @@ extension SettingsQueryWhereDistinct
});
}
QueryBuilder<Settings, Settings, QDistinct> distinctByDownloadLocation(
{bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'downloadLocation',
caseSensitive: caseSensitive);
});
}
QueryBuilder<Settings, Settings, QDistinct> distinctByDownloadOnlyOnWifi() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'downloadOnlyOnWifi');
});
}
QueryBuilder<Settings, Settings, QDistinct>
distinctByFlexColorSchemeBlendLevel() {
return QueryBuilder.apply(this, (query) {
@ -3913,6 +4244,12 @@ extension SettingsQueryWhereDistinct
});
}
QueryBuilder<Settings, Settings, QDistinct> distinctBySaveAsCBZArchive() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'saveAsCBZArchive');
});
}
QueryBuilder<Settings, Settings, QDistinct> distinctByShowNSFW() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'showNSFW');
@ -4022,6 +4359,18 @@ extension SettingsQueryProperty
});
}
QueryBuilder<Settings, String?, QQueryOperations> downloadLocationProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'downloadLocation');
});
}
QueryBuilder<Settings, bool?, QQueryOperations> downloadOnlyOnWifiProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'downloadOnlyOnWifi');
});
}
QueryBuilder<Settings, double?, QQueryOperations>
flexColorSchemeBlendLevelProperty() {
return QueryBuilder.apply(this, (query) {
@ -4131,6 +4480,12 @@ extension SettingsQueryProperty
});
}
QueryBuilder<Settings, bool?, QQueryOperations> saveAsCBZArchiveProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'saveAsCBZArchive');
});
}
QueryBuilder<Settings, bool?, QQueryOperations> showNSFWProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'showNSFW');

View file

@ -201,9 +201,8 @@ class LibraryGridViewWidget extends StatelessWidget {
)),
],
),
if (!isComfortableGrid)
if (!isCoverOnlyGrid)
BottomTextWidget(text: entriesManga[index].name!),
if (!isComfortableGrid && !isCoverOnlyGrid)
BottomTextWidget(text: entriesManga[index].name!),
if (continueReaderBtn)
Positioned(
bottom: 0,

View file

@ -1,4 +1,3 @@
import 'dart:developer';
import 'dart:io';
import 'package:background_downloader/background_downloader.dart';
import 'package:isar/isar.dart';
@ -32,7 +31,6 @@ Future<List<String>> downloadChapter(
final finalPath =
"downloads/${manga.source} (${manga.lang!.toUpperCase()})/${manga.name!.replaceAll(regExp, '_')}/$scanlator${chapter.name!.replaceAll(regExp, '_')}";
path = Directory("${path1!.path}$finalPath/");
log(scanlator);
ref
.read(getChapterUrlProvider(
chapter: chapter,

View file

@ -6,7 +6,7 @@ part of 'download_provider.dart';
// RiverpodGenerator
// **************************************************************************
String _$downloadChapterHash() => r'b702505f8ee75ab0a51eb53c0e0631e703aa6517';
String _$downloadChapterHash() => r'abdb9aa7362e0cc436ec56de57521fea203d3041';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -42,10 +42,7 @@ class AppearanceScreen extends ConsumerWidget {
Padding(
padding: const EdgeInsets.symmetric(vertical: 10),
child: SwitchListTile(
title: const Text(
"Pure black dark mode",
style: TextStyle(fontWeight: FontWeight.bold),
),
title: const Text("Pure black dark mode"),
value: pureBlackDarkMode,
onChanged: (value) {
ref
@ -126,10 +123,7 @@ class AppearanceScreen extends ConsumerWidget {
);
});
},
title: const Text(
"Relative timestamps",
style: TextStyle(fontWeight: FontWeight.bold),
),
title: const Text("Relative timestamps"),
subtitle: Text(
relativeTimestampsList[relativeTimestamps],
style:
@ -191,10 +185,7 @@ class AppearanceScreen extends ConsumerWidget {
);
});
},
title: const Text(
"Date format",
style: TextStyle(fontWeight: FontWeight.bold),
),
title: const Text("Date format"),
subtitle: Text(
"$dateFormatState (${dateFormat(DateTime.now().millisecondsSinceEpoch.toString(), useRelativeTimesTamps: false, dateFormat: dateFormatState, ref: ref)})",
style:

View file

@ -25,10 +25,7 @@ class _DarkModeButtonState extends ConsumerState<DarkModeButton> {
ref.read(themeModeStateProvider.notifier).setLightTheme();
}
},
title: const Text(
"Dark mode",
style: TextStyle(fontWeight: FontWeight.bold),
),
title: const Text("Dark mode"),
subtitle: Text(
!isDark ? 'Off' : 'On',
style: TextStyle(fontSize: 11, color: secondaryColor(context)),

View file

@ -33,7 +33,7 @@ class BrowseSScreen extends ConsumerWidget {
),
SwitchListTile(
value: onlyIncludePinnedSource,
title: const Text("Only inclued pinned sources"),
title: const Text("Only include pinned sources"),
onChanged: (value) {
ref
.read(onlyIncludePinnedSourceStateProvider.notifier)

View file

@ -0,0 +1,131 @@
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mangayomi/modules/more/settings/downloads/providers/downloads_state_provider.dart';
import 'package:mangayomi/utils/colors.dart';
import 'package:mangayomi/utils/media_query.dart';
class DownloadsScreen extends ConsumerStatefulWidget {
const DownloadsScreen({super.key});
@override
ConsumerState<DownloadsScreen> createState() => _DownloadsScreenState();
}
class _DownloadsScreenState extends ConsumerState<DownloadsScreen> {
@override
Widget build(
BuildContext context,
) {
final saveAsCBZArchiveState = ref.watch(saveAsCBZArchiveStateProvider);
final onlyOnWifiState = ref.watch(onlyOnWifiStateProvider);
final downloadLocationState = ref.watch(downloadLocationStateProvider);
ref.read(downloadLocationStateProvider.notifier).refresh();
return Scaffold(
appBar: AppBar(
title: const Text("Downloads"),
),
body: Column(
children: [
ListTile(
onTap: () {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: const Text(
"Download location",
),
content: SizedBox(
width: mediaWidth(context, 0.8),
child: ListView(
shrinkWrap: true,
children: [
RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: downloadLocationState.$2.isEmpty
? downloadLocationState.$1
: downloadLocationState.$2,
groupValue: downloadLocationState.$1,
onChanged: (value) {
ref
.read(downloadLocationStateProvider
.notifier)
.set("");
Navigator.pop(context);
},
title: Row(
children: [Text(downloadLocationState.$1)],
),
),
RadioListTile(
dense: true,
contentPadding: const EdgeInsets.all(0),
value: downloadLocationState.$2.isEmpty
? downloadLocationState.$1
: downloadLocationState.$2,
groupValue: downloadLocationState.$2,
onChanged: (value) async {
String? result = await FilePicker.platform
.getDirectoryPath();
if (result != null) {
ref
.read(downloadLocationStateProvider
.notifier)
.set(result);
} else {}
if (!mounted) return;
Navigator.pop(context);
},
title: const Row(
children: [Text("Custom location")],
),
),
],
)),
actions: [
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
TextButton(
onPressed: () async {
Navigator.pop(context);
},
child: Text(
"Cancel",
style:
TextStyle(color: primaryColor(context)),
)),
],
)
],
);
});
},
title: const Text("Download location"),
subtitle: Text(
downloadLocationState.$2.isEmpty
? downloadLocationState.$1
: downloadLocationState.$2,
style: TextStyle(fontSize: 11, color: secondaryColor(context)),
),
),
SwitchListTile(
value: onlyOnWifiState,
title: const Text("Only on wifi"),
onChanged: (value) {
ref.read(onlyOnWifiStateProvider.notifier).set(value);
}),
SwitchListTile(
value: saveAsCBZArchiveState,
title: const Text("Save as CBZ archive"),
onChanged: (value) {
ref.read(saveAsCBZArchiveStateProvider.notifier).set(value);
}),
],
),
);
}
}

View file

@ -0,0 +1,63 @@
import 'dart:io';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/settings.dart';
import 'package:mangayomi/providers/storage_provider.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'downloads_state_provider.g.dart';
@riverpod
class OnlyOnWifiState extends _$OnlyOnWifiState {
@override
bool build() {
return isar.settings.getSync(227)!.downloadOnlyOnWifi ?? false;
}
void set(bool value) {
final settings = isar.settings.getSync(227);
state = value;
isar.writeTxnSync(
() => isar.settings.putSync(settings!..downloadOnlyOnWifi = value));
}
}
@riverpod
class SaveAsCBZArchiveState extends _$SaveAsCBZArchiveState {
@override
bool build() {
return isar.settings.getSync(227)!.saveAsCBZArchive ?? false;
}
void set(bool value) {
final settings = isar.settings.getSync(227);
state = value;
isar.writeTxnSync(
() => isar.settings.putSync(settings!..saveAsCBZArchive = value));
}
}
@riverpod
class DownloadLocationState extends _$DownloadLocationState {
@override
(String, String) build() {
return ("", isar.settings.getSync(227)!.downloadLocation ?? "");
}
void set(String location) {
final settings = isar.settings.getSync(227);
state = ("${_storageProvider!.path}downloads", location);
isar.writeTxnSync(
() => isar.settings.putSync(settings!..downloadLocation = location));
}
Directory? _storageProvider;
Future refresh() async {
_storageProvider = await StorageProvider().getDirectory();
final settings = isar.settings.getSync(227);
state = (
"${_storageProvider!.path}downloads",
settings!.downloadLocation ?? ""
);
}
}

View file

@ -0,0 +1,59 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'downloads_state_provider.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$onlyOnWifiStateHash() => r'613d0fd2a72fdfeb0c8da05dc8ed4144cc8df6f5';
/// See also [OnlyOnWifiState].
@ProviderFor(OnlyOnWifiState)
final onlyOnWifiStateProvider =
AutoDisposeNotifierProvider<OnlyOnWifiState, bool>.internal(
OnlyOnWifiState.new,
name: r'onlyOnWifiStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$onlyOnWifiStateHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$OnlyOnWifiState = AutoDisposeNotifier<bool>;
String _$saveAsCBZArchiveStateHash() =>
r'81c4d07dc96f0fae33274f2067911e5b94ac6161';
/// See also [SaveAsCBZArchiveState].
@ProviderFor(SaveAsCBZArchiveState)
final saveAsCBZArchiveStateProvider =
AutoDisposeNotifierProvider<SaveAsCBZArchiveState, bool>.internal(
SaveAsCBZArchiveState.new,
name: r'saveAsCBZArchiveStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$saveAsCBZArchiveStateHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$SaveAsCBZArchiveState = AutoDisposeNotifier<bool>;
String _$downloadLocationStateHash() =>
r'92db9558ed1275edfb1a6f8dca3d87905e985f95';
/// See also [DownloadLocationState].
@ProviderFor(DownloadLocationState)
final downloadLocationStateProvider = AutoDisposeNotifierProvider<
DownloadLocationState, (String, String)>.internal(
DownloadLocationState.new,
name: r'downloadLocationStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$downloadLocationStateHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$DownloadLocationState = AutoDisposeNotifier<(String, String)>;
// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions

View file

@ -62,10 +62,7 @@ class GeneralScreen extends ConsumerWidget {
);
});
},
title: const Text(
"App language",
style: TextStyle(),
),
title: const Text("App language"),
subtitle: Text(
"English",
style: TextStyle(fontSize: 11, color: secondaryColor(context)),

View file

@ -76,10 +76,7 @@ class ReaderScreen extends ConsumerWidget {
);
});
},
title: const Text(
"Default reading mode",
style: TextStyle(),
),
title: const Text("Default reading mode"),
subtitle: Text(
getReaderModeName(defaultReadingMode),
style: TextStyle(fontSize: 11, color: secondaryColor(context)),
@ -139,10 +136,7 @@ class ReaderScreen extends ConsumerWidget {
);
});
},
title: const Text(
"Double tap animation speed",
style: TextStyle(),
),
title: const Text("Double tap animation speed"),
subtitle: Text(
getAnimationSpeedName(doubleTapAnimationSpeed),
style: TextStyle(fontSize: 11, color: secondaryColor(context)),

View file

@ -21,7 +21,7 @@ class SettingsScreen extends StatelessWidget {
onTap: () => context.push('/general')),
ListTileWidget(
title: 'Appearance',
subtitle: 'Theme',
subtitle: 'Theme, date & time format',
icon: Icons.color_lens_rounded,
onTap: () => context.push('/appearance')),
// ListTileWidget(
@ -34,6 +34,11 @@ class SettingsScreen extends StatelessWidget {
subtitle: 'Reading mode, display, navigation',
icon: Icons.chrome_reader_mode_rounded,
onTap: () => context.push('/readerMode')),
ListTileWidget(
title: 'Downloads',
subtitle: 'Downloads settings',
icon: Icons.download_outlined,
onTap: () => context.push('/downloads')),
ListTileWidget(
title: 'Browse',
subtitle: 'Sources, global search',

View file

@ -6,6 +6,7 @@ import 'package:mangayomi/models/manga_type.dart';
import 'package:mangayomi/modules/local_reader/local_reader_screen.dart';
import 'package:mangayomi/modules/local_reader/models/models.dart';
import 'package:mangayomi/modules/local_reader/reader/local_reader_reader_view.dart';
import 'package:mangayomi/modules/more/settings/downloads/downloads_screen.dart';
import 'package:mangayomi/modules/webview/webview.dart';
import 'package:mangayomi/modules/browse/browse_screen.dart';
import 'package:mangayomi/modules/browse/extension/extension_lang.dart';
@ -321,6 +322,19 @@ class AsyncRouterNotifier extends ChangeNotifier {
);
},
),
GoRoute(
path: "/downloads",
name: "downloads",
builder: (context, state) {
return const DownloadsScreen();
},
pageBuilder: (context, state) {
return CustomTransition(
key: state.pageKey,
child: const DownloadsScreen(),
);
},
),
GoRoute(
path: "/localReaderReaderView",
name: "localReaderReaderView",