view libpurple/dbus-useful.c @ 25395:89670ae028bd

The MSN AddressBook can contain contacts with global isMessengerUser=false, but with isMessengerEnabled=true for a specific email (for federated/Yahoo! buddies). Re-arrange the code so it will find these types of contacts as well instead of bailing when it thinks that the contact is not (globally) enabled for messenger. Now it should stop attempting to add federated/Yahoo! buddies to your list repeatedly every time you sign in. You may need to manually remove the duplicates (Not in Pidgin/Finch. See the FAQ for more info). References #3322. References #6755.
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Sat, 31 Jan 2009 07:37:11 +0000
parents 32c366eeeb99
children 4ca97b26a8fb f75041cb3fec
line wrap: on
line source

#include <string.h>
#include <glib.h>

#include "dbus-useful.h"
#include "conversation.h"
#include "util.h"


PurpleAccount *
purple_accounts_find_ext(const char *name, const char *protocol_id,
		       gboolean (*account_test)(const PurpleAccount *account))
{
	PurpleAccount *result = NULL;
	GList *l;
	char *who;

	if (name)
		who = g_strdup(purple_normalize(NULL, name));
	else
		who = NULL;

	for (l = purple_accounts_get_all(); l != NULL; l = l->next) {
		PurpleAccount *account = (PurpleAccount *)l->data;

		if (who && strcmp(purple_normalize(NULL, purple_account_get_username(account)), who))
			continue;

		if (protocol_id && strcmp(account->protocol_id, protocol_id))
			continue;

		if (account_test && !account_test(account))
			continue;

		result = account;
		break;
	}

	g_free(who);

	return result;
}

PurpleAccount *purple_accounts_find_any(const char *name, const char *protocol)
{
	return purple_accounts_find_ext(name, protocol, NULL);
}

PurpleAccount *purple_accounts_find_connected(const char *name, const char *protocol)
{
	return purple_accounts_find_ext(name, protocol, purple_account_is_connected);
}