feat: add phone-style PySide6 desktop player
This commit is contained in:
25
README.md
25
README.md
@@ -1,7 +1,8 @@
|
|||||||
# MTS Music CLI
|
# MTS Music CLI
|
||||||
|
|
||||||
Минимальный клиент для **своего** аккаунта MTS Music: «Моя волна», поиск,
|
Минимальный клиент для **своего** аккаунта MTS Music: «Моя волна», поиск,
|
||||||
избранное, тексты песен, воспроизведение и скачивание в MP3.
|
избранное, тексты песен, воспроизведение и скачивание в MP3. Есть компактный
|
||||||
|
TUI-плеер и настольное Qt-приложение в стиле телефона.
|
||||||
|
|
||||||
Внутри используется тот же путь, что и в веб-клиенте: MTS SSO выдаёт
|
Внутри используется тот же путь, что и в веб-клиенте: MTS SSO выдаёт
|
||||||
OAuth-токен Яндекс.Музыки, дальше запросы идут на `api.music.yandex.net`.
|
OAuth-токен Яндекс.Музыки, дальше запросы идут на `api.music.yandex.net`.
|
||||||
@@ -14,6 +15,12 @@ python3 -m venv .venv
|
|||||||
PLAYWRIGHT_BROWSERS_PATH="$PWD/.playwright" .venv/bin/playwright install chromium
|
PLAYWRIGHT_BROWSERS_PATH="$PWD/.playwright" .venv/bin/playwright install chromium
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Для Qt-приложения дополнительно:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
.venv/bin/pip install -r requirements-qt.txt
|
||||||
|
```
|
||||||
|
|
||||||
Всё локальное лежит рядом с проектом:
|
Всё локальное лежит рядом с проектом:
|
||||||
- `.venv/` — зависимости
|
- `.venv/` — зависимости
|
||||||
- `.playwright/` — браузер Chromium
|
- `.playwright/` — браузер Chromium
|
||||||
@@ -63,6 +70,22 @@ PLAYWRIGHT_BROWSERS_PATH="$PWD/.playwright" .venv/bin/playwright install chromiu
|
|||||||
`SIGSTOP`/`SIGCONT`, а перемотка перезапускает поток с нужной секунды,
|
`SIGSTOP`/`SIGCONT`, а перемотка перезапускает поток с нужной секунды,
|
||||||
поэтому отдельный демон не нужен.
|
поэтому отдельный демон не нужен.
|
||||||
|
|
||||||
|
## Qt-приложение
|
||||||
|
|
||||||
|
```bash
|
||||||
|
.venv/bin/python mtsmusic.py qt
|
||||||
|
```
|
||||||
|
|
||||||
|
Отдельное окно в стиле телефона: большая обложка, кнопка play/pause,
|
||||||
|
переключение треков, перемотка, текст песни и избранное. Кнопка «☰» открывает
|
||||||
|
боковую панель с «Моей волной», избранным, историей и поиском.
|
||||||
|
|
||||||
|
Воспроизведение — через `QMediaPlayer`/FFmpeg из PySide6, поэтому работает
|
||||||
|
перемотка и системный звук. Окно можно растягивать, списки прокручиваются,
|
||||||
|
двойной клик по строке запускает трек. Горячие клавиши те же, что в TUI:
|
||||||
|
`Space`, `←`/`→`, `N`/`P`, `L`, `T`, `M`, `F`, `H`, `S`, `W`; `Esc` закрывает
|
||||||
|
меню/экран, `Ctrl+Q` — выход.
|
||||||
|
|
||||||
## Команды
|
## Команды
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
14
mtsmusic.py
14
mtsmusic.py
@@ -830,6 +830,17 @@ def cmd_tui(args: argparse.Namespace) -> None:
|
|||||||
die(f"TUI упал: {exc}. Подробности: {log}")
|
die(f"TUI упал: {exc}. Подробности: {log}")
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_qt(args: argparse.Namespace) -> None:
|
||||||
|
try:
|
||||||
|
from qt_app import main as qt_main
|
||||||
|
except ImportError as exc:
|
||||||
|
die(
|
||||||
|
"для Qt-приложения нужен PySide6: "
|
||||||
|
f"{exc}. Установи: pip install -r requirements-qt.txt"
|
||||||
|
)
|
||||||
|
raise SystemExit(qt_main())
|
||||||
|
|
||||||
|
|
||||||
def print_tui_check() -> None:
|
def print_tui_check() -> None:
|
||||||
import platform
|
import platform
|
||||||
|
|
||||||
@@ -922,6 +933,9 @@ def build_parser() -> argparse.ArgumentParser:
|
|||||||
tui.add_argument("--no-mouse", action="store_true", help="отключить поддержку мыши")
|
tui.add_argument("--no-mouse", action="store_true", help="отключить поддержку мыши")
|
||||||
tui.set_defaults(func=cmd_tui)
|
tui.set_defaults(func=cmd_tui)
|
||||||
|
|
||||||
|
qt = sub.add_parser("qt", help="настольное Qt-приложение (PySide6)")
|
||||||
|
qt.set_defaults(func=cmd_qt)
|
||||||
|
|
||||||
url = sub.add_parser("url", help="получить прямую ссылку на MP3")
|
url = sub.add_parser("url", help="получить прямую ссылку на MP3")
|
||||||
url.add_argument("track_id")
|
url.add_argument("track_id")
|
||||||
url.set_defaults(func=cmd_url)
|
url.set_defaults(func=cmd_url)
|
||||||
|
|||||||
2
requirements-qt.txt
Normal file
2
requirements-qt.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
-r requirements.txt
|
||||||
|
PySide6>=6.7
|
||||||
Reference in New Issue
Block a user