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) {