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

📄 qq.c

📁 Linux下的多协议即时通讯程序源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
}static void _qq_menu_change_password(PurplePluginAction *action){	purple_notify_uri(NULL, "https://password.qq.com");}/* remove a buddy from my list and remove myself from his list *//* TODO: re-enable thisstatic void _qq_menu_block_buddy(PurpleBlistNode * node){	guint32 uid;	gc_and_uid *g;	PurpleBuddy *buddy;	PurpleConnection *gc;	const gchar *who;	g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node));	buddy = (PurpleBuddy *) node;	gc = purple_account_get_connection(buddy->account);	who = buddy->name;	g_return_if_fail(who != NULL);	uid = purple_name_to_uid(who);	g_return_if_fail(uid > 0);	g = g_new0(gc_and_uid, 1);	g->gc = gc;	g->uid = uid;	purple_request_action(gc, _("Block Buddy"),			    _("Are you sure to block this buddy?"), NULL,			    1, g, 2,			    _("Cancel"),			    G_CALLBACK(qq_do_nothing_with_gc_and_uid),			    _("Block"), G_CALLBACK(qq_block_buddy_with_gc_and_uid));}*//* show a brief summary of what we get from login packet */static void _qq_menu_show_login_info(PurplePluginAction *action){	PurpleConnection *gc = (PurpleConnection *) action->context;	qq_data *qd;	GString *info;	qd = (qq_data *) gc->proto_data;	info = g_string_new("<html><body>\n");	g_string_append_printf(info, _("<b>Current Online</b>: %d<br>\n"), qd->all_online);	g_string_append_printf(info, _("<b>Last Refresh</b>: %s<br>\n"), ctime(&qd->last_get_online));	g_string_append(info, "<hr>\n");	g_string_append_printf(info, _("<b>Connection Mode</b>: %s<br>\n"), qd->use_tcp ? "TCP" : "UDP");	g_string_append_printf(info, _("<b>Server IP</b>: %s: %d<br>\n"), qd->server_ip, qd->server_port);	g_string_append_printf(info, _("<b>My Public IP</b>: %s<br>\n"), qd->my_ip);	g_string_append(info, "<hr>\n");	g_string_append(info, "<i>Information below may not be accurate</i><br>\n");	g_string_append_printf(info, _("<b>Login Time</b>: %s<br>\n"), ctime(&qd->login_time));	g_string_append_printf(info, _("<b>Last Login IP</b>: %s<br>\n"), qd->last_login_ip);	g_string_append_printf(info, _("<b>Last Login Time</b>: %s\n"), ctime(&qd->last_login_time));	g_string_append(info, "</body></html>");	purple_notify_formatted(gc, NULL, _("Login Information"), NULL, info->str, NULL, NULL);	g_string_free(info, TRUE);}/*static void _qq_menu_search_or_add_permanent_group(PurplePluginAction *action){	purple_roomlist_show_with_account(NULL);}*//*static void _qq_menu_create_permanent_group(PurplePluginAction * action){	PurpleConnection *gc = (PurpleConnection *) action->context;	purple_request_input(gc, _("Create QQ Qun"),			   _("Input Qun name here"),			   _("Only QQ member can create permanent Qun"),			   "OpenQ", FALSE, FALSE, NULL,			   _("Create"), G_CALLBACK(qq_group_create_with_name), _("Cancel"), NULL, gc);}*/static void _qq_menu_unsubscribe_group(PurpleBlistNode * node){	PurpleChat *chat = (PurpleChat *)node;	PurpleConnection *gc = purple_account_get_connection(chat->account);	GHashTable *components = chat -> components;	g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT(node));	g_return_if_fail(components != NULL);	qq_group_exit(gc, components);}/*static void _qq_menu_manage_group(PurpleBlistNode * node){	PurpleChat *chat = (PurpleChat *)node;	PurpleConnection *gc = purple_account_get_connection(chat->account);	GHashTable *components = chat -> components;	g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT(node));	g_return_if_fail(components != NULL);	qq_group_manage_group(gc, components);}*/#if 0/* TODO: re-enable this */static void _qq_menu_send_file(PurpleBlistNode * node, gpointer ignored){	PurpleBuddy *buddy;	PurpleConnection *gc;	qq_buddy *q_bud;	g_return_if_fail (PURPLE_BLIST_NODE_IS_BUDDY (node));	buddy = (PurpleBuddy *) node;	q_bud = (qq_buddy *) buddy->proto_data;/*	if (is_online (q_bud->status)) { */	gc = purple_account_get_connection (buddy->account);	g_return_if_fail (gc != NULL && gc->proto_data != NULL);	qq_send_file(gc, buddy->name, NULL);/*	} */}#endif/* protocol related menus */static GList *_qq_actions(PurplePlugin *plugin, gpointer context){	GList *m;	PurplePluginAction *act;	m = NULL;	act = purple_plugin_action_new(_("Modify My Information"), _qq_menu_modify_my_info);	m = g_list_append(m, act);	act = purple_plugin_action_new(_("Change Password"), _qq_menu_change_password);	m = g_list_append(m, act);	act = purple_plugin_action_new(_("Show Login Information"), _qq_menu_show_login_info);	m = g_list_append(m, act);	/*	act = purple_plugin_action_new(_("Qun: Search a permanent Qun"), _qq_menu_search_or_add_permanent_group);	m = g_list_append(m, act);	act = purple_plugin_action_new(_("Qun: Create a permanent Qun"), _qq_menu_create_permanent_group);	m = g_list_append(m, act);	*/	return m;}/* chat-related (QQ Qun) menu shown up with right-click */static GList *_qq_chat_menu(PurpleBlistNode *node){	GList *m;	PurpleMenuAction *act;	m = NULL;	act = purple_menu_action_new(_("Exit this QQ Qun"), PURPLE_CALLBACK(_qq_menu_unsubscribe_group), NULL, NULL);	m = g_list_append(m, act);	/* TODO: enable this	act = purple_menu_action_new(_("Show Details"), PURPLE_CALLBACK(_qq_menu_manage_group), NULL, NULL);	m = g_list_append(m, act);	*/	return m;}/* buddy-related menu shown up with right-click */static GList *_qq_buddy_menu(PurpleBlistNode * node){	GList *m;	if(PURPLE_BLIST_NODE_IS_CHAT(node))		return _qq_chat_menu(node);	m = NULL;/* TODO : not working, temp commented out by gfhuang */#if 0	act = purple_menu_action_new(_("Block this buddy"), PURPLE_CALLBACK(_qq_menu_block_buddy), NULL, NULL); /* add NULL by gfhuang */	m = g_list_append(m, act);/*	if (q_bud && is_online(q_bud->status)) { */		act = purple_menu_action_new(_("Send File"), PURPLE_CALLBACK(_qq_menu_send_file), NULL, NULL); /* add NULL by gfhuang */		m = g_list_append(m, act);/*	} */#endif	return m;}static void _qq_keep_alive(PurpleConnection *gc){	qq_group *group;	qq_data *qd;	GList *list;	if (NULL == (qd = (qq_data *) gc->proto_data))		return;	list = qd->groups;	while (list != NULL) {		group = (qq_group *) list->data;		if (group->my_status == QQ_GROUP_MEMBER_STATUS_IS_MEMBER ||		    group->my_status == QQ_GROUP_MEMBER_STATUS_IS_ADMIN)			/* no need to get info time and time again, online members enough */			qq_send_cmd_group_get_online_members(gc, group);		list = list->next;	}	qq_send_packet_keep_alive(gc);}/* convert chat nickname to qq-uid to get this buddy info *//* who is the nickname of buddy in QQ chat-room (Qun) */static void _qq_get_chat_buddy_info(PurpleConnection *gc, gint channel, const gchar *who){	gchar *purple_name;	g_return_if_fail(who != NULL);	purple_name = chat_name_to_purple_name(who);	if (purple_name != NULL)		_qq_get_info(gc, purple_name);}/* convert chat nickname to qq-uid to invite individual IM to buddy *//* who is the nickname of buddy in QQ chat-room (Qun) */static gchar *_qq_get_chat_buddy_real_name(PurpleConnection *gc, gint channel, const gchar *who){	g_return_val_if_fail(who != NULL, NULL);	return chat_name_to_purple_name(who);}PurplePlugin *my_protocol = NULL;static PurplePluginProtocolInfo prpl_info	= {	OPT_PROTO_CHAT_TOPIC | OPT_PROTO_USE_POINTSIZE,	NULL,							/* user_splits	*/	NULL,							/* protocol_options */	{"png", 96, 96, 96, 96, 0, PURPLE_ICON_SCALE_SEND}, /* icon_spec */	_qq_list_icon,						/* list_icon */	_qq_list_emblem,					/* list_emblems */	_qq_status_text,					/* status_text	*/	_qq_tooltip_text,					/* tooltip_text */	_qq_away_states,					/* away_states	*/	_qq_buddy_menu,						/* blist_node_menu */	qq_chat_info,						/* chat_info */	qq_chat_info_defaults,					/* chat_info_defaults */	_qq_login,						/* login */	_qq_close,						/* close */	_qq_send_im,						/* send_im */	NULL,							/* set_info */	NULL,							/* send_typing	*/	_qq_get_info,						/* get_info */	_qq_set_away,						/* set_away */	NULL,							/* set_idle */	NULL,							/* change_passwd */	qq_add_buddy,						/* add_buddy */	NULL,							/* add_buddies	*/	qq_remove_buddy,					/* remove_buddy */	NULL,							/* remove_buddies */	NULL,							/* add_permit */	NULL,							/* add_deny */	NULL,							/* rem_permit */	NULL,							/* rem_deny */	NULL,							/* set_permit_deny */	qq_group_join,						/* join_chat */	NULL,							/* reject chat	invite */	NULL,							/* get_chat_name */	NULL,							/* chat_invite	*/	NULL,							/* chat_leave */	NULL,							/* chat_whisper */	_qq_chat_send,						/* chat_send */	_qq_keep_alive,						/* keepalive */	NULL,							/* register_user */	_qq_get_chat_buddy_info,				/* get_cb_info	*/	NULL,							/* get_cb_away	*/	NULL,							/* alias_buddy	*/	NULL,							/* group_buddy	*/	NULL,							/* rename_group */	NULL,							/* buddy_free */	NULL,							/* convo_closed */	NULL,							/* normalize */	qq_set_my_buddy_icon,					/* set_buddy_icon */	NULL,							/* remove_group */	_qq_get_chat_buddy_real_name,				/* get_cb_real_name */	NULL,							/* set_chat_topic */	NULL,							/* find_blist_chat */	qq_roomlist_get_list,					/* roomlist_get_list */	qq_roomlist_cancel,					/* roomlist_cancel */	NULL,							/* roomlist_expand_category */	NULL,							/* can_receive_file */	qq_send_file,						/* send_file */	NULL,							/* new xfer */	NULL,							/* offline_message */	NULL,							/* PurpleWhiteboardPrplOps */	NULL,							/* send_raw */	NULL,							/* roomlist_room_serialize */	/* padding */	NULL,	NULL,	NULL,	NULL};static PurplePluginInfo info = {	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-qq",			/**< id			*/	"QQ",				/**< name		*/	VERSION,			/**< version		*/					/**  summary		*/	N_("QQ Protocol	Plugin"),					/**  description	*/	N_("QQ Protocol	Plugin"),	OPENQ_AUTHOR,			/**< author		*/	OPENQ_WEBSITE,			/**< homepage		*/	NULL,				/**< load		*/	NULL,				/**< unload		*/	NULL,				/**< destroy		*/	NULL,				/**< ui_info		*/	&prpl_info,			/**< extra_info		*/	NULL,				/**< prefs_info		*/	_qq_actions,	/* padding */	NULL,	NULL,	NULL,	NULL};static void init_plugin(PurplePlugin *plugin){	PurpleAccountOption *option;	option = purple_account_option_bool_new(_("Login in TCP"), "use_tcp", FALSE);	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);	option = purple_account_option_bool_new(_("Login Hidden"), "hidden", FALSE);	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);	option = purple_account_option_string_new(_("Server"), "server", NULL);	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);	option = purple_account_option_string_new(_("Port"), "port", NULL);	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);	my_protocol = plugin;	purple_prefs_add_none("/plugins/prpl/qq");	purple_prefs_add_bool("/plugins/prpl/qq/show_status_by_icon", TRUE);	purple_prefs_add_bool("/plugins/prpl/qq/show_fake_video", FALSE);	purple_prefs_add_bool("/plugins/prpl/qq/prompt_group_msg_on_recv", TRUE);}PURPLE_INIT_PLUGIN(qq, init_plugin, info);

⌨️ 快捷键说明

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