Re: Pidgin Notification Script or Plugin
c++/plugin: (second part)
Code:
static void
notify_buddy_signon_cb (PurpleBuddy *buddy,
gpointer data)
{
gchar *tr_name, *title;
gboolean blocked;
g_return_if_fail (buddy);
if (!purple_prefs_get_bool ("/plugins/gtk/hildonnotify/signon"))
return;
if (g_list_find (just_signed_on_accounts, buddy->account))
return;
blocked = purple_prefs_get_bool ("/plugins/gtk/hildonnotify/blocked");
if (!purple_privacy_check (buddy->account, buddy->name) && blocked)
return;
if (!should_notify_unavailable (purple_buddy_get_account (buddy)))
return;
tr_name = truncate_escape_string (best_name (buddy), 25);
title = g_strdup_printf (_("%s signed on"), tr_name);
notify (title, NULL, buddy);
g_free (tr_name);
g_free (title);
}
static void
notify_buddy_signoff_cb (PurpleBuddy *buddy,
gpointer data)
{
gchar *tr_name, *title;
gboolean blocked;
g_return_if_fail (buddy);
if (!purple_prefs_get_bool ("/plugins/gtk/hildonnotify/signoff"))
return;
if (g_list_find (just_signed_on_accounts, buddy->account))
return;
blocked = purple_prefs_get_bool ("/plugins/gtk/hildonnotify/blocked");
if (!purple_privacy_check (buddy->account, buddy->name) && blocked)
return;
if (!should_notify_unavailable (purple_buddy_get_account (buddy)))
return;
tr_name = truncate_escape_string (best_name (buddy), 25);
title = g_strdup_printf (_("%s signed off"), tr_name);
notify (title, NULL, buddy);
g_free (tr_name);
g_free (title);
}
static void
notify_msg_sent (PurpleAccount *account,
const gchar *sender,
const gchar *message)
{
PurpleBuddy *buddy;
gchar *title, *body, *tr_name;
gboolean blocked;
buddy = purple_find_buddy (account, sender);
if (!buddy)
return;
blocked = purple_prefs_get_bool ("/plugins/gtk/hildonnotify/blocked");
if (!purple_privacy_check(account, sender) && blocked)
return;
tr_name = truncate_escape_string (best_name (buddy), 25);
title = g_strdup_printf (_("%s says:"), tr_name);
body = purple_markup_strip_html (message);
notify (title, body, buddy);
g_free (tr_name);
g_free (title);
g_free (body);
}
static void
notify_new_message_cb (PurpleAccount *account,
const gchar *sender,
const gchar *message,
int flags,
gpointer data)
{
PurpleConversation *conv;
if (!purple_prefs_get_bool ("/plugins/gtk/hildonnotify/newmsg"))
return;
conv = purple_find_conversation_with_account (PURPLE_CONV_TYPE_IM, sender, account);
#ifndef DEBUG /* in debug mode, always show notifications */
if (conv && purple_conversation_has_focus (conv)) {
purple_debug_info (PLUGIN_ID, "Conversation has focus 0x%x\n", conv);
return;
}
#endif
if (conv && purple_prefs_get_bool ("/plugins/gtk/hildonnotify/newconvonly")) {
purple_debug_info (PLUGIN_ID, "Conversation is not new 0x%x\n", conv);
return;
}
if (!should_notify_unavailable (account))
return;
notify_msg_sent (account, sender, message);
}
static void
notify_chat_nick (PurpleAccount *account,
const gchar *sender,
const gchar *message,
PurpleConversation *conv,
gpointer data)
{
gchar *nick;
nick = (gchar *)purple_conv_chat_get_nick (PURPLE_CONV_CHAT(conv));
if (nick && !strcmp (sender, nick))
return;
if (!g_strstr_len (message, strlen(message), nick))
return;
notify_msg_sent (account, sender, message);
}
static gboolean
plugin_load (PurplePlugin *plugin)
{
void *conv_handle, *blist_handle, *conn_handle;
if (!notify_is_initted () && !notify_init ("Pidgin")) {
purple_debug_error (PLUGIN_ID, "hildonnotify not running!\n");
return FALSE;
}
conv_handle = purple_conversations_get_handle ();
blist_handle = purple_blist_get_handle ();
conn_handle = purple_connections_get_handle();
buddy_hash = g_hash_table_new (NULL, NULL);
purple_signal_connect (blist_handle, "buddy-signed-on", plugin,
PURPLE_CALLBACK(notify_buddy_signon_cb), NULL);
purple_signal_connect (blist_handle, "buddy-signed-off", plugin,
PURPLE_CALLBACK(notify_buddy_signoff_cb), NULL);
purple_signal_connect (conv_handle, "received-im-msg", plugin,
PURPLE_CALLBACK(notify_new_message_cb), NULL);
purple_signal_connect (conv_handle, "received-chat-msg", plugin,
PURPLE_CALLBACK(notify_chat_nick), NULL);
/* used just to not display the flood of guifications we'd get */
purple_signal_connect (conn_handle, "signed-on", plugin,
PURPLE_CALLBACK(event_connection_throttle), NULL);
return TRUE;
}
static gboolean
plugin_unload (PurplePlugin *plugin)
{
void *conv_handle, *blist_handle, *conn_handle;
conv_handle = purple_conversations_get_handle ();
blist_handle = purple_blist_get_handle ();
conn_handle = purple_connections_get_handle();
purple_signal_disconnect (blist_handle, "buddy-signed-on", plugin,
PURPLE_CALLBACK(notify_buddy_signon_cb));
purple_signal_disconnect (blist_handle, "buddy-signed-off", plugin,
PURPLE_CALLBACK(notify_buddy_signoff_cb));
purple_signal_disconnect (conv_handle, "received-im-msg", plugin,
PURPLE_CALLBACK(notify_new_message_cb));
purple_signal_disconnect (conv_handle, "received-chat-msg", plugin,
PURPLE_CALLBACK(notify_chat_nick));
purple_signal_disconnect (conn_handle, "signed-on", plugin,
PURPLE_CALLBACK(event_connection_throttle));
g_hash_table_destroy (buddy_hash);
notify_uninit ();
return TRUE;
}
static PurplePluginUiInfo prefs_info = {
get_plugin_pref_frame,
0, /* page num (Reserved) */
NULL /* frame (Reserved) */
};
static PurplePluginInfo info = {
PURPLE_PLUGIN_MAGIC, /* api version */
PURPLE_MAJOR_VERSION,
PURPLE_MINOR_VERSION,
PURPLE_PLUGIN_STANDARD, /* type */
0, /* ui requirement */
0, /* flags */
NULL, /* dependencies */
PURPLE_PRIORITY_DEFAULT, /* priority */
PLUGIN_ID, /* id */
NULL, /* name */
VERSION, /* version */
NULL, /* summary */
NULL, /* description */
"Bastian Modauer <b666mg@googlemail.com>", /* author */
"http://talk.maemo.org/showthread.php?p=732839", /* homepage */
plugin_load, /* load */
plugin_unload, /* unload */
NULL, /* destroy */
NULL, /* ui info */
NULL, /* extra info */
&prefs_info /* prefs info */
};
static void
init_plugin (PurplePlugin *plugin)
{
bindtextdomain (PACKAGE, LOCALEDIR);
bind_textdomain_codeset (PACKAGE, "UTF-8");
info.name = _("hildonnotify Popups");
info.summary = _("Displays popups via hildonnotify.");
info.description = _("Pidgin-hildonnotify:\nDisplays popups via hildonnotify.");
purple_prefs_add_none ("/plugins/gtk/hildonnotify");
purple_prefs_add_bool ("/plugins/gtk/hildonnotify/newmsg", TRUE);
purple_prefs_add_bool ("/plugins/gtk/hildonnotify/blocked", TRUE);
purple_prefs_add_bool ("/plugins/gtk/hildonnotify/newconvonly", FALSE);
purple_prefs_add_bool ("/plugins/gtk/hildonnotify/signon", TRUE);
purple_prefs_add_bool ("/plugins/gtk/hildonnotify/signoff", FALSE);
purple_prefs_add_bool ("/plugins/gtk/hildonnotify/only_available", FALSE);
}
PURPLE_INIT_PLUGIN(notify, init_plugin, info)
|