Trigger track progress on last page read of chapter (#690)

This commit is contained in:
schroda
2024-04-01 01:22:49 +02:00
committed by GitHub
parent 4f7a05f6fe
commit 5a2f77d124
6 changed files with 76 additions and 46 deletions

View File

@@ -227,11 +227,9 @@ export const FULL_TRACKER_FIELDS = gql`
} }
`; `;
export const FULL_TRACK_RECORD_FIELDS = gql` export const BASE_TRACK_RECORD_FIELDS = gql`
${FULL_TRACKER_FIELDS} fragment BASE_TRACK_RECORD_FIELDS on TrackRecordType {
fragment FULL_TRACK_RECORD_FIELDS on TrackRecordType {
id id
title
status status
lastChapterRead lastChapterRead
totalChapters totalChapters
@@ -239,8 +237,24 @@ export const FULL_TRACK_RECORD_FIELDS = gql`
displayScore displayScore
startDate startDate
finishDate finishDate
}
`;
export const QUERY_TRACK_RECORD_FIELDS = gql`
${BASE_TRACK_RECORD_FIELDS}
fragment QUERY_TRACK_RECORD_FIELDS on TrackRecordType {
...BASE_TRACK_RECORD_FIELDS
title
remoteUrl remoteUrl
remoteId remoteId
}
`;
export const FULL_TRACK_RECORD_FIELDS = gql`
${QUERY_TRACK_RECORD_FIELDS}
${FULL_TRACKER_FIELDS}
fragment FULL_TRACK_RECORD_FIELDS on TrackRecordType {
...QUERY_TRACK_RECORD_FIELDS
tracker { tracker {
...FULL_TRACKER_FIELDS ...FULL_TRACKER_FIELDS
} }

File diff suppressed because one or more lines are too long

View File

@@ -7,7 +7,7 @@
*/ */
import gql from 'graphql-tag'; import gql from 'graphql-tag';
import { FULL_CHAPTER_FIELDS } from '@/lib/graphql/Fragments'; import { BASE_TRACK_RECORD_FIELDS, FULL_CHAPTER_FIELDS } from '@/lib/graphql/Fragments';
export const DELETE_CHAPTER_METADATA = gql` export const DELETE_CHAPTER_METADATA = gql`
mutation DELETE_CHAPTER_METADATA($input: DeleteChapterMetaInput!) { mutation DELETE_CHAPTER_METADATA($input: DeleteChapterMetaInput!) {
@@ -88,6 +88,7 @@ export const SET_CHAPTER_METADATA = gql`
`; `;
export const UPDATE_CHAPTER = gql` export const UPDATE_CHAPTER = gql`
${BASE_TRACK_RECORD_FIELDS}
mutation UPDATE_CHAPTER( mutation UPDATE_CHAPTER(
$input: UpdateChapterInput! $input: UpdateChapterInput!
$getBookmarked: Boolean! $getBookmarked: Boolean!
@@ -95,6 +96,8 @@ export const UPDATE_CHAPTER = gql`
$getLastPageRead: Boolean! $getLastPageRead: Boolean!
$chapterIdToDelete: Int! $chapterIdToDelete: Int!
$deleteChapter: Boolean! $deleteChapter: Boolean!
$mangaId: Int!
$trackProgress: Boolean!
) { ) {
updateChapter(input: $input) { updateChapter(input: $input) {
clientMutationId clientMutationId
@@ -134,6 +137,11 @@ export const UPDATE_CHAPTER = gql`
} }
} }
} }
trackProgress(input: { mangaId: $mangaId }) @include(if: $trackProgress) {
trackRecords {
...BASE_TRACK_RECORD_FIELDS
}
}
} }
`; `;

View File

@@ -7,6 +7,7 @@
*/ */
import gql from 'graphql-tag'; import gql from 'graphql-tag';
import { BASE_TRACK_RECORD_FIELDS, QUERY_TRACK_RECORD_FIELDS } from '@/lib/graphql/Fragments.ts';
export const TRACKER_LOGIN_OAUTH = gql` export const TRACKER_LOGIN_OAUTH = gql`
mutation TRACKER_LOGIN_OAUTH($input: LoginTrackerOAuthInput!) { mutation TRACKER_LOGIN_OAUTH($input: LoginTrackerOAuthInput!) {
@@ -47,20 +48,11 @@ export const TRACKER_LOGOUT = gql`
`; `;
export const TRACKER_BIND = gql` export const TRACKER_BIND = gql`
${QUERY_TRACK_RECORD_FIELDS}
mutation TRACKER_BIND($mangaId: Int!, $remoteId: LongString!, $trackerId: Int!) { mutation TRACKER_BIND($mangaId: Int!, $remoteId: LongString!, $trackerId: Int!) {
bindTrack(input: { mangaId: $mangaId, remoteId: $remoteId, trackerId: $trackerId }) { bindTrack(input: { mangaId: $mangaId, remoteId: $remoteId, trackerId: $trackerId }) {
trackRecord { trackRecord {
id ...QUERY_TRACK_RECORD_FIELDS
title
status
lastChapterRead
totalChapters
score
displayScore
startDate
finishDate
remoteUrl
remoteId
tracker { tracker {
id id
} }
@@ -98,23 +90,11 @@ export const TRACKER_UNBIND = gql`
`; `;
export const TRACKER_UPDATE_BIND = gql` export const TRACKER_UPDATE_BIND = gql`
${QUERY_TRACK_RECORD_FIELDS}
mutation TRACKER_UPDATE_BIND($input: UpdateTrackInput!) { mutation TRACKER_UPDATE_BIND($input: UpdateTrackInput!) {
updateTrack(input: $input) { updateTrack(input: $input) {
trackRecord { trackRecord {
id ...QUERY_TRACK_RECORD_FIELDS
title
status
lastChapterRead
totalChapters
score
displayScore
startDate
finishDate
remoteUrl
remoteId
tracker {
id
}
manga { manga {
id id
trackRecords { trackRecords {
@@ -128,3 +108,14 @@ export const TRACKER_UPDATE_BIND = gql`
} }
} }
`; `;
export const TRACKER_TRACK_PROGRESS = gql`
${BASE_TRACK_RECORD_FIELDS}
mutation TRACKER_TRACK_PROGRESS($mangaId: Int!) {
trackProgress(input: { mangaId: $mangaId }) {
trackRecords {
...BASE_TRACK_RECORD_FIELDS
}
}
}
`;

View File

@@ -1887,10 +1887,11 @@ export class RequestManager {
id: number, id: number,
patch: UpdateChapterPatchInput & { patch: UpdateChapterPatchInput & {
chapterIdToDelete?: number; chapterIdToDelete?: number;
trackProgressMangaId?: number;
}, },
options?: MutationOptions<UpdateChapterMutation, UpdateChapterMutationVariables>, options?: MutationOptions<UpdateChapterMutation, UpdateChapterMutationVariables>,
): AbortableApolloMutationResponse<UpdateChapterMutation> { ): AbortableApolloMutationResponse<UpdateChapterMutation> {
const { chapterIdToDelete = -1, ...updatePatch } = patch; const { chapterIdToDelete = -1, trackProgressMangaId = -1, ...updatePatch } = patch;
return this.doRequest<UpdateChapterMutation, UpdateChapterMutationVariables>( return this.doRequest<UpdateChapterMutation, UpdateChapterMutationVariables>(
GQLMethod.MUTATION, GQLMethod.MUTATION,
@@ -1902,6 +1903,8 @@ export class RequestManager {
getLastPageRead: patch.lastPageRead != null, getLastPageRead: patch.lastPageRead != null,
chapterIdToDelete, chapterIdToDelete,
deleteChapter: chapterIdToDelete >= 0, deleteChapter: chapterIdToDelete >= 0,
mangaId: trackProgressMangaId,
trackProgress: trackProgressMangaId >= 0,
}, },
options, options,
); );

View File

@@ -253,6 +253,7 @@ export function Reader() {
.updateChapter(chapter.id, { .updateChapter(chapter.id, {
...patch, ...patch,
chapterIdToDelete: getChapterIdToDelete(), chapterIdToDelete: getChapterIdToDelete(),
trackProgressMangaId: manga.trackRecords.totalCount ? manga.id : undefined,
}) })
.response.catch(); .response.catch();
}; };