⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 userlist.c

📁 Linux下的多协议即时通讯程序源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	passport = msn_user_get_passport(user);	store = msn_user_get_store_name(user);	if (list_op & MSN_LIST_FL_OP)	{		GSList *c;		for (c = group_ids; c != NULL; c = g_slist_next(c))		{			int group_id;			group_id = GPOINTER_TO_INT(c->data);			msn_user_add_group_id(user, group_id);		}		/* FIXME: It might be a real alias */		/* Umm, what? This might fix bug #1385130 */		serv_got_alias(gc, passport, store);	}	if (list_op & MSN_LIST_AL_OP)	{		/* These are users who are allowed to see our status. */		purple_privacy_deny_remove(account, passport, TRUE);		purple_privacy_permit_add(account, passport, TRUE);	}	if (list_op & MSN_LIST_BL_OP)	{		/* These are users who are not allowed to see our status. */		purple_privacy_permit_remove(account, passport, TRUE);		purple_privacy_deny_add(account, passport, TRUE);	}	if (list_op & MSN_LIST_RL_OP)	{		/* These are users who have us on their buddy list. */		/*		 * TODO: What is store name set to when this happens?		 *       For one of my accounts "something@hotmail.com"		 *       the store name was "something."  Maybe we		 *       should use the friendly name, instead? --KingAnt		 */		if (!(list_op & (MSN_LIST_AL_OP | MSN_LIST_BL_OP)))		{			got_new_entry(gc, passport, store);		}	}	user->list_op = list_op;}/************************************************************************** * UserList functions **************************************************************************/MsnUserList*msn_userlist_new(MsnSession *session){	MsnUserList *userlist;	userlist = g_new0(MsnUserList, 1);	userlist->session = session;	userlist->buddy_icon_requests = g_queue_new();		/* buddy_icon_window is the number of allowed simultaneous buddy icon requests.	 * XXX With smarter rate limiting code, we could allow more at once... 5 was the limit set when	 * we weren't retrieiving any more than 5 per MSN session. */	userlist->buddy_icon_window = 1;	return userlist;}voidmsn_userlist_destroy(MsnUserList *userlist){	GList *l;	for (l = userlist->users; l != NULL; l = l->next)	{		msn_user_destroy(l->data);	}	g_list_free(userlist->users);	for (l = userlist->groups; l != NULL; l = l->next)	{		msn_group_destroy(l->data);	}	g_list_free(userlist->groups);	g_queue_free(userlist->buddy_icon_requests);	if (userlist->buddy_icon_request_timer)		purple_timeout_remove(userlist->buddy_icon_request_timer);	g_free(userlist);}voidmsn_userlist_add_user(MsnUserList *userlist, MsnUser *user){	userlist->users = g_list_append(userlist->users, user);}voidmsn_userlist_remove_user(MsnUserList *userlist, MsnUser *user){	userlist->users = g_list_remove(userlist->users, user);}MsnUser *msn_userlist_find_user(MsnUserList *userlist, const char *passport){	GList *l;	g_return_val_if_fail(passport != NULL, NULL);	for (l = userlist->users; l != NULL; l = l->next)	{		MsnUser *user = (MsnUser *)l->data;		g_return_val_if_fail(user->passport != NULL, NULL);		if (!strcmp(passport, user->passport))			return user;	}	return NULL;}voidmsn_userlist_add_group(MsnUserList *userlist, MsnGroup *group){	userlist->groups = g_list_append(userlist->groups, group);}voidmsn_userlist_remove_group(MsnUserList *userlist, MsnGroup *group){	userlist->groups = g_list_remove(userlist->groups, group);}MsnGroup *msn_userlist_find_group_with_id(MsnUserList *userlist, int id){	GList *l;	g_return_val_if_fail(userlist != NULL, NULL);	g_return_val_if_fail(id       >= 0,    NULL);	for (l = userlist->groups; l != NULL; l = l->next)	{		MsnGroup *group = l->data;		if (group->id == id)			return group;	}	return NULL;}MsnGroup *msn_userlist_find_group_with_name(MsnUserList *userlist, const char *name){	GList *l;	g_return_val_if_fail(userlist != NULL, NULL);	g_return_val_if_fail(name     != NULL, NULL);	for (l = userlist->groups; l != NULL; l = l->next)	{		MsnGroup *group = l->data;		if ((group->name != NULL) && !g_ascii_strcasecmp(name, group->name))			return group;	}	return NULL;}intmsn_userlist_find_group_id(MsnUserList *userlist, const char *group_name){	MsnGroup *group;	group = msn_userlist_find_group_with_name(userlist, group_name);	if (group != NULL)		return msn_group_get_id(group);	else		return -1;}const char *msn_userlist_find_group_name(MsnUserList *userlist, int group_id){	MsnGroup *group;	group = msn_userlist_find_group_with_id(userlist, group_id);	if (group != NULL)		return msn_group_get_name(group);	else		return NULL;}voidmsn_userlist_rename_group_id(MsnUserList *userlist, int group_id,							 const char *new_name){	MsnGroup *group;	group = msn_userlist_find_group_with_id(userlist, group_id);	if (group != NULL)		msn_group_set_name(group, new_name);}voidmsn_userlist_remove_group_id(MsnUserList *userlist, int group_id){	MsnGroup *group;	group = msn_userlist_find_group_with_id(userlist, group_id);	if (group != NULL)	{		msn_userlist_remove_group(userlist, group);		msn_group_destroy(group);	}}voidmsn_userlist_rem_buddy(MsnUserList *userlist,					   const char *who, int list_id, const char *group_name){	MsnUser *user;	int group_id;	const char *list;	user = msn_userlist_find_user(userlist, who);	group_id = -1;	if (group_name != NULL)	{		group_id = msn_userlist_find_group_id(userlist, group_name);		if (group_id < 0)		{			/* Whoa, there is no such group. */			purple_debug_error("msn", "Group doesn't exist: %s\n", group_name);			return;		}	}	/* First we're going to check if not there. */	if (!(user_is_there(user, list_id, group_id)))	{		list = lists[list_id];		purple_debug_error("msn", "User '%s' is not there: %s\n",						 who, list);		return;	}	/* Then request the rem to the server. */	list = lists[list_id];	msn_notification_rem_buddy(userlist->session->notification, list, who, group_id);}voidmsn_userlist_add_buddy(MsnUserList *userlist,					   const char *who, int list_id,					   const char *group_name){	MsnUser *user;	int group_id;	const char *list;	const char *store_name;	group_id = -1;	if (!purple_email_is_valid(who))	{		/* only notify the user about problems adding to the friends list		 * maybe we should do something else for other lists, but it probably		 * won't cause too many problems if we just ignore it */		if (list_id == MSN_LIST_FL)		{			char *str = g_strdup_printf(_("Unable to add \"%s\"."), who);			purple_notify_error(NULL, NULL, str,							  _("The screen name specified is invalid."));			g_free(str);		}		return;	}	if (group_name != NULL)	{		group_id = msn_userlist_find_group_id(userlist, group_name);		if (group_id < 0)		{			/* Whoa, we must add that group first. */			msn_request_add_group(userlist, who, NULL, group_name);			return;		}	}	user = msn_userlist_find_user(userlist, who);	/* First we're going to check if it's already there. */	if (user_is_there(user, list_id, group_id))	{		list = lists[list_id];		purple_debug_error("msn", "User '%s' is already there: %s\n", who, list);		return;	}	store_name = (user != NULL) ? get_store_name(user) : who;	/* Then request the add to the server. */	list = lists[list_id];	msn_notification_add_buddy(userlist->session->notification, list, who,							   store_name, group_id);}voidmsn_userlist_move_buddy(MsnUserList *userlist, const char *who,						const char *old_group_name, const char *new_group_name){	int new_group_id;	new_group_id = msn_userlist_find_group_id(userlist, new_group_name);	if (new_group_id < 0)	{		msn_request_add_group(userlist, who, old_group_name, new_group_name);		return;	}	msn_userlist_add_buddy(userlist, who, MSN_LIST_FL, new_group_name);	msn_userlist_rem_buddy(userlist, who, MSN_LIST_FL, old_group_name);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -