From e031f4f81c40df36a5ccd2ada04ac86246803635 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Tue, 19 Mar 2024 15:51:20 +0800 Subject: [PATCH 1/2] deprioritize jsonld preview image --- packages/readabilityjs/Readability.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/readabilityjs/Readability.js b/packages/readabilityjs/Readability.js index a64b9360f..55a49b647 100644 --- a/packages/readabilityjs/Readability.js +++ b/packages/readabilityjs/Readability.js @@ -2049,14 +2049,14 @@ Readability.prototype = { values["article:date"]; // get preview image - metadata.previewImage = jsonld.previewImage || - values["image"] || + metadata.previewImage = values["image"] || values["twitter:image"] || values["dc:image"] || values["dcterm:image"] || values["og:image"] || values["weibo:article:image"] || - values["weibo:webpage:image"]; + values["weibo:webpage:image"] || + jsonld.previewImage metadata.locale = values["og:locale"]; From 315c625482ed2afa8980fc56804d3ae3defbb276 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Tue, 19 Mar 2024 18:07:27 +0800 Subject: [PATCH 2/2] fix title not fetched correctly when using preview content in rss feeds --- packages/api/src/jobs/rss/refreshFeed.ts | 14 ++++++++++++++ packages/api/src/resolvers/subscriptions/index.ts | 4 ++-- packages/api/src/services/save_page.ts | 9 ++++++--- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/packages/api/src/jobs/rss/refreshFeed.ts b/packages/api/src/jobs/rss/refreshFeed.ts index b9d8ba85e..a97030ab1 100644 --- a/packages/api/src/jobs/rss/refreshFeed.ts +++ b/packages/api/src/jobs/rss/refreshFeed.ts @@ -48,12 +48,14 @@ export const isRefreshFeedRequest = (data: any): data is RefreshFeedRequest => { // link can be a string or an object type RssFeedItemLink = string | { $: { rel?: string; href: string } } +type RssFeedItemAuthor = string | { name: string } type RssFeed = Parser.Output<{ published?: string updated?: string created?: string link?: RssFeedItemLink links?: RssFeedItemLink[] + author?: RssFeedItemAuthor }> & { lastBuildDate?: string 'syn:updatePeriod'?: string @@ -386,6 +388,7 @@ const parser = new Parser({ 'created', ['media:content', 'media:content', { keepArray: true }], ['media:thumbnail'], + 'author', ], feed: [ 'lastBuildDate', @@ -473,6 +476,14 @@ const getLink = ( return url } +// get author +const getAuthor = (author: RssFeedItemAuthor) => { + if (typeof author === 'string') { + return author + } + return author.name +} + const processSubscription = async ( fetchContentTasks: Map, subscriptionId: string, @@ -536,10 +547,13 @@ const processSubscription = async ( throw new Error('Invalid feed item link') } + const creator = item.creator || (item.author && getAuthor(item.author)) + const feedItem = { ...item, isoDate, link, + creator, } const publishedAt = feedItem.isoDate diff --git a/packages/api/src/resolvers/subscriptions/index.ts b/packages/api/src/resolvers/subscriptions/index.ts index 82eae37cf..358f05431 100644 --- a/packages/api/src/resolvers/subscriptions/index.ts +++ b/packages/api/src/resolvers/subscriptions/index.ts @@ -229,8 +229,8 @@ export const subscribeResolver = authorized< ...existingSubscription, fetchContentType: input.fetchContentType ? (input.fetchContentType as FetchContentType) - : undefined, - folder: input.folder ?? undefined, + : existingSubscription.fetchContentType, + folder: input.folder ?? existingSubscription.folder, isPrivate: input.isPrivate, status: SubscriptionStatus.Active, }) diff --git a/packages/api/src/services/save_page.ts b/packages/api/src/services/save_page.ts index 88b2201eb..232ef3cad 100644 --- a/packages/api/src/services/save_page.ts +++ b/packages/api/src/services/save_page.ts @@ -103,7 +103,7 @@ export const savePage = async ( } } - const parseResult = await parsePreparedContent(input.url, { + const preparedDocument: PreparedDocumentInput = { document: input.originalContent, pageInfo: { title: input.title, @@ -111,7 +111,9 @@ export const savePage = async ( previewImage: input.previewImage, author: input.author, }, - }) + } + + const parseResult = await parsePreparedContent(input.url, preparedDocument) const itemToSave = parsedContentToLibraryItem({ itemId: clientRequestId, @@ -131,6 +133,7 @@ export const savePage = async ( folder: input.folder, feedContent: input.feedContent, dir: parseResult.parsedContent?.dir, + preparedDocument, }) const isImported = input.source === 'csv-importer' || input.source === 'pocket' @@ -247,7 +250,7 @@ export const parsedContentToLibraryItem = ({ croppedPathname || parsedContent?.siteName || url, - author: parsedContent?.byline, + author: preparedDocument?.pageInfo.author || parsedContent?.byline, originalUrl: cleanUrl(canonicalUrl || url), itemType, textContentHash: