comparison pidgin-twitter.c @ 200:9a2d727f39b4

removed jisko support as a protest to their expulsion policy.
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Mon, 11 Aug 2008 14:31:54 +0900
parents 5ddf8bee768d
children 0aeeafe37ef7
comparison
equal deleted inserted replaced
199:5ddf8bee768d 200:9a2d727f39b4
22 22
23 23
24 /***********/ 24 /***********/
25 /* globals */ 25 /* globals */
26 /***********/ 26 /***********/
27 #define NUM_REGPS 12 27 #define NUM_REGPS 11
28 #define NUM_SERVICES 4 /* twitter, wassr, identica, jisko. */ 28 #define NUM_SERVICES 3 /* twitter, wassr, identica. */
29 static GRegex *regp[NUM_REGPS]; 29 static GRegex *regp[NUM_REGPS];
30 static gboolean suppress_oops = FALSE; 30 static gboolean suppress_oops = FALSE;
31 static GHashTable *icon_hash[NUM_SERVICES]; 31 static GHashTable *icon_hash[NUM_SERVICES];
32 static GHashTable *conv_hash = NULL; 32 static GHashTable *conv_hash = NULL;
33 static GList *statuseslist = NULL; 33 static GList *statuseslist = NULL;
847 format = RECIPIENT_FORMAT_WASSR; 847 format = RECIPIENT_FORMAT_WASSR;
848 break; 848 break;
849 case identica_service: 849 case identica_service:
850 format = RECIPIENT_FORMAT_IDENTICA; 850 format = RECIPIENT_FORMAT_IDENTICA;
851 break; 851 break;
852 case jisko_service:
853 format = RECIPIENT_FORMAT_JISKO;
854 break;
855 default: 852 default:
856 twitter_debug("unknown service\n"); 853 twitter_debug("unknown service\n");
857 break; 854 break;
858 } 855 }
859 g_snprintf(sub, 128, format, match, match); 856 g_snprintf(sub, 128, format, match, match);
871 case wassr_service: 868 case wassr_service:
872 format = SENDER_FORMAT_WASSR; 869 format = SENDER_FORMAT_WASSR;
873 break; 870 break;
874 case identica_service: 871 case identica_service:
875 format = SENDER_FORMAT_IDENTICA; 872 format = SENDER_FORMAT_IDENTICA;
876 break;
877 case jisko_service:
878 format = SENDER_FORMAT_JISKO;
879 break; 873 break;
880 default: 874 default:
881 twitter_debug("unknown service\n"); 875 twitter_debug("unknown service\n");
882 break; 876 break;
883 } 877 }
1001 screen_name = purple_prefs_get_string(OPT_SCREEN_NAME_WASSR); 995 screen_name = purple_prefs_get_string(OPT_SCREEN_NAME_WASSR);
1002 break; 996 break;
1003 case identica_service: 997 case identica_service:
1004 screen_name = purple_prefs_get_string(OPT_SCREEN_NAME_IDENTICA); 998 screen_name = purple_prefs_get_string(OPT_SCREEN_NAME_IDENTICA);
1005 break; 999 break;
1006 case jisko_service:
1007 screen_name = purple_prefs_get_string(OPT_SCREEN_NAME_JISKO);
1008 break;
1009 } 1000 }
1010 1001
1011 if (screen_name) { 1002 if (screen_name) {
1012 m = g_strdup_printf("%s: %s", screen_name, *buffer); 1003 m = g_strdup_printf("%s: %s", screen_name, *buffer);
1013 g_free(*buffer); 1004 g_free(*buffer);
1085 if(text) 1076 if(text)
1086 bytes = strlen(text) + new_text_length; 1077 bytes = strlen(text) + new_text_length;
1087 g_free(text); 1078 g_free(text);
1088 markup = g_markup_printf_escaped("<span color=\"%s\">%u</span>", 1079 markup = g_markup_printf_escaped("<span color=\"%s\">%u</span>",
1089 bytes <= 140 ? "black" : "red", bytes); 1080 bytes <= 140 ? "black" : "red", bytes);
1090 break;
1091 case jisko_service:
1092 gtk_text_buffer_get_start_iter(textbuffer, &head);
1093 gtk_text_buffer_get_end_iter(textbuffer, &tail);
1094
1095 text = gtk_text_buffer_get_text(textbuffer, &head, &tail, TRUE);
1096 if(text)
1097 bytes = strlen(text) + new_text_length;
1098 g_free(text);
1099 markup = g_markup_printf_escaped("<span color=\"%s\">%u</span>",
1100 bytes >= 5 && bytes <= 140 ?
1101 "black" : "red", bytes);
1102 break; 1081 break;
1103 default: 1082 default:
1104 twitter_debug("unknown service\n"); 1083 twitter_debug("unknown service\n");
1105 break; 1084 break;
1106 } 1085 }
1160 bytes -= strlen(text); 1139 bytes -= strlen(text);
1161 g_free(text); 1140 g_free(text);
1162 1141
1163 markup = g_markup_printf_escaped("<span color=\"%s\">%u</span>", 1142 markup = g_markup_printf_escaped("<span color=\"%s\">%u</span>",
1164 bytes <= 140 ? "black" : "red", bytes); 1143 bytes <= 140 ? "black" : "red", bytes);
1165 break;
1166 case jisko_service:
1167 gtk_text_buffer_get_start_iter(textbuffer, &head);
1168 gtk_text_buffer_get_end_iter(textbuffer, &tail);
1169
1170 text = gtk_text_buffer_get_text(textbuffer,
1171 &head, &tail, TRUE);
1172 if(text)
1173 bytes = strlen(text);
1174 g_free(text);
1175
1176 text = gtk_text_buffer_get_text(textbuffer,
1177 start_pos, end_pos, TRUE);
1178 if(text)
1179 bytes -= strlen(text);
1180 g_free(text);
1181
1182 markup = g_markup_printf_escaped("<span color=\"%s\">%u</span>",
1183 bytes >= 5 && bytes <= 140 ?
1184 "black" : "red", bytes);
1185 break; 1144 break;
1186 default: 1145 default:
1187 twitter_debug("unknown service\n"); 1146 twitter_debug("unknown service\n");
1188 break; 1147 break;
1189 } 1148 }
1209 gint service = get_service_type(conv); 1168 gint service = get_service_type(conv);
1210 switch(service) { 1169 switch(service) {
1211 case twitter_service: 1170 case twitter_service:
1212 case wassr_service: 1171 case wassr_service:
1213 case identica_service: 1172 case identica_service:
1214 case jisko_service:
1215 detach_from_conv(conv, NULL); 1173 detach_from_conv(conv, NULL);
1216 break; 1174 break;
1217 default: 1175 default:
1218 twitter_debug("unknown service\n"); 1176 twitter_debug("unknown service\n");
1219 break; 1177 break;
1321 /* only attach to twitter conversation window */ 1279 /* only attach to twitter conversation window */
1322 switch(service) { 1280 switch(service) {
1323 case twitter_service: 1281 case twitter_service:
1324 case wassr_service: 1282 case wassr_service:
1325 case identica_service: 1283 case identica_service:
1326 case jisko_service:
1327 attach_to_conv(conv, NULL); 1284 attach_to_conv(conv, NULL);
1328 break; 1285 break;
1329 default: 1286 default:
1330 twitter_debug("unknown service\n"); 1287 twitter_debug("unknown service\n");
1331 break; 1288 break;
1463 PurpleAccount *account = purple_conversation_get_account(conv); 1420 PurpleAccount *account = purple_conversation_get_account(conv);
1464 1421
1465 return is_identica_account(account, name); 1422 return is_identica_account(account, name);
1466 } 1423 }
1467 1424
1468 static gboolean
1469 is_jisko_account(PurpleAccount *account, const char *name)
1470 {
1471 const gchar *proto = purple_account_get_protocol_id(account);
1472
1473 if(g_strstr_len(name, 16, "bot@jisko.net") &&
1474 g_strstr_len(proto, 11, "prpl-jabber")) {
1475 return TRUE;
1476 }
1477
1478 return FALSE;
1479 }
1480
1481 static gboolean
1482 is_jisko_conv(PurpleConversation *conv)
1483 {
1484 g_return_val_if_fail(conv != NULL, FALSE);
1485
1486 const char *name = purple_conversation_get_name(conv);
1487 PurpleAccount *account = purple_conversation_get_account(conv);
1488
1489 return is_jisko_account(account, name);
1490 }
1491
1492 static gint 1425 static gint
1493 get_service_type(PurpleConversation *conv) 1426 get_service_type(PurpleConversation *conv)
1494 { 1427 {
1495 gint service = unknown_service; 1428 gint service = unknown_service;
1496 1429
1500 service = twitter_service; 1433 service = twitter_service;
1501 else if(is_wassr_conv(conv)) 1434 else if(is_wassr_conv(conv))
1502 service = wassr_service; 1435 service = wassr_service;
1503 else if(is_identica_conv(conv)) 1436 else if(is_identica_conv(conv))
1504 service = identica_service; 1437 service = identica_service;
1505 else if(is_jisko_conv(conv))
1506 service = jisko_service;
1507 1438
1508 return service; 1439 return service;
1509 } 1440 }
1510 1441
1511 static void 1442 static void
1528 source.conv = conv; 1459 source.conv = conv;
1529 attach_to_conv(conv, NULL); 1460 attach_to_conv(conv, NULL);
1530 break; 1461 break;
1531 case wassr_service: 1462 case wassr_service:
1532 case identica_service: 1463 case identica_service:
1533 case jisko_service:
1534 attach_to_conv(conv, NULL); 1464 attach_to_conv(conv, NULL);
1535 break; 1465 break;
1536 default: 1466 default:
1537 twitter_debug("unknown service\n"); 1467 twitter_debug("unknown service\n");
1538 break; 1468 break;
1564 case wassr_service: 1494 case wassr_service:
1565 hash = icon_hash[wassr_service]; 1495 hash = icon_hash[wassr_service];
1566 break; 1496 break;
1567 case identica_service: 1497 case identica_service:
1568 hash = icon_hash[identica_service]; 1498 hash = icon_hash[identica_service];
1569 break;
1570 case jisko_service:
1571 hash = icon_hash[jisko_service];
1572 break; 1499 break;
1573 default: 1500 default:
1574 twitter_debug("unknown service\n"); 1501 twitter_debug("unknown service\n");
1575 break; 1502 break;
1576 } 1503 }
1705 hash = icon_hash[wassr_service]; 1632 hash = icon_hash[wassr_service];
1706 break; 1633 break;
1707 case identica_service: 1634 case identica_service:
1708 hash = icon_hash[identica_service]; 1635 hash = icon_hash[identica_service];
1709 break; 1636 break;
1710 case jisko_service:
1711 hash = icon_hash[jisko_service];
1712 break;
1713 default: 1637 default:
1714 twitter_debug("unknown service\n"); 1638 twitter_debug("unknown service\n");
1715 } 1639 }
1716 1640
1717 if(hash) 1641 if(hash)
1753 case wassr_service: 1677 case wassr_service:
1754 hash = icon_hash[wassr_service]; 1678 hash = icon_hash[wassr_service];
1755 break; 1679 break;
1756 case identica_service: 1680 case identica_service:
1757 hash = icon_hash[identica_service]; 1681 hash = icon_hash[identica_service];
1758 break;
1759 case jisko_service:
1760 hash = icon_hash[jisko_service];
1761 break; 1682 break;
1762 default: 1683 default:
1763 twitter_debug("unknown service\n"); 1684 twitter_debug("unknown service\n");
1764 break; 1685 break;
1765 } 1686 }
1814 } 1735 }
1815 else if(service == identica_service) { 1736 else if(service == identica_service) {
1816 data = (icon_data *)g_hash_table_lookup( 1737 data = (icon_data *)g_hash_table_lookup(
1817 icon_hash[identica_service], user_name); 1738 icon_hash[identica_service], user_name);
1818 regp_id = IMAGE_IDENTICA; 1739 regp_id = IMAGE_IDENTICA;
1819 }
1820 else if(service == jisko_service) {
1821 data = (icon_data *)g_hash_table_lookup(
1822 icon_hash[jisko_service], user_name);
1823 regp_id = IMAGE_JISKO;
1824 } 1740 }
1825 1741
1826 if(!url_text) { 1742 if(!url_text) {
1827 if(data) { 1743 if(data) {
1828 data->requested = FALSE; 1744 data->requested = FALSE;
1981 case wassr_service: 1897 case wassr_service:
1982 hash = icon_hash[wassr_service]; 1898 hash = icon_hash[wassr_service];
1983 break; 1899 break;
1984 case identica_service: 1900 case identica_service:
1985 hash = icon_hash[identica_service]; 1901 hash = icon_hash[identica_service];
1986 break;
1987 case jisko_service:
1988 hash = icon_hash[jisko_service];
1989 break; 1902 break;
1990 default: 1903 default:
1991 twitter_debug("unknown service\n"); 1904 twitter_debug("unknown service\n");
1992 } 1905 }
1993 1906
2056 suffix = "wassr"; 1969 suffix = "wassr";
2057 break; 1970 break;
2058 case identica_service: 1971 case identica_service:
2059 suffix = "identica"; 1972 suffix = "identica";
2060 break; 1973 break;
2061 case jisko_service:
2062 suffix = "jisko";
2063 break;
2064 default: 1974 default:
2065 twitter_debug("unknown service\n"); 1975 twitter_debug("unknown service\n");
2066 break; 1976 break;
2067 } 1977 }
2068 1978
2122 suffix = "wassr"; 2032 suffix = "wassr";
2123 break; 2033 break;
2124 case identica_service: 2034 case identica_service:
2125 suffix = "identica"; 2035 suffix = "identica";
2126 hash = icon_hash[identica_service]; 2036 hash = icon_hash[identica_service];
2127 break;
2128 case jisko_service:
2129 suffix = "jisko";
2130 hash = icon_hash[jisko_service];
2131 break; 2037 break;
2132 default: 2038 default:
2133 twitter_debug("unknown service\n"); 2039 twitter_debug("unknown service\n");
2134 break; 2040 break;
2135 } 2041 }
2212 url = g_strdup_printf("http://wassr.jp/user/%s", user_name); 2118 url = g_strdup_printf("http://wassr.jp/user/%s", user_name);
2213 break; 2119 break;
2214 case identica_service: 2120 case identica_service:
2215 url = g_strdup_printf("http://identi.ca/%s", user_name); 2121 url = g_strdup_printf("http://identi.ca/%s", user_name);
2216 break; 2122 break;
2217 case jisko_service:
2218 url = g_strdup_printf("http://jisko.net/%s", user_name);
2219 break;
2220 default: 2123 default:
2221 twitter_debug("unknown service\n"); 2124 twitter_debug("unknown service\n");
2222 break; 2125 break;
2223 } 2126 }
2224 2127
2228 gotdata->service = service; 2131 gotdata->service = service;
2229 2132
2230 /* gotdata will be released in got_icon_cb */ 2133 /* gotdata will be released in got_icon_cb */
2231 if(service == twitter_service || 2134 if(service == twitter_service ||
2232 service == wassr_service || 2135 service == wassr_service ||
2233 service == identica_service || 2136 service == identica_service) {
2234 service == jisko_service) {
2235 data->fetch_data = purple_util_fetch_url(url, TRUE, NULL, TRUE, 2137 data->fetch_data = purple_util_fetch_url(url, TRUE, NULL, TRUE,
2236 got_page_cb, gotdata); 2138 got_page_cb, gotdata);
2237 } 2139 }
2238 else { 2140 else {
2239 data->fetch_data = purple_util_fetch_url(url, TRUE, NULL, TRUE, 2141 data->fetch_data = purple_util_fetch_url(url, TRUE, NULL, TRUE,
2260 case wassr_service: 2162 case wassr_service:
2261 hash = icon_hash[wassr_service]; 2163 hash = icon_hash[wassr_service];
2262 break; 2164 break;
2263 case identica_service: 2165 case identica_service:
2264 hash = icon_hash[identica_service]; 2166 hash = icon_hash[identica_service];
2265 break;
2266 case jisko_service:
2267 hash = icon_hash[jisko_service];
2268 break; 2167 break;
2269 default: 2168 default:
2270 twitter_debug("unknown service\n"); 2169 twitter_debug("unknown service\n");
2271 break; 2170 break;
2272 } 2171 }
2362 case wassr_service: 2261 case wassr_service:
2363 hash = icon_hash[wassr_service]; 2262 hash = icon_hash[wassr_service];
2364 break; 2263 break;
2365 case identica_service: 2264 case identica_service:
2366 hash = icon_hash[identica_service]; 2265 hash = icon_hash[identica_service];
2367 break;
2368 case jisko_service:
2369 hash = icon_hash[jisko_service];
2370 break; 2266 break;
2371 default: 2267 default:
2372 twitter_debug("unknown service\n"); 2268 twitter_debug("unknown service\n");
2373 break; 2269 break;
2374 } 2270 }
2515 regp[USER_FORMATTED] = g_regex_new(P_USER_FORMATTED, G_REGEX_RAW, 0, NULL); 2411 regp[USER_FORMATTED] = g_regex_new(P_USER_FORMATTED, G_REGEX_RAW, 0, NULL);
2516 regp[CHANNEL] = g_regex_new(P_CHANNEL, 0, 0, NULL); 2412 regp[CHANNEL] = g_regex_new(P_CHANNEL, 0, 0, NULL);
2517 regp[IMAGE_TWITTER] = g_regex_new(P_IMAGE_TWITTER, 0, 0, NULL); 2413 regp[IMAGE_TWITTER] = g_regex_new(P_IMAGE_TWITTER, 0, 0, NULL);
2518 regp[IMAGE_WASSR] = g_regex_new(P_IMAGE_WASSR, 0, 0, NULL); 2414 regp[IMAGE_WASSR] = g_regex_new(P_IMAGE_WASSR, 0, 0, NULL);
2519 regp[IMAGE_IDENTICA] = g_regex_new(P_IMAGE_IDENTICA, 0, 0, NULL); 2415 regp[IMAGE_IDENTICA] = g_regex_new(P_IMAGE_IDENTICA, 0, 0, NULL);
2520 regp[IMAGE_JISKO] = g_regex_new(P_IMAGE_JISKO, 0, 0, NULL);
2521 2416
2522 for(i = twitter_service; i < NUM_SERVICES; i++) { 2417 for(i = twitter_service; i < NUM_SERVICES; i++) {
2523 icon_hash[i] = g_hash_table_new_full(g_str_hash, g_str_equal, 2418 icon_hash[i] = g_hash_table_new_full(g_str_hash, g_str_equal,
2524 g_free, NULL); 2419 g_free, NULL);
2525 } 2420 }
2794 text = purple_prefs_get_string(OPT_SCREEN_NAME_IDENTICA); 2689 text = purple_prefs_get_string(OPT_SCREEN_NAME_IDENTICA);
2795 gtk_entry_set_text(GTK_ENTRY(e), text); 2690 gtk_entry_set_text(GTK_ENTRY(e), text);
2796 g_signal_connect(e, "changed", 2691 g_signal_connect(e, "changed",
2797 G_CALLBACK(text_changed_cb), &e); 2692 G_CALLBACK(text_changed_cb), &e);
2798 2693
2799 e = GTK_WIDGET(gtk_builder_get_object (builder, "account_jisko"));
2800 g_object_set_data(G_OBJECT(e), "pref", OPT_SCREEN_NAME_JISKO);
2801 text = purple_prefs_get_string(OPT_SCREEN_NAME_JISKO);
2802 gtk_entry_set_text(GTK_ENTRY(e), text);
2803 g_signal_connect(e, "changed",
2804 G_CALLBACK(text_changed_cb), &e);
2805
2806 e = GTK_WIDGET(gtk_builder_get_object (builder, "account_api")); 2694 e = GTK_WIDGET(gtk_builder_get_object (builder, "account_api"));
2807 g_object_set_data(G_OBJECT(e), "pref", OPT_API_BASE_POST); 2695 g_object_set_data(G_OBJECT(e), "pref", OPT_API_BASE_POST);
2808 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(e), 2696 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(e),
2809 purple_prefs_get_bool(OPT_API_BASE_POST)); 2697 purple_prefs_get_bool(OPT_API_BASE_POST));
2810 g_signal_connect(e, "toggled", 2698 g_signal_connect(e, "toggled",