LINUX.ORG.RU

История изменений

Исправление 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 я не понял как правильно обработать.