Какую проблему решит эта фича?
LMP — это десктопный клиент, обходные пути которого (дешифраторы n-token и sig-cipher) завязаны на постоянные изменения алгоритмов со стороны YouTube. Если YouTube меняет алгоритмы, дешифраторы ломаются, и пользователю жизненно важно как можно быстрее получить обновление.
Сейчас пользователю приходится вручную заходить на GitHub проекта, чтобы проверить, вышла ли новая версия или dev-сборка. Отсутствие автоматического информирования приводит к тому, что пользователи могут сидеть на устаревших сборках и отправлять ложные баг-репорты о неработающих стримах.
Описание предлагаемого решения
Для реализации фичи потребуется расширить логику в нескольких слоях проекта:
1Модель данных и Настройки (AppSettings.cs):
Добавить новые свойства конфигурации в AppSettings:
UpdateCheckIntervalHours (тип int или enum): Частота проверок (При запуске, Каждые 12 часов, Каждые 24 часа, Вручную).
LastUpdateCheckDateTime (тип DateTime): Время последней успешной проверки.
EnableBetaUpdates (тип bool): Проверять ли промежуточные dev-сборки (коммиты) или только стабильные релизы.
2Фоновая служба проверки (UpdateCheckerService.cs):
Создать фоновый сервис, который будет:
- Опрашивать GitHub API (например,
GET https://api.github.com/repos/Scream034/LMP/releases/latest или endpoint коммитов для dev-ветки).
- Выполнять сетевой запрос строго на пуле потоков (
Task.Run) [1] с таймаутом (5-7 секунд), чтобы медленный DNS или блокировки провайдера не вешали UI-поток при запуске плеера [1].
- Сравнивать удаленный номер версии с локальным
G.Build.CommitCount (компонент version.Build из Globals.cs).
- Если найдена новая версия, отправлять мягкое уведомление через
NotificationService (например: «Доступно обновление #185! Нажмите, чтобы скачать»).
Настройки в интерфейсе (GeneralPage.axaml или новая вкладка AboutPage.axaml):
Разработать блок информации о приложении:
- Отображение текущей сборки: Выводить параметры из
G.Build.Info (FullVersionString), явно показывая тип сборки (Debug / Release) и является ли она девелоперской (-dev на основе директив условной компиляции #if DEBUG).
- Кнопка ручной проверки: Кнопка «Проверить обновления» с анимацией загрузки (индикатор
IsCheckingUpdates). При клике запускается принудительный запрос к API.
- Настройка частоты: ComboBox для выбора частоты автоматических проверок.
Альтернативные варианты (если есть)
- Простой вариант: Добавить в правый верхний угол или настройки статическую ссылку «Проверить обновления на GitHub», которая просто открывает браузер. Но этот вариант требует от пользователя ручных действий и не решает проблему оперативного оповещения о поломках дешифраторов.
Какую проблему решит эта фича?
LMP — это десктопный клиент, обходные пути которого (дешифраторы n-token и sig-cipher) завязаны на постоянные изменения алгоритмов со стороны YouTube. Если YouTube меняет алгоритмы, дешифраторы ломаются, и пользователю жизненно важно как можно быстрее получить обновление.
Сейчас пользователю приходится вручную заходить на GitHub проекта, чтобы проверить, вышла ли новая версия или dev-сборка. Отсутствие автоматического информирования приводит к тому, что пользователи могут сидеть на устаревших сборках и отправлять ложные баг-репорты о неработающих стримах.
Описание предлагаемого решения
Для реализации фичи потребуется расширить логику в нескольких слоях проекта:
1Модель данных и Настройки (
AppSettings.cs):Добавить новые свойства конфигурации в
AppSettings:UpdateCheckIntervalHours(типintилиenum): Частота проверок (При запуске, Каждые 12 часов, Каждые 24 часа, Вручную).LastUpdateCheckDateTime(типDateTime): Время последней успешной проверки.EnableBetaUpdates(типbool): Проверять ли промежуточные dev-сборки (коммиты) или только стабильные релизы.2Фоновая служба проверки (
UpdateCheckerService.cs):Создать фоновый сервис, который будет:
GET https://api.github.com/repos/Scream034/LMP/releases/latestили endpoint коммитов для dev-ветки).Task.Run) [1] с таймаутом (5-7 секунд), чтобы медленный DNS или блокировки провайдера не вешали UI-поток при запуске плеера [1].G.Build.CommitCount(компонентversion.BuildизGlobals.cs).NotificationService(например: «Доступно обновление #185! Нажмите, чтобы скачать»).Настройки в интерфейсе (
GeneralPage.axamlили новая вкладкаAboutPage.axaml):Разработать блок информации о приложении:
G.Build.Info(FullVersionString), явно показывая тип сборки (Debug/Release) и является ли она девелоперской (-devна основе директив условной компиляции#if DEBUG).IsCheckingUpdates). При клике запускается принудительный запрос к API.Альтернативные варианты (если есть)