Skip to content

raymondjstone/RadioObtainer

Repository files navigation

RadioObtainer

An example WinUI 3 application demonstrating how to read and download content from Usenet (NNTP) newsgroups.

Overview

RadioObtainer connects to a Usenet provider via NNTP, scans newsgroup headers, and downloads yEnc-encoded binary posts. It serves as a reference implementation for working with the NNTP protocol, yEnc decoding, and header caching in a .NET desktop application.

Features

  • NNTP client — Connects to Usenet providers over TCP/SSL, authenticates, and retrieves article headers and bodies using standard NNTP commands (XOVER, BODY, GROUP, LIST).
  • Header caching — Caches scanned headers locally in compressed (gzip) JSON files for incremental scanning.
  • yEnc decoding — Decodes yEnc-encoded binary attachments and assembles multi-part posts into complete files.
  • Library tracking — Scans a local folder to identify which posts have already been downloaded, avoiding duplicates.
  • Newsgroup browsing — Discover and subscribe to newsgroups from the server's full group list.

Requirements

  • .NET 8
  • Windows 10 (19041) or later
  • Windows App SDK / WinUI 3

Building

dotnet build

Configuration

On first launch, go to Settings to configure:

  • Usenet provider — Host, port, SSL, and credentials for your NNTP server.
  • Newsgroups — The newsgroups to scan for content.
  • Library folder — Where downloaded files are stored.

Settings are saved to %LocalAppData%\RadioObtainer\config.json.

Project Structure

Services/
  NntpClient.cs       — Low-level NNTP protocol implementation
  DownloadService.cs   — High-level scan and download orchestration
  HeaderCache.cs       — Compressed header cache persistence
  YencDecoder.cs       — yEnc binary decoding and multi-part assembly
  LibraryScanner.cs    — Local file library scanning
  ConfigService.cs     — JSON configuration persistence
Models/
  AppConfig.cs         — Configuration and provider models
  RadioShow.cs         — Domain models (ArticleHeader, PostGroup, etc.)
Pages/
  BrowsePage.xaml.cs   — Scan headers and download posts
  GroupBrowserPage.xaml.cs — Discover newsgroups
  LibraryPage.xaml.cs  — View downloaded content
  SettingsPage.xaml.cs — Configure provider and preferences

License

This project is provided as an example for educational purposes.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages