# HG changeset patch # User Yoshiki Yazawa # Date 1218224838 -32400 # Node ID 1495b478680b0b55de989b3ea95756210f33dbab # Parent c76cd73cd2e6663c1416c597e658c8733fc0821f tentative support for jisko. diff -r c76cd73cd2e6 -r 1495b478680b pidgin-twitter.c --- 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("%u", @@ -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), diff -r c76cd73cd2e6 -r 1495b478680b pidgin-twitter.h --- a/pidgin-twitter.h Tue Aug 05 23:24:50 2008 +0900 +++ b/pidgin-twitter.h Sat Aug 09 04:47:18 2008 +0900 @@ -43,7 +43,8 @@ unknown_service = -1, twitter_service, wassr_service, - identica_service + identica_service, + jisko_service }; /* container to hold icon data */ @@ -109,6 +110,7 @@ #define OPT_SCREEN_NAME_TWITTER OPT_PIDGINTWITTER "/screen_name_twitter" #define OPT_SCREEN_NAME_WASSR OPT_PIDGINTWITTER "/screen_name_wassr" #define OPT_SCREEN_NAME_IDENTICA OPT_PIDGINTWITTER "/screen_name_identica" +#define OPT_SCREEN_NAME_JISKO OPT_PIDGINTWITTER "/screen_name_jisko" #define OPT_PASSWORD_TWITTER OPT_PIDGINTWITTER "/password_twitter" #define OPT_SHOW_ICON OPT_PIDGINTWITTER "/show_icon" #define OPT_ICON_SIZE OPT_PIDGINTWITTER "/icon_size" @@ -125,6 +127,8 @@ #define SENDER_FORMAT_WASSR "%s%s: " #define RECIPIENT_FORMAT_IDENTICA "@%s" #define SENDER_FORMAT_IDENTICA "%s%s: " +#define RECIPIENT_FORMAT_JISKO "@%s" +#define SENDER_FORMAT_JISKO "%s%s: " #define CHANNEL_FORMAT_WASSR "%s%s " #define DEFAULT_LIST "(list of users: separated with ' ,:;')" #define OOPS_MESSAGE "Oops! Your update was over 140 characters. We sent the short version to your friends (they can view the entire update on the web).
" @@ -132,7 +136,7 @@ /* patterns */ #define P_RECIPIENT "@([A-Za-z0-9_]+)" -#define P_SENDER "^(\\r?\\n?)\\s*([A-Za-z0-9_]+): " +#define P_SENDER "^(\\r?\\n?)\\s*([A-Za-z0-9_]+)(?:\\(.+\\))?: " #define P_COMMAND "^(?:\\s*)([dDfFgGlLmMnNtTwW]{1}\\s+[A-Za-z0-9_]+)(?:\\s*\\Z)" #define P_PSEUDO "^\\s*(?:[\"#$%&'()*+,\\-./:;<=>?\\[\\\\\\]_`{|}~]|[^\\s\\x21-\\x7E])*([dDfFgGlLmMnNtTwW]{1})(?:\\Z|\\s+|[^\\x21-\\x7E]+\\Z)" #define P_USER "^\\(.+?\\)\\s*([A-Za-z0-9_]+):" @@ -191,6 +195,8 @@ static gboolean is_wassr_conv(PurpleConversation *conv); static gboolean is_identica_account(PurpleAccount *account, const char *name); static gboolean is_identica_conv(PurpleConversation *conv); +static gboolean is_jisko_account(PurpleAccount *account, const char *name); +static gboolean is_jisko_conv(PurpleConversation *conv); static void conv_created_cb(PurpleConversation *conv, gpointer null); static void deleting_conv_cb(PurpleConversation *conv); static gboolean receiving_im_cb(PurpleAccount *account, char **sender, char **buffer, PurpleConversation *conv, PurpleMessageFlags *flags, void *data); diff -r c76cd73cd2e6 -r 1495b478680b prefs.ui --- a/prefs.ui Tue Aug 05 23:24:50 2008 +0900 +++ b/prefs.ui Sat Aug 09 04:47:18 2008 +0900 @@ -188,6 +188,47 @@ + + True + + + True + 20 + + + True + 0 + jisko + 10 + + + + + + + True + 1 + 4 + + + True + True + 20 + + + + + False + False + 1 + + + + + 4 + + + True 8 @@ -204,7 +245,7 @@ - 4 + 5 @@ -223,7 +264,7 @@ - 5 + 6 @@ -267,7 +308,7 @@ - 6 + 7 @@ -336,7 +377,7 @@ False - 7 + 8 @@ -498,46 +539,41 @@ True 4 - - True - - - - - - 2 - 3 - - - + + + + + + + + + + + + + - - True - - - - - - 1 - 2 - - + + + + - + + + + True - 20 + 40 - + True - pixel + Icon size - 3 - 4 @@ -564,17 +600,46 @@ - + True - 40 + 20 - + True - Icon size + pixel + 3 + 4 + + + + + + + True + + + + + + 1 + 2 + + + + + + True + + + + + + 2 + 3 @@ -629,72 +694,60 @@ True 6 - - True - - - - - - 1 - 2 - - + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + True - 40 + 20 - + True - Update every + days + 5 + 6 - - True - 4 - - - True - True - 1 - True - True - - - - - 2 - 3 - - - - - - - True - - - True - times or - - - - - 3 - 4 - - - - True 4 @@ -717,23 +770,71 @@ - + True - 20 - + True - days + times or + + + + + 3 + 4 + + + + + + True + 4 + + + True + True + 1 + True + True - 5 - 6 + 2 + 3 + + + True + 40 + + + True + Update every + + + + + + + + + + + True + + + + + + 1 + 2 + + + False