Files
pipu-music/docs/desktop.md
T
mrleo1nid ab49e22357
ci / module boundaries / boundaries (push) Successful in 7s
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 1m2s
ci / ts / ts (packages + web) (push) Successful in 3m8s
ci / desktop / rust (desktop proxy) (push) Successful in 4m21s
release / release (версия и заметки) (push) Successful in 6s
release / android (APK в релиз) (push) Successful in 4m0s
release / desktop (Linux и Windows в релиз) (push) Successful in 11m49s
release / prune (старые файлы и прогоны) (push) Successful in 5s
feat(desktop): add offline cache and verified app updates
Clean release notes in Android and desktop update dialogs. Persist downloaded audio and offline playback events per server and user; add desktop update checks, checksum verification and installer launch.
2026-10-22 22:37:35 +03:00

4.9 KiB

Десктоп (apps/desktop)

Windows, Linux и macOS: тот же веб-клиент в окне Tauri 2. Запросы к API идут через локальный прокси на 127.0.0.1, чтобы плеер не открывал чужой origin. Refresh-токен хранится в системной связке ключей. Тип клиента — desktop.

При первом запуске нужно указать адрес сервера (как в Android). Дальше вход тот же, что в вебе. Кнопка «Другой сервер» в настройках забывает адрес и токен. Трея: левый клик открывает окно; меню — открыть и выход. Клавиши медиаплеера ОС управляют воспроизведением.

Плейлисты, ссылка на трек и остальной интерфейс совпадают с вебом. Сборка подставляет версию из git-тега.

pnpm --filter @pipu/desktop icons
pnpm --filter @pipu/desktop dev
pnpm --filter @pipu/desktop bundle

На Windows получается NSIS-установщик (~3 МБ). На Linux в релиз идёт только .deb (~4 МБ): AppImage тащит WebKitGTK и раздувается до ~80 МБ. Зависимости пакета: WebKitGTK 4.1, AppIndicator, libsecret, GStreamer.

Релиз по тегу собирает Linux .deb и Windows NSIS через cargo-xwin (pipu-music-<версия>-windows-setup.exe). Подпись Windows-установщика на Linux нет. Страница /download на сервере отдаёт те файлы, что есть в последнем релизе Gitea.

Офлайн и кеш

Коллекция → Скачанное и кеш доступна без сервера, в том числе после перезапуска. Полностью загруженные прослушанные треки автоматически сохраняются в IndexedDB WebView; кеш недавних ограничен 500 МБ, при заполнении удаляются самые старые записи. Кнопка «Скачать» закрепляет трек: такие загрузки не вытесняются кешем и удаляются вручную. Обложки сохраняются рядом с аудио; подписанные ссылки не сохраняются. Хранилище и локальная очередь воспроизведения разделены по адресу сервера и пользователю.

Настройки показывают размер хранилища и позволяют очистить недавние треки, сохранив ручные загрузки. Плеер предпочитает локальное аудио (включая crossfade); при запуске без сети восстанавливает сессию и сохранённую очередь без автозапуска. Если сервер волны недоступен, можно запустить перемешанные локальные треки без дизлайков. События прослушивания сохраняются локально и досылаются с исходными идентификаторами при восстановлении связи.

Обновления

При запуске и возврате в окно (не чаще раза в 6 часов), а также вручную в настройках, нативный клиент читает /api/v1/app/clients через настроенный сервер Pipu. Выбирается сборка текущей ОС, версия сравнивается с установленной с учётом -rc.N. Диалог показывает пользовательские заметки без служебных блоков CI.

«Скачать и установить» загружает сборку в каталог кеша приложения, показывает прогресс, проверяет размер и SHA-256 и только затем открывает установщик. Без контрольной суммы обновление не предлагается. Windows запускает EXE/MSI; Linux открывает DEB/RPM через системный обработчик пакетов; macOS открывает DMG. Установку подтверждает пользователь в системном интерфейсе, после неё требуется перезапуск приложения. На Linux необходим установленный обработчик пакетов для xdg-open; AppImage и .app.tar этим потоком не поддерживаются.