diff pidgin-twitter.c @ 194:1495b478680b

tentative support for jisko.
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Sat, 09 Aug 2008 04:47:18 +0900
parents 64007ccd2039
children b436d72447e8
line wrap: on
line diff
--- a/pidgin-twitter.c	Tue Aug 05 23:24:50 2008 +0900
+++ b/pidgin-twitter.c	Sat Aug 09 04:47:18 2008 +0900
@@ -25,9 +25,10 @@
 /* globals */
 /***********/
 #define NUM_REGP 10
+#define NUM_SERVICES 4          /* twitter, wassr, identica, jisko. */
 static GRegex *regp[NUM_REGP];
 static gboolean suppress_oops = FALSE;
-static GHashTable *icon_hash[3]; /* twitter, wassr, identica. */
+static GHashTable *icon_hash[NUM_SERVICES];
 static GHashTable *conv_hash = NULL;
 static GList *statuseslist = NULL;
 static GList *postedlist = NULL;
@@ -848,6 +849,9 @@
         case identica_service:
             format = RECIPIENT_FORMAT_IDENTICA;
             break;
+        case jisko_service:
+            format = RECIPIENT_FORMAT_JISKO;
+            break;
         default:
             twitter_debug("unknown service\n");
             break;
@@ -870,6 +874,9 @@
         case identica_service:
             format = SENDER_FORMAT_IDENTICA;
             break;
+        case jisko_service:
+            format = SENDER_FORMAT_JISKO;
+            break;
         default:
             twitter_debug("unknown service\n");
             break;
@@ -996,6 +1003,9 @@
         case identica_service:
             screen_name = purple_prefs_get_string(OPT_SCREEN_NAME_IDENTICA);
             break;
