Follows: followed tags/pools, feeds, unseen badges and blacklist cloud
Backend (new apps.follows): - FollowedTag/FollowedPool/FollowedPost models; per-user follows with unseen tracking, plus FollowCloud for the cached blacklist cloud. - Two periodic commands sharing one fetch path: sync_followed_tags and sync_followed_pools fetch each followed tag/pool's newest posts (one e621 search per unique follow), store unseen feed rows, refresh covers and pool metadata; both fall back to anonymous e621 access. - API: /api/follows/tags|pools (follow, unfollow, mark seen), a merged feed with per-follow filtering, and /api/follows/cloud/ which rebuilds the blacklisted-tag cloud in a daemon thread when its 10 min cache is stale (polling returns building/ready). - e621 client now supports anonymous reads; trimmed posts carry preview URLs for covers and feed tiles. Frontend: - /followed page: follow forms, cover cards with unseen badges and Mark seen, merged feed with filter/unseen toggle, and a blacklist cloud panel that polls while building. Followed nav entry added.
This commit is contained in:
+13
-3
@@ -44,9 +44,17 @@ they land.
|
||||
using the signed raw file)
|
||||
- [x] Show candidate posts to link (thumbnail, rating, score, favs, tags;
|
||||
select then confirm — same flow as uploads, exact MD5 marked)
|
||||
- [ ] **Follows**
|
||||
- [ ] Follow tags/pools, Followed screens with unseen badges
|
||||
- [ ] "Followed" nav entry
|
||||
- [x] **Follows**
|
||||
- [x] Follow tags/pools from the `/followed` page (validated against e621,
|
||||
first feed fetched immediately)
|
||||
- [x] Followed screens: cover cards (latest image), unseen badges and
|
||||
Mark seen per follow
|
||||
- [x] Merged newest-first feed with per-follow filter and unseen-only toggle
|
||||
- [x] Blacklisted-tag cloud built in a daemon thread, then polled
|
||||
(10 min TTL; the user's e621 blacklist, guest default as fallback)
|
||||
- [x] "Followed" nav entry
|
||||
- [x] Periodic sync commands: `sync_followed_tags` and
|
||||
`sync_followed_pools` (one e621 search per unique tag/pool)
|
||||
- [ ] `F` shortcut to favorite a post, tag finder in the Ctrl+K palette
|
||||
|
||||
## 3. Uploads & ingestion pipeline
|
||||
@@ -99,6 +107,8 @@ Files now stage first and are resolved before entering the library.
|
||||
## 6. Infrastructure
|
||||
|
||||
- [ ] Guest blacklist refresh on a timer (`refresh_guest_blacklist` via cron/systemd)
|
||||
- [ ] Follow sync on a timer (`sync_followed_tags` + `sync_followed_pools` via
|
||||
cron/systemd, e.g. every 30 minutes)
|
||||
- [ ] Production setup: build the SPA, serve via Nginx (static + `/media` +
|
||||
`/library`), systemd unit for Waitress
|
||||
- [ ] Automated tests (backend API + frontend components)
|
||||
|
||||
Reference in New Issue
Block a user