Esempio n. 1
0
PurpleBuddy * qq_buddy_find_or_new( PurpleConnection *gc, guint32 uid, guint8 group_id)
{
	PurpleBuddy *buddy;
	qq_buddy_data *bd;
	qq_data *qd;
	GSList *l;
	qq_group * g;
	PurpleGroup * old_group;
	g_return_val_if_fail(gc->account != NULL && uid != 0, NULL);

	qd = (qq_data *)gc->proto_data;

	buddy = qq_buddy_find(gc, uid);
	/* group_id==0xFF only when add an unknown stranger */
	if (group_id==0xFF) {
		if (buddy)	goto buddy_data_check;
		else group_id=0;		//add stranger to group 0
	}

	/* find input group_id */
	for (l=qd->group_list; l; l=l->next)
	{
		if (((qq_group *)(l->data))->group_id == group_id) break;
	}

	/* if group_id found */
	if (l)	{
		if (buddy)		//if buddy already exist, we need check if he is in new group
		{	
			old_group = purple_buddy_get_group(buddy);
			g = (qq_group *)l->data;
			if (old_group != purple_find_group(g->group_name))
			{
				qq_buddy_free(buddy);
			} else	goto buddy_data_check;
		}
		old_group = purple_find_group(((qq_group *)(l->data))->group_name);
		buddy = qq_buddy_new(gc, uid, old_group);
	} else {
		if (group_id==0)
		{
			if (!buddy)
				buddy = qq_buddy_new(gc, uid, NULL);
			goto buddy_data_check;
		}
		purple_debug_error("QQ","cannot find group id: %u", group_id);
		return NULL;
	}

buddy_data_check:
	if (purple_buddy_get_protocol_data(buddy) != NULL)
		return buddy;

	bd = qq_buddy_data_new(uid);
	purple_buddy_set_protocol_data(buddy, bd);
	return buddy;
}
Esempio n. 2
0
PurpleBuddy *qq_buddy_find_or_new(PurpleConnection *gc, guint32 uid)
{
	PurpleBuddy *buddy;

	g_return_val_if_fail(gc->account != NULL && uid != 0, NULL);

	buddy = qq_buddy_find(gc, uid);
	if (buddy == NULL) {
		buddy = qq_buddy_new(gc, uid);
		if (buddy == NULL) {
			return NULL;
		}
	}

	if (buddy->proto_data != NULL) {
		return buddy;
	}

	buddy->proto_data = qq_buddy_data_new(uid);
	return buddy;
}
Esempio n. 3
0
PurpleBuddy *qq_buddy_find_or_new(PurpleConnection *gc, guint32 uid)
{
	PurpleBuddy *buddy;
	qq_buddy_data *bd;

	g_return_val_if_fail(gc->account != NULL && uid != 0, NULL);

	buddy = qq_buddy_find(gc, uid);
	if (buddy == NULL) {
		buddy = qq_buddy_new(gc, uid);
		if (buddy == NULL) {
			return NULL;
		}
	}

	if (purple_buddy_get_protocol_data(buddy) != NULL) {
		return buddy;
	}

	bd = qq_buddy_data_new(uid);
	purple_buddy_set_protocol_data(buddy, bd);
	return buddy;
}