github Michael-128/qBitControl CI
qBitControl 1.4.0 (20)

pre-release9 hours ago

Features

  • Reduced Data Usage: Network traffic was reduced by 93% due to optimized data syncing.
  • Responsive Progress Bars: Progress indicators now feature fluid animations for a more natural feel.
  • Custom Headers: Added the ability to specify custom HTTP headers for your server connections. This provides seamless support for advanced home-lab setups, including reverse proxies and zero-trust networks (like Cloudflare Access or Authelia).
  • Reworked Server Addition: Redesigned the server setup and edit screens for a smoother experience, complete with an updated Advanced settings page and deferred saving.
  • Limit Configuration: You can now configure precise speed limits, seeding time limits, and share ratios for individual torrents directly within the app.
  • Offline Banner: A clear overlay banner now appears whenever the connection drops.
  • In-App Logs: Added a built-in log viewer to review and easily share system events directly inside the app.
  • Self-Signed Certificate Support: Added full support for untrusted and self-signed SSL certificates, making it much easier to connect to your personal or home-hosted servers.
  • Clearer Error Alerts: If adding a .torrent file or a magnet link fails, a clear error message will now pop up to explain exactly what went wrong.

Bug Fixes

  • Background Resume: Leaving the app and coming back to it no longer forces a hard reload of your data. Everything stays right where you left it unless you switch servers.
  • Repositioned Add Button: The "Add Torrent" button has been moved to the toolbar for cleaner, more intuitive access.
  • Stable RSS Downloads: Fixed an issue in the RSS view where tapping a row to download a torrent would cause the confirmation sheet to glitch, closing and reopening unexpectedly.
  • Connection Timeouts: Implemented strict network timeout limits to prevent the app from hanging indefinitely on the launch screen if a server is unresponsive.

UI/UX

  • Smooth Charts: Instead of updating every two seconds, the statistics charts now scroll continuously and smoothly.
  • Cleaner Torrent List: The torrent rows now adapt dynamically to show the most relevant details, depending on whether a transfer is downloading, seeding, or paused.

Code Refactoring

  • Async Client Migration: Migrated to a modern, asynchronous client architecture.
  • RSS Architecture: Refactored the RSS module to fix reported bugs.
  • Network & DI: Implemented a stateless NetworkClient and established a TorrentClientProtocol with a structured Dependency Injection setup for future support of clients other than qBittorrent.
  • Reactive Torrent Sync: Migrated torrent fetching to use maindata endpoint.
Show Full Changelog 🛠️

Features

  • network: implement stateless NetworkClient and migrate tests to Xcode target (#99) #99 (Michael)
  • client: define TorrentClientProtocol and DI structure (#100) #100 (Michael)
  • auth: migrate authentication and server management module (#101) #101 (Michael)
  • torrent-list: migrate view and view model to TorrentClientProtocol (#102) #102 (Michael)
  • torrent-details: migrate torrent details, files and trackers to new client (#103) #103 (Michael)
  • add-rss-search: migrate torrent additions, RSS feeds and search engine to new client (#104) #104 (Michael)
  • sync: migrate torrent telemetry to reactive maindata delta sync (#106) #106 (Michael)
  • ui: implement smooth predictive-feel progress bar with isolated layout animations (Michael-128)
  • torrent: show localized error alerts when adding file or magnet torrents fails (#110) #110 (Michael)
  • status: add connection status banner overlay for offline state (#111) #111 (Michael)
  • sync: trigger immediate telemetry poll on successful login (Michael-128)
  • logging: implement core logger subsystem and in-app log viewer (#112) #112 (Michael)
  • auth: implement background silent reauthentication on unauthorized telemetry errors (#113) #113 (Michael)
  • ui: add release highlights modal sheet with version tracking and localizations (#114) #114 (Michael)
  • localization: add Polish, Japanese, and Chinese system localizations (#115) #115 (Michael)
  • add demo mode with live-animated mock data and write-action blocking (#117) #117 (Michael)
  • server: redesign add/edit server sheet with deferred save, LabeledContent, and updated Advanced page (#118) #118 (Michael)
  • server: add custom HTTP headers for zero-trust tunnels and reverse proxies (#120) #120 (Michael)
  • server: add untrusted SSL certificate support (#122) #122 (Michael)
  • limits: per-torrent ratio, seeding time, speed limits, and share limit action configuration (#123) #123 (Michael)
  • ux: torrent details icons, RSS validation warnings, and server connection error improvements (#125) #125 (Michael)
  • l10n: add Japanese, Polish, Simplified and Traditional Chinese translations for 37 UI strings (#126) #126 (Michael)

Bug Fixes

  • ui: move add torrent button to toolbar for better usability #75 (Michael-128)
  • ux: bind TorrentDetailsViewModel to cache manager to enable real-time tag updates (Michael-128)
  • ux: implement cache clearing and dynamic client binding on server switch (Michael-128)
  • ux: bind tab view lifecycles to activeServerId to auto-reset UI filters on server switch (Michael-128)
  • ux: retain local cache on background resume and only clear it when switching servers (Michael-128)
  • implement connection timeout limits and launch splash cut-off (#107) #107 (Michael)
  • track list multi-selection by info-hash instead of Torrent objects (#108) #108 (Michael)
  • filters: always show category and tag pickers to prevent active state locks (Michael-128)
  • filters: align untagged local filter checks with UI tag empty string (Michael-128)
  • stats: decouple chart timeline ticks from network request latency (#116) #116 (Michael)
  • telemetry: recover stale URLSession on persistent fetch failures (#119) #119 (Michael)
  • rss: prevent stale TorrentAddViewModel reuse across sheet presentations (#121) #121 (Michael)
  • ui: remove conflicting toolbar modifiers causing oversized bottom bar (Michael-128)
  • torrent-add: stale file content, concurrent submissions, and test fixtures (#124) #124 (Michael)
  • about: remove dead translation link (Michael-128)

Documentation

  • add pull request template (Michael)

Styles

  • implement delayed real-time scrolling and label sync for stats charts (Michael-128)
  • tune stats charts scrolling frequency and delay (Michael-128)
  • ui: implement dynamic state-based metadata columns with ETA and ratio icons (Michael-128)

Code Refactoring

  • extract UI formatting and state logic to TorrentFormatter (Michael-128)
  • introduce TorrentFormatting protocol for testability (Michael-128)
  • eliminate legacy client classes and finalize async client migration (#105) #105 (Michael)
  • rss: implement clean MVVM architecture, async loading, and lifecycle polling (#109) #109 (Michael)

Tests

  • implement unit tests for TorrentListHelperViewModel (Michael-128)
  • sync: add unit tests for telemetry connection states and fetch lock (Michael-128)

Continuous Integration

  • remove pull request trigger (Michael)

Chores

Don't miss a new qBitControl release

NewReleases is sending notifications on new releases.