You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
4.7 KiB
156 lines
4.7 KiB
#include "e_mod_main.h" |
|
|
|
static int _log_dom = -1; |
|
#undef DBG |
|
#undef WARN |
|
#undef INF |
|
#undef ERR |
|
#define DBG(...) EINA_LOG_DOM_DBG(_log_dom, __VA_ARGS__) |
|
#define WARN(...) EINA_LOG_DOM_WARN(_log_dom, __VA_ARGS__) |
|
#define INF(...) EINA_LOG_DOM_INFO(_log_dom, __VA_ARGS__) |
|
#define ERR(...) EINA_LOG_DOM_ERR(_log_dom, __VA_ARGS__) |
|
|
|
static Eldbus_Message *_e_msgbus_module_load_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg); |
|
static Eldbus_Message *_e_msgbus_module_unload_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg); |
|
static Eldbus_Message *_e_msgbus_module_enable_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg); |
|
static Eldbus_Message *_e_msgbus_module_disable_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg); |
|
static Eldbus_Message *_e_msgbus_module_list_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg); |
|
static const Eldbus_Method module_methods[] = { |
|
{ "Load", ELDBUS_ARGS({"s", "module"}), NULL, _e_msgbus_module_load_cb, 0 }, |
|
{ "Unload", ELDBUS_ARGS({"s", "module"}), NULL, _e_msgbus_module_unload_cb, 0 }, |
|
{ "Enable", ELDBUS_ARGS({"s", "module"}), NULL, _e_msgbus_module_enable_cb, 0 }, |
|
{ "Disable", ELDBUS_ARGS({"s", "module"}), NULL, _e_msgbus_module_disable_cb, 0 }, |
|
{ "List", NULL, ELDBUS_ARGS({"a(si)", "modules"}), _e_msgbus_module_list_cb, 0 }, |
|
{ NULL, NULL, NULL, NULL, 0} |
|
}; |
|
|
|
static const Eldbus_Service_Interface_Desc module = { |
|
"org.enlightenment.wm.Module", module_methods, NULL, NULL, NULL, NULL |
|
}; |
|
|
|
/* Modules Handlers */ |
|
static Eldbus_Message * |
|
_e_msgbus_module_load_cb(const Eldbus_Service_Interface *iface EINA_UNUSED, |
|
const Eldbus_Message *msg) |
|
{ |
|
char *mod; |
|
Eldbus_Message *reply = eldbus_message_method_return_new(msg); |
|
|
|
if (!eldbus_message_arguments_get(msg, "s", &mod)) return reply; |
|
|
|
if (!e_module_find(mod)) |
|
{ |
|
e_module_new(mod); |
|
e_config_save_queue(); |
|
} |
|
|
|
return reply; |
|
} |
|
|
|
static Eldbus_Message * |
|
_e_msgbus_module_unload_cb(const Eldbus_Service_Interface *iface EINA_UNUSED, |
|
const Eldbus_Message *msg) |
|
{ |
|
char *mod; |
|
E_Module *m; |
|
Eldbus_Message *reply = eldbus_message_method_return_new(msg); |
|
|
|
if (!eldbus_message_arguments_get(msg, "s", &mod)) return reply; |
|
|
|
if ((m = e_module_find(mod))) |
|
{ |
|
e_module_disable(m); |
|
e_object_del(E_OBJECT(m)); |
|
e_config_save_queue(); |
|
} |
|
|
|
return reply; |
|
} |
|
|
|
static Eldbus_Message * |
|
_e_msgbus_module_enable_cb(const Eldbus_Service_Interface *iface EINA_UNUSED, |
|
const Eldbus_Message *msg) |
|
{ |
|
char *mod; |
|
E_Module *m; |
|
Eldbus_Message *reply = eldbus_message_method_return_new(msg); |
|
|
|
if (!eldbus_message_arguments_get(msg, "s", &mod)) return reply; |
|
|
|
if ((m = e_module_find(mod))) |
|
{ |
|
e_module_enable(m); |
|
e_config_save_queue(); |
|
} |
|
|
|
return reply; |
|
} |
|
|
|
static Eldbus_Message * |
|
_e_msgbus_module_disable_cb(const Eldbus_Service_Interface *iface EINA_UNUSED, |
|
const Eldbus_Message *msg) |
|
{ |
|
char *mod; |
|
E_Module *m; |
|
Eldbus_Message *reply = eldbus_message_method_return_new(msg); |
|
|
|
if (!eldbus_message_arguments_get(msg, "s", &mod)) return reply; |
|
|
|
if ((m = e_module_find(mod))) |
|
{ |
|
e_module_disable(m); |
|
e_config_save_queue(); |
|
} |
|
|
|
return reply; |
|
} |
|
|
|
static Eldbus_Message * |
|
_e_msgbus_module_list_cb(const Eldbus_Service_Interface *iface EINA_UNUSED, |
|
const Eldbus_Message *msg) |
|
{ |
|
Eina_List *l; |
|
E_Module *mod; |
|
Eldbus_Message *reply = eldbus_message_method_return_new(msg); |
|
Eldbus_Message_Iter *main_iter, *array; |
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(reply, NULL); |
|
main_iter = eldbus_message_iter_get(reply); |
|
EINA_SAFETY_ON_NULL_RETURN_VAL(main_iter, reply); |
|
|
|
eldbus_message_iter_arguments_append(main_iter, "a(si)", &array); |
|
EINA_SAFETY_ON_NULL_RETURN_VAL(array, reply); |
|
|
|
EINA_LIST_FOREACH(e_module_list(), l, mod) |
|
{ |
|
Eldbus_Message_Iter *s; |
|
const char *name; |
|
int enabled; |
|
|
|
name = mod->name; |
|
enabled = mod->enabled; |
|
|
|
eldbus_message_iter_arguments_append(array, "(si)", &s); |
|
if (!s) continue; |
|
eldbus_message_iter_arguments_append(s, "si", name, enabled); |
|
eldbus_message_iter_container_close(array, s); |
|
} |
|
eldbus_message_iter_container_close(main_iter, array); |
|
|
|
return reply; |
|
} |
|
|
|
void msgbus_module_init(Eina_Array *ifaces) |
|
{ |
|
Eldbus_Service_Interface *iface; |
|
|
|
if (_log_dom == -1) |
|
{ |
|
_log_dom = eina_log_domain_register("msgbus_module", EINA_COLOR_BLUE); |
|
if (_log_dom < 0) |
|
EINA_LOG_ERR("could not register msgbus_module log domain!"); |
|
} |
|
|
|
iface = e_msgbus_interface_attach(&module); |
|
if (iface) eina_array_push(ifaces, iface); |
|
}
|
|
|