Achim's Usenet App
NNTP reader and binary client with SABnzbd integration
- Python
- PySide6
- NNTP
- SQLite
- FTS5
Desktop Usenet client: reads text newsgroups, indexes their headers in a local SQLite database with FTS5 full-text search, and submits marked binary releases as self-built NZBs to a local SABnzbd. Hybrid architecture — direct NNTP for reader features, indexer API later as optional add-on.
Features
- Connects to Newshosting via
pynntp(TLS:563), 8 parallel reader connections by default - Incremental header sync with chunked
XOVER, cancellable, parallelizable (measured 1.7× speedup at 4 workers) - Local cache: SQLite + FTS5 across
subjectandfrom, sortable chronologically via thedate_unixcolumn - Group browser: all ~111 k Newshosting groups, filterable, multi- select subscribe
- Header view with release grouping: yEnc segments collapse into a single release row instead of one line per segment
- Inline image preview (yEnc decode via
sabyenc3) - NZB builder from marked releases, direct hand-off to SABnzbd
- Sync modes: incremental, last N articles, since date (via bisection), full sync — with per-run article cap
Large-group hardening
For groups with millions of headers, several optimizations went in:
async dialogs (warn_later/info_later via QTimer), bulk-delete
without the FTS trigger, cancellable parallel sync with monotone
prefix tracking, FTS search via JOIN instead of N+1, chunk-bounded
INSERT counts instead of full-group scans.
Stack
Python 3.13, PySide6, qasync (asyncio↔Qt), pynntp, httpx,
lxml, sabyenc3, SQLite with FTS5.