2026-03-09 13:17:15 +01:00
|
|
|
|
|
|
|
|
#include "global.h"
|
|
|
|
|
|
2026-03-06 12:56:38 +01:00
|
|
|
plugin_t *plugin_create() {
|
|
|
|
|
plugin_t *p = GC_ALLOC_INIT(plugin_t, {0});
|
|
|
|
|
p->name = string_copy(_plugin_name);
|
|
|
|
|
any_map_set(plugin_map, p->name, p);
|
|
|
|
|
return p;
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-07 21:12:59 +01:00
|
|
|
void plugin_start(char *plugin) {
|
2026-03-06 12:56:38 +01:00
|
|
|
buffer_t *blob = data_get_blob(string_join("plugins/", plugin));
|
|
|
|
|
gc_unroot(_plugin_name);
|
|
|
|
|
_plugin_name = string_copy(plugin);
|
|
|
|
|
gc_root(_plugin_name);
|
|
|
|
|
js_eval(string_join(string_join("(1, eval)(`", sys_buffer_to_string(blob)), "`)"));
|
|
|
|
|
data_delete_blob(string_join("plugins/", plugin));
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-07 21:12:59 +01:00
|
|
|
void plugin_stop(char *plugin) {
|
2026-03-06 12:56:38 +01:00
|
|
|
plugin_t *p = any_map_get(plugin_map, plugin);
|
2026-03-07 21:12:59 +01:00
|
|
|
if (p->on_delete != NULL) {
|
2026-03-06 12:56:38 +01:00
|
|
|
js_call(p->on_delete);
|
|
|
|
|
}
|
|
|
|
|
map_delete(plugin_map, plugin);
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-08 08:39:29 +01:00
|
|
|
void plugin_notify_on_ui(plugin_t *plugin, void * f) {
|
2026-03-06 12:56:38 +01:00
|
|
|
plugin->on_ui = f;
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-08 08:39:29 +01:00
|
|
|
void plugin_notify_on_update(plugin_t *plugin, void * f) {
|
2026-03-06 12:56:38 +01:00
|
|
|
plugin->on_update = f;
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-08 08:39:29 +01:00
|
|
|
void plugin_notify_on_delete(plugin_t *plugin, void * f) {
|
2026-03-06 12:56:38 +01:00
|
|
|
plugin->on_delete = f;
|
|
|
|
|
}
|