diff options
| -rw-r--r-- | protocols/twitter/twitter.c | 11 | ||||
| -rw-r--r-- | protocols/twitter/twitter_lib.c | 60 | ||||
| -rw-r--r-- | protocols/twitter/twitter_lib.h | 1 | 
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 | 
