/soc/2013/ankitkv/gobjectification: 42a876472506: Refactored irc...
Ankit Vani
a at nevitus.org
Sun Aug 11 15:21:40 EDT 2013
Changeset: 42a876472506ddc13efda111faa98703e9a86680
Author: Ankit Vani <a at nevitus.org>
Date: 2013-08-12 00:51 +0530
Branch: soc.2013.gobjectification.plugins
URL: https://hg.pidgin.im/soc/2013/ankitkv/gobjectification/rev/42a876472506
Description:
Refactored irc to use the new plugin API
diffstat:
libpurple/protocols/irc/irc.c | 106 ++++++++++++++++++---------------------
libpurple/protocols/irc/msgs.c | 2 +-
libpurple/protocols/irc/parse.c | 4 +-
3 files changed, 52 insertions(+), 60 deletions(-)
diffs (209 lines):
diff --git a/libpurple/protocols/irc/irc.c b/libpurple/protocols/irc/irc.c
--- a/libpurple/protocols/irc/irc.c
+++ b/libpurple/protocols/irc/irc.c
@@ -43,7 +43,7 @@ static void irc_ison_buddy_init(char *na
static const char *irc_blist_icon(PurpleAccount *a, PurpleBuddy *b);
static GList *irc_status_types(PurpleAccount *account);
-static GList *irc_actions(PurplePlugin *plugin, gpointer context);
+static GList *irc_get_actions(PurpleConnection *gc);
/* static GList *irc_chat_info(PurpleConnection *gc); */
static void irc_login(PurpleAccount *account);
static void irc_login_cb_ssl(gpointer data, PurpleSslConnection *gsc, PurpleInputCondition cond);
@@ -60,11 +60,11 @@ static guint irc_nick_hash(const char *n
static gboolean irc_nick_equal(const char *nick1, const char *nick2);
static void irc_buddy_free(struct irc_buddy *ib);
-PurplePlugin *_irc_plugin = NULL;
+PurplePluginProtocolInfo *_irc_protocol = NULL;
-static void irc_view_motd(PurplePluginAction *action)
+static void irc_view_motd(PurpleProtocolAction *action)
{
- PurpleConnection *gc = (PurpleConnection *) action->context;
+ PurpleConnection *gc = action->connection;
struct irc_conn *irc;
char *title;
@@ -157,7 +157,7 @@ int irc_send_len(struct irc_conn *irc, c
int ret;
char *tosend= g_strdup(buf);
- purple_signal_emit(_irc_plugin, "irc-sending-text", purple_account_get_connection(irc->account), &tosend);
+ purple_signal_emit(_irc_protocol, "irc-sending-text", purple_account_get_connection(irc->account), &tosend);
if (tosend == NULL)
return 0;
@@ -284,12 +284,12 @@ static GList *irc_status_types(PurpleAcc
return types;
}
-static GList *irc_actions(PurplePlugin *plugin, gpointer context)
+static GList *irc_get_actions(PurpleConnection *gc)
{
GList *list = NULL;
- PurplePluginAction *act = NULL;
+ PurpleProtocolAction *act = NULL;
- act = purple_plugin_action_new(_("View MOTD"), irc_view_motd);
+ act = purple_protocol_action_new(_("View MOTD"), irc_view_motd);
list = g_list_append(list, act);
return list;
@@ -917,12 +917,15 @@ static void irc_keepalive(PurpleConnecti
static PurplePluginProtocolInfo prpl_info =
{
+ "prpl-irc", /* id */
+ "IRC", /* name */
sizeof(PurplePluginProtocolInfo), /* struct_size */
OPT_PROTO_CHAT_TOPIC | OPT_PROTO_PASSWORD_OPTIONAL |
OPT_PROTO_SLASH_COMMANDS_NATIVE,
NULL, /* user_splits */
NULL, /* protocol_options */
NO_BUDDY_ICONS, /* icon_spec */
+ irc_get_actions, /* get_actions */
irc_blist_icon, /* list_icon */
NULL, /* list_emblems */
NULL, /* status_text */
@@ -991,56 +994,24 @@ static PurplePluginProtocolInfo prpl_inf
NULL /* get_public_alias */
};
-static gboolean load_plugin (PurplePlugin *plugin) {
-
- purple_signal_register(plugin, "irc-sending-text",
- purple_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2,
- PURPLE_TYPE_CONNECTION,
- G_TYPE_POINTER); /* pointer to a string */
- purple_signal_register(plugin, "irc-receiving-text",
- purple_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2,
- PURPLE_TYPE_CONNECTION,
- G_TYPE_POINTER); /* pointer to a string */
- return TRUE;
-}
-
-
-static PurplePluginInfo info =
+static PurplePluginInfo *
+plugin_query(GError **error)
{
- PURPLE_PLUGIN_MAGIC,
- PURPLE_MAJOR_VERSION,
- PURPLE_MINOR_VERSION,
- PURPLE_PLUGIN_PROTOCOL, /**< type */
- NULL, /**< ui_requirement */
- 0, /**< flags */
- NULL, /**< dependencies */
- PURPLE_PRIORITY_DEFAULT, /**< priority */
-
- "prpl-irc", /**< id */
- "IRC", /**< name */
- DISPLAY_VERSION, /**< version */
- N_("IRC Protocol Plugin"), /** summary */
- N_("The IRC Protocol Plugin that Sucks Less"), /** description */
- NULL, /**< author */
- PURPLE_WEBSITE, /**< homepage */
-
- load_plugin, /**< load */
- NULL, /**< unload */
- NULL, /**< destroy */
-
- NULL, /**< ui_info */
- &prpl_info, /**< extra_info */
- NULL, /**< prefs_info */
- irc_actions,
-
- /* padding */
- NULL,
- NULL,
- NULL,
- NULL
+ return purple_plugin_info_new(
+ "id", "prpl-irc",
+ "name", "IRC",
+ "version", DISPLAY_VERSION,
+ "category", N_("Protocol"),
+ "summary", N_("IRC Protocol Plugin"),
+ "description", N_("The IRC Protocol Plugin that Sucks Less"),
+ "website", PURPLE_WEBSITE,
+ "abi-version", PURPLE_ABI_VERSION,
+ NULL
+ );
};
-static void _init_plugin(PurplePlugin *plugin)
+static gboolean
+plugin_load(PurplePlugin *plugin, GError **error)
{
PurpleAccountUserSplit *split;
PurpleAccountOption *option;
@@ -1081,12 +1052,33 @@ static void _init_plugin(PurplePlugin *p
prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
#endif
- _irc_plugin = plugin;
+ _irc_protocol = &prpl_info;
purple_prefs_remove("/plugins/prpl/irc/quitmsg");
purple_prefs_remove("/plugins/prpl/irc");
irc_register_commands();
+
+ purple_signal_register(_irc_protocol, "irc-sending-text",
+ purple_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2,
+ PURPLE_TYPE_CONNECTION,
+ G_TYPE_POINTER); /* pointer to a string */
+ purple_signal_register(_irc_protocol, "irc-receiving-text",
+ purple_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2,
+ PURPLE_TYPE_CONNECTION,
+ G_TYPE_POINTER); /* pointer to a string */
+
+ purple_protocols_add(_irc_protocol);
+
+ return TRUE;
}
-PURPLE_INIT_PLUGIN(irc, _init_plugin, info);
+static gboolean
+plugin_unload(PurplePlugin *plugin, GError **error)
+{
+ purple_protocols_remove(_irc_protocol);
+
+ return TRUE;
+}
+
+PURPLE_PLUGIN_INIT(irc, plugin_query, plugin_load, plugin_unload);
diff --git a/libpurple/protocols/irc/msgs.c b/libpurple/protocols/irc/msgs.c
--- a/libpurple/protocols/irc/msgs.c
+++ b/libpurple/protocols/irc/msgs.c
@@ -100,7 +100,7 @@ static void irc_connected(struct irc_con
/* If we're away then set our away message */
status = purple_account_get_active_status(irc->account);
if (purple_status_type_get_primitive(purple_status_get_status_type(status)) != PURPLE_STATUS_AVAILABLE) {
- PurplePluginProtocolInfo *prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_protocol_info(gc));
+ PurplePluginProtocolInfo *prpl_info = purple_connection_get_protocol_info(gc);
prpl_info->set_status(irc->account, status);
}
diff --git a/libpurple/protocols/irc/parse.c b/libpurple/protocols/irc/parse.c
--- a/libpurple/protocols/irc/parse.c
+++ b/libpurple/protocols/irc/parse.c
@@ -44,7 +44,7 @@ static char *irc_mirc_colors[16] = {
"orange", "yellow", "green", "teal", "cyan", "light blue",
"pink", "grey", "light grey" };
-extern PurplePlugin *_irc_plugin;
+extern PurplePluginProtocolInfo *_irc_protocol;
/*typedef void (*IRCMsgCallback)(struct irc_conn *irc, char *from, char *name, char **args);*/
static struct _irc_msg {
@@ -670,7 +670,7 @@ void irc_parse_msg(struct irc_conn *irc,
* TODO: It should be passed as an array of bytes and a length
* instead of a null terminated string.
*/
- purple_signal_emit(_irc_plugin, "irc-receiving-text", gc, &input);
+ purple_signal_emit(_irc_protocol, "irc-receiving-text", gc, &input);
if (!strncmp(input, "PING ", 5)) {
msg = irc_format(irc, "vv", "PONG", input + 5);
More information about the Commits
mailing list