Российские технологии и цифровая экономика
ПоискRSS

Torrserve silicon: нативный swiftui-клиент torrserver для macos на apple silicon

5 минут чтения

Как я собрал нативный SwiftUI-контроллер для TorrServer на macOS

Я давно использую TorrServer на Mac и со временем заметил неудобную особенность: для обычного просмотра приходится постоянно переходить между Терминалом, Web UI и отдельным видеоплеером. Сам сервер полностью устраивал меня по возможностям, но ему явно не хватало удобной оболочки, рассчитанной именно на macOS.

Так появился TorrServe Silicon - открытое приложение на SwiftUI для компьютеров Mac с Apple Silicon. Изначально идея была предельно простой: добавить две кнопки - запуска и остановки TorrServer. Однако постепенно проект превратился в полноценный медиаклиент с библиотекой, метаданными, поиском через Jackett, выбором внешнего проигрывателя и управлением из строки меню.

Важно подчеркнуть: это не новая версия TorrServer и не WebView-обёртка над его интерфейсом. Сам сервер остаётся отдельным бэкендом, а приложение работает с его HTTP API и закрывает повседневные задачи пользователя macOS. Подробнее о возможностях проекта можно узнать в материале о нативном клиенте TorrServer для macOS.

От простой кнопки к полноценному приложению

Первый прототип умел находить исполняемый файл TorrServer, запускать процесс, отображать его состояние и корректно завершать работу. На практике даже такой минимальный сценарий потребовал больше логики, чем ожидалось. Приложению необходимо запоминать путь к бинарному файлу, проверять доступность порта и API, показывать версию сервера, отслеживать аварийное завершение процесса и объяснять пользователю причины ошибок.

В публичную arm64-сборку исполняемый файл TorrServer добавляется во время упаковки приложения. При этом путь можно изменить вручную в настройках. Web UI также сохраняется: при необходимости его можно открыть отдельной командой, не отказываясь от привычного веб-интерфейса.

Самым быстрым решением стала бы загрузка Web UI через WebView. Но тогда пользователь получил бы веб-приложение, помещённое в окно macOS, а не полноценную нативную программу. Хотелось использовать системную навигацию, стандартные диалоги выбора файлов, уведомления, определение установленных проигрывателей, настройки и управление через menu bar.

Поэтому приложение напрямую взаимодействует с HTTP API TorrServer. Magnet-ссылки передаются запросом с действием `add`, а `.torrent`-файлы отправляются через `multipart/form-data`. Ответы сервера преобразуются в Swift-модели, на основе которых строится интерфейс. Такой подход позволяет оставить Web UI независимым резервным инструментом, не смешивая функции сервера и клиентской оболочки.

Структура проекта

Проект собирается с помощью Swift Package Manager и разделён на несколько логических уровней:

- `Sources/App` - жизненный цикл программы, главное окно, боковая панель и общее состояние;
- `Sources/Core` - API-клиент TorrServer, форматирование данных и системные компоненты;
- `Sources/Features` - модули Server, Library, Search, Metadata, Settings и Menu Bar.

Это не попытка создать универсальную архитектурную платформу. Разделение появилось естественным образом по мере расширения функциональности. Компонент, отвечающий за запуск сервера, не должен знать, как отображается карточка фильма, а библиотеке нет необходимости управлять системным процессом TorrServer.

Библиотека и метаданные

Список раздач приложение получает непосредственно от TorrServer. Локально сохраняется только кэш метаданных, а основным состоянием библиотеки остаются данные сервера. Просматривать содержимое можно в трёх режимах: компактном списке, сетке постеров и формате подробных карточек.

Magnet-ссылку разрешается вставить непосредственно в окно приложения. Для `.torrent` используется стандартный файловый диалог macOS. После добавления нового материала библиотека заново синхронизируется с сервером, поэтому клиент не формирует собственную альтернативную базу раздач.

Получение описаний и постеров является необязательным. Поддерживаются TMDB, OMDb, КиноПоиск и AniList. Для обычных провайдеров можно задать порядок обращения: если первый сервис не нашёл нужный материал, приложение автоматически переходит к следующему. Аниме дополнительно проверяется через AniList. Англоязычные описания при желании переводятся на русский с помощью Apple Translation.

