From da5c350be8a9b3335896977a3184f1a86145f192 Mon Sep 17 00:00:00 2001 From: kodjomoustapha <107993382+kodjodevf@users.noreply.github.com> Date: Thu, 21 Dec 2023 23:00:50 +0100 Subject: [PATCH] + --- lib/l10n/app_ar.arb | 3 +- lib/l10n/app_en.arb | 3 +- lib/l10n/app_es.arb | 3 +- lib/l10n/app_fr.arb | 3 +- lib/l10n/app_id.arb | 3 +- lib/l10n/app_it.arb | 3 +- lib/l10n/app_pt.arb | 3 +- lib/l10n/app_pt_BR.arb | 3 +- lib/l10n/app_ru.arb | 3 +- lib/l10n/app_tr.arb | 3 +- lib/models/settings.dart | 9 +- lib/models/settings.g.dart | 91 +++++++++++++++++-- .../providers/reader_controller_provider.dart | 4 + .../track/providers/track_providers.dart | 16 ++++ .../track/providers/track_providers.g.dart | 18 ++++ lib/modules/more/settings/track/track.dart | 10 ++ 16 files changed, 160 insertions(+), 18 deletions(-) diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb index 6e1a9a2e..dcdbbe8f 100644 --- a/lib/l10n/app_ar.arb +++ b/lib/l10n/app_ar.arb @@ -272,5 +272,6 @@ "player": "لاعب", "markEpisodeAsSeenSetting": "في أي نقطة لوضع علامة على الحلقة كمشاهدة", "default_skip_intro_length": "طول تخطي المقدمة الافتراضي", - "default_playback_speed_length": "طول سرعة التشغيل الافتراضية" + "default_playback_speed_length": "طول سرعة التشغيل الافتراضية", + "updateProgressAfterReading": "تحديث التقدم بعد القراءة" } \ No newline at end of file diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 2eee7598..7eeb4975 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -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" } \ No newline at end of file diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index 655331c9..99532ca6 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -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" } \ No newline at end of file diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index 5641872f..9dc3a686 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -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" } \ No newline at end of file diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb index d7db7132..8877fe7a 100644 --- a/lib/l10n/app_id.arb +++ b/lib/l10n/app_id.arb @@ -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" } \ No newline at end of file diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb index 0435256e..6664daef 100644 --- a/lib/l10n/app_it.arb +++ b/lib/l10n/app_it.arb @@ -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" } \ No newline at end of file diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index 2bfb3c15..0a1295f7 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -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" } \ No newline at end of file diff --git a/lib/l10n/app_pt_BR.arb b/lib/l10n/app_pt_BR.arb index 145bfe43..a72a0414 100644 --- a/lib/l10n/app_pt_BR.arb +++ b/lib/l10n/app_pt_BR.arb @@ -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" } \ No newline at end of file diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 07cb45d3..6e6115bb 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -272,5 +272,6 @@ "player": "Игрок", "markEpisodeAsSeenSetting": "В какой момент отметить эпизод как просмотренный", "default_skip_intro_length": "Стандартная длина пропуска вступления", - "default_playback_speed_length": "Стандартная длина скорости воспроизведения" + "default_playback_speed_length": "Стандартная длина скорости воспроизведения", + "updateProgressAfterReading": "Обновить прогресс после чтения" } \ No newline at end of file diff --git a/lib/l10n/app_tr.arb b/lib/l10n/app_tr.arb index 228d05df..15e10b2d 100644 --- a/lib/l10n/app_tr.arb +++ b/lib/l10n/app_tr.arb @@ -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" } \ No newline at end of file diff --git a/lib/models/settings.dart b/lib/models/settings.dart index 5f3c97b1..ee4c2c1b 100644 --- a/lib/models/settings.dart +++ b/lib/models/settings.dart @@ -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 json) { animatePageTransitions = json['animatePageTransitions']; @@ -338,6 +341,7 @@ class Settings { defaultSkipIntroLength = json['defaultSkipIntroLength']; defaultDoubleTapToSkipLength = json['defaultDoubleTapToSkipLength']; defaultPlayBackSpeed = json['defaultPlayBackSpeed']; + updateProgressAfterReading = json['updateProgressAfterReading']; } Map toJson() => { @@ -427,7 +431,8 @@ class Settings { 'markEpisodeAsSeenType': markEpisodeAsSeenType, 'defaultSkipIntroLength': defaultSkipIntroLength, 'defaultDoubleTapToSkipLength': defaultDoubleTapToSkipLength, - 'defaultPlayBackSpeed': defaultPlayBackSpeed + 'defaultPlayBackSpeed': defaultPlayBackSpeed, + 'updateProgressAfterReading': updateProgressAfterReading }; } diff --git a/lib/models/settings.g.dart b/lib/models/settings.g.dart index 916226b6..d7bea305 100644 --- a/lib/models/settings.g.dart +++ b/lib/models/settings.g.dart @@ -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( @@ -1149,6 +1156,8 @@ P _settingsDeserializeProp

( 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 + updateProgressAfterReadingIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'updateProgressAfterReading', + )); + }); + } + + QueryBuilder + updateProgressAfterReadingIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'updateProgressAfterReading', + )); + }); + } + + QueryBuilder + updateProgressAfterReadingEqualTo(bool? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'updateProgressAfterReading', + value: value, + )); + }); + } + QueryBuilder usePageTapZonesIsNull() { return QueryBuilder.apply(this, (query) { @@ -6608,6 +6645,20 @@ extension SettingsQuerySortBy on QueryBuilder { }); } + QueryBuilder + sortByUpdateProgressAfterReading() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'updateProgressAfterReading', Sort.asc); + }); + } + + QueryBuilder + sortByUpdateProgressAfterReadingDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'updateProgressAfterReading', Sort.desc); + }); + } + QueryBuilder sortByUsePageTapZones() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'usePageTapZones', Sort.asc); @@ -7320,6 +7371,20 @@ extension SettingsQuerySortThenBy }); } + QueryBuilder + thenByUpdateProgressAfterReading() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'updateProgressAfterReading', Sort.asc); + }); + } + + QueryBuilder + thenByUpdateProgressAfterReadingDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'updateProgressAfterReading', Sort.desc); + }); + } + QueryBuilder thenByUsePageTapZones() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'usePageTapZones', Sort.asc); @@ -7692,6 +7757,13 @@ extension SettingsQueryWhereDistinct }); } + QueryBuilder + distinctByUpdateProgressAfterReading() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'updateProgressAfterReading'); + }); + } + QueryBuilder distinctByUsePageTapZones() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'usePageTapZones'); @@ -8158,6 +8230,13 @@ extension SettingsQueryProperty }); } + QueryBuilder + updateProgressAfterReadingProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'updateProgressAfterReading'); + }); + } + QueryBuilder usePageTapZonesProperty() { return QueryBuilder.apply(this, (query) { return query.addPropertyName(r'usePageTapZones'); diff --git a/lib/modules/manga/reader/providers/reader_controller_provider.dart b/lib/modules/manga/reader/providers/reader_controller_provider.dart index 2e097990..9e89e41c 100644 --- a/lib/modules/manga/reader/providers/reader_controller_provider.dart +++ b/lib/modules/manga/reader/providers/reader_controller_provider.dart @@ -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!); diff --git a/lib/modules/more/settings/track/providers/track_providers.dart b/lib/modules/more/settings/track/providers/track_providers.dart index 2be036b5..86423115 100644 --- a/lib/modules/more/settings/track/providers/track_providers.dart +++ b/lib/modules/more/settings/track/providers/track_providers.dart @@ -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)); + } +} diff --git a/lib/modules/more/settings/track/providers/track_providers.g.dart b/lib/modules/more/settings/track/providers/track_providers.g.dart index acf075f0..8ee71093 100644 --- a/lib/modules/more/settings/track/providers/track_providers.g.dart +++ b/lib/modules/more/settings/track/providers/track_providers.g.dart @@ -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.internal( + UpdateProgressAfterReadingState.new, + name: r'updateProgressAfterReadingStateProvider', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$updateProgressAfterReadingStateHash, + dependencies: null, + allTransitiveDependencies: null, +); + +typedef _$UpdateProgressAfterReadingState = AutoDisposeNotifier; // ignore_for_file: type=lint // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member diff --git a/lib/modules/more/settings/track/track.dart b/lib/modules/more/settings/track/track.dart index e1f54d17..3f13cdd3 100644 --- a/lib/modules/more/settings/track/track.dart +++ b/lib/modules/more/settings/track/track.dart @@ -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),