Add setting to disable tracking update while reading

This commit is contained in:
schroda
2024-04-20 22:14:01 +02:00
parent 6f12ae7e4a
commit a1c0ec82b8
6 changed files with 58 additions and 13 deletions

View File

@@ -1126,6 +1126,9 @@
"log_out": "Log out from {{name}}"
}
},
"label": {
"update_progress_reading": "Update progress after reading"
},
"title": {
"settings": "Tracking settings",
"trackers": "Trackers"

View File

@@ -45,6 +45,9 @@ const GLOBAL_METADATA_KEYS: AppMetadataKeys[] = [
// browse
'hideLibraryEntries',
// tracking
'updateProgressAfterReading',
];
/**

View File

@@ -41,6 +41,9 @@ export const getDefaultSettings = (): MetadataServerSettings => ({
// browse
hideLibraryEntries: false,
// tracking
updateProgressAfterReading: true,
});
export const convertSettingsToMetadata = (

View File

@@ -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();
};

View File

@@ -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<keyof MetadataTrackingSettings>(() =>
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 (
<List
subheader={
<ListSubheader component="div" id="tracking-trackers">
{t('tracking.settings.title.trackers')}
</ListSubheader>
}
>
{trackers.map((tracker) => (
<SettingsTrackerCard key={tracker.id} tracker={tracker} />
))}
</List>
<>
<List>
<ListItem>
<ListItemText primary={t('tracking.settings.label.update_progress_reading')} />
<Switch
edge="end"
checked={updateProgressAfterReading}
onChange={(e) => updateTrackingSettings('updateProgressAfterReading', e.target.checked)}
/>
</ListItem>
</List>
<List
subheader={
<ListSubheader component="div" id="tracking-trackers">
{t('tracking.settings.title.trackers')}
</ListSubheader>
}
>
{trackers.map((tracker) => (
<SettingsTrackerCard key={tracker.id} tracker={tracker} />
))}
</List>
</>
);
};

View File

@@ -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;