diff --git a/src/base/node/feed.ts b/src/base/node/feed.ts index 4adde6d..edfc03d 100644 --- a/src/base/node/feed.ts +++ b/src/base/node/feed.ts @@ -18,6 +18,7 @@ const parseRss = (xml: any): Omit => { url: gettrim(v, 'link[0]'), content: gettrim(v, 'content:encoded[0]') || gettrim(v, 'description[0]'), pubTime: gettrim(v, 'pubDate[0]'), + author: gettrim(v, 'author[0]', '') || gettrim(v, 'dc:creator[0]', ''), })), } } @@ -30,10 +31,11 @@ const parseAtom = (xml: any): Omit => { description: '', link: '', items: (feed.entry || []).map((v: any) => ({ - title: gettrim(v, 'title[0]'), + title: gettrim(v, 'title[0]._') || gettrim(v, 'title[0]'), url: gettrim(v, 'link[0].$.href', ''), - content: gettrim(v, 'content[0]_', ''), + content: gettrim(v, 'content[0]._', ''), pubTime: gettrim(v, 'published[0]') || gettrim(v, 'updated[0]'), + author: gettrim(v, 'author[0].name[0]') || gettrim(v, 'author[0]', '') || '', })), } } diff --git a/src/main/reader/db.ts b/src/main/reader/db.ts index 1fcca24..e29047a 100644 --- a/src/main/reader/db.ts +++ b/src/main/reader/db.ts @@ -1,4 +1,4 @@ -import { exec } from '@/services/db/electron-main/db' +import { exec, get } from '@/services/db/electron-main/db' import { logger } from '@/services/logger/electron-main/logger' const sql = ` @@ -26,9 +26,20 @@ const sql = ` ); ` +const alterSql = ` + ALTER TABLE articles + ADD COLUMN author NVARCHAR(50); +` + export const init = async () => { try { await exec(sql) + + const row = await get('select * from sqlite_schema where name = "articles" and sql like "%author%"') + + if (!row) { + await exec(alterSql) + } } catch (e) { logger.error('[Reader] Create Reader table error:', e) } diff --git a/src/services/reader/electron-main/article.ts b/src/services/reader/electron-main/article.ts index 708d008..397b7ce 100644 --- a/src/services/reader/electron-main/article.ts +++ b/src/services/reader/electron-main/article.ts @@ -4,7 +4,7 @@ import { Article, Tab } from '@/types/reader' export const upsert = (articles: Article | Article[]) => new Promise((resolve, reject) => { const items = Array.isArray(articles) ? articles : [articles] - const cols = ['title', 'url', 'content', 'pubTime', 'feedId'] as const + const cols = ['title', 'url', 'content', 'pubTime', 'author', 'feedId'] as const const keys = cols.map((k) => `$${k}`) const sets = cols.map((k, index) => `${k}=${keys[index]}`) diff --git a/src/types/reader.ts b/src/types/reader.ts index 12f506a..52fed2c 100644 --- a/src/types/reader.ts +++ b/src/types/reader.ts @@ -6,6 +6,7 @@ export type Article = { url: string content: string pubTime?: string + author?: string starred?: 0 | 1 read?: 0 | 1 feedId?: number diff --git a/src/ui/apps/reader/MainPanel/Article/content.tsx b/src/ui/apps/reader/MainPanel/Article/content.tsx index 904c438..68597d4 100644 --- a/src/ui/apps/reader/MainPanel/Article/content.tsx +++ b/src/ui/apps/reader/MainPanel/Article/content.tsx @@ -68,6 +68,7 @@ function Content() { content, feedId, pubTime, + author, } = activeArticle const feed = feeds.find((v) => v.id === feedId)! @@ -102,6 +103,11 @@ function Content() {
{feed.title}
+ {author !== feed.title && ( +
+ {author} +
+ )}
{formatTime(pubTime!, 'MM/dd/yy hh:mm')}