statenotify.c

来自「Linux下的多协议即时通讯程序源代码」· C语言 代码 · 共 185 行

C
185
字号
#include "internal.h"#include "blist.h"#include "conversation.h"#include "debug.h"#include "signals.h"#include "version.h"#include "plugin.h"#include "pluginpref.h"#include "prefs.h"#define STATENOTIFY_PLUGIN_ID "core-statenotify"static voidwrite_status(PurpleBuddy *buddy, const char *message){	PurpleConversation *conv;	const char *who;	char buf[256];	char *escaped;	conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM,											   buddy->name, buddy->account);	if (conv == NULL)		return;	g_return_if_fail(conv->type == PURPLE_CONV_TYPE_IM);	who = purple_buddy_get_alias(buddy);	escaped = g_markup_escape_text(who, -1);	g_snprintf(buf, sizeof(buf), message, escaped);	g_free(escaped);	purple_conv_im_write(conv->u.im, NULL, buf, PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_ACTIVE_ONLY, time(NULL));}static voidbuddy_status_changed_cb(PurpleBuddy *buddy, PurpleStatus *old_status,                        PurpleStatus *status, void *data){	gboolean available, old_available;	available = purple_status_is_available(status);	old_available = purple_status_is_available(old_status);	if (purple_prefs_get_bool("/plugins/core/statenotify/notify_away")) {		if (available && !old_available)			write_status(buddy, _("%s is no longer away."));		else if (!available && old_available)			write_status(buddy, _("%s has gone away."));	}}static voidbuddy_idle_changed_cb(PurpleBuddy *buddy, gboolean old_idle, gboolean idle,                      void *data){	if (purple_prefs_get_bool("/plugins/core/statenotify/notify_idle")) {		if (idle) {			write_status(buddy, _("%s has become idle."));		} else {			write_status(buddy, _("%s is no longer idle."));		}	}}static voidbuddy_signon_cb(PurpleBuddy *buddy, void *data){	if (purple_prefs_get_bool("/plugins/core/statenotify/notify_signon"))		write_status(buddy, _("%s has signed on."));}static voidbuddy_signoff_cb(PurpleBuddy *buddy, void *data){	if (purple_prefs_get_bool("/plugins/core/statenotify/notify_signon"))		write_status(buddy, _("%s has signed off."));}static PurplePluginPrefFrame *get_plugin_pref_frame(PurplePlugin *plugin){	PurplePluginPrefFrame *frame;	PurplePluginPref *ppref;	frame = purple_plugin_pref_frame_new();	ppref = purple_plugin_pref_new_with_label(_("Notify When"));	purple_plugin_pref_frame_add(frame, ppref);	ppref = purple_plugin_pref_new_with_name_and_label("/plugins/core/statenotify/notify_away", _("Buddy Goes _Away"));	purple_plugin_pref_frame_add(frame, ppref);	ppref = purple_plugin_pref_new_with_name_and_label("/plugins/core/statenotify/notify_idle", _("Buddy Goes _Idle"));	purple_plugin_pref_frame_add(frame, ppref);	ppref = purple_plugin_pref_new_with_name_and_label("/plugins/core/statenotify/notify_signon", _("Buddy _Signs On/Off"));	purple_plugin_pref_frame_add(frame, ppref);	return frame;}static gbooleanplugin_load(PurplePlugin *plugin){	void *blist_handle = purple_blist_get_handle();	purple_signal_connect(blist_handle, "buddy-status-changed", plugin,	                    PURPLE_CALLBACK(buddy_status_changed_cb), NULL);	purple_signal_connect(blist_handle, "buddy-idle-changed", plugin,	                    PURPLE_CALLBACK(buddy_idle_changed_cb), NULL);	purple_signal_connect(blist_handle, "buddy-signed-on", plugin,	                    PURPLE_CALLBACK(buddy_signon_cb), NULL);	purple_signal_connect(blist_handle, "buddy-signed-off", plugin,	                    PURPLE_CALLBACK(buddy_signoff_cb), NULL);	return TRUE;}static PurplePluginUiInfo prefs_info ={	get_plugin_pref_frame,	0,   /* page_num (Reserved) */	NULL, /* frame (Reserved) */	/* padding */	NULL,	NULL,	NULL,	NULL};static PurplePluginInfo info ={	PURPLE_PLUGIN_MAGIC,	PURPLE_MAJOR_VERSION,	PURPLE_MINOR_VERSION,	PURPLE_PLUGIN_STANDARD,                             /**< type           */	NULL,                                             /**< ui_requirement */	0,                                                /**< flags          */	NULL,                                             /**< dependencies   */	PURPLE_PRIORITY_DEFAULT,                            /**< priority       */	STATENOTIFY_PLUGIN_ID,                            /**< id             */	N_("Buddy State Notification"),                   /**< name           */	VERSION,                                          /**< version        */	                                                  /**  summary        */	N_("Notifies in a conversation window when a buddy goes or returns from "	   "away or idle."),	                                                  /**  description    */	N_("Notifies in a conversation window when a buddy goes or returns from "	   "away or idle."),	"Christian Hammond <chipx86@gnupdate.org>",       /**< author         */	PURPLE_WEBSITE,                                     /**< homepage       */	plugin_load,                                      /**< load           */	NULL,                                             /**< unload         */	NULL,                                             /**< destroy        */	NULL,                                             /**< ui_info        */	NULL,                                             /**< extra_info     */	&prefs_info,                                      /**< prefs_info     */	NULL,	/* padding */	NULL,	NULL,	NULL,	NULL};static voidinit_plugin(PurplePlugin *plugin){	purple_prefs_add_none("/plugins/core/statenotify");	purple_prefs_add_bool("/plugins/core/statenotify/notify_away", TRUE);	purple_prefs_add_bool("/plugins/core/statenotify/notify_idle", TRUE);	purple_prefs_add_bool("/plugins/core/statenotify/notify_signon", TRUE);}PURPLE_INIT_PLUGIN(statenotify, init_plugin, info)

⌨️ 快捷键说明

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