Поиск через Jackett

Jackett не стал обязательной зависимостью. Даже без него доступны запуск TorrServer, библиотека, работа с метаданными и воспроизведение. Он нужен только для встроенного поиска: пользователь указывает адрес собственного экземпляра Jackett и соответствующий API-ключ.

Поиск выполняется через Torznab API. Клиент принимает результаты, отбрасывает записи без пригодной ссылки и сортирует оставшиеся варианты сначала по количеству сидов, а затем по дате публикации. В зависимости от ответа можно получить magnet-ссылку либо загрузить `.torrent`-файл. После этого оба варианта передаются TorrServer через общий API-слой.

Такой сценарий особенно удобен тем, что поиск, добавление и запуск воспроизведения объединены в одном интерфейсе. Не нужно копировать ссылку из браузера, открывать отдельный клиент и вручную искать добавленный материал в списке.

Воспроизведение на macOS

TorrServer отвечает за подготовку потока, а декодирование видео приложение доверяет специализированным проигрывателям. Доступны QuickTime Player, IINA, VLC, Infuse, системная программа по умолчанию и любой пользовательский плеер, путь к которому можно указать вручную.

Перед запуском TorrServe Silicon проверяет, установлен ли выбранный проигрыватель. Это помогает избежать ситуации, когда пользователь нажимает кнопку воспроизведения, но получает непонятную системную ошибку. При необходимости можно быстро сменить плеер в настройках, не меняя конфигурацию самого TorrServer.

Управление из строки меню

Одной из полезных возможностей стал menu bar-контроллер. Он позволяет увидеть состояние сервера, запустить или остановить его, открыть библиотеку и быстро перейти к настройкам без отображения основного окна. Для постоянно работающего TorrServer это удобнее, чем держать терминал или отдельное окно приложения на рабочем столе.

Дополнительно можно настроить запуск сервера вместе с приложением, поведение после закрытия главного окна и способ уведомления о сбоях. Такой режим превращает TorrServe Silicon в фоновый системный инструмент, а не просто в графическую оболочку для ручного запуска бинарного файла.

Сборка и ограничения

Тем, кто хочет скачать TorrServer для Mac, важно учитывать архитектуру компьютера. Публичная версия ориентирована на Apple Silicon и использует arm64-бинарник. На Intel Mac потребуется отдельная сборка и проверка совместимости, поскольку проект изначально создавался под актуальную платформу Apple.

Процесс TorrServer остаётся внешним по отношению к интерфейсу, поэтому приложение должно корректно обрабатывать недоступный порт, уже занятый адрес, повреждённый исполняемый файл и неожиданное завершение процесса. Кроме того, качество метаданных зависит от внешних сервисов, а поиск через Jackett требует самостоятельно настроенного экземпляра и действующего API-ключа.

Если рассматривать TorrServer macOS установка в практическом смысле, пользователю достаточно разместить приложение, проверить путь к бинарному файлу, выбрать порт и при необходимости указать видеоплеер. Для Jackett добавляются только адрес сервиса и ключ доступа. Сам сервер при этом не заменяется и продолжает работать через стандартный API.

Итог

В результате получился не просто лаунчер с кнопками "Запустить" и "Остановить", а нативный TorrServer контроллер для Mac. Он объединяет управление процессом, библиотеку, метаданные, поиск, запуск воспроизведения и системные функции macOS в одном приложении.

Главное преимущество подхода - сохранение исходной архитектуры TorrServer. Сервер остаётся самостоятельным и совместимым с Web UI, а SwiftUI-клиент берёт на себя удобство ежедневного использования. Для Mac с Apple Silicon это оказалось более естественным решением, чем универсальная веб-обёртка или набор разрозненных инструментов.

В дальнейшем такой проект можно развивать за счёт автоматического обновления бинарника, расширенных фильтров библиотеки, плейлистов, истории просмотра, синхронизации настроек и более глубокого взаимодействия с системными функциями macOS. Но уже текущая версия закрывает основную проблему: просмотр контента через TorrServer перестаёт требовать постоянного переключения между терминалом, браузером и плеером.

Прокрутить вверх