Mercurial > pidgin-twitter
diff twitter_api.c @ 330:cc41ee1f5d3a
implemented reply, favorite, retweet functionalities. these are quite raw, be careful!
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Mon, 12 Oct 2009 21:51:13 +0900 |
parents | 18d3e7c582de |
children | 227852ee649c |
line wrap: on
line diff
--- a/twitter_api.c Mon Oct 12 01:45:36 2009 +0900 +++ b/twitter_api.c Mon Oct 12 21:51:13 2009 +0900 @@ -18,6 +18,9 @@ extern gboolean blink_modified; #endif +extern guint64 reply_to_msgid; +extern PurpleAccount *account_for_twitter; + /**************************/ /* API base get functions */ /**************************/ @@ -261,7 +264,9 @@ PurpleMessageFlags flag = PURPLE_MESSAGE_RECV; - msg = g_strdup_printf("%s: %s", st->screen_name, st->text); + msg = g_strdup_printf("%s: %s ptmsgid=%llu", + st->screen_name, st->text, + (long long unsigned int)st->id); /* apply filter */ if(purple_prefs_get_bool(OPT_FILTER)) { @@ -323,7 +328,6 @@ g_free(basic_auth); /* header */ - header = g_strdup_printf(TWITTER_STATUS_GET, count, basic_auth_encoded); request = g_strconcat(header, "\r\n", NULL); @@ -509,7 +513,18 @@ header = g_strdup_printf(TWITTER_STATUS_POST, basic_auth_encoded, (int)strlen(status)); - request = g_strconcat(header, "\r\n", status, "\r\n", NULL); + if(reply_to_msgid > 0) { + char *inreply = NULL; + inreply = g_strdup_printf(TWITTER_REPLY_FORMAT, + (long long unsigned int)reply_to_msgid); + request = g_strconcat(header, "\r\n", status, "\r\n", + inreply, "\r\n", NULL); + reply_to_msgid = 0; + g_free(inreply); + } + else { + request = g_strconcat(header, "\r\n", status, "\r\n", NULL); + } purple_util_fetch_url_request(TWITTER_BASE_URL, FALSE, NULL, TRUE, request, TRUE, @@ -522,6 +537,50 @@ } +static void +fav_with_api_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data, + const gchar *url_text, size_t len, + const gchar *error_message) +{ + /* dummy */ +} + +void +fav_with_api(guint64 id) +{ + char *header, *request; + char *basic_auth, *basic_auth_encoded; + + const char *screen_name = + purple_prefs_get_string(OPT_SCREEN_NAME_TWITTER); + const char *password = purple_prefs_get_string(OPT_PASSWORD_TWITTER); + + if (!screen_name || !password || !screen_name[0] || !password[0]) { + twitter_debug("screen_name or password is empty\n"); + return; + } + + basic_auth = g_strdup_printf("%s:%s", screen_name, password); + basic_auth_encoded = purple_base64_encode((unsigned char *)basic_auth, + strlen(basic_auth)); + g_free(basic_auth); + + + header = g_strdup_printf(TWITTER_FAV_POST, + (long long unsigned int)id, + basic_auth_encoded); + request = g_strconcat(header, "\r\n", NULL); + + purple_util_fetch_url_request(TWITTER_BASE_URL, FALSE, + NULL, TRUE, request, TRUE, + fav_with_api_cb, NULL); + twitter_debug("request = %s\n", request); + + g_free(header); + g_free(basic_auth_encoded); + g_free(request); +} + void signed_on_cb(PurpleConnection *gc) { @@ -547,6 +606,8 @@ return; } + account_for_twitter = account; + gconv = purple_find_conversation_with_account( PURPLE_CONV_TYPE_IM, name, account); if(!gconv) {