Рабочий вариант уже наваял, но есть некоторые вопросы.
Так, если переключение происходит при нажатии либо горячих еклавиш, либо при нажатии клавишей мышки в плейлисте - Всё нормально переключается. Но вот если переключение идёт после того как один трек закончился и начинается следующий - информация в КВИП не посылается. Кто что может сказать?
Привожу куски кода:
- Код: Выделить всё
class play_callback_qip : public play_callback_static
{
virtual void on_playback_starting(play_control::t_track_command p_command, bool p_paused) {}
virtual void on_playback_new_track(metadb_handle_ptr p_track)
{
DoStatus(p_track);
}
virtual void on_playback_stop(play_control::t_stop_reason p_reason)
{
DoEmptyStatus();
}
virtual void on_playback_seek(double p_time) {}
virtual void on_playback_pause(bool p_state)
{
if (!p_state)
{
metadb_handle_ptr track;
static_api_ptr_t<play_control>()->get_now_playing(track);
if (track.is_valid())
{
DoStatus(track);
track.release();
}
}
}
virtual void on_playback_edited(metadb_handle_ptr p_track) {}
virtual void on_playback_dynamic_info(const file_info & info) {}
virtual void on_playback_dynamic_info_track(const file_info & info) {}
virtual void on_playback_time(double p_time) {}
virtual void on_volume_change(float p_new_val) {};
virtual unsigned get_flags()
{
return flag_on_playback_new_track | flag_on_playback_pause | flag_on_playback_stop;
}
};
- Код: Выделить всё
// Получим-ка информацию о треке
pfc::string8 text;
try
{
static_api_ptr_t<play_control> pc;
service_ptr_t<titleformat_object> script;
if (static_api_ptr_t<titleformat_compiler>()->compile (script, cfg_tformat.get_ptr()))
{
if (pc->get_now_playing(track))
{
pc->playback_format_title_ex(track, NULL, text, script, NULL, play_control::display_level_titles);
}
}
}
catch (const std::exception & exc) {
console::formatter() << "Exception occurred while getting the title:\n" << exc;
}
// Перекодируем название трека
pfc::stringcvt::string_wide_from_utf8 textw(text);