comparison main.c @ 300:42cdddf0f747

added preliminary support for friendfeed.
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Mon, 25 May 2009 22:47:44 +0900
parents d68ed289ef69
children e17b74fdf86a
comparison
equal deleted inserted replaced
299:d68ed289ef69 300:42cdddf0f747
168 format = RECIPIENT_FORMAT_IDENTICA; 168 format = RECIPIENT_FORMAT_IDENTICA;
169 break; 169 break;
170 case jisko_service: 170 case jisko_service:
171 format = RECIPIENT_FORMAT_JISKO; 171 format = RECIPIENT_FORMAT_JISKO;
172 break; 172 break;
173 case ffeed_service:
174 format = RECIPIENT_FORMAT_FFEED;
175 break;
173 default: 176 default:
174 twitter_debug("unknown service\n"); 177 twitter_debug("unknown service\n");
175 break; 178 break;
176 } 179 }
177 g_snprintf(sub, SUBST_BUF_SIZE, format, match1 ? match1: "", match2, match2); 180 g_snprintf(sub, SUBST_BUF_SIZE, format, match1 ? match1: "", match2, match2);
178 g_free(match1); 181 g_free(match1);
179 g_free(match2); 182 g_free(match2);
180 } 183 }
181 else if(which == SENDER) { 184 else if(which == SENDER) {
182 gchar *match1 = g_match_info_fetch(match_info, 1); /*preceding CR|LF*/ 185 gchar *match1 = g_match_info_fetch(match_info, 1); /* preceding CR|LF */
183 gchar *match2 = g_match_info_fetch(match_info, 2); /* sender */ 186 gchar *match2 = g_match_info_fetch(match_info, 2); /* sender */
184 const gchar *format = NULL; 187 const gchar *format = NULL;
185 188
186 switch(service) { 189 switch(service) {
187 case twitter_service: 190 case twitter_service:
199 default: 202 default:
200 twitter_debug("unknown service\n"); 203 twitter_debug("unknown service\n");
201 break; 204 break;
202 } 205 }
203 206
207 g_snprintf(sub, SUBST_BUF_SIZE, format, match1 ? match1: "", match2, match2);
208
209 g_free(match1);
210 g_free(match2);
211 }
212 else if(which == SENDER_FFEED) {
213 gchar *match1 = g_match_info_fetch(match_info, 1); /* preceding CR|LF */
214 gchar *match2 = g_match_info_fetch(match_info, 2); /* sender */
215 const gchar *format = NULL;
216
217 format = SENDER_FORMAT_FFEED;
204 g_snprintf(sub, SUBST_BUF_SIZE, format, match1 ? match1: "", match2, match2); 218 g_snprintf(sub, SUBST_BUF_SIZE, format, match1 ? match1: "", match2, match2);
205 219
206 g_free(match1); 220 g_free(match1);
207 g_free(match2); 221 g_free(match2);
208 } 222 }
242 g_free(match); 256 g_free(match);
243 g_free(link); 257 g_free(link);
244 } 258 }
245 else if(which == EXCESS_LF) { 259 else if(which == EXCESS_LF) {
246 g_snprintf(sub, SUBST_BUF_SIZE, "%s", "\n"); 260 g_snprintf(sub, SUBST_BUF_SIZE, "%s", "\n");
261 }
262 else if(which == TRAIL_HASH) {
263 g_snprintf(sub, SUBST_BUF_SIZE, "%s", ""); /* xxx --yaz */
247 } 264 }
248 265
249 g_string_append(result, sub); 266 g_string_append(result, sub);
250 twitter_debug("sub = %s\n", sub); 267 twitter_debug("sub = %s\n", sub);
251 268
350 screen_name = purple_prefs_get_string(OPT_SCREEN_NAME_IDENTICA); 367 screen_name = purple_prefs_get_string(OPT_SCREEN_NAME_IDENTICA);
351 break; 368 break;
352 case jisko_service: 369 case jisko_service:
353 screen_name = purple_prefs_get_string(OPT_SCREEN_NAME_JISKO); 370 screen_name = purple_prefs_get_string(OPT_SCREEN_NAME_JISKO);
354 break; 371 break;
372 case ffeed_service:
373 screen_name = purple_prefs_get_string(OPT_SCREEN_NAME_FFEED);
374 break;
355 } 375 }
356 376
357 if (screen_name) { 377 if (screen_name) {
358 m = g_strdup_printf("%s: %s", screen_name, *buffer); 378 m = g_strdup_printf("%s: %s", screen_name, *buffer);
359 g_free(*buffer); 379 g_free(*buffer);
372 playsound(buffer, RECIPIENT); 392 playsound(buffer, RECIPIENT);
373 } 393 }
374 394
375 /* translate */ 395 /* translate */
376 if(purple_prefs_get_bool(OPT_TRANSLATE_SENDER)) { 396 if(purple_prefs_get_bool(OPT_TRANSLATE_SENDER)) {
377 translate(buffer, SENDER, service); 397 if(service == ffeed_service)
398 translate(buffer, SENDER_FFEED, service);
399 else
400 translate(buffer, SENDER, service);
378 } 401 }
379 if(purple_prefs_get_bool(OPT_TRANSLATE_RECIPIENT)) { 402 if(purple_prefs_get_bool(OPT_TRANSLATE_RECIPIENT)) {
380 translate(buffer, RECIPIENT, service); 403 translate(buffer, RECIPIENT, service);
381 } 404 }
382 if(service == wassr_service && 405 if(service == wassr_service &&
404 427
405 if(purple_prefs_get_bool(OPT_STRIP_EXCESS_LF)) { 428 if(purple_prefs_get_bool(OPT_STRIP_EXCESS_LF)) {
406 translate(buffer, EXCESS_LF, service); 429 translate(buffer, EXCESS_LF, service);
407 } 430 }
408 431
432 if(service == ffeed_service) {
433 translate(buffer, TRAIL_HASH, service);
434 }
435
409 return FALSE; 436 return FALSE;
410 } 437 }
411 438
412 static void 439 static void
413 insert_text_cb(GtkTextBuffer *textbuffer, GtkTextIter *position, 440 insert_text_cb(GtkTextBuffer *textbuffer, GtkTextIter *position,
425 452
426 switch(service) { 453 switch(service) {
427 case twitter_service: 454 case twitter_service:
428 case identica_service: 455 case identica_service:
429 case jisko_service: 456 case jisko_service:
457 case ffeed_service:
430 count = gtk_text_buffer_get_char_count(textbuffer) + 458 count = gtk_text_buffer_get_char_count(textbuffer) +
431 (unsigned int)g_utf8_strlen(new_text, -1); 459 (unsigned int)g_utf8_strlen(new_text, -1);
432 markup = g_markup_printf_escaped("<span color=\"%s\">%u</span>", 460 markup = g_markup_printf_escaped("<span color=\"%s\">%u</span>",
433 count <= 140 ? "black" : "red", count); 461 count <= 140 ? "black" : "red", count);
434 break; 462 break;
466 494
467 switch(service) { 495 switch(service) {
468 case twitter_service: 496 case twitter_service:
469 case identica_service: 497 case identica_service:
470 case jisko_service: 498 case jisko_service:
499 case ffeed_service:
471 count= gtk_text_buffer_get_char_count(textbuffer) - 500 count= gtk_text_buffer_get_char_count(textbuffer) -
472 (gtk_text_iter_get_offset(end_pos) - 501 (gtk_text_iter_get_offset(end_pos) -
473 gtk_text_iter_get_offset(start_pos)); 502 gtk_text_iter_get_offset(start_pos));
474 markup = g_markup_printf_escaped("<span color=\"%s\">%u</span>", 503 markup = g_markup_printf_escaped("<span color=\"%s\">%u</span>",
475 count <= 140 ? "black" : "red", count); 504 count <= 140 ? "black" : "red", count);
508 switch(service) { 537 switch(service) {
509 case twitter_service: 538 case twitter_service:
510 case wassr_service: 539 case wassr_service:
511 case identica_service: 540 case identica_service:
512 case jisko_service: 541 case jisko_service:
542 case ffeed_service:
513 detach_from_conv(conv, NULL); 543 detach_from_conv(conv, NULL);
514 break; 544 break;
515 default: 545 default:
516 twitter_debug("unknown service\n"); 546 twitter_debug("unknown service\n");
517 break; 547 break;
626 switch(service) { 656 switch(service) {
627 case twitter_service: 657 case twitter_service:
628 case wassr_service: 658 case wassr_service:
629 case identica_service: 659 case identica_service:
630 case jisko_service: 660 case jisko_service:
661 case ffeed_service:
631 attach_to_conv(conv, NULL); 662 attach_to_conv(conv, NULL);
632 break; 663 break;
633 default: 664 default:
634 twitter_debug("unknown service\n"); 665 twitter_debug("unknown service\n");
635 break; 666 break;
718 attach_to_conv(conv, NULL); 749 attach_to_conv(conv, NULL);
719 break; 750 break;
720 case wassr_service: 751 case wassr_service:
721 case identica_service: 752 case identica_service:
722 case jisko_service: 753 case jisko_service:
754 case ffeed_service:
723 attach_to_conv(conv, NULL); 755 attach_to_conv(conv, NULL);
724 break; 756 break;
725 default: 757 default:
726 twitter_debug("unknown service\n"); 758 twitter_debug("unknown service\n");
727 break; 759 break;
751 hash = icon_hash[service]; 783 hash = icon_hash[service];
752 break; 784 break;
753 case wassr_service: 785 case wassr_service:
754 case identica_service: 786 case identica_service:
755 case jisko_service: 787 case jisko_service:
788 case ffeed_service:
756 hash = icon_hash[service]; 789 hash = icon_hash[service];
757 break; 790 break;
758 default: 791 default:
759 twitter_debug("unknown service\n"); 792 twitter_debug("unknown service\n");
760 break; 793 break;
792 screen_name = g_strdup_printf("@%s", purple_prefs_get_string(OPT_SCREEN_NAME_IDENTICA)); 825 screen_name = g_strdup_printf("@%s", purple_prefs_get_string(OPT_SCREEN_NAME_IDENTICA));
793 break; 826 break;
794 case jisko_service: 827 case jisko_service:
795 list = purple_prefs_get_string(OPT_FILTER_JISKO); 828 list = purple_prefs_get_string(OPT_FILTER_JISKO);
796 screen_name = g_strdup_printf("@%s", purple_prefs_get_string(OPT_SCREEN_NAME_JISKO)); 829 screen_name = g_strdup_printf("@%s", purple_prefs_get_string(OPT_SCREEN_NAME_JISKO));
830 case ffeed_service:
831 list = purple_prefs_get_string(OPT_FILTER_FFEED);
832 screen_name = g_strdup_printf("@%s", purple_prefs_get_string(OPT_SCREEN_NAME_FFEED));
797 break; 833 break;
798 } 834 }
799 g_return_if_fail(list != NULL); 835 g_return_if_fail(list != NULL);
800 if(strstr(list, DEFAULT_LIST)) 836 if(strstr(list, DEFAULT_LIST))
801 return; 837 return;
1035 switch(service) { 1071 switch(service) {
1036 case twitter_service: 1072 case twitter_service:
1037 case wassr_service: 1073 case wassr_service:
1038 case identica_service: 1074 case identica_service:
1039 case jisko_service: 1075 case jisko_service:
1076 case ffeed_service:
1040 hash = icon_hash[service]; 1077 hash = icon_hash[service];
1041 break; 1078 break;
1042 default: 1079 default:
1043 twitter_debug("unknown service\n"); 1080 twitter_debug("unknown service\n");
1044 break; 1081 break;
1121 1158
1122 1159
1123 /* compile regex */ 1160 /* compile regex */
1124 regp[RECIPIENT] = g_regex_new(P_RECIPIENT, 0, 0, NULL); 1161 regp[RECIPIENT] = g_regex_new(P_RECIPIENT, 0, 0, NULL);
1125 regp[SENDER] = g_regex_new(P_SENDER, 0, 0, NULL); 1162 regp[SENDER] = g_regex_new(P_SENDER, 0, 0, NULL);
1163 regp[SENDER_FFEED] = g_regex_new(P_SENDER_FFEED, 0, 0, NULL);
1126 regp[COMMAND] = g_regex_new(P_COMMAND, G_REGEX_RAW, 0, NULL); 1164 regp[COMMAND] = g_regex_new(P_COMMAND, G_REGEX_RAW, 0, NULL);
1127 regp[PSEUDO] = g_regex_new(P_PSEUDO, G_REGEX_RAW, 0, NULL); 1165 regp[PSEUDO] = g_regex_new(P_PSEUDO, G_REGEX_RAW, 0, NULL);
1128 regp[USER] = g_regex_new(P_USER, 0, 0, NULL); 1166 regp[USER] = g_regex_new(P_USER, 0, 0, NULL);
1129 regp[CHANNEL_WASSR] = g_regex_new(P_CHANNEL, 0, 0, NULL); 1167 regp[CHANNEL_WASSR] = g_regex_new(P_CHANNEL, 0, 0, NULL);
1130 regp[TAG_TWITTER] = g_regex_new(P_TAG_TWITTER, 0, 0, NULL); 1168 regp[TAG_TWITTER] = g_regex_new(P_TAG_TWITTER, 0, 0, NULL);
1132 regp[GROUP_IDENTICA] = g_regex_new(P_GROUP_IDENTICA, 0, 0, NULL); 1170 regp[GROUP_IDENTICA] = g_regex_new(P_GROUP_IDENTICA, 0, 0, NULL);
1133 regp[IMAGE_TWITTER] = g_regex_new(P_IMAGE_TWITTER, 0, 0, NULL); 1171 regp[IMAGE_TWITTER] = g_regex_new(P_IMAGE_TWITTER, 0, 0, NULL);
1134 regp[IMAGE_WASSR] = g_regex_new(P_IMAGE_WASSR, 0, 0, NULL); 1172 regp[IMAGE_WASSR] = g_regex_new(P_IMAGE_WASSR, 0, 0, NULL);
1135 regp[IMAGE_IDENTICA] = g_regex_new(P_IMAGE_IDENTICA, 0, 0, NULL); 1173 regp[IMAGE_IDENTICA] = g_regex_new(P_IMAGE_IDENTICA, 0, 0, NULL);
1136 regp[IMAGE_JISKO] = g_regex_new(P_IMAGE_JISKO, 0, 0, NULL); 1174 regp[IMAGE_JISKO] = g_regex_new(P_IMAGE_JISKO, 0, 0, NULL);
1175 regp[IMAGE_FFEED] = g_regex_new(P_IMAGE_FFEED, 0, 0, NULL);
1137 regp[SIZE_128_WASSR] = g_regex_new(P_SIZE_128_WASSR, 0, 0, NULL); 1176 regp[SIZE_128_WASSR] = g_regex_new(P_SIZE_128_WASSR, 0, 0, NULL);
1138 regp[EXCESS_LF] = g_regex_new(P_EXCESS_LF, 0, 0, NULL); 1177 regp[EXCESS_LF] = g_regex_new(P_EXCESS_LF, 0, 0, NULL);
1178 regp[TRAIL_HASH] = g_regex_new(P_TRAIL_HASH, 0, 0, NULL);
1139 1179
1140 for(i = twitter_service; i < NUM_SERVICES; i++) { 1180 for(i = twitter_service; i < NUM_SERVICES; i++) {
1141 icon_hash[i] = g_hash_table_new_full(g_str_hash, g_str_equal, 1181 icon_hash[i] = g_hash_table_new_full(g_str_hash, g_str_equal,
1142 g_free, NULL); 1182 g_free, NULL);
1143 } 1183 }
1337 purple_prefs_add_string(OPT_SCREEN_NAME_TWITTER, EMPTY); 1377 purple_prefs_add_string(OPT_SCREEN_NAME_TWITTER, EMPTY);
1338 purple_prefs_add_string(OPT_PASSWORD_TWITTER, EMPTY); 1378 purple_prefs_add_string(OPT_PASSWORD_TWITTER, EMPTY);
1339 purple_prefs_add_string(OPT_SCREEN_NAME_WASSR, EMPTY); 1379 purple_prefs_add_string(OPT_SCREEN_NAME_WASSR, EMPTY);
1340 purple_prefs_add_string(OPT_SCREEN_NAME_IDENTICA, EMPTY); 1380 purple_prefs_add_string(OPT_SCREEN_NAME_IDENTICA, EMPTY);
1341 purple_prefs_add_string(OPT_SCREEN_NAME_JISKO, EMPTY); 1381 purple_prefs_add_string(OPT_SCREEN_NAME_JISKO, EMPTY);
1382 purple_prefs_add_string(OPT_SCREEN_NAME_FFEED, EMPTY);
1342 1383
1343 purple_prefs_add_bool(OPT_SHOW_ICON, TRUE); 1384 purple_prefs_add_bool(OPT_SHOW_ICON, TRUE);
1344 purple_prefs_add_int(OPT_ICON_SIZE, DEFAULT_ICON_SIZE); 1385 purple_prefs_add_int(OPT_ICON_SIZE, DEFAULT_ICON_SIZE);
1345 purple_prefs_add_bool(OPT_UPDATE_ICON, TRUE); 1386 purple_prefs_add_bool(OPT_UPDATE_ICON, TRUE);
1346 purple_prefs_add_int(OPT_ICON_MAX_COUNT, DEFAULT_ICON_MAX_COUNT); 1387 purple_prefs_add_int(OPT_ICON_MAX_COUNT, DEFAULT_ICON_MAX_COUNT);
1351 purple_prefs_add_bool(OPT_FILTER_EXCLUDE_REPLY, TRUE); 1392 purple_prefs_add_bool(OPT_FILTER_EXCLUDE_REPLY, TRUE);
1352 purple_prefs_add_string(OPT_FILTER_TWITTER, DEFAULT_LIST); 1393 purple_prefs_add_string(OPT_FILTER_TWITTER, DEFAULT_LIST);
1353 purple_prefs_add_string(OPT_FILTER_WASSR, DEFAULT_LIST); 1394 purple_prefs_add_string(OPT_FILTER_WASSR, DEFAULT_LIST);
1354 purple_prefs_add_string(OPT_FILTER_IDENTICA, DEFAULT_LIST); 1395 purple_prefs_add_string(OPT_FILTER_IDENTICA, DEFAULT_LIST);
1355 purple_prefs_add_string(OPT_FILTER_JISKO, DEFAULT_LIST); 1396 purple_prefs_add_string(OPT_FILTER_JISKO, DEFAULT_LIST);
1397 purple_prefs_add_string(OPT_FILTER_FFEED, DEFAULT_LIST);
1356 } 1398 }
1357 1399
1358 PURPLE_INIT_PLUGIN(pidgin_twitter, init_plugin, info) 1400 PURPLE_INIT_PLUGIN(pidgin_twitter, init_plugin, info)