From aa6ededa10c032c1bf2a118cf58bd2b7ddf5fc2d Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Tue, 30 Jun 2026 15:33:57 +0200 Subject: [PATCH] Use new "fetchMangaAndChapters" mutation --- src/features/migration/MangaMigration.ts | 4 +- src/features/migration/Migration.types.ts | 2 +- src/features/migration/MigrationManager.ts | 6 +- src/lib/graphql/chapter/ChapterMutation.ts | 23 +-- src/lib/graphql/generated/apollo-helpers.ts | 20 +++ .../graphql/generated/graphql-base.types.ts | 21 +++ src/lib/graphql/generated/graphql.ts | 157 ++---------------- src/lib/graphql/manga/MangaMutation.ts | 33 +--- src/lib/requests/RequestManager.ts | 47 ++---- 9 files changed, 79 insertions(+), 234 deletions(-) diff --git a/src/features/migration/MangaMigration.ts b/src/features/migration/MangaMigration.ts index 07645ef0..13b91578 100644 --- a/src/features/migration/MangaMigration.ts +++ b/src/features/migration/MangaMigration.ts @@ -159,8 +159,8 @@ export class MangaMigration { await MangaMigration.migrate( mangaToMigrateData?.manga, - mangaToMigrateToData?.fetchManga?.manga, - mangaToMigrateToData?.fetchChapters?.chapters, + mangaToMigrateToData?.fetchMangaAndChapters?.manga, + mangaToMigrateToData?.fetchMangaAndChapters?.chapters, options, removeMangaFromCategories, ); diff --git a/src/features/migration/Migration.types.ts b/src/features/migration/Migration.types.ts index c5ebd94e..977ce019 100644 --- a/src/features/migration/Migration.types.ts +++ b/src/features/migration/Migration.types.ts @@ -166,7 +166,7 @@ export type TMigratableSource = NonNullable; -export type MangaToMigrateTo = NonNullable['manga']; +export type MangaToMigrateTo = NonNullable['manga']; export type MigrationChapter = ChapterIdInfo & ChapterReadInfo & diff --git a/src/features/migration/MigrationManager.ts b/src/features/migration/MigrationManager.ts index 209c6c4d..87e39c2b 100644 --- a/src/features/migration/MigrationManager.ts +++ b/src/features/migration/MigrationManager.ts @@ -861,10 +861,10 @@ export class MigrationManager { }).response, ); - if (updatedMatch.data?.fetchManga?.manga) { + if (updatedMatch.data?.fetchMangaAndChapters?.manga) { return { - manga: updatedMatch.data.fetchManga.manga, - chapters: updatedMatch.data.fetchChapters?.chapters ?? null, + manga: updatedMatch.data.fetchMangaAndChapters.manga, + chapters: updatedMatch.data.fetchMangaAndChapters?.chapters ?? null, }; } } catch (e) { diff --git a/src/lib/graphql/chapter/ChapterMutation.ts b/src/lib/graphql/chapter/ChapterMutation.ts index be7a2a7c..137e7336 100644 --- a/src/lib/graphql/chapter/ChapterMutation.ts +++ b/src/lib/graphql/chapter/ChapterMutation.ts @@ -7,9 +7,8 @@ */ import gql from 'graphql-tag'; -import { CHAPTER_LIST_FIELDS, CHAPTER_META_FIELDS } from '@/lib/graphql/chapter/ChapterFragments.ts'; +import { CHAPTER_META_FIELDS } from '@/lib/graphql/chapter/ChapterFragments.ts'; import { TRACK_RECORD_BIND_FIELDS } from '@/lib/graphql/tracker/TrackRecordFragments.ts'; -import { MANGA_CHAPTER_NODE_FIELDS, MANGA_CHAPTER_STAT_FIELDS } from '@/lib/graphql/manga/MangaFragments.ts'; // makes the server fetch and return the pages of a chapter export const GET_CHAPTER_PAGES_FETCH = gql` @@ -29,26 +28,6 @@ export const GET_CHAPTER_PAGES_FETCH = gql` } `; -// makes the server fetch and return the chapters of the manga -export const GET_MANGA_CHAPTERS_FETCH = gql` - ${CHAPTER_LIST_FIELDS} - ${MANGA_CHAPTER_STAT_FIELDS} - ${MANGA_CHAPTER_NODE_FIELDS} - - mutation GET_MANGA_CHAPTERS_FETCH($input: FetchChaptersInput!) { - fetchChapters(input: $input) { - chapters { - ...CHAPTER_LIST_FIELDS - manga { - id - ...MANGA_CHAPTER_STAT_FIELDS - ...MANGA_CHAPTER_NODE_FIELDS - } - } - } - } -`; - export const UPDATE_CHAPTER = gql` ${TRACK_RECORD_BIND_FIELDS} diff --git a/src/lib/graphql/generated/apollo-helpers.ts b/src/lib/graphql/generated/apollo-helpers.ts index 84fa6081..7a88b93e 100644 --- a/src/lib/graphql/generated/apollo-helpers.ts +++ b/src/lib/graphql/generated/apollo-helpers.ts @@ -570,6 +570,17 @@ export type FetchExtensionsPayloadFieldPolicy = { clientMutationId?: FieldPolicy | FieldReadFunction; extensions?: FieldPolicy | FieldReadFunction; }; +export type FetchMangaAndChaptersPayloadKeySpecifier = ( + | 'chapters' + | 'clientMutationId' + | 'manga' + | FetchMangaAndChaptersPayloadKeySpecifier +)[]; +export type FetchMangaAndChaptersPayloadFieldPolicy = { + chapters?: FieldPolicy | FieldReadFunction; + clientMutationId?: FieldPolicy | FieldReadFunction; + manga?: FieldPolicy | FieldReadFunction; +}; export type FetchMangaPayloadKeySpecifier = ('clientMutationId' | 'manga' | FetchMangaPayloadKeySpecifier)[]; export type FetchMangaPayloadFieldPolicy = { clientMutationId?: FieldPolicy | FieldReadFunction; @@ -905,6 +916,7 @@ export type MutationKeySpecifier = ( | 'fetchChapters' | 'fetchExtensions' | 'fetchManga' + | 'fetchMangaAndChapters' | 'fetchSourceManga' | 'fetchTrack' | 'installExternalExtension' @@ -985,6 +997,7 @@ export type MutationFieldPolicy = { fetchChapters?: FieldPolicy | FieldReadFunction; fetchExtensions?: FieldPolicy | FieldReadFunction; fetchManga?: FieldPolicy | FieldReadFunction; + fetchMangaAndChapters?: FieldPolicy | FieldReadFunction; fetchSourceManga?: FieldPolicy | FieldReadFunction; fetchTrack?: FieldPolicy | FieldReadFunction; installExternalExtension?: FieldPolicy | FieldReadFunction; @@ -2712,6 +2725,13 @@ export type StrictTypedTypePolicies = { keyFields?: false | FetchExtensionsPayloadKeySpecifier | (() => undefined | FetchExtensionsPayloadKeySpecifier); fields?: FetchExtensionsPayloadFieldPolicy; }; + FetchMangaAndChaptersPayload?: Omit & { + keyFields?: + | false + | FetchMangaAndChaptersPayloadKeySpecifier + | (() => undefined | FetchMangaAndChaptersPayloadKeySpecifier); + fields?: FetchMangaAndChaptersPayloadFieldPolicy; + }; FetchMangaPayload?: Omit & { keyFields?: false | FetchMangaPayloadKeySpecifier | (() => undefined | FetchMangaPayloadKeySpecifier); fields?: FetchMangaPayloadFieldPolicy; diff --git a/src/lib/graphql/generated/graphql-base.types.ts b/src/lib/graphql/generated/graphql-base.types.ts index 68784119..a044a551 100644 --- a/src/lib/graphql/generated/graphql-base.types.ts +++ b/src/lib/graphql/generated/graphql-base.types.ts @@ -828,6 +828,20 @@ export type FetchExtensionsPayload = { extensions: Array; }; +export type FetchMangaAndChaptersInput = { + clientMutationId?: InputMaybe; + fetchChapters: Scalars['Boolean']['input']; + fetchManga: Scalars['Boolean']['input']; + id: Scalars['Int']['input']; +}; + +export type FetchMangaAndChaptersPayload = { + __typename?: 'FetchMangaAndChaptersPayload'; + chapters: Array; + clientMutationId?: Maybe; + manga: MangaType; +}; + export type FetchMangaInput = { clientMutationId?: InputMaybe; id: Scalars['Int']['input']; @@ -1346,9 +1360,12 @@ export type Mutation = { enqueueChapterDownload?: Maybe; enqueueChapterDownloads?: Maybe; fetchChapterPages?: Maybe; + /** @deprecated Deprecated in Tachiyomix 1.6, replace with fetchMangaAndChapters */ fetchChapters?: Maybe; fetchExtensions?: Maybe; + /** @deprecated Deprecated in Tachiyomix 1.6, replace with fetchMangaAndChapters */ fetchManga?: Maybe; + fetchMangaAndChapters?: Maybe; fetchSourceManga?: Maybe; fetchTrack: FetchTrackPayload; installExternalExtension?: Maybe; @@ -1512,6 +1529,10 @@ export type MutationFetchMangaArgs = { input: FetchMangaInput; }; +export type MutationFetchMangaAndChaptersArgs = { + input: FetchMangaAndChaptersInput; +}; + export type MutationFetchSourceMangaArgs = { input: FetchSourceMangaInput; }; diff --git a/src/lib/graphql/generated/graphql.ts b/src/lib/graphql/generated/graphql.ts index ad4934fd..cfad9925 100644 --- a/src/lib/graphql/generated/graphql.ts +++ b/src/lib/graphql/generated/graphql.ts @@ -529,67 +529,6 @@ export type GetChapterPagesFetchMutation = { } | null; }; -export type GetMangaChaptersFetchMutationVariables = Exact<{ - input: Types.FetchChaptersInput; -}>; - -export type GetMangaChaptersFetchMutation = { - __typename: 'Mutation'; - fetchChapters: { - __typename: 'FetchChaptersPayload'; - chapters: Array<{ - __typename: 'ChapterType'; - fetchedAt: string; - uploadDate: string; - lastReadAt: string; - id: number; - name: string; - mangaId: number; - scanlator: string | null; - realUrl: string | null; - sourceOrder: number; - chapterNumber: number; - isRead: boolean; - isDownloaded: boolean; - isBookmarked: boolean; - manga: { - __typename: 'MangaType'; - id: number; - unreadCount: number; - downloadCount: number; - bookmarkCount: number; - hasDuplicateChapters: boolean; - chapters: { __typename: 'ChapterNodeList'; totalCount: number }; - firstUnreadChapter: { - __typename: 'ChapterType'; - id: number; - sourceOrder: number; - isRead: boolean; - mangaId: number; - chapterNumber: number; - name: string; - scanlator: string | null; - } | null; - lastReadChapter: { - __typename: 'ChapterType'; - id: number; - sourceOrder: number; - lastReadAt: string; - } | null; - latestReadChapter: { - __typename: 'ChapterType'; - id: number; - sourceOrder: number; - lastReadAt: string; - } | null; - latestFetchedChapter: { __typename: 'ChapterType'; id: number; fetchedAt: string } | null; - latestUploadedChapter: { __typename: 'ChapterType'; id: number; uploadDate: string } | null; - highestNumberedChapter: { __typename: 'ChapterType'; id: number; chapterNumber: number } | null; - }; - }>; - } | null; -}; - export type UpdateChapterMutationVariables = Exact<{ input: Types.UpdateChapterInput; getBookmarked: boolean; @@ -1778,15 +1717,17 @@ export type MangaLibraryDuplicateScreenFieldsFragment = { chapters: { __typename: 'ChapterNodeList'; totalCount: number }; }; -export type GetMangaFetchMutationVariables = Exact<{ - input: Types.FetchMangaInput; +export type RefreshMangaMutationVariables = Exact<{ + id: number; + fetchManga: boolean; + fetchChapters: boolean; }>; -export type GetMangaFetchMutation = { +export type RefreshMangaMutation = { __typename: 'Mutation'; - fetchManga: { - __typename: 'FetchMangaPayload'; - manga: { + fetchMangaAndChapters: { + __typename: 'FetchMangaAndChaptersPayload'; + manga?: { __typename: 'MangaType'; artist: string | null; author: string | null; @@ -1843,18 +1784,7 @@ export type GetMangaFetchMutation = { highestNumberedChapter: { __typename: 'ChapterType'; id: number; chapterNumber: number } | null; chapters: { __typename: 'ChapterNodeList'; totalCount: number }; }; - } | null; -}; - -export type RefreshMangaMutationVariables = Exact<{ - id: number; -}>; - -export type RefreshMangaMutation = { - __typename: 'Mutation'; - fetchChapters: { - __typename: 'FetchChaptersPayload'; - chapters: Array<{ + chapters?: Array<{ __typename: 'ChapterType'; fetchedAt: string; uploadDate: string; @@ -1871,66 +1801,6 @@ export type RefreshMangaMutation = { isBookmarked: boolean; }>; } | null; - fetchManga: { - __typename: 'FetchMangaPayload'; - manga: { - __typename: 'MangaType'; - artist: string | null; - author: string | null; - description: string | null; - status: Types.MangaStatus; - realUrl: string | null; - sourceId: string; - genre: Array; - lastFetchedAt: string | null; - inLibraryAt: string; - id: number; - title: string; - thumbnailUrl: string | null; - thumbnailUrlLastFetched: string | null; - inLibrary: boolean; - initialized: boolean; - unreadCount: number; - downloadCount: number; - bookmarkCount: number; - hasDuplicateChapters: boolean; - meta: Array<{ __typename: 'MangaMetaType'; mangaId: number; key: string; value: string }>; - source: { - __typename: 'SourceType'; - id: string; - name: string; - displayName: string; - lang: string; - iconUrl: string; - } | null; - trackRecords: { - __typename: 'TrackRecordNodeList'; - totalCount: number; - nodes: Array<{ __typename: 'TrackRecordType'; id: number; trackerId: number }>; - }; - firstUnreadChapter: { - __typename: 'ChapterType'; - id: number; - sourceOrder: number; - isRead: boolean; - mangaId: number; - chapterNumber: number; - name: string; - scanlator: string | null; - } | null; - lastReadChapter: { __typename: 'ChapterType'; id: number; sourceOrder: number; lastReadAt: string } | null; - latestReadChapter: { - __typename: 'ChapterType'; - id: number; - sourceOrder: number; - lastReadAt: string; - } | null; - latestFetchedChapter: { __typename: 'ChapterType'; id: number; fetchedAt: string } | null; - latestUploadedChapter: { __typename: 'ChapterType'; id: number; uploadDate: string } | null; - highestNumberedChapter: { __typename: 'ChapterType'; id: number; chapterNumber: number } | null; - chapters: { __typename: 'ChapterNodeList'; totalCount: number }; - }; - } | null; }; export type GetMangaToMigrateToFetchMutationVariables = Exact<{ @@ -1942,8 +1812,8 @@ export type GetMangaToMigrateToFetchMutationVariables = Exact<{ export type GetMangaToMigrateToFetchMutation = { __typename: 'Mutation'; - fetchManga: { - __typename: 'FetchMangaPayload'; + fetchMangaAndChapters: { + __typename: 'FetchMangaAndChaptersPayload'; manga: { __typename: 'MangaType'; id: number; @@ -1955,10 +1825,7 @@ export type GetMangaToMigrateToFetchMutation = { nodes: Array<{ __typename: 'TrackRecordType'; id: number; remoteId: string; trackerId: number }>; }; }; - } | null; - fetchChapters?: { - __typename: 'FetchChaptersPayload'; - chapters: Array<{ + chapters?: Array<{ __typename: 'ChapterType'; id: number; chapterNumber: number; diff --git a/src/lib/graphql/manga/MangaMutation.ts b/src/lib/graphql/manga/MangaMutation.ts index ced66234..96bc1482 100644 --- a/src/lib/graphql/manga/MangaMutation.ts +++ b/src/lib/graphql/manga/MangaMutation.ts @@ -10,34 +10,19 @@ import gql from 'graphql-tag'; import { MANGA_META_FIELDS, MANGA_SCREEN_FIELDS } from '@/lib/graphql/manga/MangaFragments.ts'; import { CHAPTER_LIST_FIELDS } from '@/lib/graphql/chapter/ChapterFragments.ts'; -// makes the server fetch and return the manga -export const GET_MANGA_FETCH = gql` - ${MANGA_SCREEN_FIELDS} - - mutation GET_MANGA_FETCH($input: FetchMangaInput!) { - fetchManga(input: $input) { - manga { - ...MANGA_SCREEN_FIELDS - } - } - } -`; - // makes the server fetch and return the manga export const REFRESH_MANGA = gql` ${MANGA_SCREEN_FIELDS} ${CHAPTER_LIST_FIELDS} - mutation REFRESH_MANGA($id: Int!) { - fetchChapters(input: { mangaId: $id }) { - chapters { - ...CHAPTER_LIST_FIELDS - } - } - fetchManga(input: { id: $id }) { - manga { + mutation REFRESH_MANGA($id: Int!, $fetchManga: Boolean!, $fetchChapters: Boolean!) { + fetchMangaAndChapters(input: { id: $id, fetchManga: $fetchManga, fetchChapters: $fetchChapters }) { + manga @include(if: $fetchManga) { ...MANGA_SCREEN_FIELDS } + chapters @include(if: $fetchChapters) { + ...CHAPTER_LIST_FIELDS + } } } `; @@ -50,7 +35,7 @@ export const GET_MANGA_TO_MIGRATE_TO_FETCH = gql` $migrateCategories: Boolean! $migrateTracking: Boolean! ) { - fetchManga(input: { id: $id }) { + fetchMangaAndChapters(input: { id: $id, fetchManga: true, fetchChapters: $migrateChapters }) { manga { id title @@ -68,9 +53,7 @@ export const GET_MANGA_TO_MIGRATE_TO_FETCH = gql` } } } - } - fetchChapters(input: { mangaId: $id }) @include(if: $migrateChapters) { - chapters { + chapters @include(if: $migrateChapters) { id manga { id diff --git a/src/lib/requests/RequestManager.ts b/src/lib/requests/RequestManager.ts index bf6d4d4f..0e67cf29 100644 --- a/src/lib/requests/RequestManager.ts +++ b/src/lib/requests/RequestManager.ts @@ -80,10 +80,6 @@ import type { GetKoSyncStatusQueryVariables, GetLastUpdateTimestampQuery, GetLastUpdateTimestampQueryVariables, - GetMangaChaptersFetchMutation, - GetMangaChaptersFetchMutationVariables, - GetMangaFetchMutation, - GetMangaFetchMutationVariables, GetMangasLibraryQuery, GetMangasLibraryQueryVariables, GetMangaToMigrateQuery, @@ -240,7 +236,6 @@ import { } from '@/lib/graphql/extension/ExtensionMutation.ts'; import { GET_MIGRATABLE_SOURCES, GET_SOURCES_LIST } from '@/lib/graphql/source/SourceQuery.ts'; import { - GET_MANGA_FETCH, GET_MANGA_TO_MIGRATE_TO_FETCH, REFRESH_MANGA, UPDATE_MANGA, @@ -281,7 +276,6 @@ import { } from '@/lib/graphql/chapter/ChapterQuery.ts'; import { GET_CHAPTER_PAGES_FETCH, - GET_MANGA_CHAPTERS_FETCH, UPDATE_CHAPTER, UPDATE_CHAPTER_METADATA, UPDATE_CHAPTERS, @@ -2205,33 +2199,26 @@ export class RequestManager { ); } - public getMangaFetch( - mangaId: number | string, - options?: MutationOptions, - ): AbortableApolloMutationResponse { - return this.doRequest( - GQLMethod.MUTATION, - GET_MANGA_FETCH, - { - input: { - id: Number(mangaId), - }, - }, - options, - ); - } - public refreshManga( mangaId: number | string, - options?: MutationOptions, + { + fetchManga = true, + fetchChapters = true, + ...options + }: MutationOptions & { + fetchManga?: boolean; + fetchChapters?: boolean; + } = {}, ): AbortableApolloMutationResponse { return this.doRequest( GQLMethod.MUTATION, REFRESH_MANGA, { id: Number(mangaId), + fetchManga, + fetchChapters, }, - { refetchQueries: [GET_CHAPTERS_MANGA, GET_CHAPTERS_READER], errorPolicy: 'all', ...options }, + { refetchQueries: [GET_CHAPTERS_MANGA, GET_CHAPTERS_READER], ...options }, ); } @@ -2556,18 +2543,6 @@ export class RequestManager { ); } - public getMangaChaptersFetch( - mangaId: number | string, - options?: MutationOptions, - ): AbortableApolloMutationResponse { - return this.doRequest( - GQLMethod.MUTATION, - GET_MANGA_CHAPTERS_FETCH, - { input: { mangaId: Number(mangaId) } }, - { refetchQueries: [GET_CHAPTERS_MANGA], ...options }, - ); - } - public useGetMangaChapter( mangaId: number | string, chapterIndex: number | string,