74 lines
2.6 KiB
C
74 lines
2.6 KiB
C
#include "pumpkin_api.h"
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
static pumpkin_plugin_t g_plugin = {0};
|
|
|
|
void pumpkin_register_plugin(pumpkin_plugin_t plugin) {
|
|
g_plugin = plugin;
|
|
}
|
|
|
|
// WIT exports
|
|
|
|
void exports_pumpkin_plugin_metadata_get_metadata(exports_pumpkin_plugin_metadata_plugin_metadata_t *ret) {
|
|
if (g_plugin.get_metadata) {
|
|
pumpkin_metadata_t meta = g_plugin.get_metadata();
|
|
plugin_string_dup(&(ret->name), meta.name);
|
|
plugin_string_dup(&(ret->version), meta.version);
|
|
|
|
ret->authors.len = meta.authors_count;
|
|
ret->authors.ptr = (plugin_string_t*)malloc(ret->authors.len * sizeof(plugin_string_t));
|
|
for (size_t i = 0; i < ret->authors.len; ++i) {
|
|
plugin_string_dup(&(ret->authors.ptr[i]), meta.authors[i]);
|
|
}
|
|
|
|
plugin_string_dup(&(ret->description), meta.description);
|
|
|
|
ret->dependencies.len = meta.dependencies_count;
|
|
ret->dependencies.ptr = (plugin_string_t*)malloc(ret->dependencies.len * sizeof(plugin_string_t));
|
|
for (size_t i = 0; i < ret->dependencies.len; ++i) {
|
|
plugin_string_dup(&(ret->dependencies.ptr[i]), meta.dependencies[i]);
|
|
}
|
|
|
|
ret->permissions.len = meta.permissions_count;
|
|
ret->permissions.ptr = (plugin_string_t*)malloc(ret->permissions.len * sizeof(plugin_string_t));
|
|
for (size_t i = 0; i < ret->permissions.len; ++i) {
|
|
plugin_string_dup(&(ret->permissions.ptr[i]), meta.permissions[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
bool exports_plugin_on_load(plugin_own_context_t context_handle, plugin_string_t *err) {
|
|
if (g_plugin.on_load) {
|
|
g_plugin.on_load(context_handle);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool exports_plugin_on_unload(plugin_own_context_t context_handle, plugin_string_t *err) {
|
|
if (g_plugin.on_unload) {
|
|
g_plugin.on_unload(context_handle);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
void exports_plugin_handle_event(uint32_t event_id, plugin_own_server_instance_t server, plugin_event_t *event, plugin_event_t *ret) {
|
|
// Basic event pass-through
|
|
*ret = *event;
|
|
}
|
|
|
|
bool exports_plugin_handle_command(uint32_t command_id, plugin_own_command_sender_t sender, plugin_own_server_instance_t server, plugin_own_consumed_args_t args, int32_t *ret, plugin_command_error_t *err) {
|
|
err->tag = PUMPKIN_PLUGIN_COMMAND_COMMAND_ERROR_COMMAND_FAILED;
|
|
|
|
plugin_string_t str;
|
|
plugin_string_set(&str, "Command not implemented");
|
|
|
|
pumpkin_plugin_text_own_text_component_t text = pumpkin_plugin_text_static_text_component_text(&str);
|
|
err->val.command_failed = text;
|
|
|
|
return false;
|
|
}
|
|
|
|
void exports_plugin_handle_task(uint32_t handler_id, plugin_own_server_instance_t server) {
|
|
}
|