diff --git a/README.md b/README.md index e26f6ba..601bd80 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # emo -I wish to develop **emo** as an **all in one** application. Now, it includes the follow apps: +I wish to develop **emo** as an **all in one** desktop application. Now, it includes the following apps: - **Reader** - A rss reader. ## Features diff --git a/forge.config.js b/forge.config.js index 5bc6916..2009130 100644 --- a/forge.config.js +++ b/forge.config.js @@ -52,6 +52,7 @@ module.exports = { }, prerelease: true, draft: true, + tagPrefix: '', }, }, ], diff --git a/package-lock.json b/package-lock.json index 57aafdc..62fb67f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "emo", - "version": "0.1.0", + "version": "0.1.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "emo", - "version": "0.1.0", + "version": "0.1.2", "license": "MIT", "dependencies": { "@fluentui/react-components": "^9.30.1", diff --git a/package.json b/package.json index d8e0ce0..0759e95 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "emo", - "version": "0.1.0", + "version": "0.1.2", "description": "An all in one application, includes Reader-a rss reader", "main": "./dist/main.js", "scripts": { diff --git a/src/main/reader/services/feed.ts b/src/main/reader/services/feed.ts index e2ba230..002b0c6 100644 --- a/src/main/reader/services/feed.ts +++ b/src/main/reader/services/feed.ts @@ -33,10 +33,9 @@ export const getByUrl = async (url: string) => { export const getAll = async (): Promise => { const sql = ` - select f.*, count(*) as count + select f.*, count(a.id) as count from feeds as f left outer join articles as a - on f.id = a.feedId - where a.read = 0 + on f.id = a.feedId and a.read = 0 group by f.id order by createTime desc; ` diff --git a/src/renderer/apps/reader/MainPanel/Article/content.tsx b/src/renderer/apps/reader/MainPanel/Article/content.tsx index 528a402..b40d9ca 100644 --- a/src/renderer/apps/reader/MainPanel/Article/content.tsx +++ b/src/renderer/apps/reader/MainPanel/Article/content.tsx @@ -1,9 +1,10 @@ /* eslint-disable react/no-danger */ - +import { useEffect, useRef } from 'react' import { makeStyles, tokens } from '@fluentui/react-components' import { observer } from 'mobx-react-lite' import { store } from '@/renderer/store' import { format as formatTime } from '@/utils/common/date' +import { openExternal } from '@/utils/browser/shell' const { readerStore } = store @@ -34,6 +35,21 @@ const useStyles = makeStyles({ fontSize: tokens.fontSizeBase400, lineHeight: 1.2, }, + + '& a': { + color: tokens.colorBrandForegroundLink, + textDecorationLine: 'underline', + + ':hover': { + color: tokens.colorBrandForegroundLinkHover, + }, + ':active': { + color: tokens.colorBrandForegroundLinkSelected, + }, + ':visited': { + color: tokens.colorBrandForegroundLinkPressed, + }, + }, }, }) @@ -53,6 +69,27 @@ function Content() { } = activeArticle const feed = feeds.find((v) => v.id === feedId)! + const containerRef = useRef(null) + + useEffect(() => { + const el = containerRef.current + const handler = (e: MouseEvent) => { + const { target } = e + if (!(target instanceof HTMLAnchorElement) || !target.href) { + return + } + + e.preventDefault() + openExternal(target.href) + } + + el?.addEventListener('click', handler) + + return () => { + el?.removeEventListener('click', handler) + } + }, [containerRef.current]) + return (

@@ -70,6 +107,7 @@ function Content() {