From a1c0ec82b8916cc8aaa57b67c327cd6ef79dec9f Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Sat, 20 Apr 2024 22:14:01 +0200 Subject: [PATCH] Add setting to disable tracking update while reading --- public/locales/en.json | 3 ++ src/lib/metadata/metadata.ts | 3 ++ src/lib/metadata/metadataServerSettings.ts | 3 ++ src/screens/Reader.tsx | 5 ++- src/screens/settings/TrackingSettings.tsx | 50 +++++++++++++++++----- src/typings.ts | 7 ++- 6 files changed, 58 insertions(+), 13 deletions(-) diff --git a/public/locales/en.json b/public/locales/en.json index 37ef5534..bac21960 100644 --- a/public/locales/en.json +++ b/public/locales/en.json @@ -1126,6 +1126,9 @@ "log_out": "Log out from {{name}}" } }, + "label": { + "update_progress_reading": "Update progress after reading" + }, "title": { "settings": "Tracking settings", "trackers": "Trackers" diff --git a/src/lib/metadata/metadata.ts b/src/lib/metadata/metadata.ts index 139ae74d..49727203 100644 --- a/src/lib/metadata/metadata.ts +++ b/src/lib/metadata/metadata.ts @@ -45,6 +45,9 @@ const GLOBAL_METADATA_KEYS: AppMetadataKeys[] = [ // browse 'hideLibraryEntries', + + // tracking + 'updateProgressAfterReading', ]; /** diff --git a/src/lib/metadata/metadataServerSettings.ts b/src/lib/metadata/metadataServerSettings.ts index 1aa0c18e..63607f0e 100644 --- a/src/lib/metadata/metadataServerSettings.ts +++ b/src/lib/metadata/metadataServerSettings.ts @@ -41,6 +41,9 @@ export const getDefaultSettings = (): MetadataServerSettings => ({ // browse hideLibraryEntries: false, + + // tracking + updateProgressAfterReading: true, }); export const convertSettingsToMetadata = ( diff --git a/src/screens/Reader.tsx b/src/screens/Reader.tsx index 2f9e363e..4a03da47 100644 --- a/src/screens/Reader.tsx +++ b/src/screens/Reader.tsx @@ -253,7 +253,10 @@ export function Reader() { .updateChapter(chapter.id, { ...patch, chapterIdToDelete: getChapterIdToDelete(), - trackProgressMangaId: patch.isRead && manga.trackRecords.totalCount ? manga.id : undefined, + trackProgressMangaId: + metadataSettings.updateProgressAfterReading && patch.isRead && manga.trackRecords.totalCount + ? manga.id + : undefined, }) .response.catch(); }; diff --git a/src/screens/settings/TrackingSettings.tsx b/src/screens/settings/TrackingSettings.tsx index e3ac6fdb..2383fc03 100644 --- a/src/screens/settings/TrackingSettings.tsx +++ b/src/screens/settings/TrackingSettings.tsx @@ -11,11 +11,20 @@ import { useContext, useEffect } from 'react'; import List from '@mui/material/List'; import ListSubheader from '@mui/material/ListSubheader'; +import ListItem from '@mui/material/ListItem'; +import ListItemText from '@mui/material/ListItemText'; +import Switch from '@mui/material/Switch'; import { NavBarContext } from '@/components/context/NavbarContext.tsx'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { EmptyView } from '@/components/util/EmptyView.tsx'; import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx'; import { SettingsTrackerCard } from '@/components/tracker/SettingsTrackerCard.tsx'; +import { + createUpdateMetadataServerSettings, + useMetadataServerSettings, +} from '@/lib/metadata/metadataServerSettings.ts'; +import { MetadataTrackingSettings } from '@/typings.ts'; +import { makeToast } from '@/components/util/Toast.tsx'; export const TrackingSettings = () => { const { t } = useTranslation(); @@ -25,6 +34,13 @@ export const TrackingSettings = () => { setTitle(t('tracking.settings.title.settings')); }, [t]); + const { + settings: { updateProgressAfterReading }, + } = useMetadataServerSettings(); + const updateTrackingSettings = createUpdateMetadataServerSettings(() => + makeToast(t('global.error.label.failed_to_save_changes'), 'error'), + ); + const { data, loading, error } = requestManager.useGetTrackerList(); const trackers = data?.trackers.nodes ?? []; @@ -37,16 +53,28 @@ export const TrackingSettings = () => { } return ( - - {t('tracking.settings.title.trackers')} - - } - > - {trackers.map((tracker) => ( - - ))} - + <> + + + + updateTrackingSettings('updateProgressAfterReading', e.target.checked)} + /> + + + + {t('tracking.settings.title.trackers')} + + } + > + {trackers.map((tracker) => ( + + ))} + + ); }; diff --git a/src/typings.ts b/src/typings.ts index e97c4135..148f791f 100644 --- a/src/typings.ts +++ b/src/typings.ts @@ -249,11 +249,16 @@ export type MetadataBrowseSettings = { hideLibraryEntries: boolean; }; +export type MetadataTrackingSettings = { + updateProgressAfterReading: boolean; +}; + export type MetadataServerSettings = MetadataDownloadSettings & MetadataLibrarySettings & MetadataClientSettings & MetadataMigrationSettings & - MetadataBrowseSettings; + MetadataBrowseSettings & + MetadataTrackingSettings; export interface ISearchSettings { ignoreFilters: boolean;