comparison pidgin-twitter.h @ 240:405f8b880142

restored jisko support.
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Tue, 07 Oct 2008 16:44:02 +0900
parents e3a24c98772d
children bd7478109727
comparison
equal deleted inserted replaced
239:e3a24c98772d 240:405f8b880142
30 SENDER, 30 SENDER,
31 COMMAND, 31 COMMAND,
32 PSEUDO, 32 PSEUDO,
33 USER, 33 USER,
34 CHANNEL_WASSR, 34 CHANNEL_WASSR,
35 TAG_IDENTICA,
35 IMAGE_TWITTER, 36 IMAGE_TWITTER,
36 IMAGE_WASSR, 37 IMAGE_WASSR,
37 IMAGE_IDENTICA, 38 IMAGE_IDENTICA,
38 TAG_IDENTICA, 39 IMAGE_JISKO,
39 SIZE_128_WASSR, 40 SIZE_128_WASSR,
40 EXCESS_LF 41 EXCESS_LF
41 }; 42 };
42 43
43 /* service id */ 44 /* service id */
44 enum { 45 enum {
45 unknown_service = -1, 46 unknown_service = -1,
46 twitter_service, 47 twitter_service,
47 wassr_service, 48 wassr_service,
48 identica_service 49 identica_service,
50 jisko_service
49 }; 51 };
50 52
51 /* container to hold icon data */ 53 /* container to hold icon data */
52 typedef struct _icon_data { 54 typedef struct _icon_data {
53 GdkPixbuf *pixbuf; /* icon pixmap */ 55 GdkPixbuf *pixbuf; /* icon pixmap */
110 #define OPT_ICON_DIR OPT_PIDGINTWITTER "/icon_dir" 112 #define OPT_ICON_DIR OPT_PIDGINTWITTER "/icon_dir"
111 #define OPT_API_BASE_POST OPT_PIDGINTWITTER "/api_base_post" 113 #define OPT_API_BASE_POST OPT_PIDGINTWITTER "/api_base_post"
112 #define OPT_SCREEN_NAME_TWITTER OPT_PIDGINTWITTER "/screen_name_twitter" 114 #define OPT_SCREEN_NAME_TWITTER OPT_PIDGINTWITTER "/screen_name_twitter"
113 #define OPT_SCREEN_NAME_WASSR OPT_PIDGINTWITTER "/screen_name_wassr" 115 #define OPT_SCREEN_NAME_WASSR OPT_PIDGINTWITTER "/screen_name_wassr"
114 #define OPT_SCREEN_NAME_IDENTICA OPT_PIDGINTWITTER "/screen_name_identica" 116 #define OPT_SCREEN_NAME_IDENTICA OPT_PIDGINTWITTER "/screen_name_identica"
117 #define OPT_SCREEN_NAME_JISKO OPT_PIDGINTWITTER "/screen_name_jisko"
115 #define OPT_PASSWORD_TWITTER OPT_PIDGINTWITTER "/password_twitter" 118 #define OPT_PASSWORD_TWITTER OPT_PIDGINTWITTER "/password_twitter"
116 #define OPT_SHOW_ICON OPT_PIDGINTWITTER "/show_icon" 119 #define OPT_SHOW_ICON OPT_PIDGINTWITTER "/show_icon"
117 #define OPT_ICON_SIZE OPT_PIDGINTWITTER "/icon_size" 120 #define OPT_ICON_SIZE OPT_PIDGINTWITTER "/icon_size"
118 #define OPT_UPDATE_ICON OPT_PIDGINTWITTER "/update_icon" 121 #define OPT_UPDATE_ICON OPT_PIDGINTWITTER "/update_icon"
119 #define OPT_ICON_MAX_COUNT OPT_PIDGINTWITTER "/icon_max_count" 122 #define OPT_ICON_MAX_COUNT OPT_PIDGINTWITTER "/icon_max_count"
123 #define OPT_FILTER OPT_PIDGINTWITTER "/filter" 126 #define OPT_FILTER OPT_PIDGINTWITTER "/filter"
124 #define OPT_FILTER_EXCLUDE_REPLY OPT_PIDGINTWITTER "/filter_exclude_reply" 127 #define OPT_FILTER_EXCLUDE_REPLY OPT_PIDGINTWITTER "/filter_exclude_reply"
125 #define OPT_FILTER_TWITTER OPT_PIDGINTWITTER "/filter_twitter" 128 #define OPT_FILTER_TWITTER OPT_PIDGINTWITTER "/filter_twitter"
126 #define OPT_FILTER_WASSR OPT_PIDGINTWITTER "/filter_wassr" 129 #define OPT_FILTER_WASSR OPT_PIDGINTWITTER "/filter_wassr"
127 #define OPT_FILTER_IDENTICA OPT_PIDGINTWITTER "/filter_identica" 130 #define OPT_FILTER_IDENTICA OPT_PIDGINTWITTER "/filter_identica"
131 #define OPT_FILTER_JISKO OPT_PIDGINTWITTER "/filter_jisko"
128 #define OPT_STRIP_EXCESS_LF OPT_PIDGINTWITTER "/strip_excess_lf" 132 #define OPT_STRIP_EXCESS_LF OPT_PIDGINTWITTER "/strip_excess_lf"
129 133
130 #ifdef _WIN32 134 #ifdef _WIN32
131 #define OPT_PIDGIN_BLINK_IM PIDGIN_PREFS_ROOT "/win32/blink_im" 135 #define OPT_PIDGIN_BLINK_IM PIDGIN_PREFS_ROOT "/win32/blink_im"
132 #endif 136 #endif
136 #define SENDER_FORMAT_TWITTER "%s<a href='http://twitter.com/%s'>%s</a>: " 140 #define SENDER_FORMAT_TWITTER "%s<a href='http://twitter.com/%s'>%s</a>: "
137 #define RECIPIENT_FORMAT_WASSR "%s@<a href='http://wassr.jp/user/%s'>%s</a>" 141 #define RECIPIENT_FORMAT_WASSR "%s@<a href='http://wassr.jp/user/%s'>%s</a>"
138 #define SENDER_FORMAT_WASSR "%s<a href='http://wassr.jp/user/%s'>%s</a>: " 142 #define SENDER_FORMAT_WASSR "%s<a href='http://wassr.jp/user/%s'>%s</a>: "
139 #define RECIPIENT_FORMAT_IDENTICA "%s@<a href='http://identi.ca/%s'>%s</a>" 143 #define RECIPIENT_FORMAT_IDENTICA "%s@<a href='http://identi.ca/%s'>%s</a>"
140 #define SENDER_FORMAT_IDENTICA "%s<a href='http://identi.ca/%s'>%s</a>: " 144 #define SENDER_FORMAT_IDENTICA "%s<a href='http://identi.ca/%s'>%s</a>: "
145 #define RECIPIENT_FORMAT_JISKO "@<a href='http://jisko.net/%s'>%s</a>"
146 #define SENDER_FORMAT_JISKO "%s<a href='http://jisko.net/%s'>%s</a>: "
141 #define CHANNEL_FORMAT_WASSR "%s<a href='http://wassr.jp/channel/%s'>%s</a> " 147 #define CHANNEL_FORMAT_WASSR "%s<a href='http://wassr.jp/channel/%s'>%s</a> "
142 #define CHANNEL_FORMAT_IDENTICA "%s<a href='http://identi.ca/tag/%s'>%s</a> " 148 #define CHANNEL_FORMAT_IDENTICA "%s<a href='http://identi.ca/tag/%s'>%s</a> "
143 #define TAG_FORMAT_IDENTICA "#<a href='http://identi.ca/tag/%s'>%s</a>" 149 #define TAG_FORMAT_IDENTICA "#<a href='http://identi.ca/tag/%s'>%s</a>"
144 150
145 #define DEFAULT_LIST "(list of users: separated with ' ,:;')" 151 #define DEFAULT_LIST "(list of users: separated with ' ,:;')"
151 #define P_SENDER "^(\\r?\\n?)\\s*([-A-Za-z0-9_]+)(?:\\s*\\(.+\\))?: " 157 #define P_SENDER "^(\\r?\\n?)\\s*([-A-Za-z0-9_]+)(?:\\s*\\(.+\\))?: "
152 #define P_COMMAND "^(?:\\s*)([dDfFgGlLmMnNtTwW]{1}\\s+[A-Za-z0-9_]+)(?:\\s*\\Z)" 158 #define P_COMMAND "^(?:\\s*)([dDfFgGlLmMnNtTwW]{1}\\s+[A-Za-z0-9_]+)(?:\\s*\\Z)"
153 #define P_PSEUDO "^\\s*(?:[\"#$%&'()*+,\\-./:;<=>?\\[\\\\\\]_`{|}~]|[^\\s\\x21-\\x7E])*([dDfFgGlLmMnNtTwW]{1})(?:\\Z|\\s+|[^\\x21-\\x7E]+\\Z)" 159 #define P_PSEUDO "^\\s*(?:[\"#$%&'()*+,\\-./:;<=>?\\[\\\\\\]_`{|}~]|[^\\s\\x21-\\x7E])*([dDfFgGlLmMnNtTwW]{1})(?:\\Z|\\s+|[^\\x21-\\x7E]+\\Z)"
154 #define P_USER "^.*?(?:<a .+?>)?([-A-Za-z0-9_]+)(?:</a>)?:" 160 #define P_USER "^.*?(?:<a .+?>)?([-A-Za-z0-9_]+)(?:</a>)?:"
155 #define P_CHANNEL "^(.*?(?:<a .+?>)?[-A-Za-z0-9_]+(?:</a>)?: \\r?\\n?#)([A-Za-z0-9_]+) " 161 #define P_CHANNEL "^(.*?(?:<a .+?>)?[-A-Za-z0-9_]+(?:</a>)?: \\r?\\n?#)([A-Za-z0-9_]+) "
162 #define P_TAG_IDENTICA "#([-A-Za-z0-9_]+)"
156 #define P_IMAGE_TWITTER "<a href=\"/account/profile_image/.+?\"><img .+? id=\"profile-image\".*src=\"(http://.+)\" .+?/>" 163 #define P_IMAGE_TWITTER "<a href=\"/account/profile_image/.+?\"><img .+? id=\"profile-image\".*src=\"(http://.+)\" .+?/>"
157 #define P_IMAGE_WASSR "<div class=\"image\"><a href=\".+\"><img src=\"(.+)\" width=\".+?\" /></a></div>" 164 #define P_IMAGE_WASSR "<div class=\"image\"><a href=\".+\"><img src=\"(.+)\" width=\".+?\" /></a></div>"
165 #define P_IMAGE_IDENTICA "<img src=\"(http://.+.identi.ca/.+)\" class=\"avatar profile\" width=\"96\" height=\"96\" alt=\"[A-Za-z0-0_]+\"/>"
166 #define P_IMAGE_JISKO "<img src=\"(http://jisko.net/users/.+/img/avatar/thumb_side\\..+)\" alt=\"Avatar\" />"
158 #define P_SIZE_128_WASSR "\\.128\\." 167 #define P_SIZE_128_WASSR "\\.128\\."
159 #define P_IMAGE_IDENTICA "<img src=\"(http://.+.identi.ca/.+)\" class=\"avatar profile\" width=\"96\" height=\"96\" alt=\"[A-Za-z0-0_]+\"/>"
160 #define P_TAG_IDENTICA "#([-A-Za-z0-9_]+)"
161 #define P_EXCESS_LF "([\\r|\\n]{3,})" 168 #define P_EXCESS_LF "([\\r|\\n]{3,})"
162 169
163 /* twitter API specific macros */ 170 /* twitter API specific macros */
164 #define TWITTER_BASE_URL "http://twitter.com" 171 #define TWITTER_BASE_URL "http://twitter.com"
165 #define TWITTER_STATUS_GET "GET /statuses/friends_timeline.xml HTTP/1.1\r\n" \ 172 #define TWITTER_STATUS_GET "GET /statuses/friends_timeline.xml HTTP/1.1\r\n" \
210 static gboolean is_twitter_conv(PurpleConversation *conv); 217 static gboolean is_twitter_conv(PurpleConversation *conv);
211 static gboolean is_wassr_account(PurpleAccount *account, const char *name); 218 static gboolean is_wassr_account(PurpleAccount *account, const char *name);
212 static gboolean is_wassr_conv(PurpleConversation *conv); 219 static gboolean is_wassr_conv(PurpleConversation *conv);
213 static gboolean is_identica_account(PurpleAccount *account, const char *name); 220 static gboolean is_identica_account(PurpleAccount *account, const char *name);
214 static gboolean is_identica_conv(PurpleConversation *conv); 221 static gboolean is_identica_conv(PurpleConversation *conv);
222 static gboolean is_jisko_account(PurpleAccount *account, const char *name);
223 static gboolean is_jisko_conv(PurpleConversation *conv);
215 static void conv_created_cb(PurpleConversation *conv, gpointer null); 224 static void conv_created_cb(PurpleConversation *conv, gpointer null);
216 static void deleting_conv_cb(PurpleConversation *conv); 225 static void deleting_conv_cb(PurpleConversation *conv);
217 static gboolean receiving_im_cb(PurpleAccount *account, char **sender, char **buffer, PurpleConversation *conv, PurpleMessageFlags *flags, void *data); 226 static gboolean receiving_im_cb(PurpleAccount *account, char **sender, char **buffer, PurpleConversation *conv, PurpleMessageFlags *flags, void *data);
218 static void insert_icon_at_mark(GtkTextMark *requested_mark, gpointer user_data); 227 static void insert_icon_at_mark(GtkTextMark *requested_mark, gpointer user_data);
219 static void insert_requested_icon(const gchar *user_name, gint service); 228 static void insert_requested_icon(const gchar *user_name, gint service);