#include #include #include #include "Emusic.h" #include "emusic_private.h" #include #include #include Emusic* emusic = NULL; EAPI int emusic_init(const char* module_filename) { Ecore_Plugin *plugin; if ( ! ecore_init() ) { printf("[Emusic] [Core] Can't init ecore.\n"); return 0; } emusic = (Emusic*)calloc(1, sizeof(Emusic)); if (!emusic) { printf("[Emusic] [Core] Canot allocate Memory for emusic !\n"); return 0; } emusic->group_id = ecore_path_group_new ("emusic_module"); ecore_path_group_add (emusic->group_id, PACKAGE_LIB_DIR"/emusic/"); printf("%s/emusic/%s\n", PACKAGE_LIB_DIR, module_filename); plugin = ecore_plugin_load(emusic->group_id, module_filename); printf("module : %p\n", plugin); if (plugin) { unsigned char (*func_module_open)( Emusic_Module** module, void** priv); func_module_open = ecore_plugin_call(plugin, "module_open"); if (func_module_open) { if (func_module_open(&emusic->module, &emusic->priv)) { emusic->plugin = plugin; return 1; } } ecore_plugin_unload(plugin); } else { printf ("[Emusic] [Core] No module. Error: %s\n", dlerror()); } return 0; } EAPI int emusic_shutdown(void) { Ecore_Plugin *plugin; void (*module_close) (Emusic_Module *module); plugin = emusic->plugin; module_close = ecore_plugin_call(emusic->plugin, "module_close"); if (module_close) module_close(emusic->module); ecore_plugin_unload(plugin); ecore_path_group_del (emusic->group_id); free(emusic); return 1; } EAPI Emusic_Controller* emusic_controller_new(char* name) { Emusic_Controller* controller; if (!emusic) { /* Print error : initialize emusic first !*/ printf("[Emusic] [Core] Initialize emusic first !\n"); return NULL; } controller = emusic->module->controller_new(emusic->priv, name); /*if (!controller) return NULL; for (i = 0; i < EMUSIC_SIGNAL_NBR; i++)*/ controller->signals[0] = ecore_event_type_new(); controller->signals[1] = ecore_event_type_new(); controller->signals[2] = ecore_event_type_new(); printf("[Emusic] [Core] %d %d %d\n",controller->signals[0], controller->signals[1], controller->signals[2]); return controller; /* return emusic->module->controller_new(emusic->priv, name);*/ } EAPI int emusic_controller_name_set(Emusic_Controller* controller, char* name) { if (!emusic || !controller || !name) return 0; return emusic->module->controller_name_set(emusic->priv, controller, name); } EAPI char* emusic_controller_name_get(Emusic_Controller* controller) { if (!emusic || !controller) return 0; return emusic->module->controller_name_get(emusic->priv, controller); } EAPI int emusic_controller_remove(Emusic_Controller* controller) { if (!emusic || !controller) return 0; return emusic->module->controller_remove(emusic->priv, controller); } EAPI int emusic_controller_mode_set(Emusic_Controller* controller, Emusic_Controller_Mode mode) { if (!emusic || !controller) return 0; return emusic->module->controller_mode_set(emusic->priv, controller, mode); } EAPI Emusic_Controller_Mode emusic_controller_mode_get(Emusic_Controller* controller) { if (!emusic || !controller) return EMUSIC_CONTROLLER_MODE_NULL; return emusic->module->controller_mode_get(emusic->priv, controller); } EAPI int emusic_controller_playlist_new(Emusic_Controller* controller, char *playlist_name) { if (!emusic || !controller || !playlist_name) return 0; return emusic->module->controller_playlist_new(emusic->priv, controller, playlist_name); } EAPI int emusic_controller_playlist_add(Emusic_Controller* controller, char* filename) { if (!emusic || !controller) return 0; return emusic->module->controller_playlist_add(emusic->priv, controller, filename); } EAPI int emusic_controller_playlist_remove(Emusic_Controller* controller, char* filename) { if (!emusic || !controller || !filename) return 0; return emusic->module->controller_playlist_remove(emusic->priv, controller, filename); } EAPI int emusic_controller_playlist_remove_id(Emusic_Controller* controller, int id) { if (!emusic || !controller || id < 0) return 0; return emusic->module->controller_playlist_remove_id(emusic->priv, controller, id); } EAPI int emusic_controller_playlist_goto(Emusic_Controller* controller, char* filename) { if (!emusic || !controller || !filename) return 0; return emusic->module->controller_playlist_goto(emusic->priv, controller, filename); } EAPI int emusic_controller_playlist_goto_id(Emusic_Controller* controller, int id) { if (!emusic || !controller || id < 0) return 0; return emusic->module->controller_playlist_goto_id(emusic->priv, controller, id); } EAPI int emusic_controller_playlist_destroy(Emusic_Controller* controller) { if (!emusic || !controller) return 0; return emusic->module->controller_playlist_destroy(emusic->priv, controller); } EAPI char* emusic_controller_playlist_load(Emusic_Controller* controller, char* filename) { if (!emusic || !controller || !filename) return NULL; return emusic->module->controller_playlist_load(emusic->priv, controller, filename); } EAPI char* emusic_controller_playlist_save(Emusic_Controller* controller, char* filename) { if (!emusic || !controller || !filename) return NULL; return emusic->module->controller_playlist_save(emusic->priv, controller, filename); } EAPI Emusic_Playlist * emusic_controller_playlist_get(Emusic_Controller* controller, char *playlist_name) { if (!emusic || !controller || !playlist_name) return NULL; return emusic->module->controller_playlist_get(emusic->priv, controller, playlist_name); } EAPI int emusic_controller_play(Emusic_Controller* controller) { if (!emusic || !controller) return 0; return emusic->module->controller_play(emusic->priv, controller); } EAPI int emusic_controller_pause(Emusic_Controller* controller) { if (!emusic || !controller) return 0; return emusic->module->controller_pause(emusic->priv, controller); } EAPI int emusic_controller_stop(Emusic_Controller* controller) { if (!emusic || !controller) return 0; return emusic->module->controller_stop(emusic->priv, controller); } EAPI int emusic_controller_next(Emusic_Controller* controller) { if (!emusic || !controller) return 0; return emusic->module->controller_next(emusic->priv, controller); } EAPI int emusic_controller_prev(Emusic_Controller* controller) { if (!emusic || !controller) return 0; return emusic->module->controller_prev(emusic->priv, controller); } EAPI double emusic_controller_volume_get(Emusic_Controller* controller) { if (!emusic || !controller) return 0; return emusic->module->controller_volume_get(emusic->priv, controller); } EAPI int emusic_controller_volume_set(Emusic_Controller* controller, double volume) { if (!emusic || !controller) return 0; return emusic->module->controller_volume_set(emusic->priv, controller, volume); } EAPI int emusic_controller_mute_get(Emusic_Controller* controller) { if (!emusic || !controller) return 0; return emusic->module->controller_mute_get(emusic->priv, controller); } EAPI int emusic_controller_mute_set(Emusic_Controller* controller, int mute) { if (!emusic || !controller) return 0; return emusic->module->controller_mute_set(emusic->priv, controller, mute); } EAPI double emusic_controller_length_get(Emusic_Controller* controller) { if (!emusic || !controller) return 0; return emusic->module->controller_length_get(emusic->priv, controller); } EAPI double emusic_controller_position_get(Emusic_Controller* controller) { if (!emusic || !controller) return 0; return emusic->module->controller_position_get(emusic->priv, controller); } EAPI int emusic_controller_position_set(Emusic_Controller* controller, double position) { if (!emusic || !controller) return 0; return emusic->module->controller_position_set(emusic->priv, controller, position); } EAPI int emusic_controller_repea_set(Emusic_Controller* controller, int repeat) { if (!emusic || !controller) return 0; return repeat; } EAPI int emusic_controller_repeat_get(Emusic_Controller* controller) { if (!emusic || !controller) return 0; return 1; } EAPI int emusic_controller_shuffle_set(Emusic_Controller* controller, int shuffle) { if (!emusic || !controller) return 0; return shuffle; } EAPI int emusic_controller_shuffle_get(Emusic_Controller* controller) { if (!emusic || !controller) return 0; return 1; } EAPI int emusic_controller_callback_add(Emusic_Controller* controller, char* signal_name, int (*signal_cb) (void* data, int type, void* event), void* data) { if (!emusic || !controller) return 0; if (!strcmp(signal_name, "eos")) { ecore_event_handler_add(controller->signals[EMUSIC_SIGNAL_EOS], signal_cb, data); } else if (!strcmp (signal_name, "eopl")) ecore_event_handler_add(controller->signals[EMUSIC_SIGNAL_EOPL], signal_cb, data); else if (!strcmp (signal_name, "new_tags")) ecore_event_handler_add(controller->signals[EMUSIC_SIGNAL_NEW_TAGS], signal_cb, data); else { printf("[Emusic] [Core] *** ERROR *** Signal doesn't exists !\n"); return 0; } return 1; }