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 subject and from, sortable chronologically via the date_unix column
  • 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.