• v1.7.6 8c66d10512

    V1.7.6 Stable

    serrebi released this 2026-06-21 10:12:30 -07:00 | 25 commits to main since this release

    Breaking

    • None

    Features

    • None

    Fixes

    • fix(a11y): keep file list arrows speaking

    Other

    • None
    Downloads
  • v1.7.5 d2f6319ce6

    V1.7.5 Stable

    serrebi released this 2026-06-21 09:42:47 -07:00 | 25 commits to main since this release

    Breaking

    • None

    Features

    • None

    Fixes

    • fix(a11y): keep details synced to focused torrent

    Other

    • None
    Downloads
  • v1.7.4 189ddd4f3b

    V1.7.4 Stable

    serrebi released this 2026-06-21 09:35:32 -07:00 | 27 commits to main since this release

    Breaking

    • None

    Features

    • None

    Fixes

    • fix(a11y): announce virtual list rows to NVDA on arrow navigation

    Other

    • docs: add NVDA virtual list memory
    • The torrent list, file list, peers, trackers, and RSS article lists are all
    • wx.LC_VIRTUAL controls. NVDA announces the row carrying wx.LIST_STATE_FOCUSED,
    • but these lists never re-asserted a focused row after a refresh, so arrowing
    • went silent while Tabbing in still worked:
      • The torrent list's per-row Select() loop ran on every 2-second refresh, and
    • Select() sets only LVIS_SELECTED (never LVIS_FOCUSED), churning the focused
    • row out from under the user.
      • The Files/Peers/Trackers/Article lists called SetItemCount() on every refresh
    • (which wipes the focused row on a virtual list) and never established one.
    • Add AccessibleVirtualListMixin: after each populate it re-asserts a single
    • LIST_STATE_FOCUSED row via SetItemState (the state that fires the native MSAA
    • focus event NVDA reads), but only moves focus when the list actually holds
    • keyboard focus, so background refreshes never yank focus from elsewhere. The
    • torrent list preserves the focused row by hash across sort/refresh and
    • re-applies selection only when the row set actually changed; SetItemCount is
    • skipped when the count is unchanged.
    • Non-virtual controls (ListBox, CheckListBox, LC_SINGLE_SEL ListCtrl, TreeCtrl)
    • keep real per-item accessibles and were already fine.
    • Adds display-free unit tests for the focus-restoration decision logic.
    • Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
    Downloads
  • v1.7.3 6594b3d170

    V1.7.3 Stable

    serrebi released this 2026-06-21 08:44:26 -07:00 | 30 commits to main since this release

    Breaking

    • None

    Features

    • None

    Fixes

    • fix: harden remote clients, updater, and web safety; pre-release bug fixes
      • Fix deferred temp-dir cleanup: a PowerShell param() block under
      • Fix the rollback failure dialog to read the log path from
    • realistic rTorrent fixture; broad coverage across the changed modules.

    Other

    • Remote clients (clients.py):
      • rTorrent: report real seeder/leecher counts from peers_complete /
    • peers_accounted. The connection_seed / connection_leech columns are
    • string constants ("seed"/"leech"), not counts, so the prior mapping
    • coerced connected peers to 0 for every torrent.
      • qBittorrent v5 state normalization and Transmission field handling;
    • SSRF-safe torrent URL download with per-redirect re-validation.
    • Updater / release pipeline (updater.py, update_helper.bat):
    • -Command never binds trailing arguments, so the generated cleanup
    • script silently deleted nothing. Bind paths via environment variables.
    • $env:LOG_FILE (same param()-binding defect left it blank).
      • Remove the downloaded ZIP + extracted tree on any failed or canceled
    • update instead of leaking it until the next startup sweep.
      • Zip-slip / decompression-bomb caps and Authenticode + manifest
    • thumbprint verification on update download.
    • Web server (web_server.py): SSRF private-IP/DNS-rebind/redirect checks,
    • CSRF protection, and session invalidation on credential change.
    • Other: config default-profile repair; list_torrents no longer flags
    • benign Windows "operation completed successfully" status as Failed;
    • drop a redundant duplicate import in clients.py.
    • Tests: regression guards for the PowerShell param()-binding defect and a
    • Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
    Downloads
  • v1.7.2 1ade480e89

    V1.7.2 Stable

    serrebi released this 2026-06-20 10:13:45 -07:00 | 36 commits to main since this release

    Breaking

    • None

    Features

    • None

    Fixes

    • fix: accept release manifest signing thumbprints

    Other

    • None
    Downloads
  • v1.7.1 ed7adf1182

    V1.7.1 Stable

    serrebi released this 2026-06-20 10:10:10 -07:00 | 36 commits to main since this release

    Breaking

    • None

    Features

    • None

    Fixes

    • fix: harden torrent client stability and release safety

    Other

    • None
    Downloads
  • v1.7.0 8a14e0d1f8

    V1.7.0 Stable

    serrebi released this 2026-05-22 13:48:35 -07:00 | 37 commits to main since this release

    Breaking

    • None

    Features

    • feat: add announce IP override reported to trackers

    Fixes

    • None

    Other

    • Add an optional 'Announce IP' preference for the local libtorrent session,
    • applied via settings_pack announce_ip. Lets the client report a public
    • relay/VPS address to trackers when inbound peer traffic is port-forwarded
    • from an address that differs from the local egress IP. Blank keeps
    • automatic detection. Exposed in Local Session Settings -> Connection and
    • persisted in preferences.
    • Co-Authored-By: Claude Opus 4.7 noreply@anthropic.com
    Downloads
  • v1.6.0 6f73b849b6

    V1.6.0 Stable

    serrebi released this 2026-05-22 10:05:58 -07:00 | 38 commits to main since this release

    Breaking

    • None

    Features

    • None

    Fixes

    • None

    Other

    • @ feat: support BitTorrent v2 / hybrid torrent hashes
    • Track both v1 (btih) and v2 (btmh) info-hashes throughout the local
    • session, magnet generation, and state restoration so hybrid torrents
    • are matched, deduped, and restored correctly.
      • session_manager: store per-torrent hash dicts, look up DB/state and
    • removal by any v1/v2 alias, add hash-dict helpers
      • torrent_parsing: parse btmh magnets, build hybrid magnet URIs
      • clients/main: emit v1/v2 hashes and full magnet links (prefer
    • libtorrent make_magnet_uri) when copying magnets
      • torrent_creator: build magnet via make_magnet_uri for hybrid output
      • bump reported qBittorrent version to 5.2.0
      • tests for btmh parsing and hybrid magnet building
    • Co-Authored-By: Claude Opus 4.7 noreply@anthropic.com
    • @
    Downloads
  • v1.5.48 24e9c993ed

    V1.5.48 Stable

    serrebi released this 2026-05-22 09:51:24 -07:00 | 42 commits to main since this release

    Breaking

    • None

    Features

    • None

    Fixes

    • fix local hybrid torrent removal
    • fix release draft cleanup

    Other

    • None
    Downloads
  • v1.5.47 380eacde2d

    V1.5.47 Stable

    serrebi released this 2026-05-22 09:47:26 -07:00 | 42 commits to main since this release

    Breaking

    • None

    Features

    • None

    Fixes

    • fix local hybrid torrent removal

    Other

    • None
    Downloads