
Привет, хабр!
Каждый день я использую qBittorrent. Это отличный торрент-клиент, стабильный и кроссплатформенный. Наверное, работает лучше чем любой другой торрент клиент. Но интерфейс у него на Qt Widgets, и на Windows 11 он выглядит не нативно(+ лично для меня не хватает некоторых вещей, о которых расскажу позже)
Я долго искал в интернете что-то подобное, но найти подходящее так и не смог, поэтому взялся пилить своё собственное решение. Переписывать движок с нуля было бы откровенной дуростью: qBittorrent пилят и тестируют годами, повторить это в одиночку за разумное время нереально. Значит, задача сузилась: оставить движок как есть, а вокруг него построить красивый интерфейс и внедрить новые функции.
Так, день за днём, через месяц получился WinBitTorrent
Что это вообще такое
WinBitTorrent не форк и не переписывание qBittorrent. Внутри работает qbittorrent-nox, тот же движок, что и в оригинальном приложении, версия 5.2.3 с libtorrent 2.0.13. Только вместо привычного веб-интерфейса или Qt Widgets поверх него стоит нативное приложение на WinUI 3 и Windows App SDK 2.2, написанное на .NET 8 по MVVM.
Программа управляет движком через его же Web API, тот, что обычно используют для доступа к qBittorrent через браузер. Только тут это API дёргает не браузер, а полноценное десктопное приложение с вкладками, деталями по каждой раздаче и графиками скорости.
Как оно работает
При первом запуске приложение поднимает qbittorrent-nox.exe как дочерний процесс с отдельным профилем, привязывает его веб-интерфейс к 127.0.0.1 на случайном свободном порту и запускает в headless-режиме. Движок при старте выдаёт временный пароль администратора, и WinBitTorrent сразу меняет его на постоянный API-ключ, который уходит в хранилище учётных данных Windows (Credential Vault). Сам пароль на диск не попадает и вычищается из логов.
Дочерний процесс висит в Windows Job object, поэтому физически не может пережить родительское приложение: если WinBitTorrent упадёт или его убьют из диспетчера задач, движок закроется вместе с ним. Если движок неожиданно завершится сам, приложение попробует поднять его заново, но не будет переусердствовать.
Кроме локального движка есть режим подключения к удалённому qBittorrent: домашнему серверу, NAS или сидбоксу, по логину с паролем или по API-ключу. Интерфейс один и тот же для обоих случаев, разница только в паре функций вроде открытия папки с файлом в проводнике, которая физически возможна только для локального движка.
Новые фишечки
Большинство из вас, скорее всего, и так пользуется qBittorrent(или его аналогами) на постоянной основе, так что копией его собственных функций никого не удивишь. Поэтому расскажу про то, чего в оригинале нет вообще.
Во-первых, поиск раздач прямо в приложении: уже сейчас встроены провайдеры RuTracker и The Pirate Bay. Для RuTracker есть отдельная авторизация по логину и паролю и опциональная поддержка прокси, на случай если трекер режут у провайдера.

Во-вторых, каталог фильмов через TMDB. Идея была в том, чтобы сделать упрощённый аналог Lampa, только для торрентов и без стриминга. Наверное, это уже лишнее. Но это функция которая нужна была лично мне, а из публичной версии я решил её не вырезать, на случай если кому-то ещё она придётся по душе. Тыкаешь на любой фильм, нажимаешь «Скачать», выбираешь трекер и тебя сразу перекидывает на выдачу файлов по этому трекеру

Ещё одна маленькая, но лично мне нужная вещь: редактор контекстного меню. Изначально в контекстном меню(правый клик по любому торренту в списке) очень много пунктов, и большинство пользователей половиной из них никогда не пользовались. Я добавил возможность оставить в этом контекстном меню только то что нужно именно вам

А что, собственно, дальше?
В приложение уже встроена система автообновлений, так что про новые версии вы узнаете при следующем запуске.
Из ближайшего: разбор багов, которые всплывут после первых установок, и доводка мелочей в интерфейсе, до которых за месяц просто не дошли руки.
Программа полностью бесплатная и опенсорсная. Вся информации, ссылки на исходный код и скачивание доступны на сайте: https://winbittorrent.github.io/
Если найдёте баг или дыру в логике, добро пожаловать в issues на GitHub. А если просто есть мнение по интерфейсу, тоже пишите, любой обратной связи буду рад.
Спасибо за внимание 🙂
ссылка на оригинал статьи https://habr.com/ru/articles/1063294/