Feature/automatic chapter deletion more options (#484)
* Add missing translations keys * [Codegen] Update to latest server schema changes * [VersionMapping] Require server version "r1431" for preview * Rename "deleteChaptersAutoMarkedRead" metadata setting * Add more options to auto delete chapters while reading Makes it possible to delete the last to fifth to last read chapter instead of only being able to delete the last read chapter
This commit is contained in:
@@ -169,6 +169,8 @@ export function Reader() {
|
||||
const [pageToScrollTo, setPageToScrollTo] = useState<number | undefined>(undefined);
|
||||
const { setOverride, setTitle } = useContext(NavBarContext);
|
||||
const [retrievingNextChapter, setRetrievingNextChapter] = useState(false);
|
||||
const { data: mangaChaptersData } = requestManager.useGetMangaChapters(mangaId, { nextFetchPolicy: 'standby' });
|
||||
const mangaChapters = mangaChaptersData?.chapters.nodes;
|
||||
|
||||
const { settings: defaultSettings, loading: areDefaultSettingsLoading } = useDefaultReaderSettings();
|
||||
const [settings, setSettings] = useState(getReaderSettingsFor(manga, defaultSettings));
|
||||
@@ -176,11 +178,27 @@ export function Reader() {
|
||||
const { settings: metadataSettings } = useMetadataServerSettings();
|
||||
|
||||
const updateChapter = (patch: UpdateChapterPatchInput) => {
|
||||
const shouldDeleteChapter =
|
||||
!!patch.isRead &&
|
||||
metadataSettings.deleteChaptersAutoMarkedRead &&
|
||||
chapter.isDownloaded &&
|
||||
(!chapter.isBookmarked || metadataSettings.deleteChaptersWithBookmark);
|
||||
const isAutoDeletionEnabled = !!patch.isRead && !!metadataSettings.deleteChaptersWhileReading;
|
||||
|
||||
const getChapterIdToDelete = () => {
|
||||
if (!isAutoDeletionEnabled || !mangaChapters) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
const chapterToDeleteSourceOrder = Number(chapterIndex) - (metadataSettings.deleteChaptersWhileReading - 1);
|
||||
const chapterToDelete = mangaChapters.find(
|
||||
(mangaChapter) => mangaChapter.sourceOrder === chapterToDeleteSourceOrder,
|
||||
);
|
||||
|
||||
const shouldDeleteChapter =
|
||||
chapterToDelete?.isDownloaded &&
|
||||
(!chapterToDelete?.isBookmarked || metadataSettings.deleteChaptersWithBookmark);
|
||||
if (!shouldDeleteChapter) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return chapterToDelete.id;
|
||||
};
|
||||
|
||||
const shouldDownloadAhead =
|
||||
chapter.manga.inLibrary && !chapter.isRead && !!patch.isRead && isDownloadAheadEnabled;
|
||||
@@ -188,7 +206,7 @@ export function Reader() {
|
||||
requestManager
|
||||
.updateChapter(chapter.id, {
|
||||
...patch,
|
||||
deleteChapter: shouldDeleteChapter,
|
||||
chapterIdToDelete: getChapterIdToDelete(),
|
||||
downloadAheadMangaId: shouldDownloadAhead ? chapter.manga.id : undefined,
|
||||
})
|
||||
.response.catch(() => {});
|
||||
|
||||
@@ -20,6 +20,7 @@ import { DownloadAheadSetting } from '@/components/settings/downloads/DownloadAh
|
||||
import { useMetadataServerSettings } from '@/util/metadataServerSettings.ts';
|
||||
import { convertToGqlMeta, requestUpdateServerMetadata } from '@/util/metadata.ts';
|
||||
import { makeToast } from '@/components/util/Toast.tsx';
|
||||
import { DeleteChaptersWhileReadingSetting } from '@/components/settings/downloads/DeleteChaptersWhileReadingSetting.tsx';
|
||||
|
||||
type DownloadSettingsType = Pick<
|
||||
ServerSettings,
|
||||
@@ -97,12 +98,12 @@ export const DownloadSettings = () => {
|
||||
<List
|
||||
subheader={
|
||||
<ListSubheader component="div" id="download-settings-auto-download">
|
||||
Delete chapters
|
||||
{t('download.settings.delete_chapters.title')}
|
||||
</ListSubheader>
|
||||
}
|
||||
>
|
||||
<ListItem>
|
||||
<ListItemText primary="Delete chapter after manually marking it as read" />
|
||||
<ListItemText primary={t('download.settings.delete_chapters.label.manually_marked_as_read')} />
|
||||
<ListItemSecondaryAction>
|
||||
<Switch
|
||||
edge="end"
|
||||
@@ -113,18 +114,14 @@ export const DownloadSettings = () => {
|
||||
/>
|
||||
</ListItemSecondaryAction>
|
||||
</ListItem>
|
||||
<DeleteChaptersWhileReadingSetting
|
||||
chapterToDelete={metadataSettings.deleteChaptersWhileReading}
|
||||
handleChange={(chapterToDelete) =>
|
||||
updateMetadataSetting('deleteChaptersWhileReading', chapterToDelete)
|
||||
}
|
||||
/>
|
||||
<ListItem>
|
||||
<ListItemText primary="Delete finished chapters while reading" />
|
||||
<ListItemSecondaryAction>
|
||||
<Switch
|
||||
edge="end"
|
||||
checked={metadataSettings.deleteChaptersAutoMarkedRead}
|
||||
onChange={(e) => updateMetadataSetting('deleteChaptersAutoMarkedRead', e.target.checked)}
|
||||
/>
|
||||
</ListItemSecondaryAction>
|
||||
</ListItem>
|
||||
<ListItem>
|
||||
<ListItemText primary="Allow deleting bookmarked chapters" />
|
||||
<ListItemText primary={t('download.settings.delete_chapters.label.allow_deletion_of_bookmarked')} />
|
||||
<ListItemSecondaryAction>
|
||||
<Switch
|
||||
edge="end"
|
||||
|
||||
Reference in New Issue
Block a user