pidgin/purple-plugin-pack

Add the turtles target to keep the foot clan at bay
default tip
13 months ago, Gary Kramlich
63ad7e4f10b4
Add the turtles target to keep the foot clan at bay

Testing Done:
Ran `ninja turtles` and verified it worked correctly.

Reviewed at https://reviews.imfreedom.org/r/2409/
/*
* Icon Override - Override prpl icon per account
* Copyright (C) 2010 Eion Robb
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02111-1301, USA.
*/
#include "../common/pp_internal.h"
#include <account.h>
#include <accountopt.h>
#include <plugin.h>
#define NEW_ICON_ID "eionrobb_new_prpl_icon"
static GHashTable *original_list_icon = NULL;
const char *
new_list_icon(PurpleAccount *account, PurpleBuddy *buddy)
{
const char*(* list_icon_func)(PurpleAccount *account, PurpleBuddy *buddy);
const char *prpl_id;
const char *new_icon;
PurpleAccount *acct;
if (account != NULL)
acct = account;
else if (buddy != NULL)
acct = buddy->account;
else
return "";
new_icon = purple_account_get_string(account, NEW_ICON_ID, NULL);
if (new_icon && *new_icon)
return new_icon;
prpl_id = acct->protocol_id;
list_icon_func = g_hash_table_lookup(original_list_icon, prpl_id);
return list_icon_func(account, buddy);
}
static gboolean
plugin_load(PurplePlugin *plugin)
{
GList *proto_list;
PurplePlugin *proto;
PurpleAccountOption *option;
PurplePluginProtocolInfo *prpl_info;
//Hook into every protocol's prpl_info->list_icon function
original_list_icon = g_hash_table_new(g_str_hash, g_str_equal);
proto_list = purple_plugins_get_protocols();
for(; proto_list; proto_list = proto_list->next)
{
proto = proto_list->data;
prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(proto);
g_hash_table_insert(original_list_icon, (gpointer)purple_plugin_get_id(proto), prpl_info->list_icon);
prpl_info->list_icon = new_list_icon;
//Add in some protocol preferences
option = purple_account_option_string_new(_("Protocol Icon"), NEW_ICON_ID, "");
prpl_info->protocol_options = g_list_append(prpl_info->protocol_options, option);
}
return TRUE;
}
static gboolean
plugin_unload(PurplePlugin *plugin)
{
//Unhook
GList *proto_list;
gpointer func;
GList *list, *llist;
PurplePluginProtocolInfo *prpl_info;
PurpleAccountOption *option;
PurplePlugin *proto;
proto_list = purple_plugins_get_protocols();
for(; proto_list; proto_list = proto_list->next)
{
proto = (PurplePlugin *) proto_list->data;
prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(proto);
func = g_hash_table_lookup(original_list_icon, purple_plugin_get_id(proto));
if (func)
{
prpl_info->list_icon = func;
g_hash_table_remove(original_list_icon, purple_plugin_get_id(proto));
}
//Remove from the protocol options screen
list = prpl_info->protocol_options;
while(list != NULL)
{
option = (PurpleAccountOption *) list->data;
if (g_str_equal(purple_account_option_get_setting(option), NEW_ICON_ID))
{
llist = list;
if (llist->prev)
llist->prev->next = llist->next;
if (llist->next)
llist->next->prev = llist->prev;
purple_account_option_destroy(option);
list = g_list_next(list);
g_list_free_1(llist);
} else {
list = g_list_next(list);
}
}
}
g_hash_table_destroy(original_list_icon);
original_list_icon = NULL;
return TRUE;
}
static PurplePluginInfo info =
{
PURPLE_PLUGIN_MAGIC,
2,
2,
PURPLE_PLUGIN_STANDARD,
NULL,
0,
NULL,
PURPLE_PRIORITY_LOWEST,
"eionrobb-icon-override",
NULL,
PP_VERSION,
NULL,
NULL,
"Eion Robb <eionrobb@gmail.com>",
PP_WEBSITE, //URL
plugin_load,
plugin_unload,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
};
static void
plugin_init(PurplePlugin *plugin)
{
#ifdef ENABLE_NLS
bindtextdomain(GETTEXT_PACKAGE, PP_LOCALEDIR);
bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
#endif
info.name = _("Protocol Icon Override");
info.summary = _("Customise protocol icons");
info.description = _("Lets you change protocol icons per-account so that "
"you can tell the difference between, say, a personal "
"XMPP account and one used for work");
}
PURPLE_INIT_PLUGIN(icon_override, plugin_init, info);