WIP - Unload plugin commands

This commit is contained in:
James Booth
2016-06-29 23:35:57 +01:00
parent 61a09476c5
commit a01eb5d08e
21 changed files with 162 additions and 21 deletions

View File

@@ -702,6 +702,7 @@ cmd_ac_init(void)
plugins_ac = autocomplete_new();
autocomplete_add(plugins_ac, "load");
autocomplete_add(plugins_ac, "unload");
sendfile_ac = autocomplete_new();
@@ -784,6 +785,14 @@ cmd_ac_remove(const char *const value)
}
}
void
cmd_ac_remove_help(const char *const value)
{
if (help_ac) {
autocomplete_remove(help_ac, value);
}
}
gboolean
cmd_ac_exists(char *cmd)
{

View File

@@ -48,6 +48,7 @@ void cmd_ac_add_alias(ProfAlias *alias);
void cmd_ac_add_alias_value(char *value);
void cmd_ac_remove(const char *const value);
void cmd_ac_remove_help(const char *const value);
void cmd_ac_remove_alias_value(char *value);
gboolean cmd_ac_exists(char *cmd);

View File

@@ -1979,13 +1979,16 @@ static struct cmd_t command_defs[] =
CMD_NOTAGS
CMD_SYN(
"/plugins",
"/plugins load <plugin>")
"/plugins load <plugin>",
"/plugins unload <plugin>")
CMD_DESC(
"Manage plugins. Passing no arguments lists currently loaded plugins.")
CMD_ARGS(
{ "load <plugin>", "Load a plugin." })
{ "load <plugin>", "Load a plugin." },
{ "unload <plugin>", "Unload a plugin." })
CMD_EXAMPLES(
"/plugin load browser.py")
"/plugin load browser.py",
"/plugin unload pid.so")
},
{ "/prefs",

View File

@@ -95,6 +95,49 @@ static gboolean _cmd_execute(ProfWin *window, const char *const command, const c
static gboolean _cmd_execute_default(ProfWin *window, const char *inp);
static gboolean _cmd_execute_alias(ProfWin *window, const char *const inp, gboolean *ran);
void
command_help_free(CommandHelp *help)
{
free(help->desc);
if (help->tags) {
int i = 0;
while (i < 20 && help->tags[i]) {
free(help->tags[i]);
i++;
}
free(help->tags);
}
if (help->synopsis) {
int i = 0;
while (i < 50 && help->synopsis[i]) {
free(help->synopsis[i]);
i++;
}
free(help->synopsis);
}
if (help->examples) {
int i = 0;
while (i < 20 && help->examples[i]) {
free(help->examples[i]);
i++;
}
free(help->examples);
}
if (help->args) {
int i = 0;
while (i < 120 && help->args[i]) {
free(help->args[i][0]);
free(help->args[i][1]);
free(help->args[i]);
}
free(help->args);
}
}
/*
* Take a line of input and process it, return TRUE if profanity is to
* continue, FALSE otherwise
@@ -3809,7 +3852,7 @@ cmd_form(ProfWin *window, const char *const command, gchar **args)
} else {
mucconfwin_form_help(confwin);
const gchar **help_text = NULL;
gchar **help_text = NULL;
Command *command = cmd_get("/form");
if (command) {
@@ -6038,6 +6081,16 @@ cmd_plugins(ProfWin *window, const char *const command, gchar **args)
cons_show("Failed to load plugin: %s", args[1]);
}
return TRUE;
} else if (g_strcmp0(args[0], "unload") == 0) {
if (args[1] == NULL) {
cons_bad_cmd_usage(command);
return TRUE;
}
plugins_unload(args[1]);
prefs_remove_plugin(args[1]);
cons_show("Unloaded plugin: %s", args[1]);
return TRUE;
} else {
GSList *plugins = plugins_get_list();

View File

@@ -39,11 +39,11 @@
// Command help strings
typedef struct cmd_help_t {
const gchar *tags[20];
const gchar *synopsis[50];
const gchar *desc;
const gchar *args[128][2];
const gchar *examples[20];
gchar *tags[20];
gchar *synopsis[50];
gchar *desc;
gchar *args[128][2];
gchar *examples[20];
} CommandHelp;
/*
@@ -69,6 +69,7 @@ typedef struct cmd_t {
CommandHelp help;
} Command;
void command_help_free(CommandHelp *help);
gboolean cmd_process_input(ProfWin *window, char *inp);
void cmd_execute_connect(ProfWin *window, const char *const account);