diff options
| author | jgeboski <jgeboski@gmail.com> | 2016-05-15 16:40:15 -0400 | 
|---|---|---|
| committer | jgeboski <jgeboski@gmail.com> | 2016-05-25 22:48:08 -0400 | 
| commit | 808825eda6d90aeabd754f70eee52e2b0165749e (patch) | |
| tree | eae6be0e9b5461cf28fe2560de14d714c0180f3a /root_commands.c | |
| parent | d28fe1c4f463314a79f0a71f6f8a01db53e37253 (diff) | |
Show the enabled/disabled protocols in the 'plugins' command output
Diffstat (limited to 'root_commands.c')
| -rw-r--r-- | root_commands.c | 67 | 
1 files changed, 60 insertions, 7 deletions
| diff --git a/root_commands.c b/root_commands.c index 25c5c49e..9acc30f0 100644 --- a/root_commands.c +++ b/root_commands.c @@ -1106,9 +1106,48 @@ static void cmd_blist(irc_t *irc, char **cmd)  	}  } -#ifdef WITH_PLUGINS +static gint prplcmp(gconstpointer a, gconstpointer b) +{ +	const struct prpl *pa = a; +	const struct prpl *pb = b; + +	return g_strcasecmp(pa->name, pb->name); +} + +static void prplstr(GList *prpls, GString *gstr) +{ +	const char *last = NULL; +	GList *l; +	struct prpl *p; + +	prpls = g_list_copy(prpls); +	prpls = g_list_sort(prpls, prplcmp); + +	for (l = prpls; l; l = l->next) { +		p = l->data; + +		if (last && g_strcasecmp(p->name, last) == 0) { +			/* Ignore duplicates (mainly for libpurple) */ +			continue; +		} + +		if (gstr->len != 0) { +			g_string_append(gstr, ", "); +		} + +		g_string_append(gstr, p->name); +		last = p->name; +	} + +	g_list_free(prpls); +} +  static void cmd_plugins(irc_t *irc, char **cmd)  { +	GList *prpls; +	GString *gstr; + +#ifdef WITH_PLUGINS  	GList *l;  	struct plugin_info *info; @@ -1129,13 +1168,29 @@ static void cmd_plugins(irc_t *irc, char **cmd)  			irc_rootmsg(irc, "  URL: %s", info->url);  		} -		if (l->next) { -			irc_rootmsg(irc, ""); -		} +		irc_rootmsg(irc, "");  	} -}  #endif +	gstr = g_string_new(NULL); +	prpls = get_protocols(); + +	if (prpls) { +		prplstr(prpls, gstr); +		irc_rootmsg(irc, "Enabled Protocols: %s", gstr->str); +		g_string_truncate(gstr, 0); +	} + +	prpls = get_protocols_disabled(); + +	if (prpls) { +		prplstr(prpls, gstr); +		irc_rootmsg(irc, "Disabled Protocols: %s", gstr->str); +	} + +	g_string_free(gstr, TRUE); +} +  static void cmd_qlist(irc_t *irc, char **cmd)  {  	query_t *q = irc->queries; @@ -1387,9 +1442,7 @@ command_t root_commands[] = {  	{ "info",           1, cmd_info,           0 },  	{ "nick",           1, cmd_nick,           0 },  	{ "no",             0, cmd_yesno,          0 }, -#ifdef WITH_PLUGINS  	{ "plugins",        0, cmd_plugins,        0 }, -#endif  	{ "qlist",          0, cmd_qlist,          0 },  	{ "register",       0, cmd_register,       0 },  	{ "remove",         1, cmd_remove,         0 }, | 
