From e53cc28683365fffce6c7ce685a4f7e9970b182c Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Mon, 5 Jun 2023 14:44:47 +0800 Subject: [PATCH] Fix issue where we return EPUB content reader for items marked as book in metadata If we parse a page with in it now, we incorrectly set this to ContentReader.EPUB, which then causes syncing issues on iOS which doesn't have an EPUB reader type defined in its GraphQL schema yet. --- packages/api/src/resolvers/article/index.ts | 8 ++++---- packages/api/src/resolvers/function_resolvers.ts | 9 ++++++--- packages/api/src/services/speech.ts | 7 ++++--- packages/api/src/utils/uploads.ts | 9 +++++++-- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/packages/api/src/resolvers/article/index.ts b/packages/api/src/resolvers/article/index.ts index 157e4b489..d9706bdfa 100644 --- a/packages/api/src/resolvers/article/index.ts +++ b/packages/api/src/resolvers/article/index.ts @@ -100,7 +100,7 @@ import { } from '../../utils/parser' import { parseSearchQuery, SortBy, SortOrder } from '../../utils/search' import { - contentReaderForPageType, + contentReaderForPage, getStorageFileDetails, makeStorageFilePublic, } from '../../utils/uploads' @@ -963,7 +963,7 @@ export const searchResolver = authorized< ...r, image: r.image && createImageProxyUrl(r.image, 260, 260), isArchived: !!r.archivedAt, - contentReader: contentReaderForPageType(r.pageType), + contentReader: contentReaderForPage(r.pageType, r.uploadFileId), originalArticleUrl: r.url, publishedAt: validatedDate(r.publishedAt), ownedByViewer: r.userId === claims.uid, @@ -1007,7 +1007,7 @@ export const typeaheadSearchResolver = authorized< const results = await searchAsYouType(claims.uid, query, first || undefined) const items: TypeaheadSearchItem[] = results.map((r) => ({ ...r, - contentReader: contentReaderForPageType(r.pageType), + contentReader: contentReaderForPage(r.pageType, r.uploadFileId), })) return { items } @@ -1072,7 +1072,7 @@ export const updatesSinceResolver = authorized< ...p, image: p.image && createImageProxyUrl(p.image, 260, 260), isArchived: !!p.archivedAt, - contentReader: contentReaderForPageType(p.pageType), + contentReader: contentReaderForPage(p.pageType, p.uploadFileId), } as SearchItem, cursor: endCursor, itemID: p.id, diff --git a/packages/api/src/resolvers/function_resolvers.ts b/packages/api/src/resolvers/function_resolvers.ts index be95f5d15..0000cf4cf 100644 --- a/packages/api/src/resolvers/function_resolvers.ts +++ b/packages/api/src/resolvers/function_resolvers.ts @@ -19,7 +19,7 @@ import { import { userDataToUser, validatedDate, wordsCount } from '../utils/helpers' import { createImageProxyUrl } from '../utils/imageproxy' import { - contentReaderForPageType, + contentReaderForPage, generateDownloadSignedUrl, generateUploadFilePathName, } from '../utils/uploads' @@ -468,8 +468,11 @@ export const functionResolvers = { }) return !!page?.archivedAt || false }, - contentReader(article: { pageType: PageType }) { - return contentReaderForPageType(article.pageType) + contentReader(article: { + pageType: PageType + uploadFileId: string | undefined + }) { + return contentReaderForPage(article.pageType, article.uploadFileId) }, highlights( article: { id: string; userId?: string; highlights?: Highlight[] }, diff --git a/packages/api/src/services/speech.ts b/packages/api/src/services/speech.ts index 34da9b489..d36fe66ab 100644 --- a/packages/api/src/services/speech.ts +++ b/packages/api/src/services/speech.ts @@ -1,6 +1,6 @@ -import { Page, PageType } from '../elastic/types' +import { Page } from '../elastic/types' import { ContentReader } from '../generated/graphql' -import { contentReaderForPageType } from '../utils/uploads' +import { contentReaderForPage } from '../utils/uploads' import { FeatureName, isOptedIn } from './features' /* @@ -11,7 +11,8 @@ export const shouldSynthesize = async ( page: Page ): Promise => { if ( - contentReaderForPageType(page.pageType) !== ContentReader.Web || + contentReaderForPage(page.pageType, page.uploadFileId) !== + ContentReader.Web || !page.content ) { // we don't synthesize files for now diff --git a/packages/api/src/utils/uploads.ts b/packages/api/src/utils/uploads.ts index 738704662..eeb1dfa0d 100644 --- a/packages/api/src/utils/uploads.ts +++ b/packages/api/src/utils/uploads.ts @@ -4,8 +4,13 @@ import { File, GetSignedUrlConfig, Storage } from '@google-cloud/storage' import { env } from '../env' import { ContentReader, PageType } from '../generated/graphql' -export const contentReaderForPageType = (pageType: PageType) => { - console.log('getting content reader: ', pageType) +export const contentReaderForPage = ( + pageType: PageType, + uploadFileId: string | null | undefined +) => { + if (!uploadFileId) { + return ContentReader.Web + } switch (pageType) { case PageType.Book: return ContentReader.Epub