Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/main/reader/crawler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ const crawlOne = async (f: Feed) => {
}

await articleService.upsert(items)
feedService.pushOne(id!)
} catch (e) {
logger.error(`[Reader] crawl error: ${url}`, e)
}
Expand Down Expand Up @@ -59,7 +60,6 @@ export const startCrawler = () => {
try {
const feeds = await feedService.getAll()
await conQueue(feeds, 10, crawlOne)
await feedService.pushAll()
} catch (e) {
logger.error('[Reader] Crawl error', e)
} finally {
Expand Down
2 changes: 1 addition & 1 deletion src/main/reader/router/feed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ router.post('/feed', async (_, { url, title }: Pick<Feed, 'url'|'title'>) => {
}))
await articleService.upsert(items)

feedService.pushAll()
feedService.pushOne(ifeed.id!)
})

router.get('/feed/all', async () => feedService.getAll())
Expand Down
31 changes: 18 additions & 13 deletions src/main/reader/services/feed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,27 +31,26 @@ export const getByUrl = async (url: string) => {
return null
}

export const getAll = async (): Promise<Feed[]> => {
export const getAll = (): Promise<Feed[]> => {
const sql = `
select f.*, count(a.id) as count
select f.*, count(a.id) as unreadCount
from feeds as f left outer join articles as a
on f.id = a.feedId and a.read = 0
group by f.id
order by createTime desc;
`

const rows = await all(sql)
const feeds: Feed[] = rows.map((row) => ({
id: row.id,
title: row.title,
url: row.url,
link: row.link,
createTime: row.createTime,
description: row.description,
unreadCount: row.count,
}))
return all(sql)
}

export const getOne = (id: number): Promise<Feed | undefined> => {
const sql = `
select f.*, (select count(*) from articles as a where a.feedId = f.id and a.read = 0) as unreadCount
from feeds as f
where f.id = ?;
`

return feeds
return get(sql, id)
}

export const deleteById = (id: number) => new Promise<void>((resolve) => {
Expand All @@ -74,3 +73,9 @@ export const pushAll = async () => {

push('/reader/feed', feeds)
}

export const pushOne = async (id: number) => {
const feed = await getOne(id)

push('/reader/feed', feed)
}
16 changes: 14 additions & 2 deletions src/renderer/store/reader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,20 @@ export class ReaderStore {
}

private initListeners() {
remote.on('/reader/feed', (_, feeds = []) => {
runInAction(() => { this.feeds = feeds })
remote.on('/reader/feed', (_, feeds: Feed | Feed[] = []) => {
runInAction(() => {
if (Array.isArray(feeds)) {
this.feeds = feeds
return
}

const index = this.feeds.findIndex((v) => v.id === feeds.id)
if (index === -1) {
this.feeds.unshift(feeds)
} else {
this.feeds.splice(index, 1, feeds)
}
})
})
}

Expand Down
1 change: 1 addition & 0 deletions src/types/reader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,5 @@ export type Feed = {
link?: string
unreadCount?: number
items?: Article[]
createTime?: string
}