Skip to content

chinmaykrishnroy/BitroidDM

Repository files navigation

BitroidDM

BitroidDM is a PySide6 desktop torrent search, download, file browsing, and media utility. The app is being shaped into a full Bitroid Studio-style desktop client with an internal libtorrent engine, a custom themed interface, a file manager, and a wired media player.

Current Status

The original Python 3.11+ libtorrent blocker has been resolved for Windows by using the proper libtorrent-windows-dll runtime package. The internal downloader is now promoted from the dev lab into the production Downloads screen, with libtorrent-backed torrent creation, progress polling, app-specific speed reporting, file priorities, pause/resume/remove controls, persisted resume state, and a Bitroid-themed monitoring UI.

What Has Been Done

  • Reorganized the app into a professional package structure under bitroid/, with dev prototypes moved under dev/.
  • Reworked app paths so runtime state uses the user's OS data directories instead of hardcoded project paths.
  • Improved custom window behavior, title bar dragging, resize cursors, and Windows shadow handling.
  • Rebuilt the file manager around layer-by-layer directory browsing with folders and files shown together.
  • Added Explorer-like path dropdown behavior, context menus, rename handling, properties UI, and responsive elided filenames.
  • Wired the PySide6 media player controls, playlist behavior, light/dark player styling, repeat/shuffle/lock controls, and state persistence hooks.
  • Tightened dropdown/menu spacing and themed properties dialogs.
  • Added app-specific network speed reporting instead of whole-system psutil.net_io_counters() traffic.
  • Built and tested a dev libtorrent engine with torrent files, magnets, progress, file progress, speed, peers, tracker events, pause/resume/remove, speed limits, file priorities, storage movement, recheck, and resume-data hooks.
  • Validated the engine against an official Ubuntu 26.04 LTS torrent in the OS Downloads directory.
  • Promoted the libtorrent loader and torrent engine into bitroid/services/ for app use.
  • Integrated the Downloads UI with the internal torrent engine, including magnet/torrent add flows, metadata preview, torrent tables, detail tabs, context menus, and selectable file priorities.
  • Added persistent torrent state under the user's app data directory so torrents can reappear on reopen with saved resume data, paused/start intent, active filter, and total downloaded bytes.
  • Added a resizable vertical splitter between the torrent list and details panel so users can choose whether to see more table or detail content.
  • Added active-state styling for the downloader sidebar filters and compact themed dropdown/header styling for torrent tables.
  • Added a piece-map style progress strip and optimized detail refreshes so expensive file/peer/tracker updates only run for the visible tab.

Windows Libtorrent Runtime DLLs

Windows needs these OpenSSL runtime DLLs for the Python libtorrent==2.0.11 wheel:

  • libcrypto-1_1-x64.dll
  • libssl-1_1-x64.dll

They are committed under vendor/windows/libtorrent/ and were sourced from the PyPI package libtorrent-windows-dll==0.0.3. See vendor/windows/libtorrent/SOURCE.md for hashes and source notes.

The preferred install path is still dependency-based:

.\venv\Scripts\python.exe -m pip install -r requirements.txt

The committed DLLs are included so packaged Windows builds and future CI/release scripts have a stable runtime source in the repository.

Development Setup

python -m venv venv
.\venv\Scripts\python.exe -m pip install -r requirements.txt
.\venv\Scripts\python.exe main.py

Torrent Engine Lab

The isolated downloader work lives in dev/libtorrent_lab/.

Useful checks:

.\venv\Scripts\python.exe -B dev\libtorrent_lab\probe_libtorrent.py
.\venv\Scripts\python.exe -B dev\libtorrent_lab\test_torrent_engine.py
.\venv\Scripts\python.exe -B dev\libtorrent_lab\run_ubuntu_live_test.py

The live Ubuntu test uses the official Ubuntu 26.04 LTS torrent, saves into the OS Downloads directory, and stops once critical hooks plus real payload transfer are observed. It does not need to download the full ISO unless run with --complete.

Integrated Downloader State

Runtime downloader state is stored outside the repository in the user's app data folder:

  • Windows: %APPDATA%\BitroidDM\torrent_state\downloads.json
  • macOS: ~/Library/Application Support/BitroidDM/torrent_state/downloads.json
  • Linux: $XDG_DATA_HOME/BitroidDM/torrent_state/downloads.json or ~/.local/share/BitroidDM/torrent_state/downloads.json

The state file tracks torrent rows, resume data, active sidebar filter, paused/resume intent, and total bytes downloaded by BitroidDM's torrent client.

Verification Used

.\venv\Scripts\python.exe -B -m py_compile main.py bitroid\app.py bitroid\services\network.py dev\libtorrent_lab\*.py
.\venv\Scripts\pyside6-uic.exe bitroid\ui\designer\interface.ui -o $env:TEMP\bitroiddm_uic_check.py
python -m compileall bitroid main.py

Qt Designer currently emits one known warning from the existing UI file:

Buddy assignment: '' is not a valid widget.

Next Step

Move the torrent engine work off the UI thread more completely, add formal automated tests around persisted torrent state, and continue polishing production downloader workflows such as first/last-piece mode, tracker editing, and full settings UI controls.

About

BitroidDM - A modern, optimized torrent client with an intuitive PySide6 GUI. BitroidDM lets you search torrents via APIs, download directly using the libtorrent Python binding, or redirect to external apps like qBittorrent. It features a built-in media player for audio/video playback and an integrated file system for easy file management.

Resources

License

Stars

5 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages