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)