Thank you kode54.
I read your foo_osd source code.
I may understand how to register playlist_callback.
CPlaylist cplist;
static_api_ptr_t<playlist_manager>()->register_callback( & cplist, cplist.get_flags() );
or
static_api_ptr_t<playlist_manager> sapt;
sapt->register_callback( &cplist, cplist.get_flags() );
However I get some errors.
When I use static_api_ptr_t<playlist_manager>()->register_callback( & cplist, cplist.get_flags() );,
- Error: expected an identifier
- Error: expected a ';'
on the "->" operator.
When I use static_api_ptr_t<playlist_manager> sapt; sapt->register_callback( &cplist, cplist.get_flags() );
- Error: this declaration has no storage class or type specifier
- Error: expected a declaration
on "sapt->".
Do you know what is the problem?
My source code is below.
#include "../SDK/foobar2000.h"
#include "../helpers/helpers.h"
#include <stdio.h>
#include <time.h>
#include <fstream>
DECLARE_COMPONENT_VERSION("test","1.0.0","test")
std::ofstream fs_play("play_log.txt",std::ios_base::app);
std::ofstream fs_playlist("playlist_log.txt",std::ios_base::app);
class CPlayback : public play_callback_static
{
public:
virtual unsigned int get_flags(void)
{
return flag_on_playback_new_track
| flag_on_playback_seek
| flag_on_playback_pause
| flag_on_playback_stop
| flag_on_volume_change
| flag_on_playback_time
| flag_on_playback_starting;
}
virtual void on_playback_new_track(metadb_handle_ptr track)
{
time_t now = time(NULL);
fs_play << now << ",new_track," << track->get_path() << std::endl;
}
virtual void on_playback_stop(play_control::t_stop_reason p_reason)
{
time_t now = time(NULL);
fs_play << now << ",stop," << p_reason << std::endl;
}
virtual void on_playback_time(double p_time)
{
time_t now = time(NULL);
fs_play << now << ",playback_time," << p_time << std::endl;
}
virtual void on_playback_seek(double time_seek)
{
time_t now = time(NULL);
fs_play << now << ",seek," << time_seek << std::endl;
}
virtual void on_playback_starting(play_control::t_track_command p_command,bool p_paused)
{
time_t now = time(NULL);
fs_play << now << ",starting," << p_command << "," << p_paused << std::endl;
}
virtual void on_playback_pause(bool p_state)
{
time_t now = time(NULL);
fs_play << now << ",pause," << p_state << std::endl;
}
virtual void on_playback_edited(metadb_handle_ptr track) {}
virtual void on_playback_dynamic_info(const file_info & p_info) {};
virtual void on_playback_dynamic_info_track(const file_info & p_info) {};
virtual void on_volume_change(float p_new_val)
{
time_t now = time(NULL);
fs_play << now << ",volume_change," << p_new_val << std::endl;
}
};
static play_callback_static_factory_t<CPlayback> pbsf;
class CPlaylist : public playlist_callback
{
public:
virtual unsigned int get_flags(void)
{
return flag_on_items_added;
}
virtual void on_items_added(t_size p_playlist,t_size p_start, const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const bit_array & p_selection)
{
console::info("playlist added");
}
virtual void on_items_reordered (t_size p_playlist, const t_size *p_order, t_size p_count){}
virtual void on_items_removing (t_size p_playlist, const bit_array &p_mask, t_size p_old_count, t_size p_new_count){}
virtual void on_items_removed (t_size p_playlist, const bit_array &p_mask, t_size p_old_count, t_size p_new_count){}
virtual void on_items_selection_change (t_size p_playlist, const bit_array &p_affected, const bit_array &p_state){}
virtual void on_item_focus_change (t_size p_playlist, t_size p_from, t_size p_to){}
virtual void on_items_modified (t_size p_playlist, const bit_array &p_mask){}
virtual void on_items_modified_fromplayback (t_size p_playlist, const bit_array &p_mask, play_control::t_display_level p_level){}
virtual void on_items_replaced (t_size p_playlist, const bit_array &p_mask, const pfc::list_base_const_t< t_on_items_replaced_entry > &p_data){}
virtual void on_item_ensure_visible (t_size p_playlist, t_size p_idx){}
virtual void on_playlist_activate (t_size p_old, t_size p_new){}
virtual void on_playlist_created (t_size p_index, const char *p_name, t_size p_name_len){}
virtual void on_playlists_reorder (const t_size *p_order, t_size p_count){}
virtual void on_playlists_removing (const bit_array &p_mask, t_size p_old_count, t_size p_new_count){}
virtual void on_playlists_removed (const bit_array &p_mask, t_size p_old_count, t_size p_new_count){}
virtual void on_playlist_renamed (t_size p_index, const char *p_new_name, t_size p_new_name_len){}
virtual void on_default_format_changed (){}
virtual void on_playback_order_changed (t_size p_new_index){}
virtual void on_playlist_locked (t_size p_playlist, bool p_locked){}
};
CPlaylist cplist;
//static_api_ptr_t<playlist_manager>()->register_callback( & cplist, cplist.get_flags() );
//static_api_ptr_t<playlist_manager> sapt;
//sapt->register_callback( &cplist, cplist.get_flags() );