+        case jisko_service:
+            screen_name = purple_prefs_get_string(OPT_SCREEN_NAME_JISKO);
+            break;
         }
 
         if (screen_name) {
@@ -1056,6 +1066,7 @@
 
     switch(service) {
     case twitter_service:
+    case jisko_service:
         count = gtk_text_buffer_get_char_count(textbuffer) +
             (unsigned int)g_utf8_strlen(new_text, -1);
         markup = g_markup_printf_escaped("<span color=\"%s\">%u</span>",
@@ -1109,6 +1120,7 @@
 
     switch(service) {
     case twitter_service:
+    case jisko_service:
         count= gtk_text_buffer_get_char_count(textbuffer) -
             (gtk_text_iter_get_offset(end_pos) -
              gtk_text_iter_get_offset(start_pos));
@@ -1167,10 +1179,9 @@
         gint service = get_service_type(conv);
         switch(service) {
         case twitter_service:
-            detach_from_conv(conv, NULL);
-            break;
         case wassr_service:
         case identica_service:
+        case jisko_service:
             detach_from_conv(conv, NULL);
             break;
         default:
@@ -1280,10 +1291,9 @@
         /* only attach to twitter conversation window */
         switch(service) {
         case twitter_service:
-            attach_to_conv(conv, NULL);
-            break;
         case wassr_service:
         case identica_service:
+        case jisko_service:
             attach_to_conv(conv, NULL);
             break;
         default:
@@ -1425,6 +1435,30 @@
     return is_identica_account(account, name);
 }
 
+static gboolean
+is_jisko_account(PurpleAccount *account, const char *name)
+{
+    const gchar *proto = purple_account_get_protocol_id(account);
+
+    if(g_strstr_len(name,  16, "bot@jisko.net") &&
+       g_strstr_len(proto, 11, "prpl-jabber")) {
+        return TRUE;
+    }
+
+    return FALSE;
+}
+
+static gboolean
+is_jisko_conv(PurpleConversation *conv)
+{
+    g_return_val_if_fail(conv != NULL, FALSE);
+
+    const char *name = purple_conversation_get_name(conv);
+    PurpleAccount *account = purple_conversation_get_account(conv);
+
+    return is_jisko_account(account, name);
+}
+
 static gint
 get_service_type(PurpleConversation *conv)
 {
@@ -1438,6 +1472,8 @@
         service = wassr_service;
     else if(is_identica_conv(conv))
         service = identica_service;
+    else if(is_jisko_conv(conv))
+        service = jisko_service;
 
     return service;
 }
@@ -1464,6 +1500,7 @@
         break;
     case wassr_service:
     case identica_service:
+    case jisko_service:
         attach_to_conv(conv, NULL);
         break;
     default:
@@ -1500,6 +1537,9 @@
     case identica_service:
         hash = icon_hash[identica_service];
         break;
+    case jisko_service:
+        hash = icon_hash[jisko_service];
+        break;
     default:
         twitter_debug("unknown service\n");
         break;
@@ -1557,7 +1597,7 @@
         return FALSE;
     }
 
-    /* if we use api, discard incoming IM message. XXX too wild? */
+    /* if we use api, discard all incoming IM messages. */
     if(purple_prefs_get_bool(OPT_API_BASE_POST)) {
         g_free(*sender); *sender = NULL;
         g_free(*buffer); *buffer = NULL;
@@ -1637,6 +1677,9 @@
     case identica_service:
         hash = icon_hash[identica_service];
         break;
+    case jisko_service:
+        hash = icon_hash[jisko_service];
+        break;
     default:
         twitter_debug("unknown service\n");
     }
@@ -1697,6 +1740,9 @@
     case identica_service:
         hash = icon_hash[identica_service];
         break;
+    case jisko_service:
+        hash = icon_hash[jisko_service];
+        break;
     default:
         twitter_debug("unknown service\n");
         break;
@@ -1883,6 +1929,9 @@
     case identica_service:
         hash = icon_hash[identica_service];
         break;
+    case jisko_service:
+        hash = icon_hash[jisko_service];
+        break;
     default:
         twitter_debug("unknown service\n");
     }
@@ -1954,6 +2003,9 @@
         case identica_service:
             suffix = "identica";
             break;
+        case jisko_service:
+            suffix = "jisko";
+            break;
         default:
             twitter_debug("unknown service\n");
             break;
@@ -2018,6 +2070,10 @@
         suffix = "identica";
         hash = icon_hash[identica_service];
         break;
+    case jisko_service:
+        suffix = "jisko";
+        hash = icon_hash[jisko_service];
+        break;
     default:
         twitter_debug("unknown service\n");
         break;
@@ -2106,6 +2162,11 @@
     case identica_service:
         url = g_strdup_printf("http://identi.ca/%s", user_name);
         break;
+    case jisko_service:
+        url = g_strdup_printf("http://jisko.net/users/%s/img/avatar/thumb_side.png",
+                              user_name);
+        data->img_type = "png";
+        break;
     default:
         twitter_debug("unknown service\n");
         break;
@@ -2150,6 +2211,9 @@
     case identica_service:
         hash = icon_hash[identica_service];
         break;
+    case jisko_service:
+        hash = icon_hash[jisko_service];
+        break;
     default:
         twitter_debug("unknown service\n");
         break;
@@ -2249,6 +2313,9 @@
     case identica_service:
         hash = icon_hash[identica_service];
         break;
+    case jisko_service:
+        hash = icon_hash[jisko_service];
+        break;
     default:
         twitter_debug("unknown service\n");
         break;
@@ -2400,7 +2467,7 @@
     regp[IMAGE_IDENTICA] = g_regex_new(P_IMAGE_IDENTICA, 0, 0, NULL);
     regp[IMAGE_TWITTER]  = g_regex_new(P_IMAGE_TWITTER, 0, 0, NULL);
 
-    for(i = twitter_service; i <= identica_service; i++) {
+    for(i = twitter_service; i < NUM_SERVICES; i++) {
         icon_hash[i] = g_hash_table_new_full(g_str_hash, g_str_equal,
                                               g_free, NULL);
     }
@@ -2488,7 +2555,7 @@
 
     /* remove mark list in each hash entry */
     /* cancel request that has not been finished yet */
-    for(i = twitter_service; i <= identica_service; i++) {
+    for(i = twitter_service; i < NUM_SERVICES; i++) {
         /* delete mark list and stop requeset for each hash table */
         g_hash_table_foreach(icon_hash[i],
                              (GHFunc)cleanup_hash_entry_func, NULL);
@@ -2542,7 +2609,7 @@
     int i;
 
     /* invalidate icon cache */
-    for(i = twitter_service; i <= identica_service; i++) {
+    for(i = twitter_service; i < NUM_SERVICES; i++) {
         g_hash_table_foreach(icon_hash[i],
                              (GHFunc)invalidate_icon_data_func, NULL);
     }
@@ -2677,6 +2744,13 @@
     g_signal_connect(e, "changed",
                      G_CALLBACK(text_changed_cb), &e);
 
+    e = GTK_WIDGET(gtk_builder_get_object (builder, "account_jisko"));
+    g_object_set_data(G_OBJECT(e), "pref", OPT_SCREEN_NAME_JISKO);
+    text = purple_prefs_get_string(OPT_SCREEN_NAME_JISKO);
+    gtk_entry_set_text(GTK_ENTRY(e), text);
+    g_signal_connect(e, "changed",
+                     G_CALLBACK(text_changed_cb), &e);
+
     e = GTK_WIDGET(gtk_builder_get_object (builder, "account_api"));
     g_object_set_data(G_OBJECT(e), "pref", OPT_API_BASE_POST);
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(e),