Mercurial > foo_out_sdl
view foosdk/sdk/foobar2000/foobar2000_component_client/component_client.cpp @ 1:20d02a178406 default tip
*: check in everything else
yay
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 05 Jan 2026 02:15:46 -0500 |
| parents | |
| children |
line wrap: on
line source
#include <SDK/foobar2000.h> #include <SDK/component.h> #include <SDK/cfg_var_legacy.h> #ifdef _WIN32 static HINSTANCE g_hIns; #endif static pfc::string_simple g_name,g_full_path; static bool g_services_available = false, g_initialized = false; namespace core_api { #ifdef _WIN32 HINSTANCE get_my_instance() { return g_hIns; } #endif fb2k::hwnd_t 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()) FB2K_BugCheck(); } 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() override {return FOOBAR2000_CLIENT_VERSION;} pservice_factory_base get_service_list() override {return service_factory_base::__internal__list;} void get_config(stream_writer * p_stream,abort_callback & p_abort) override { #ifdef FOOBAR2000_HAVE_CFG_VAR_LEGACY cfg_var_legacy::cfg_var::config_write_file(p_stream,p_abort); #endif } void set_config(stream_reader * p_stream,abort_callback & p_abort) override { #ifdef FOOBAR2000_HAVE_CFG_VAR_LEGACY cfg_var_legacy::cfg_var::config_read_file(p_stream,p_abort); #endif } void set_library_path(const char * path,const char * name) override { g_full_path = path; g_name = name; } void services_init(bool val) override { if (val) g_initialized = true; g_services_available = val; } bool is_debug() override { return PFC_DEBUG != 0; } }; } static foobar2000_client_impl g_client; #ifdef _WIN32 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; } } #endif #ifdef __APPLE__ extern "C" { __attribute__ ((visibility ("default"))) foobar2000_client * foobar2000_get_interface(foobar2000_api * p_api, void * /*reserved*/) { g_foobar2000_api = p_api; return &g_client; } } #endif
