mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-03-11 17:25:32 +00:00
+
This commit is contained in:
parent
d9bcdd726b
commit
da5c350be8
16 changed files with 160 additions and 18 deletions
|
|
@ -272,5 +272,6 @@
|
|||
"player": "لاعب",
|
||||
"markEpisodeAsSeenSetting": "في أي نقطة لوضع علامة على الحلقة كمشاهدة",
|
||||
"default_skip_intro_length": "طول تخطي المقدمة الافتراضي",
|
||||
"default_playback_speed_length": "طول سرعة التشغيل الافتراضية"
|
||||
"default_playback_speed_length": "طول سرعة التشغيل الافتراضية",
|
||||
"updateProgressAfterReading": "تحديث التقدم بعد القراءة"
|
||||
}
|
||||
|
|
@ -272,5 +272,6 @@
|
|||
"player": "Player",
|
||||
"markEpisodeAsSeenSetting": "At what point to mark the episode as seen",
|
||||
"default_skip_intro_length": "Default Skip intro length",
|
||||
"default_playback_speed_length": "Default Playback speed length"
|
||||
"default_playback_speed_length": "Default Playback speed length",
|
||||
"updateProgressAfterReading": "Update progress after reading"
|
||||
}
|
||||
|
|
@ -272,5 +272,6 @@
|
|||
"player": "Jugador",
|
||||
"markEpisodeAsSeenSetting": "En qué punto marcar el episodio como visto",
|
||||
"default_skip_intro_length": "Duración predeterminada para saltar la introducción",
|
||||
"default_playback_speed_length": "Duración predeterminada de la velocidad de reproducción"
|
||||
"default_playback_speed_length": "Duración predeterminada de la velocidad de reproducción",
|
||||
"updateProgressAfterReading": "Actualizar el progreso después de leer"
|
||||
}
|
||||
|
|
@ -272,5 +272,6 @@
|
|||
"player": "Lecteur",
|
||||
"markEpisodeAsSeenSetting": "À quel moment marquer l'épisode comme vu",
|
||||
"default_skip_intro_length": "Longueur par défaut du passage de l'intro",
|
||||
"default_playback_speed_length": "Longueur par défaut de la vitesse de lecture"
|
||||
"default_playback_speed_length": "Longueur par défaut de la vitesse de lecture",
|
||||
"updateProgressAfterReading": "Synchroniser la progression après lecture"
|
||||
}
|
||||
|
|
@ -272,5 +272,6 @@
|
|||
"player": "Pemain",
|
||||
"markEpisodeAsSeenSetting": "Pada titik mana menandai episode sebagai terlihat",
|
||||
"default_skip_intro_length": "Panjang lewati intro default",
|
||||
"default_playback_speed_length": "Panjang kecepatan pemutaran default"
|
||||
"default_playback_speed_length": "Panjang kecepatan pemutaran default",
|
||||
"updateProgressAfterReading": "Perbarui kemajuan setelah membaca"
|
||||
}
|
||||
|
|
@ -272,5 +272,6 @@
|
|||
"player": "Giocatore",
|
||||
"markEpisodeAsSeenSetting": "In quale momento contrassegnare l'episodio come visto",
|
||||
"default_skip_intro_length": "Durata predefinita per saltare l'introduzione",
|
||||
"default_playback_speed_length": "Durata predefinita per la velocità di riproduzione"
|
||||
"default_playback_speed_length": "Durata predefinita per la velocità di riproduzione",
|
||||
"updateProgressAfterReading": "Aggiorna il progresso dopo aver letto"
|
||||
}
|
||||
|
|
@ -272,5 +272,6 @@
|
|||
"player": "Jogador",
|
||||
"markEpisodeAsSeenSetting": "Em que ponto marcar o episódio como visto",
|
||||
"default_skip_intro_length": "Duração padrão para pular a introdução",
|
||||
"default_playback_speed_length": "Duração padrão da velocidade de reprodução"
|
||||
"default_playback_speed_length": "Duração padrão da velocidade de reprodução",
|
||||
"updateProgressAfterReading": "Atualizar progresso após a leitura"
|
||||
}
|
||||
|
|
@ -272,5 +272,6 @@
|
|||
"player": "Jogador",
|
||||
"markEpisodeAsSeenSetting": "Em que ponto marcar o episódio como visto",
|
||||
"default_skip_intro_length": "Duração padrão para pular a introdução",
|
||||
"default_playback_speed_length": "Duração padrão da velocidade de reprodução"
|
||||
"default_playback_speed_length": "Duração padrão da velocidade de reprodução",
|
||||
"updateProgressAfterReading": "Atualize o progresso após a leitura"
|
||||
}
|
||||
|
|
@ -272,5 +272,6 @@
|
|||
"player": "Игрок",
|
||||
"markEpisodeAsSeenSetting": "В какой момент отметить эпизод как просмотренный",
|
||||
"default_skip_intro_length": "Стандартная длина пропуска вступления",
|
||||
"default_playback_speed_length": "Стандартная длина скорости воспроизведения"
|
||||
"default_playback_speed_length": "Стандартная длина скорости воспроизведения",
|
||||
"updateProgressAfterReading": "Обновить прогресс после чтения"
|
||||
}
|
||||
|
|
@ -272,5 +272,6 @@
|
|||
"player": "Oyuncu",
|
||||
"markEpisodeAsSeenSetting": "Bölümün izlendiği olarak işaretleneceği nokta",
|
||||
"default_skip_intro_length": "Varsayılan Giriş Atla süresi",
|
||||
"default_playback_speed_length": "Varsayılan Oynatma hızı süresi"
|
||||
"default_playback_speed_length": "Varsayılan Oynatma hızı süresi",
|
||||
"updateProgressAfterReading": "Okuduktan Sonra İlerlemeyi Güncelle"
|
||||
}
|
||||
|
|
@ -151,6 +151,8 @@ class Settings {
|
|||
|
||||
double? defaultPlayBackSpeed;
|
||||
|
||||
bool? updateProgressAfterReading;
|
||||
|
||||
Settings(
|
||||
{this.id = 227,
|
||||
this.displayType = DisplayType.compactGrid,
|
||||
|
|
@ -216,7 +218,8 @@ class Settings {
|
|||
this.markEpisodeAsSeenType = 85,
|
||||
this.defaultSkipIntroLength = 85,
|
||||
this.defaultDoubleTapToSkipLength = 10,
|
||||
this.defaultPlayBackSpeed = 1.0});
|
||||
this.defaultPlayBackSpeed = 1.0,
|
||||
this.updateProgressAfterReading = true});
|
||||
|
||||
Settings.fromJson(Map<String, dynamic> json) {
|
||||
animatePageTransitions = json['animatePageTransitions'];
|
||||
|
|
@ -338,6 +341,7 @@ class Settings {
|
|||
defaultSkipIntroLength = json['defaultSkipIntroLength'];
|
||||
defaultDoubleTapToSkipLength = json['defaultDoubleTapToSkipLength'];
|
||||
defaultPlayBackSpeed = json['defaultPlayBackSpeed'];
|
||||
updateProgressAfterReading = json['updateProgressAfterReading'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
|
|
@ -427,7 +431,8 @@ class Settings {
|
|||
'markEpisodeAsSeenType': markEpisodeAsSeenType,
|
||||
'defaultSkipIntroLength': defaultSkipIntroLength,
|
||||
'defaultDoubleTapToSkipLength': defaultDoubleTapToSkipLength,
|
||||
'defaultPlayBackSpeed': defaultPlayBackSpeed
|
||||
'defaultPlayBackSpeed': defaultPlayBackSpeed,
|
||||
'updateProgressAfterReading': updateProgressAfterReading
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -366,13 +366,18 @@ const SettingsSchema = CollectionSchema(
|
|||
name: r'themeIsDark',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'usePageTapZones': PropertySchema(
|
||||
r'updateProgressAfterReading': PropertySchema(
|
||||
id: 66,
|
||||
name: r'updateProgressAfterReading',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'usePageTapZones': PropertySchema(
|
||||
id: 67,
|
||||
name: r'usePageTapZones',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'userAgent': PropertySchema(
|
||||
id: 67,
|
||||
id: 68,
|
||||
name: r'userAgent',
|
||||
type: IsarType.string,
|
||||
)
|
||||
|
|
@ -770,8 +775,9 @@ void _settingsSerialize(
|
|||
);
|
||||
writer.writeLong(offsets[64], object.startDatebackup);
|
||||
writer.writeBool(offsets[65], object.themeIsDark);
|
||||
writer.writeBool(offsets[66], object.usePageTapZones);
|
||||
writer.writeString(offsets[67], object.userAgent);
|
||||
writer.writeBool(offsets[66], object.updateProgressAfterReading);
|
||||
writer.writeBool(offsets[67], object.usePageTapZones);
|
||||
writer.writeString(offsets[68], object.userAgent);
|
||||
}
|
||||
|
||||
Settings _settingsDeserialize(
|
||||
|
|
@ -902,8 +908,9 @@ Settings _settingsDeserialize(
|
|||
),
|
||||
startDatebackup: reader.readLongOrNull(offsets[64]),
|
||||
themeIsDark: reader.readBoolOrNull(offsets[65]),
|
||||
usePageTapZones: reader.readBoolOrNull(offsets[66]),
|
||||
userAgent: reader.readStringOrNull(offsets[67]),
|
||||
updateProgressAfterReading: reader.readBoolOrNull(offsets[66]),
|
||||
usePageTapZones: reader.readBoolOrNull(offsets[67]),
|
||||
userAgent: reader.readStringOrNull(offsets[68]),
|
||||
);
|
||||
object.chapterFilterBookmarkedList =
|
||||
reader.readObjectList<ChapterFilterBookmarked>(
|
||||
|
|
@ -1149,6 +1156,8 @@ P _settingsDeserializeProp<P>(
|
|||
case 66:
|
||||
return (reader.readBoolOrNull(offset)) as P;
|
||||
case 67:
|
||||
return (reader.readBoolOrNull(offset)) as P;
|
||||
case 68:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
default:
|
||||
throw IsarError('Unknown property with id $propertyId');
|
||||
|
|
@ -5595,6 +5604,34 @@ extension SettingsQueryFilter
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
updateProgressAfterReadingIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNull(
|
||||
property: r'updateProgressAfterReading',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
updateProgressAfterReadingIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNotNull(
|
||||
property: r'updateProgressAfterReading',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
updateProgressAfterReadingEqualTo(bool? value) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.equalTo(
|
||||
property: r'updateProgressAfterReading',
|
||||
value: value,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
usePageTapZonesIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
|
|
@ -6608,6 +6645,20 @@ extension SettingsQuerySortBy on QueryBuilder<Settings, Settings, QSortBy> {
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy>
|
||||
sortByUpdateProgressAfterReading() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'updateProgressAfterReading', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy>
|
||||
sortByUpdateProgressAfterReadingDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'updateProgressAfterReading', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy> sortByUsePageTapZones() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'usePageTapZones', Sort.asc);
|
||||
|
|
@ -7320,6 +7371,20 @@ extension SettingsQuerySortThenBy
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy>
|
||||
thenByUpdateProgressAfterReading() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'updateProgressAfterReading', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy>
|
||||
thenByUpdateProgressAfterReadingDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'updateProgressAfterReading', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy> thenByUsePageTapZones() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'usePageTapZones', Sort.asc);
|
||||
|
|
@ -7692,6 +7757,13 @@ extension SettingsQueryWhereDistinct
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QDistinct>
|
||||
distinctByUpdateProgressAfterReading() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'updateProgressAfterReading');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QDistinct> distinctByUsePageTapZones() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'usePageTapZones');
|
||||
|
|
@ -8158,6 +8230,13 @@ extension SettingsQueryProperty
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, bool?, QQueryOperations>
|
||||
updateProgressAfterReadingProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'updateProgressAfterReading');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, bool?, QQueryOperations> usePageTapZonesProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'usePageTapZones');
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import 'package:mangayomi/models/track.dart';
|
|||
import 'package:mangayomi/models/track_preference.dart';
|
||||
import 'package:mangayomi/modules/manga/detail/providers/track_state_providers.dart';
|
||||
import 'package:mangayomi/modules/more/providers/incognito_mode_state_provider.dart';
|
||||
import 'package:mangayomi/modules/more/settings/track/providers/track_providers.dart';
|
||||
import 'package:mangayomi/utils/chapter_recognition.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
part 'reader_controller_provider.g.dart';
|
||||
|
|
@ -350,6 +351,9 @@ class ReaderController extends _$ReaderController {
|
|||
|
||||
extension ChapterExtensions on Chapter {
|
||||
void updateTrackChapterRead(AutoDisposeNotifierProviderRef ref) {
|
||||
final updateProgressAfterReading =
|
||||
ref.watch(updateProgressAfterReadingStateProvider);
|
||||
if (!updateProgressAfterReading) return;
|
||||
final manga = this.manga.value!;
|
||||
final chapterNumber =
|
||||
ChapterRecognition().parseChapterNumber(manga.name!, name!);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import 'package:isar/isar.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/models/settings.dart';
|
||||
import 'package:mangayomi/models/track.dart';
|
||||
import 'package:mangayomi/models/track_preference.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
|
@ -45,3 +46,18 @@ class Tracks extends _$Tracks {
|
|||
isar.writeTxnSync(() => isar.tracks.deleteSync(track.id!));
|
||||
}
|
||||
}
|
||||
|
||||
@riverpod
|
||||
class UpdateProgressAfterReadingState extends _$UpdateProgressAfterReadingState {
|
||||
@override
|
||||
bool build() {
|
||||
return isar.settings.getSync(227)!.updateProgressAfterReading ?? true;
|
||||
}
|
||||
|
||||
void set(bool value) {
|
||||
final settings = isar.settings.getSync(227);
|
||||
state = value;
|
||||
isar.writeTxnSync(
|
||||
() => isar.settings.putSync(settings!..updateProgressAfterReading = value));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -167,5 +167,23 @@ class _TracksProviderElement
|
|||
@override
|
||||
int? get syncId => (origin as TracksProvider).syncId;
|
||||
}
|
||||
|
||||
String _$updateProgressAfterReadingStateHash() =>
|
||||
r'ad615c0c03d376adf8bc4728aac4288e61facee5';
|
||||
|
||||
/// See also [UpdateProgressAfterReadingState].
|
||||
@ProviderFor(UpdateProgressAfterReadingState)
|
||||
final updateProgressAfterReadingStateProvider =
|
||||
AutoDisposeNotifierProvider<UpdateProgressAfterReadingState, bool>.internal(
|
||||
UpdateProgressAfterReadingState.new,
|
||||
name: r'updateProgressAfterReadingStateProvider',
|
||||
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$updateProgressAfterReadingStateHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
typedef _$UpdateProgressAfterReadingState = AutoDisposeNotifier<bool>;
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import 'package:go_router/go_router.dart';
|
|||
import 'package:isar/isar.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/models/track_preference.dart';
|
||||
import 'package:mangayomi/modules/more/settings/track/providers/track_providers.dart';
|
||||
import 'package:mangayomi/modules/more/settings/track/widgets/track_listile.dart';
|
||||
import 'package:mangayomi/modules/more/widgets/list_tile_widget.dart';
|
||||
import 'package:mangayomi/providers/l10n_providers.dart';
|
||||
|
|
@ -18,6 +19,7 @@ class TrackScreen extends ConsumerWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final updateProgressAfterReading = ref.watch(updateProgressAfterReadingStateProvider);
|
||||
final l10n = l10nLocalizations(context)!;
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
|
|
@ -34,6 +36,14 @@ class TrackScreen extends ConsumerWidget {
|
|||
snapshot.hasData ? snapshot.data : [];
|
||||
return Column(
|
||||
children: [
|
||||
SwitchListTile(
|
||||
value: updateProgressAfterReading,
|
||||
title: Text(context.l10n.updateProgressAfterReading),
|
||||
onChanged: (value) {
|
||||
ref
|
||||
.read(updateProgressAfterReadingStateProvider.notifier)
|
||||
.set(value);
|
||||
}),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(
|
||||
left: 15, right: 15, bottom: 10, top: 5),
|
||||
|
|
|
|||
Loading…
Reference in a new issue