diff pidgin-twitter.c @ 215:6b258bdd9c49

added a feature of excluding reply to me from filter application.
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Wed, 27 Aug 2008 07:20:04 +0900
parents 148fa8a8be8e
children 55908ee1467f
line wrap: on
line diff
--- a/pidgin-twitter.c	Tue Aug 26 18:56:06 2008 +0900
+++ b/pidgin-twitter.c	Wed Aug 27 07:20:04 2008 +0900
@@ -1529,6 +1529,7 @@
 {
     GMatchInfo *match_info;
     const gchar *list = NULL;
+    gchar *screen_name = NULL;
     gchar **candidates = NULL, **candidate = NULL;
 
     g_return_if_fail(*sender != NULL);
@@ -1539,18 +1540,31 @@
     switch(service) {
     case twitter_service:
         list = purple_prefs_get_string(OPT_FILTER_TWITTER);
+        screen_name = g_strdup_printf("@%s", purple_prefs_get_string(OPT_SCREEN_NAME_TWITTER));
         break;
     case wassr_service:
         list = purple_prefs_get_string(OPT_FILTER_WASSR);
+        screen_name = g_strdup_printf("@%s", purple_prefs_get_string(OPT_SCREEN_NAME_WASSR));
         break;
     case identica_service:
         list = purple_prefs_get_string(OPT_FILTER_IDENTICA);
+        screen_name = g_strdup_printf("@%s", purple_prefs_get_string(OPT_SCREEN_NAME_IDENTICA));
         break;
     }
     g_return_if_fail(list != NULL);
     if(strstr(list, DEFAULT_LIST))
         return;
 
+    /* find @myself */
+    if(purple_prefs_get_bool(OPT_FILTER_EXCLUDE_REPLY) &&
+       strstr(plain, screen_name)) {
+        g_free(plain);
+        g_free(screen_name);
+        return;
+    }
+    else
+        g_free(screen_name);
+
     candidates = g_strsplit_set(list, " ,:;", 0);
     g_return_if_fail(candidates != NULL);
 
@@ -1566,12 +1580,12 @@
             twitter_debug("candidate = %s\n", *candidate);
             if(!strcmp(user, *candidate)) {
                 twitter_debug("match. filter %s\n", user);
-//                *flags |= PURPLE_MESSAGE_INVISIBLE; /* pidgin should handle this flag properly --yaz */
-#if 1
+                /* pidgin should handle this flag properly --yaz */
+//                *flags |= PURPLE_MESSAGE_INVISIBLE; 
+
                 /* temporal workaround */
                 g_free(*sender); *sender = NULL;
                 g_free(*buffer); *buffer = NULL;
-#endif
                 break;
             }
         }
@@ -1579,6 +1593,7 @@
         g_free(user);
         g_match_info_next(match_info, NULL);
     }
+
     g_free(plain);
     g_strfreev(candidates);
     g_match_info_free(match_info);
@@ -2874,13 +2889,20 @@
     /***************/
     /* filter page */
     /***************/
-    e = GTK_WIDGET(gtk_builder_get_object (builder, "filter_check"));
+    e = GTK_WIDGET(gtk_builder_get_object (builder, "filter_filter_check"));
     g_object_set_data(G_OBJECT(e), "pref", OPT_FILTER);
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(e),
                                  purple_prefs_get_bool(OPT_FILTER));
     g_signal_connect(e, "toggled",
                      G_CALLBACK(bool_toggled_cb), &e);
 
+    e = GTK_WIDGET(gtk_builder_get_object (builder, "filter_exclude_reply_check"));
+    g_object_set_data(G_OBJECT(e), "pref", OPT_FILTER_EXCLUDE_REPLY);
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(e),
+                                 purple_prefs_get_bool(OPT_FILTER_EXCLUDE_REPLY));
+    g_signal_connect(e, "toggled",
+                     G_CALLBACK(bool_toggled_cb), &e);
+
     e = GTK_WIDGET(gtk_builder_get_object (builder, "filter_twitter"));
     g_object_set_data(G_OBJECT(e), "pref", OPT_FILTER_TWITTER);
     text = purple_prefs_get_string(OPT_FILTER_TWITTER);
@@ -3166,6 +3188,7 @@
     purple_prefs_add_bool(OPT_LOG_OUTPUT, FALSE);
 
     purple_prefs_add_bool(OPT_FILTER, TRUE);
+    purple_prefs_add_bool(OPT_FILTER_EXCLUDE_REPLY, TRUE);
     purple_prefs_add_string(OPT_FILTER_TWITTER, DEFAULT_LIST);
     purple_prefs_add_string(OPT_FILTER_WASSR, DEFAULT_LIST);
     purple_prefs_add_string(OPT_FILTER_IDENTICA, DEFAULT_LIST);