Yandex-Music icon indicating copy to clipboard operation
Yandex-Music copied to clipboard

Поддержка виджета в Центре управления

Open BATCOH opened this issue 3 years ago • 5 comments

Приветствую! Благодарю за чудесное приложение, использую вместо браузерного дополнения к хрому, нравится.

Проблема С некоторых пор в macOS появился Control Centre, а в нём — виджет «Now Playing». И с музыкой из приложения он выглядит так: Screenshot 2022-02-24 at 02 51 32 При этом работает только кнопка паузы и прокрутка (не каждый раз).

Решение Не знаю точный алгоритм, по которому Now Playing определяет что собственно сейчас играет, но он явно дружит с MediaSession браузера. По крайней мере на Monterey 12.2.1 + Safari 15.3. А значит, достаточно в скриптах изнутри страницы Яндекс.Музыки настроить этот самый MediaSession. Странно, что Яндекс ещё не сделал этого сам.

Я дописал небольшой JS при загрузке страницы, который ловит события от яндексового externalAPI и заполняет соответствующими значениями MediaSession. И выдаёт наружу ручки, которые дёргаются из виджета — вперёд, назад, прокрутка.

По итогам выглядит так: Screenshot 2022-02-24 at 06 01 16

Известные баги При переключении трека из виджета кнопка «Далее» в виджете иногда перестаёт быть доступной, хотя updateControls отрабатывает. Кнопки в виджете обновляются сами собой если подождать, или если чуть промотать трек. При выставлении трека на паузу из виджета прогресс в виджете выставляется в 0:00/0:00, не каждый раз, но часто. В MediaSession при этом нулей не отправляется.

Буду рад замечаниям и дополнениям, swift — не мой родной язык. Что скажете?

BATCOH avatar Feb 24 '22 04:02 BATCOH

Привет! Я как раз наоборот не шарю в веб-разработке, поэтому не сумел сам ничего подобного реализовать. Кажется, скоро будет обновление приложения… 💪

debug45 avatar Feb 24 '22 16:02 debug45

Жаль только, что не получается победить известные баги. Выходит, что мы можем проставлять правильные обложку и название/исполнителя, но сами системные элементы управления воспроизведением по-прежнему толком не работают.

debug45 avatar Feb 24 '22 17:02 debug45

Обновил. JS кода много, хранить и редактировать его просто в строке не очень комфортно. Вынес в отдельный файл.

К проблеме с кнопками поменял подход. Теперь кнопки «Вперёл» и «Назад» в виджете доступны вообще всегда. Описание доступных контролов от API яндекса не учитывается. Если яндексовый «Назад» запрещён — например, пользователь слушает радио, то кнопка просто мотает текущий трек на его начало. Это закрывает проблему 1, работает надёжно, и вроде как даже не костыль. Кнопки из меню приложения работают аналогичным образом.

Второй вопрос — по нажатию на паузу индикатор прогресса в виджете иногда отображает 0:00/0:00 вместо прогресса-на-момент-нажатия-паузы. По нажатию на play всё восстанавливается, играет с нужного места, прогресс оживает. Кажется, что пользователям это сильно мешать не будет, мне не мешает, но конечно немного неприятно. По этой теме — в момент сброса прогресса в логе приложения пишется такое: 2022-02-28 00:22:43.507735+0300 Я.Музыка[24412:2202478] [] [0x600001203e20] CVXTime::reset Может, можно раскопать где оно возникает и как-нибудь заглушить?

BATCOH avatar Feb 27 '22 21:02 BATCOH

Подскажите, пожалуйста, как с вами можно связаться? Telegram, например.

debug45 avatar Mar 05 '22 16:03 debug45

https://t.me/BATC0H

BATCOH avatar Mar 05 '22 19:03 BATCOH

Привет. Работая над выпущенным сегодня обновлением, заметил, что Яндекс, похоже, поддержал всё эту историю самостоятельно на своей стороне. У вас тоже заработало?

debug45 avatar Feb 11 '23 09:02 debug45

Да, работает, похоже Яндекс сделал поддержку MediaSession на своей стороне)

BATCOH avatar Feb 13 '23 09:02 BATCOH