feschukov / rhythmbox-plugin-yandex-music

Плагин для работы с музыкальным сервисом Яндекс.Музыка в Rhythmbox
GNU General Public License v3.0
187 stars 20 forks source link

Обновление списка треков в потоке #6

Open spochipov opened 2 years ago

spochipov commented 2 years ago

Проблема: для продолжения прослушивания после достижения финальной композиции не происходит автоматической подгрузки треков image

feschukov commented 2 years ago

В данный момент эта функция находится в процессе разработки. Воспроизведение из потоков добавлено в качестве экспериментальной функции. Это не окончательный вид функции, возможно он будет переработан.

feschukov commented 2 years ago

Первая попытка решения данного вопроса сделана https://github.com/dobroweb/rhythmbox-plugin-yandex-music/commit/8aadba2df3e00a4f9b3df050e62d1590e55bac59 Пока топорно, но должно работать. Есть вероятность, что в какой-то момент поток всё таки остановится из-за отсутствия новых треков в списке. Поэтому пока идёт тестирование функции, не закрываю данную тему.

feschukov commented 2 years ago

Как я и предположил, в определённый момент поток встал. Не помогло и то, что я подключился к сигналу смены трека вместо использования виртуальной функции окончания трека https://github.com/dobroweb/rhythmbox-plugin-yandex-music/commit/8b31d32f6651e444b14abfdbd2ceb870e84b6d2b Проблема в том, что иногда запрос треков отдаёт тот же список, что и до этого отдавал. Надо копать в сторону правильной работы с треками, отправлять Яндексу информацию о прослушанных треках и так далее, чтобы Яндекс понимал, что эти треки были прослушаны, что ранее были в списке.

tranrn commented 2 years ago

А что такое "определенный момент"? Из приложения тоже не бесконечно играет.

feschukov commented 2 years ago

А что такое "определенный момент"? Из приложения тоже не бесконечно играет.

Как я писал ранее, в какой-то момент функция client.rotor_station_tracks начинает выдавать один и тот же список треков, которые уже есть в списке. Когда наступает этот момент, невозможно точно сказать. Часа на 2-3 хватает из моих наблюдений.

tranrn commented 2 years ago

По часам ответить не могу, но приложение на андроиде или браузерная версия у меня тоже в иной момент прекращает петь, думая, что я умер. 2-3 часа - уже отличный результат. Можно прикрутить какую-то кнопку "начать сначала"? Будто закрыли клиента и запросили заново список? И с этим уже жить можно. Большое спасибо за проделанную работу. Управлять rhythmbox через KDE connect хоть можно, браузерный плеер не дает кнопок перемотки. Ну и умный дом теперь видит, что я слушаю и имеет власть над музыкой.

tranrn commented 2 years ago

Я вот пока тестирую эту фичу, и вижу, что она слишком часто запрашивает песни. Я слушаю только 7 песню в потоке, а она уже догрузила 20 будущих. Офф приложение вроде так не спешит. Как я понимаю, надо иметь в памяти сколько есть в запасе и не грузить следующие (28ю) при перемотке с 6 на 7.

feschukov commented 2 years ago

Я вот пока тестирую эту фичу, и вижу, что она слишком часто запрашивает песни. Я слушаю только 7 песню в потоке, а она уже догрузила 20 будущих. Офф приложение вроде так не спешит. Как я понимаю, надо иметь в памяти сколько есть в запасе и не грузить следующие (28ю) при перемотке с 6 на 7.

Я уже некоторое время тестирую вариант запроса треков только если в списке остался 1 трек. Вроде работает более менее стабильно, но иногда бывает, что поток останавливается из-за того, что новых треков из потока не было получено. Добавил это изменение в ветку main https://github.com/feschukov/rhythmbox-plugin-yandex-music/commit/0784d2d355ec0a69efe35ef6ad5773f9ce5dd4c0. Прошу вас протестировать это изменение и также отписаться появились ли какие-то проблемы с потоками или нет.

lowitea commented 2 years ago

@feschukov у меня играет песен 25 примерно и останавливается поток, может добавить там несколько ретраев если первый запрос обломался?

DeadMozay commented 2 years ago

У меня пока ни разу не прерывался поток, правда я пока пробовал только Моя волна, остальные потоки вроде и так ограничены даже в браузере, не раз видел что некоторые потоки по 25-30 треков, полагаю что это нормально, если это и баг, то скорей всего не плагина, а самой яндекс музыки

lowitea commented 2 years ago

Тоже Мою волну слушаю, она и останавливается переодически, может у меня сеть конечно нестабильная просто, но кажется поретраить стоит всё таки, и может запрашивать не за один трек, а за парочку, чтобы точно успеть новую пачку получить

tranrn commented 2 years ago

Первый же раз стопнулось на 30 песне

tranrn commented 2 years ago

Второй раз на 23й стопнулось. Прошлая сборка работала надёжнее :)

lowitea commented 1 year ago

Дебагом выяснил что происходит примерно. При обновлении фида, в self.last_track пишется трек который уже был проигран ранее (подозреваю потому что он просто вернулся из апишки ещё раз). Соответственно он по факту не last, и когда воспроизведение доходит до настоящего последнего трека, обновление не происходит, потому что сравнивается текущий трек и неправильный из self.last_track. Кажется нужно иначе определять что мы дошли до конца списка воспроизведения.

lowitea commented 1 year ago

Попробовал улучшить обновление фида: #36 Но решение не идеально, подробности в реквесте.

feschukov commented 1 year ago

Попробовал улучшить обновление фида: #36 Но решение не идеально, подробности в реквесте.

Предлагаю протестировать публично ваше решение. Это изменение уж точно ничего не поломает. Теоретически может помочь. Принял PR, спасибо за помощь.

lowitea commented 1 year ago

@feschukov сейчас появилась другая идея, может быть удалять из db треки которые пришли повторно и снова их добавлять? Если сработает тогда повторения не страшны и по идее поток станет гарантированно бесконечным