124 lines
2.6 KiB
C++
124 lines
2.6 KiB
C++
#include "../SDK/foobar2000.h"
|
|
#include "../SDK/component.h"
|
|
|
|
static HINSTANCE g_hIns;
|
|
|
|
static pfc::string_simple g_name,g_full_path;
|
|
|
|
static bool g_services_available = false, g_initialized = false;
|
|
|
|
|
|
|
|
namespace core_api
|
|
{
|
|
|
|
HINSTANCE get_my_instance()
|
|
{
|
|
return g_hIns;
|
|
}
|
|
|
|
HWND get_main_window()
|
|
{
|
|
PFC_ASSERT( g_foobar2000_api != NULL );
|
|
return g_foobar2000_api->get_main_window();
|
|
}
|
|
const char* get_my_file_name()
|
|
{
|
|
return g_name;
|
|
}
|
|
|
|
const char* get_my_full_path()
|
|
{
|
|
return g_full_path;
|
|
}
|
|
|
|
bool are_services_available()
|
|
{
|
|
return g_services_available;
|
|
}
|
|
bool assert_main_thread()
|
|
{
|
|
return (g_services_available && g_foobar2000_api) ? g_foobar2000_api->assert_main_thread() : true;
|
|
}
|
|
|
|
void ensure_main_thread() {
|
|
if (!is_main_thread()) uBugCheck();
|
|
}
|
|
|
|
bool is_main_thread()
|
|
{
|
|
return (g_services_available && g_foobar2000_api) ? g_foobar2000_api->is_main_thread() : true;
|
|
}
|
|
const char* get_profile_path()
|
|
{
|
|
PFC_ASSERT( g_foobar2000_api != NULL );
|
|
return g_foobar2000_api->get_profile_path();
|
|
}
|
|
|
|
bool is_shutting_down()
|
|
{
|
|
return (g_services_available && g_foobar2000_api) ? g_foobar2000_api->is_shutting_down() : g_initialized;
|
|
}
|
|
bool is_initializing()
|
|
{
|
|
return (g_services_available && g_foobar2000_api) ? g_foobar2000_api->is_initializing() : !g_initialized;
|
|
}
|
|
bool is_portable_mode_enabled() {
|
|
PFC_ASSERT( g_foobar2000_api != NULL );
|
|
return g_foobar2000_api->is_portable_mode_enabled();
|
|
}
|
|
|
|
bool is_quiet_mode_enabled() {
|
|
PFC_ASSERT( g_foobar2000_api != NULL );
|
|
return g_foobar2000_api->is_quiet_mode_enabled();
|
|
}
|
|
}
|
|
|
|
namespace {
|
|
class foobar2000_client_impl : public foobar2000_client, private foobar2000_component_globals
|
|
{
|
|
public:
|
|
t_uint32 get_version() {return FOOBAR2000_CLIENT_VERSION;}
|
|
pservice_factory_base get_service_list() {return service_factory_base::__internal__list;}
|
|
|
|
void get_config(stream_writer * p_stream,abort_callback & p_abort) {
|
|
cfg_var::config_write_file(p_stream,p_abort);
|
|
}
|
|
|
|
void set_config(stream_reader * p_stream,abort_callback & p_abort) {
|
|
cfg_var::config_read_file(p_stream,p_abort);
|
|
}
|
|
|
|
void set_library_path(const char * path,const char * name) {
|
|
g_full_path = path;
|
|
g_name = name;
|
|
}
|
|
|
|
void services_init(bool val) {
|
|
if (val) g_initialized = true;
|
|
g_services_available = val;
|
|
}
|
|
|
|
bool is_debug() {
|
|
#ifdef _DEBUG
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
};
|
|
}
|
|
|
|
static foobar2000_client_impl g_client;
|
|
|
|
extern "C"
|
|
{
|
|
__declspec(dllexport) foobar2000_client * _cdecl foobar2000_get_interface(foobar2000_api * p_api,HINSTANCE hIns)
|
|
{
|
|
g_hIns = hIns;
|
|
g_foobar2000_api = p_api;
|
|
|
|
return &g_client;
|
|
}
|
|
}
|