Skip to content

Добавить Discord RPC #20

@Scream034

Description

@Scream034

Суть проблемы

В плеере отсутствует интеграция с Discord (Rich Presence), которая позволяла бы друзьям пользователя видеть, какой трек сейчас играет, автора, прогресс воспроизведения и ссылку на проект на GitHub. Интеграция должна быть максимально легковесной, чтобы не создавать нагрузку на CPU/сеть и не вызывать микрофризы UI при потере интернет-соединения.

Возможное решение (Теория и архитектура)

  1. Создание сервиса: Создать DiscordRpcService.cs на базе чистого C# клиента для работы с Discord IPC (через Named Pipes на Windows). Использование нативных C++ DLL крайне нежелательно для сохранения портативности.
  2. Событийная интеграция: Подписать сервис на события PlayerControlService:
    • CurrentTrackObservable — для обновления названия трека, автора и обложки.
    • PlaybackStateObservable — для изменения статуса (играет/пауза) и обновления таймлайна в Discord.
  3. Оптимизация сетевого спама (Throttling): Обновления статуса RPC должны проходить через оператор Throttle (с задержкой не менее 2-3 секунд). При частой перемотке (seek) или быстром переключении треков RPC-клиент не должен спамить Discord API, чтобы избежать временного бана со стороны Discord.
  4. Защита потоков (Zero-Freeze): Все операции записи/чтения из именованного канала Discord IPC должны выполняться строго асинхронно через Task.Run с использованием ConfigureAwait(false), защищая UI-поток от блокировок при зависании Discord.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions