Add option to update tracking on manual mark as read
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
import { t as translate } from 'i18next';
|
||||
import gql from 'graphql-tag';
|
||||
import { DocumentNode } from '@apollo/client';
|
||||
import { ChapterOffset, TChapter, TranslationKey } from '@/typings.ts';
|
||||
import { ChapterOffset, TChapter, TManga, TranslationKey } from '@/typings.ts';
|
||||
import { makeToast } from '@/components/util/Toast.tsx';
|
||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||
import { getMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
||||
@@ -78,6 +78,7 @@ export const actionToTranslationKey: {
|
||||
};
|
||||
|
||||
export type ChapterIdInfo = Pick<TChapter, 'id'>;
|
||||
export type ChapterMangaInfo = Pick<TChapter, 'mangaId'>;
|
||||
export type ChapterDownloadInfo = ChapterIdInfo & Pick<TChapter, 'isDownloaded'>;
|
||||
export type ChapterBookmarkInfo = ChapterIdInfo & Pick<TChapter, 'isBookmarked'>;
|
||||
export type ChapterReadInfo = ChapterIdInfo & Pick<TChapter, 'isRead'>;
|
||||
@@ -207,8 +208,10 @@ export class Chapters {
|
||||
static async markAsRead(
|
||||
chapters: (ChapterDownloadInfo & ChapterBookmarkInfo)[],
|
||||
wasManuallyMarkedAsRead: boolean = false,
|
||||
trackProgressMangaId?: TManga['id'],
|
||||
): Promise<void> {
|
||||
const { deleteChaptersManuallyMarkedRead, deleteChaptersWithBookmark } = await getMetadataServerSettings();
|
||||
const { deleteChaptersManuallyMarkedRead, deleteChaptersWithBookmark, updateProgressManualMarkRead } =
|
||||
await getMetadataServerSettings();
|
||||
const chapterIdsToDelete =
|
||||
deleteChaptersManuallyMarkedRead && wasManuallyMarkedAsRead
|
||||
? Chapters.getIds(Chapters.getDeletable(chapters, deleteChaptersWithBookmark))
|
||||
@@ -221,6 +224,8 @@ export class Chapters {
|
||||
isRead: true,
|
||||
lastPageRead: 0,
|
||||
chapterIdsToDelete,
|
||||
trackProgressMangaId:
|
||||
updateProgressManualMarkRead && wasManuallyMarkedAsRead ? trackProgressMangaId : undefined,
|
||||
}).response,
|
||||
);
|
||||
}
|
||||
@@ -268,14 +273,17 @@ export class Chapters {
|
||||
chapterIds: number[],
|
||||
{
|
||||
wasManuallyMarkedAsRead,
|
||||
trackProgressMangaId,
|
||||
chapters,
|
||||
}: Action extends 'mark_as_read'
|
||||
? {
|
||||
wasManuallyMarkedAsRead: boolean;
|
||||
trackProgressMangaId?: TManga['id'];
|
||||
chapters: (ChapterDownloadInfo & ChapterBookmarkInfo & ChapterReadInfo)[];
|
||||
}
|
||||
: {
|
||||
wasManuallyMarkedAsRead?: never;
|
||||
trackProgressMangaId?: never;
|
||||
chapters?: never;
|
||||
},
|
||||
): Promise<void> {
|
||||
@@ -285,7 +293,7 @@ export class Chapters {
|
||||
case 'delete':
|
||||
return Chapters.delete(chapterIds);
|
||||
case 'mark_as_read':
|
||||
return Chapters.markAsRead(chapters!, wasManuallyMarkedAsRead!);
|
||||
return Chapters.markAsRead(chapters!, wasManuallyMarkedAsRead!, trackProgressMangaId);
|
||||
case 'mark_as_unread':
|
||||
return Chapters.markAsUnread(chapterIds);
|
||||
case 'bookmark':
|
||||
|
||||
@@ -300,7 +300,7 @@ export class Mangas {
|
||||
|
||||
static async markAsRead(mangaIds: number[], wasManuallyMarkedAsRead: boolean = false): Promise<void> {
|
||||
const chapters = await Mangas.getChapterIdsWithState(mangaIds, { isRead: false });
|
||||
return Chapters.markAsRead(chapters, wasManuallyMarkedAsRead);
|
||||
return Chapters.markAsRead(chapters, wasManuallyMarkedAsRead, mangaIds.length === 1 ? mangaIds[0] : undefined);
|
||||
}
|
||||
|
||||
static async markAsUnread(mangaIds: number[]): Promise<void> {
|
||||
|
||||
@@ -328,6 +328,7 @@ export const FULL_CHAPTER_FIELDS = gql`
|
||||
isRead
|
||||
lastPageRead
|
||||
lastReadAt
|
||||
mangaId
|
||||
manga {
|
||||
id
|
||||
title
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -146,6 +146,7 @@ export const UPDATE_CHAPTER = gql`
|
||||
`;
|
||||
|
||||
export const UPDATE_CHAPTERS = gql`
|
||||
${BASE_TRACK_RECORD_FIELDS}
|
||||
mutation UPDATE_CHAPTERS(
|
||||
$input: UpdateChaptersInput!
|
||||
$getBookmarked: Boolean!
|
||||
@@ -153,6 +154,8 @@ export const UPDATE_CHAPTERS = gql`
|
||||
$getLastPageRead: Boolean!
|
||||
$chapterIdsToDelete: [Int!]!
|
||||
$deleteChapters: Boolean!
|
||||
$mangaId: Int!
|
||||
$trackProgress: Boolean!
|
||||
) {
|
||||
updateChapters(input: $input) {
|
||||
clientMutationId
|
||||
@@ -192,5 +195,10 @@ export const UPDATE_CHAPTERS = gql`
|
||||
}
|
||||
}
|
||||
}
|
||||
trackProgress(input: { mangaId: $mangaId }) @include(if: $trackProgress) {
|
||||
trackRecords {
|
||||
...BASE_TRACK_RECORD_FIELDS
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
@@ -48,6 +48,7 @@ const GLOBAL_METADATA_KEYS: AppMetadataKeys[] = [
|
||||
|
||||
// tracking
|
||||
'updateProgressAfterReading',
|
||||
'updateProgressManualMarkRead',
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
@@ -44,6 +44,7 @@ export const getDefaultSettings = (): MetadataServerSettings => ({
|
||||
|
||||
// tracking
|
||||
updateProgressAfterReading: true,
|
||||
updateProgressManualMarkRead: false,
|
||||
});
|
||||
|
||||
export const convertSettingsToMetadata = (
|
||||
|
||||
@@ -287,6 +287,7 @@ import {
|
||||
TRACKER_UPDATE_BIND,
|
||||
} from '@/lib/graphql/mutations/TrackerMutation.ts';
|
||||
import { ControlledPromise } from '@/lib/ControlledPromise.ts';
|
||||
import { TManga } from '@/typings.ts';
|
||||
|
||||
enum GQLMethod {
|
||||
QUERY = 'QUERY',
|
||||
@@ -1942,10 +1943,10 @@ export class RequestManager {
|
||||
|
||||
public updateChapters(
|
||||
ids: number[],
|
||||
patch: UpdateChapterPatchInput & { chapterIdsToDelete?: number[] },
|
||||
patch: UpdateChapterPatchInput & { chapterIdsToDelete?: number[]; trackProgressMangaId?: TManga['id'] },
|
||||
options?: MutationOptions<UpdateChaptersMutation, UpdateChaptersMutationVariables>,
|
||||
): AbortableApolloMutationResponse<UpdateChaptersMutation> {
|
||||
const { chapterIdsToDelete = [], ...updatePatch } = patch;
|
||||
const { chapterIdsToDelete = [], trackProgressMangaId = -1, ...updatePatch } = patch;
|
||||
|
||||
return this.doRequest<UpdateChaptersMutation, UpdateChaptersMutationVariables>(
|
||||
GQLMethod.MUTATION,
|
||||
@@ -1957,6 +1958,8 @@ export class RequestManager {
|
||||
getLastPageRead: patch.lastPageRead != null,
|
||||
chapterIdsToDelete,
|
||||
deleteChapters: !!chapterIdsToDelete.length,
|
||||
mangaId: trackProgressMangaId,
|
||||
trackProgress: trackProgressMangaId >= 0,
|
||||
},
|
||||
options,
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user