# HG changeset patch # User Yoshiki Yazawa # Date 1209616669 -32400 # Node ID 4bd8c89b47498971367b77c68e9a9f5a4f5789bb # Parent c6b80f47d4df5142d4f5a36db1f49bb53fd91539 now it plays sound when sender of message is in the userlist. diff -r c6b80f47d4df -r 4bd8c89b4749 pidgin-twitter.c --- a/pidgin-twitter.c Thu May 01 05:50:48 2008 +0900 +++ b/pidgin-twitter.c Thu May 01 13:37:49 2008 +0900 @@ -30,12 +30,15 @@ #include "version.h" #include "sound.h" +#define RECIPIENT 0 +#define SENDER 1 #define PIDGINTWITTER_PLUGIN_ID "pidgin_twitter" #define OPT_PIDGINTWITTER "/plugins/pidgin_twitter" #define OPT_TRANSLATE_RECIPIENT OPT_PIDGINTWITTER "/translate_recipient" #define OPT_TRANSLATE_SENDER OPT_PIDGINTWITTER "/translate_sender" -#define OPT_PLAYSOUND OPT_PIDGINTWITTER "/playsound" +#define OPT_PLAYSOUND_RECIPIENT OPT_PIDGINTWITTER "/playsound_recipient" +#define OPT_PLAYSOUND_SENDER OPT_PIDGINTWITTER "/playsound_sender" #define OPT_SOUNDID OPT_PIDGINTWITTER "/soundid" #define OPT_USERLIST OPT_PIDGINTWITTER "/userlist" #define RECIPIENT_FORMAT "@%s" @@ -45,19 +48,19 @@ #define twitter_debug(fmt, ...) purple_debug(PURPLE_DEBUG_INFO, PIDGINTWITTER_PLUGIN_ID, \ fmt, ## __VA_ARGS__); #define twitter_error(fmt, ...) purple_debug(PURPLE_DEBUG_ERROR, PIDGINTWITTER_PLUGIN_ID, \ - fmt, ## __VA_ARGS__); /* globals */ -static GRegex *regrcpt; -static GRegex *regsndr; +static GRegex *regp[2]; static gboolean -eval_sender(const GMatchInfo * match_info, GString * result, gpointer user_data) +eval(const GMatchInfo * match_info, GString * result, gpointer user_data) { gchar sub[128]; gchar *match = g_match_info_fetch(match_info, 1); - snprintf(sub, 128, SENDER_FORMAT, match, match); + int which = *(int *)user_data; + + snprintf(sub, 128, which ? SENDER_FORMAT : RECIPIENT_FORMAT, match, match); twitter_debug("sub = %s\n", sub); g_string_append(result, sub); g_free(match); @@ -66,55 +69,19 @@ } static void -translate_sender(gchar **str) +translate(gchar **str, int which) { gchar *newstr; twitter_debug("*str = %s\n", *str); - newstr = g_regex_replace_eval(regsndr, // compiled regex + newstr = g_regex_replace_eval(regp[which], // compiled regex *str, // subject string -1, // length of the subject string 0, // start position 0, // match options - eval_sender, // function to call for each match - NULL, // user data (not used) - NULL); // error handler - - twitter_debug("newstr = %s\n", newstr); - - g_free(*str); - *str = newstr; -} - -static gboolean -eval_recipient(const GMatchInfo * match_info, GString * result, gpointer user_data) -{ - gchar sub[128]; - gchar *match = g_match_info_fetch(match_info, 1); - - snprintf(sub, 128, RECIPIENT_FORMAT, match, match); - twitter_debug("sub = %s\n", sub); - g_string_append(result, sub); - g_free(match); - - return FALSE; -} - -static void -translate_recipient(gchar **str) -{ - gchar *newstr; - - twitter_debug("*str = %s\n", *str); - - newstr = g_regex_replace_eval(regrcpt, // compiled regex - *str, // subject string - -1, // length of the subject string - 0, // start position - 0, // match options - eval_recipient, // function to call for each match - NULL, // user data (not used) + eval, // function to call for each match + &which, // user data NULL); // error handler twitter_debug("newstr = %s\n", newstr); @@ -124,7 +91,7 @@ } static void -playsound(gchar **str) +playsound(gchar **str, int which) { GMatchInfo *match_info; const gchar *list; @@ -139,7 +106,7 @@ if(!candidates) return; - g_regex_match(regrcpt, *str, 0, &match_info); + g_regex_match(regp[which], *str, 0, &match_info); while(g_match_info_matches(match_info)) { gchar *user = g_match_info_fetch(match_info, 1); twitter_debug("user = %s\n", user); @@ -175,17 +142,20 @@ twitter_debug("sender = %s\n", sender); if(!strcmp(proto, "prpl-jabber") && !strcmp(sender, "twitter@twitter.com")) { - if(purple_prefs_get_bool(OPT_PLAYSOUND)) { - /* playsound */ - playsound(buffer); + /* playsound */ + if(purple_prefs_get_bool(OPT_PLAYSOUND_SENDER)) { + playsound(buffer, SENDER); } + if(purple_prefs_get_bool(OPT_PLAYSOUND_RECIPIENT)) { + playsound(buffer, RECIPIENT); + } + + /* translate */ if(purple_prefs_get_bool(OPT_TRANSLATE_SENDER)) { - /* translate */ - translate_sender(buffer); + translate(buffer, SENDER); } if(purple_prefs_get_bool(OPT_TRANSLATE_RECIPIENT)) { - /* translate */ - translate_recipient(buffer); + translate(buffer, RECIPIENT); } } return FALSE; @@ -206,8 +176,8 @@ { twitter_debug("pidgin-twitter unload called\n"); - g_regex_unref(regrcpt); - g_regex_unref(regsndr); + g_regex_unref(regp[RECIPIENT]); + g_regex_unref(regp[SENDER]); return TRUE; } @@ -233,8 +203,13 @@ purple_plugin_pref_frame_add(frame, pref); pref = purple_plugin_pref_new_with_name_and_label( - OPT_PLAYSOUND, - "Play a sound on a reply to the user in the Userlist"); + OPT_PLAYSOUND_RECIPIENT, + "Play a sound on an arrival of reply to the user in the Userlist"); + purple_plugin_pref_frame_add(frame, pref); + + pref = purple_plugin_pref_new_with_name_and_label( + OPT_PLAYSOUND_SENDER, + "Play a sound if sender of a message is in the Userlist"); purple_plugin_pref_frame_add(frame, pref); /* sound id selector */ @@ -279,9 +254,9 @@ PURPLE_PRIORITY_DEFAULT, /**< priority */ PIDGINTWITTER_PLUGIN_ID, /**< id */ "Pidgin-Twitter", /**< name */ - "0.3.0", /**< version */ - "replaces @username in a message with link to the user", /** summary */ - "replaces @username in a message with link to the user", /** desc */ + "0.3.1", /**< version */ + "replaces @username to a link and play sound", /** summary */ + "replaces @username in a link and play sound", /** desc */ "Yoshiki Yazawa (yaz@honeyplanet.jp)", /**< author */ "http://www.honeyplanet.jp/", /**< homepage */ load_plugin, /**< load */ @@ -303,13 +278,14 @@ purple_prefs_add_bool(OPT_TRANSLATE_RECIPIENT, TRUE); purple_prefs_add_bool(OPT_TRANSLATE_SENDER, TRUE); - purple_prefs_add_bool(OPT_PLAYSOUND, TRUE); + purple_prefs_add_bool(OPT_PLAYSOUND_RECIPIENT, TRUE); + purple_prefs_add_bool(OPT_PLAYSOUND_SENDER, FALSE); purple_prefs_add_int(OPT_SOUNDID, PURPLE_SOUND_POUNCE_DEFAULT); purple_prefs_add_string(OPT_USERLIST, DEFAULT_LIST); /* compile regex */ - regrcpt = g_regex_new("@([A-Za-z0-9_]+)", 0, 0, NULL); - regsndr = g_regex_new("^([A-Za-z0-9_]+): ", 0, 0, NULL); + regp[RECIPIENT] = g_regex_new("@([A-Za-z0-9_]+)", 0, 0, NULL); + regp[SENDER] = g_regex_new("^([A-Za-z0-9_]+): ", 0, 0, NULL); } PURPLE_INIT_PLUGIN(pidgin_twitter, init_plugin, info)