# qbfrt (qBittorrent fastresume tool) Command line tool for working with qBittorrent's fastresume data. Supports the experimental SQLite database and (soon) traditional .fastresume files. `queue-bee-fart`
## Why? The qBittorrent SQLite database is still experimental. While it drastically improves start up times when you have many torrents, most tools that manipulate qBittorrent fastresume data do not support the new database. This tool prevents you from having to convert back to the .fastresume files to use those other fastresume tools.
## Features With this tool you can: - Mass update the save paths for torrents in the SQLite database - Change files to a new drive or directory without having to move torrents in qBittorrent or recheck all of the torrent data - Migrate from qBittorrent on Windows to Linux without having to recheck the torrent data - Mass update the tracker URLs for torrents in the SQLite database **More functionality to come!** The application will look for the default qBittorrent data directory containing the torrents.db file. This behavior can be changed by passing `--data_dir /some/path/to/db`
## Arguments - `-p, --config_dir` - Path to the qB local config directory (where torrents.db lives) - uses default qBittorrent data directory if not specified - `-d, --disable_backup` - Disables the automatic torrents.db backup - `--existing-path` - Existing save path or path fragment - requires `--new-path` to be provided - `--new-path` - New save path or path fragment to replace existing path - requires `--existing-path` to be provided `--old-tracker` - Existing tracker or URL fragment - requires `--new-tracker` to be provided - `--new-tracker` - New tracker or URL fragment to replace existing tracker - requires `--old-tracker` to be provided - `-v, --verbose` - Enables more verbose output - `--old-path` - The old save path or partial path to replace - `--new-path` - The new save path or partial path to replace with - `--use-unix-sep` - Force using path slash "/" for updated paths - `--use-win-sep` - Force using Windows separators "\" for updated paths
## Examples and Usage ### Updating save path on Unix Here the torrent is saved at `~/torrents/some/old/path/here`. Running the following command will result in the save path becoming `~/torrents/new/thing/here`. ```bash qbfrt -v --old-path /some/old/path --new-path /new/thing ``` ### Updating save path on Windows Here the torrent is saved at `D:\Downloads\torrents\some\old\path\here`. Running the following command will result in the save path becoming `C:\torrents\some\old\path\here`. ```powershell .\qbfrt -v --old-path "D:\Downloads" --new-path "C:\" ``` ### Force using specific path separator You can force updated paths to use a specific separator by passing `--use-unix-sep` or `--use-win-sep`. This is useful if you want to update save paths for a different machine. Here the torrent is saved at `D:\Downloads\some\folder` on a Windows machine and we are running the command on Linux. The new path will still use Windows "\" path separators. Note you would have to escape the back slashes in bash. ```bash qbfrt -v --old-path "D:\\Downloads" --new-path "C:\\" --use-win-sep ``` ### Updating tracker URL Here the torrent has the following trackers: - `http://some.tracker:6969/tracker` - `http://other.tracker:6969/tracker` Running the following command will result in the trackers becoming: - `http://some.tracker:6969/tracker` - `http://beans.tracker:6969/tracker` ```bash qbfrt -v --old-tracker other --new-tracker beans ```
## Notes - By default, a timestamped backup of the torrents.db file will be created before processing changes. Currently, a simple file copy is used to do the backup, not a proper SQL dump. **qBittorrent should be completely shut down before running this tool.** - The save path replacement uses a lazy find and replace. It will replace all instances of the old string. Be careful if you are updating partial paths that may share segments with others. e.g. `--existing-path /torrents/movie` will match both `/torrents/movies` and `/torrents/movie-folder`. Avoid using a single word, it will replace all instances of it. - Like the save path, the tracker replacement uses a lazy find and replace. It will replace all instances of the old string. - If you end a string with a slash, use care to include a slash at the end of the new string, otherwise it will remove it. - You have to run the command once for each path you want to change, currently you can not batch different path replacements. - Use something like [Beekeeper Studio](https://www.beekeeperstudio.io/) to confirm the appropriate changes were made. Check the `target_save_path` column. You can check the libtorrent_resume_data save path and tracker list, but first you will have to convert the hex blob to text. - Git bash/MINGW64 on Windows: mingw messes up partial paths starting with "/" and makes them relative to the local git program directory. See [here](https://github.com/moby/moby/issues/24029#issuecomment-250412919). Run the command with command prompt or powershell instead.
## Building From Source Until I figure out how to compile cross-platform, you're going to have to do it yourself. ### 1. [Install Rust](https://www.rust-lang.org/tools/install) ### 2. Clone the git repo: ```bash git clone https://github.com/strangeepoxy/qbfrt.git ``` ### 3. Compile the app: ```bash cargo build --release ``` ### 4. Move the compiled executable where you want it: #### Unix ```bash mv /target/release/qbfrt /place/you/want/qbfrt ``` #### Windows ```powershell move ./target/release/qbfrt.exe C:/place/you/want/qbfrt.exe ``` ### 5. (Optional) Add qbfrt to your path
## Updating From Source ### 1. Pull updates from repo: ```bash git pull ``` ### 2. Follow "Building From Source" starting at step #3.