История изменений
Исправление SkyMaverick, (текущая версия) :
Извиняюсь за сумбурный стиль написания, попробую описать короче. Как получить статус воспроизведения после загрузки
- если output->state() может возвращать состояние DDB_PLAYBACK_STATUS_STOP неопределённое время (трек загружается, большой coverart прогружается)
- если запустить плеер в состоянии паузы, то сообщение о старте трека
DB_EV_SONGCHANGED
иDB_EV_SONGSTARTED
приходят и до (что, видимо, правильно) и сразу ПОСЛЕ сообщенияDB_EV_PAUSED
.
на старте получаем текущее состояние, и подписываемся на обработку событий
Я так и делаю. Если бы вот эти event-ы второй и третий снизу не прилетали ПОСЛЕ DB_EV_PAUSED
то проблем бы и не было, но они почему-то прилетают. И получается, что, исходя из логики сообщений, если её правильно понял, что трек запущен после паузы, хотя сам плеер стоит на паузе.
Проблема возникла из-за того, что StatusNotifier может инициализироваться некоторое время (0,5-1,5 сек. обычно) и поэтом я его пустил отдельным потоком и уже когда он инициализировался, то получать статус. Вариант с обработкой сообщений, да понятный, удобный и он работает в общем случае, но вот эти два сообщение после DB_EV_PAUSED
я не понял как правильно обработать.
Исправление SkyMaverick, :
Извиняюсь за сумбурный стиль написания, попробую описать короче. Как получить статус воспроизведения после загрузки
- если output->state() может возвращать состояние DDB_PLAYBACK_STATUS_STOP неопределённое время (трек загружается, большой coverart прогружается)
- если запустить плеер в состоянии паузы, то сообщение о старте трека
DB_EV_SONGCHANGED
иDB_EV_SONGSTARTED
приходят и до (что, видимо, правильно) и сразу ПОСЛЕ сообщенияDB_EV_PAUSED
.
на старте получаем текущее состояние, и подписываемся на обработку событий
Я так и делаю. Если бы вот эти event-ы второй и третий снизу не прилетали ПОСЛЕ DB_EV_PAUSED
то проблем бы и не было, но они почему-то прилетают. И получается, что, исходя из логики сообщений, если её правильно понял, что трек запущен после паузы.
Проблема возникла из-за того, что StatusNotifier может инициализироваться некоторое время (0,5-1,5 сек. обычно) и поэтом я его пустил отдельным потоком и уже когда он инициализировался, то получать статус. Вариант с обработкой сообщений, да понятный, удобный и он работает в общем случае, но вот эти два сообщение после DB_EV_PAUSED
я не понял как правильно обработать.
Исходная версия SkyMaverick, :
Извиняюсь за сумбурный стиль написания, попробую описать короче. Как получить статус воспроизведения после загрузки
- если output->state() может возвращать состояние DDB_PLAYBACK_STATUS_STOP неопределённое время (трек загружается, большой coverart прогружается)
- если запустить плеер в состоянии паузы, то сообщение о старте трека
DB_EV_SONGCHANGED
иDB_EV_SONGSTARTED
приходят и до (что, видимо, правильно) и ПОСЛЕ сообщенияDB_EV_PAUSED
.
на старте получаем текущее состояние, и подписываемся на обработку событий
Я так и делаю. Если бы вот эти event-ы второй и третий снизу не прилетали ПОСЛЕ DB_EV_PAUSED
то проблем бы и не было, но они почему-то прилетают. И получается, что, исходя из логики сообщений, если её правильно понял, что трек запущен после паузы.
Проблема возникла из-за того, что StatusNotifier может инициализироваться некоторое время (0,5-1,5 сек. обычно) и поэтом я его пустил отдельным потоком и уже когда он инициализировался, то получать статус. Вариант с обработкой сообщений, да понятный, удобный и он работает в общем случае, но вот эти два сообщение после DB_EV_PAUSED
я не понял как правильно обработать.