v4.9.0
Added
- IMAP inbox listener —
MailServicegains a start/close lifecycle and an IMAP IDLE loop (viaimap-tools, defaults to ProtonMail Bridge onlocalhost:1143). Incoming mail from an unregistered sender automatically triggers an invite through the admin referral flow; known users are left untouched. Gated behind a newimap_enabledconfig flag (off by default); outbound mail is likewise gated behindsmtp_enabled - Fetch-missing / fetch-latest jobs — two new
JobTypevalues,FETCH_MISSING(60) andFETCH_LATEST(61), with dedicated handlers andPOST /api/job/create/fetch-missing/fetch-latestendpoints for filling chapter gaps and pulling newly released chapters. Newsync_jobtypeAlembic migration for PostgreSQL compatibility - Admin activity dashboard —
GET /api/admin/activity?type=<kind>&days=<n>backed by four focused service methods (summary, daily active users, per-type trend, top users); new response models inserver/models/activity.py - Artifact download tracking — new
ActivityType.ARTIFACT(12) recorded when a file under/artifacts/is served; other static downloads remainDOWNLOAD - Browser navigation middleware — a
/browse/*proxy (BrowserNavigation) fetches remote URLs through the scraper engine and rewrites links so navigation stays within the local server, injecting a JS interceptor that routesfetch/XHR/anchor clicks through the same prefix. Adds abrowse_helperutility and anassets/scriptspackage - Proxy toggle — new config option to enable/disable proxy usage in the crawler
Changed
- Multiple proxies supported — proxy config reworked to accept a list of proxies;
lncrawl-scraperbumped accordingly - Activity worker count — user-activity tracking now uses
runner_concurrencyas the worker count
Fixed
- Active-user count —
get_admin_summarycounted activity types instead of distinct users; replaced with aCOUNT(DISTINCT user_id)subquery, fixing PostgreSQL compatibility - Sources — updated
aquareader.net(#3035) andlightnovelpub.org; regenerated source index
Full Changelog: v4.8.0...v4.9.0