pidgin/plugins/pidgininc.c

Fri, 09 Sep 2016 12:43:59 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Fri, 09 Sep 2016 12:43:59 -0500
changeset 38040
8f2b9a832dec
parent 36957
95cfd176b193
child 38358
30ba44276e74
permissions
-rw-r--r--

enable meanwhile

/* When writing a third-party plugin, do not include libpurple's internal.h
 * included below. This file is for internal libpurple use only. We're including
 * it here for our own convenience. */
#include "internal.h"

/* This file defines PURPLE_PLUGINS and includes all the libpurple headers */
#include <purple.h>

/* include UI for pidgin_dialogs_about() */
#include "gtkplugin.h"
#include "gtkdialogs.h"

#define PURPLEINC_PLUGIN_ID "core-purpleinc"

static void
echo_hi(PurpleConnection *gc)
{
	/* this doesn't do much, just lets you know who we are :) */
	pidgin_dialogs_about();
}

static gboolean
reverse(PurpleAccount *account, char **who, char **message,
		PurpleConversation *conv, int *flags)
{
	/* this will drive you insane. whenever you receive a message,
	 * the text of the message (HTML and all) will be reversed. */
	int i, l;
	char tmp;

	/* this check is necessary in case bad plugins do bad things */
	if (message == NULL || *message == NULL)
		return FALSE;

	l = strlen(*message);

	if (!strcmp(*who, purple_account_get_username(account)))
		return FALSE;

	for (i = 0; i < l/2; i++) {
		tmp = (*message)[i];
		(*message)[i] = (*message)[l - i - 1];
		(*message)[l - i - 1] = tmp;
	}
	return FALSE;
}

static void
bud(PurpleBuddy *who)
{
	PurpleAccount *acct = purple_buddy_get_account(who);
	PurpleIMConversation *im = purple_im_conversation_new(acct,
			purple_buddy_get_name(who));

	purple_conversation_send(PURPLE_CONVERSATION(im), "Hello!");
}

/*
 *  EXPORTED FUNCTIONS
 */

static PidginPluginInfo *
plugin_query(GError **error)
{
	const gchar * const authors[] = {
		"Eric Warmenhoven <eric@warmenhoven.org>",
		NULL
	};

	return pidgin_plugin_info_new(
		"id",           PURPLEINC_PLUGIN_ID,
		"name",         N_("Pidgin Demonstration Plugin"),
		"version",      DISPLAY_VERSION,
		"category",     N_("Example"),
		"summary",      N_("An example plugin that does stuff - see the description."),
		"description",  N_("This is a really cool plugin that does a lot of stuff:\n"
		                   "- It tells you who wrote the program when you log in\n"
		                   "- It reverses all incoming text\n"
		                   "- It sends a message to people on your list immediately"
		                   " when they sign on"),
		"authors",      authors,
		"website",      PURPLE_WEBSITE,
		"abi-version",  PURPLE_ABI_VERSION,
		NULL
	);
}

static gboolean
plugin_load(PurplePlugin *plugin, GError **error)
{
	/* this is for doing something fun when we sign on */
	purple_signal_connect(purple_connections_get_handle(), "signed-on",
						plugin, PURPLE_CALLBACK(echo_hi), NULL);

	/* this is for doing something fun when we get a message */
	purple_signal_connect(purple_conversations_get_handle(), "receiving-im-msg",
						plugin, PURPLE_CALLBACK(reverse), NULL);

	/* this is for doing something fun when a buddy comes online */
	purple_signal_connect(purple_blist_get_handle(), "buddy-signed-on",
						plugin, PURPLE_CALLBACK(bud), NULL);

	return TRUE;
}

static gboolean
plugin_unload(PurplePlugin *plugin, GError **error)
{
	return TRUE;
}

PURPLE_PLUGIN_INIT(purpleinc, plugin_query, plugin_load, plugin_unload);

mercurial