1
0
Fork 1
mirror of https://github.com/0x2E/fusion.git synced 2025-06-08 05:27:15 +09:00
Commit graph

276 commits

Author SHA1 Message Date
Dawid
47b113176c
Add Polish translations (#178)
* Chore: Create PL translations

* Add Polish support to index.ts

* Add missing translation

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* CR fixes

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-05-18 12:42:01 +08:00
林阿莱
017a8a7772
Add Catalan localization (#175)
* Update index.ts

Add Catalan

* Create ca.ts

Add Catalan localization

* Update ca.ts
2025-05-13 19:02:14 +08:00
Yuan
c965c2e817
fix: add qemu setup (#164) 2025-05-01 00:04:45 +08:00
rook1e
f289296c78
doc: fix highlight 2025-04-30 22:58:29 +08:00
Yuan
6a4e99d0fa
update CI (#163)
* cross-compile in ci

* build docker image for main branch

* default to github registry
2025-04-30 22:52:09 +08:00
Yuan
74b4d0d35d
fix: trigger load re-run when item filter updates (#161)
* update deps

* fix: trigger load re-run when item filter updates
2025-04-30 14:54:49 +08:00
rook1e
3d377e8853
fix: refresh data after deleting feed 2025-04-28 23:18:37 +08:00
Yuan
de223e6991
fix: use update time if item does not have a publish time (#159) 2025-04-28 20:37:30 +08:00
Yuan
e0938da00b
feat: redirect to the feed page after creation (#155) 2025-04-26 16:59:15 +08:00
Yuan
5f527b57a7
Extract feedfinder (#154)
* refactor: extract feedfinder to a standalone package

* fix: increase timeout for feed validation to improve reliability
2025-04-26 15:59:57 +08:00
Yuan
b83b868fc7
Fix UI (#153)
* use invalidateAll() to reduce complexity

* remove useless loading placeholder

* refactor: update sidebar using global states
2025-04-26 15:34:51 +08:00
Yuan
bc8109fe39
refactor: replace zap log with slog (#150)
* refactor: replace zap log with slog

* fix
2025-04-25 17:18:25 +08:00
Yuan
5c98073f9f
feat: display items by group (#149) 2025-04-25 16:28:45 +08:00
Yuan
103ece629f
feat: display unread count in sidebar (#147)
* udpate deps

* feat: display unread count in sidebar
2025-04-25 13:29:27 +08:00
Yuan
4c79b2b2fa
Fix http proxy (#144)
* update deps

* make the sniff package independent

* rename sniffer to feedfinder for  a more neutral meaning

* allow setting Proxy when creating a feed
2025-04-24 01:18:44 +08:00
rook1e
9897ffcfd7
chore: use github-release-style changelog format 2025-04-17 12:15:01 +08:00
Yuan
fe792df780
Refactor mark_all_as_read to handle "all" and "current page" options separately (#138)
* update deps

* refactor mark_all_as_read to handle "all" and "current page" options separately

* add page_size input
2025-04-16 17:20:01 +08:00
Devin Buhl
c476a00429
ci: Publish container image to GitHub Container Registry (#137)
* ci: support pushing to GitHub Container Registry

In addition to Dockerhub, images will also be published to GHCR.

Fixes: #135

* update build push action

* lower-case repository due to ghcr reqs
2025-04-10 22:40:12 +08:00
rook1e
5f7ff3b8af
docs: add contributing guidelines (#117) 2025-04-06 15:27:41 +08:00
Yuan
dd0d2e7d7d
feat: make the password optional (#128)
* feat: make the password optional

* fix: put the check outside HashPassword

* refactor: change PasswordHash to a pointer type for better checking
2025-04-05 20:14:31 +08:00
rook1e
13da7d201a
doc: update screenshots 2025-03-29 19:52:18 +08:00
Yuan
84df13b711
feat: add zeabur and fly.io template (#127)
* add zeabur template

* add fly.io template
2025-03-28 21:58:22 +08:00
Yuan
5ddffde56d
Fix UI (#124)
* add an error boundary to display errors when the page fails to render

* try to fix the item link when rendering the item
2025-03-28 16:52:52 +08:00
Yuan
282c64c2e5
fix: redirect to login page when api auth fails (#122) 2025-03-28 15:05:44 +08:00
Yuan
e9d6376626
feat: add shortcuts (#120)
* update deps

* add hotkey feature

* add hotkeys for items

* add hotkeys for feeds

* add hotkeys for pages

* add i18n for shortcuts

* add shortcuts for switching between items

* enable shortcuts for item actions in the page navigation header

* rename hotkey to shortcut in components

* add missing i18n
2025-03-28 14:49:05 +08:00
Michael Lynch
e4e08942a9
Only pull feed once per polling interval (#121)
fusion's previous behavior was to immediately retry requesting a feed when the request fails. This made more sense before we added failure recovery (df412f17d3). Now, immediately retrying on failure complicates the implementation and risks getting the client banned if the server is responding with HTTP 429 errors and we just keep spamming the same requests.

This changes the polling behavior so that we only request each feed once per polling interval. If the request fails, we'll try again at the next polling interval.
2025-03-28 10:52:39 +08:00
Michael Lynch
f09b990533
Handle feeds that use relative paths for links (#116)
* Handle feeds that use relative paths for links

Fixes #94

* Use url.ResolveReference
2025-03-28 10:51:34 +08:00
Niklas Pivic
48d5c7d114
Swedish_translation_change (#118) 2025-03-27 21:24:00 +08:00
rook1e
1af07af0be
doc: add i18n to the feature list 2025-03-25 17:45:04 +08:00
Yuan
5ecb17c2b6
refactor: use a prefetched items queue for item switcher (#114) 2025-03-25 11:43:29 +08:00
Yuan
f9fe8ffb73
fix: add some minor optimizations to the ui (#112)
* fix: correct translation key and handle missing text in translation function

* refactor: update ItemList component to use Promise for data fetching and remove placeholder component

* fix: add reactivity for ActionMenu component

* refactor: prevent unused API calls after triggering an item action

* fix: fix the edge cases of the item switcher
2025-03-25 11:15:06 +08:00
Yuan
6ee9d9c110
refactor: replace invalidateAll with invalidate for more granular cache control (#111) 2025-03-24 20:02:54 +08:00
Yuan
78e4666be3
feat: add search page (#110) 2025-03-24 18:37:04 +08:00
Yuan
5e9d2d8d07
refactor: add some minor optimizations to the ui (#109)
* refactor: display feed_import error message on form instead of using a toast notification

* chore: add `feed.import.manually.no_valid_feed_error` into i18n

* chore: update deps

* refactor: display feed meta info on item page
2025-03-24 14:23:23 +08:00
Michael Lynch
df412f17d3
Recover after feed fetch failure with exponential backoff (#108)
* Recover after feed fetch failure with exponential backoff

The current implementation stops attempting to fetch a feed if fusion encounters any error fetching it. The only way to continue fetching the feed is if the user manually forces a refresh.

This allows fusion to recover from feed fetch errors by tracking the number of consecutive failures and slowing down requests for consistent failure. If a feed always fails, we eventually slow to only checking it once per week.

Fixes #67

* Add comment
2025-03-24 11:11:18 +08:00
Michael Lynch
db029950d2
Refactor the httpx package to facilitate testing (#107) 2025-03-24 11:04:29 +08:00
Yuan
a110410716
feat: store some shareable data in a global state (#101) 2025-03-24 10:58:29 +08:00
Yuan
4b111df5be
feat: add i18n (#99)
* feat: add i18n

* refactor: apply i18n to pages

* add languages

* fix Portuguese-*

Co-authored-by: TaylorHo <taylor@hotay.dev>

---------

Co-authored-by: TaylorHo <taylor@hotay.dev>
2025-03-24 10:53:32 +08:00
Michael Lynch
50a6652d6c
Switch to more obviously invalid XML (#104)
Strangely, my LLM coding assistant gets confused when it encounters the
2025-03-23 12:21:00 +08:00
Michael Lynch
d36ef67037
Convert httpErrMsg to httpErr (#103)
I realized it's simpler to just create the actual error type in the testcase than to define the error message and wait until the test body to convert it to an error type.
2025-03-23 12:18:53 +08:00
Yuan
8087497df4
refactor: switch to single bundle strategy (#100) 2025-03-23 12:17:28 +08:00
Michael Lynch
c0eaea70de
Refactor Puller to create a separate SingleFeedPuller (#102) 2025-03-23 12:16:58 +08:00
Michael Lynch
8de93295b6
Change FusionRequest to use a non-pointer type parameter (#106)
FusionRequest currently specifies model.FeedRequestOptions as a pointer rather than as a regular parameter. This is unnecessary, as it's easy for us to treat model.FeedRequestOptions{} as the 'default options' value. With it as a pointer, we clutter our code with extra != nil checks.

This change updates FusionRequest to just take a model.FeedRequestOptions rather than a *model.FeedRequestOptions.

Co-authored-by: rook1e <rook1e404@outlook.com>
2025-03-23 11:59:24 +08:00
Michael Lynch
2157a9db98
Unexport httpx.NewClient and httpx.transportOptionFunct (#105) 2025-03-23 11:33:05 +08:00
Michael Lynch
797f270178
Add FeedClient.FetchDeclaredLink method (#98)
* Add FeedClient.FetchDeclaredLink method

The sniff package uses redundant RSS parsing logic that duplicates logic that's in the service/pull/client package now.

This change adds a FetchDeclaredLink method that exposes functionality that the sniff package needs and switches the sniff.parseRSSUrl to use the client package instead of duplicating RSS parsing functionality.

* Reorder imports
2025-03-22 11:48:46 +08:00
Michael Lynch
68760f2ce6
Move RSS parsing code from pull to a dedicated package (#96)
* Create a client package

* Bring back TestDecideFeedUpdateAction, which was removed accidentally

* Fix import order
2025-03-21 21:13:20 +08:00
Michael Lynch
d2cb870574
Remove feed ID from ParseGoFeedItems (#95)
The feed ID doesn't really belong in ParseGoFeedItems because its job is to convert gofeed objects to fusion objects, but the feed ID is not a concept in gofeed.

The only reason we need to store the feed ID in each feed item is so that each feed item references its parent feed in the database, so we should handle populating feed ID with the database logic, not with the gofeed parsing logic.
2025-03-20 10:41:40 +08:00
Yuan
d247cc59b5
refactor: update color scheme (#91)
* refactor: update color variables and improve component styles for better UI consistency

* doc: update screenshots
2025-03-19 13:04:20 +08:00
Michael Lynch
887215d7a2
Simplify feed.CheckValidity (#92) 2025-03-19 13:04:10 +08:00
rook1e
77c5ad38a8
chore: update deps 2025-03-18 21:35:10 +08:00