aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Halden <marius.h@lden.org>2016-05-29 20:01:43 +0200
committerMarius Halden <marius.h@lden.org>2016-05-29 20:01:43 +0200
commit4fb18bfbe442001849fc36ba496132a47c766730 (patch)
treeefd3f445445197e64606824029be6b318c079550
parent3448d86a3f329ec4d625bd72e64a96061e71e675 (diff)
Add 'quote' command for twitter
-rw-r--r--protocols/twitter/twitter.c11
-rw-r--r--protocols/twitter/twitter_lib.c60
-rw-r--r--protocols/twitter/twitter_lib.h1
3 files changed, 72 insertions, 0 deletions
diff --git a/protocols/twitter/twitter.c b/protocols/twitter/twitter.c
index 5f6156a6..9017d3b3 100644
--- a/protocols/twitter/twitter.c
+++ b/protocols/twitter/twitter.c
@@ -1060,7 +1060,18 @@ static void twitter_handle_command(struct im_connection *ic, char *message)
twitter_status_show_url(ic, id);
}
goto eof;
+ } else if (g_strcasecmp(cmd[0], "quote") == 0 && cmd[1]) {
+ id = twitter_message_id_from_command_arg(ic, cmd[1], NULL);
+ td->last_status_id = 0;
+ if (id) {
+ twitter_status_quote_post(ic, id, cmd[2]);
+ } else {
+ twitter_log(ic, "User '%s' does not exist or didn't "
+ "post any statuses recently", cmd[1]);
+ }
+
+ goto eof;
} else if (g_strcasecmp(cmd[0], "post") == 0) {
message += 5;
allow_post = TRUE;
diff --git a/protocols/twitter/twitter_lib.c b/protocols/twitter/twitter_lib.c
index b69c532e..bffd61aa 100644
--- a/protocols/twitter/twitter_lib.c
+++ b/protocols/twitter/twitter_lib.c
@@ -1836,3 +1836,63 @@ void twitter_status_show_url(struct im_connection *ic, guint64 id)
twitter_http(ic, url, twitter_http_status_show_url, ic, 0, NULL, 0);
g_free(url);
}
+
+struct twitter_http_msg {
+ struct im_connection *ic;
+ char *message;
+};
+
+static void twitter_http_status_quote_post(struct http_request *req)
+{
+ struct twitter_http_msg *thm = req->data;
+ struct im_connection *ic = thm->ic;
+ struct twitter_data *td = ic->proto_data;
+ char *message;
+ const char *name;
+ json_value *parsed, *id;
+
+ if (!g_slist_find(twitter_connections, ic)) {
+ goto eof;
+ }
+
+ if (!(parsed = twitter_parse_response(ic, req))) {
+ goto eof;
+ }
+
+ name = json_o_str(json_o_get(parsed, "user"), "screen_name");
+ id = json_o_get(parsed, "id");
+
+ if (name && id && id->type == json_integer) {
+ message = g_strdup_printf("%s https://twitter.com/%s/status/%" G_GUINT64_FORMAT, thm->message, name, id->u.integer);
+
+ /*if (!twitter_length_check(ic, message)) {
+ goto eof;
+ }*/
+
+ td->last_status_id = 0;
+ twitter_post_status(ic, message, 0);
+ } else {
+ twitter_log(ic, "Error: could not fetch url for quoted tweet.");
+ }
+
+ json_value_free(parsed);
+
+eof:
+ g_free(thm->message);
+ g_free(thm);
+}
+
+void twitter_status_quote_post(struct im_connection *ic, guint64 id, char *message)
+{
+ struct twitter_http_msg *thm;
+ char *url;
+
+ thm = g_new0(struct twitter_http_msg, 1);
+
+ thm->ic = ic;
+ thm->message = g_strdup(message);
+
+ url = g_strdup_printf("%s%" G_GUINT64_FORMAT "%s", TWITTER_STATUS_SHOW_URL, id, ".json");
+ twitter_http(ic, url, twitter_http_status_quote_post, thm, 0, NULL, 0);
+ g_free(url);
+}
diff --git a/protocols/twitter/twitter_lib.h b/protocols/twitter/twitter_lib.h
index 6833d23d..d3b6ae9e 100644
--- a/protocols/twitter/twitter_lib.h
+++ b/protocols/twitter/twitter_lib.h
@@ -105,6 +105,7 @@ void twitter_status_retweet(struct im_connection *ic, guint64 id);
void twitter_report_spam(struct im_connection *ic, char *screen_name);
void twitter_favourite_tweet(struct im_connection *ic, guint64 id);
void twitter_status_show_url(struct im_connection *ic, guint64 id);
+void twitter_status_quote_post(struct im_connection *ic, guint64 id, char *message);
#endif //_TWITTER_LIB_H