aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2011-06-11 12:28:01 +0100
committerWilmer van der Gaast <wilmer@gaast.net>2011-06-11 12:28:01 +0100
commit5983eca9ac1187eb1407eece7d7ad72ef5e091b0 (patch)
tree6ef5913b13dc726f89778000f37455bed719a049
parent27ad50bfa16005ee6d02974478ddc56f9e2ceef5 (diff)
Re-indent Twitter code. It just lacks *any* kind of consistency. Flags used:
-i8 -kr -ts8 -ut -l100 Because K&R isn't so bad after all but spaces are definitely evil. (Not that GNU indent understands how to use tabs, oh well.)
-rw-r--r--protocols/twitter/twitter.c551
-rw-r--r--protocols/twitter/twitter_http.c65
-rw-r--r--protocols/twitter/twitter_lib.c461
3 files changed, 486 insertions, 591 deletions
diff --git a/protocols/twitter/twitter.c b/protocols/twitter/twitter.c
index 1b5835ed..56c7269e 100644
--- a/protocols/twitter/twitter.c
+++ b/protocols/twitter/twitter.c
@@ -36,7 +36,7 @@
else \
imcb_log( ic, fmt ); \
} while( 0 );
-
+
GSList *twitter_connections = NULL;
/**
@@ -45,9 +45,9 @@ GSList *twitter_connections = NULL;
gboolean twitter_main_loop(gpointer data, gint fd, b_input_condition cond)
{
struct im_connection *ic = data;
-
+
// Check if we are still logged in...
- if (!g_slist_find( twitter_connections, ic ))
+ if (!g_slist_find(twitter_connections, ic))
return 0;
// Do stuff..
@@ -57,11 +57,11 @@ gboolean twitter_main_loop(gpointer data, gint fd, b_input_condition cond)
return (ic->flags & OPT_LOGGED_IN) == OPT_LOGGED_IN;
}
-static void twitter_main_loop_start( struct im_connection *ic )
+static void twitter_main_loop_start(struct im_connection *ic)
{
struct twitter_data *td = ic->proto_data;
-
- imcb_log( ic, "Getting initial statuses" );
+
+ imcb_log(ic, "Getting initial statuses");
// Run this once. After this queue the main loop function.
twitter_main_loop(ic, -1, 0);
@@ -71,26 +71,23 @@ static void twitter_main_loop_start( struct im_connection *ic )
td->main_loop_id = b_timeout_add(60000, twitter_main_loop, ic);
}
-static void twitter_oauth_start( struct im_connection *ic );
+static void twitter_oauth_start(struct im_connection *ic);
-void twitter_login_finish( struct im_connection *ic )
+void twitter_login_finish(struct im_connection *ic)
{
struct twitter_data *td = ic->proto_data;
-
- if( set_getbool( &ic->acc->set, "oauth" ) && !td->oauth_info )
- twitter_oauth_start( ic );
- else if( g_strcasecmp( set_getstr( &ic->acc->set, "mode" ), "one" ) != 0 &&
- !( td->flags & TWITTER_HAVE_FRIENDS ) )
- {
- imcb_log( ic, "Getting contact list" );
- twitter_get_statuses_friends( ic, -1 );
- }
- else
- twitter_main_loop_start( ic );
+
+ if (set_getbool(&ic->acc->set, "oauth") && !td->oauth_info)
+ twitter_oauth_start(ic);
+ else if (g_strcasecmp(set_getstr(&ic->acc->set, "mode"), "one") != 0 &&
+ !(td->flags & TWITTER_HAVE_FRIENDS)) {
+ imcb_log(ic, "Getting contact list");
+ twitter_get_statuses_friends(ic, -1);
+ } else
+ twitter_main_loop_start(ic);
}
-static const struct oauth_service twitter_oauth =
-{
+static const struct oauth_service twitter_oauth = {
"http://api.twitter.com/oauth/request_token",
"http://api.twitter.com/oauth/access_token",
"https://api.twitter.com/oauth/authorize",
@@ -98,8 +95,7 @@ static const struct oauth_service twitter_oauth =
.consumer_secret = "FCxqcr0pXKzsF9ajmP57S3VQ8V6Drk4o2QYtqMcOszo",
};
-static const struct oauth_service identica_oauth =
-{
+static const struct oauth_service identica_oauth = {
"http://identi.ca/api/oauth/request_token",
"http://identi.ca/api/oauth/access_token",
"https://identi.ca/api/oauth/authorize",
@@ -107,502 +103,461 @@ static const struct oauth_service identica_oauth =
.consumer_secret = "c596267f277457ec0ce1ab7bb788d828",
};
-static gboolean twitter_oauth_callback( struct oauth_info *info );
+static gboolean twitter_oauth_callback(struct oauth_info *info);
-static const struct oauth_service *get_oauth_service( struct im_connection *ic )
+static const struct oauth_service *get_oauth_service(struct im_connection *ic)
{
struct twitter_data *td = ic->proto_data;
-
- if( strstr( td->url_host, "identi.ca" ) )
+
+ if (strstr(td->url_host, "identi.ca"))
return &identica_oauth;
else
return &twitter_oauth;
-
+
/* Could add more services, or allow configuring your own base URL +
API keys. */
}
-static void twitter_oauth_start( struct im_connection *ic )
+static void twitter_oauth_start(struct im_connection *ic)
{
struct twitter_data *td = ic->proto_data;
-
- imcb_log( ic, "Requesting OAuth request token" );
- td->oauth_info = oauth_request_token( get_oauth_service( ic ), twitter_oauth_callback, ic );
-
+ imcb_log(ic, "Requesting OAuth request token");
+
+ td->oauth_info = oauth_request_token(get_oauth_service(ic), twitter_oauth_callback, ic);
+
/* We need help from the user to complete OAuth login, so don't time
out on this login. */
ic->flags |= OPT_SLOW_LOGIN;
}
-static gboolean twitter_oauth_callback( struct oauth_info *info )
+static gboolean twitter_oauth_callback(struct oauth_info *info)
{
struct im_connection *ic = info->data;
struct twitter_data *td;
-
- if( !g_slist_find( twitter_connections, ic ) )
+
+ if (!g_slist_find(twitter_connections, ic))
return FALSE;
-
+
td = ic->proto_data;
- if( info->stage == OAUTH_REQUEST_TOKEN )
- {
- char name[strlen(ic->acc->user)+9], *msg;
-
- if( info->request_token == NULL )
- {
- imcb_error( ic, "OAuth error: %s", twitter_parse_error( info->http ) );
- imc_logout( ic, TRUE );
+ if (info->stage == OAUTH_REQUEST_TOKEN) {
+ char name[strlen(ic->acc->user) + 9], *msg;
+
+ if (info->request_token == NULL) {
+ imcb_error(ic, "OAuth error: %s", twitter_parse_error(info->http));
+ imc_logout(ic, TRUE);
return FALSE;
}
-
- sprintf( name, "%s_%s", td->prefix, ic->acc->user );
- msg = g_strdup_printf( "To finish OAuth authentication, please visit "
- "%s and respond with the resulting PIN code.",
- info->auth_url );
- imcb_buddy_msg( ic, name, msg, 0, 0 );
- g_free( msg );
- }
- else if( info->stage == OAUTH_ACCESS_TOKEN )
- {
- if( info->token == NULL || info->token_secret == NULL )
- {
- imcb_error( ic, "OAuth error: %s", twitter_parse_error( info->http ) );
- imc_logout( ic, TRUE );
+
+ sprintf(name, "%s_%s", td->prefix, ic->acc->user);
+ msg = g_strdup_printf("To finish OAuth authentication, please visit "
+ "%s and respond with the resulting PIN code.",
+ info->auth_url);
+ imcb_buddy_msg(ic, name, msg, 0, 0);
+ g_free(msg);
+ } else if (info->stage == OAUTH_ACCESS_TOKEN) {
+ if (info->token == NULL || info->token_secret == NULL) {
+ imcb_error(ic, "OAuth error: %s", twitter_parse_error(info->http));
+ imc_logout(ic, TRUE);
return FALSE;
- }
- else
- {
- const char *sn = oauth_params_get( &info->params, "screen_name" );
-
- if( sn != NULL && ic->acc->prpl->handle_cmp( sn, ic->acc->user ) != 0 )
- {
- imcb_log( ic, "Warning: You logged in via OAuth as %s "
- "instead of %s.", sn, ic->acc->user );
+ } else {
+ const char *sn = oauth_params_get(&info->params, "screen_name");
+
+ if (sn != NULL && ic->acc->prpl->handle_cmp(sn, ic->acc->user) != 0) {
+ imcb_log(ic, "Warning: You logged in via OAuth as %s "
+ "instead of %s.", sn, ic->acc->user);
}
}
-
+
/* IM mods didn't do this so far and it's ugly but I should
be able to get away with it... */
- g_free( ic->acc->pass );
- ic->acc->pass = oauth_to_string( info );
-
- twitter_login_finish( ic );
+ g_free(ic->acc->pass);
+ ic->acc->pass = oauth_to_string(info);
+
+ twitter_login_finish(ic);
}
-
+
return TRUE;
}
-static char *set_eval_mode( set_t *set, char *value )
+static char *set_eval_mode(set_t * set, char *value)
{
- if( g_strcasecmp( value, "one" ) == 0 ||
- g_strcasecmp( value, "many" ) == 0 ||
- g_strcasecmp( value, "chat" ) == 0 )
+ if (g_strcasecmp(value, "one") == 0 ||
+ g_strcasecmp(value, "many") == 0 || g_strcasecmp(value, "chat") == 0)
return value;
else
return NULL;
}
-static gboolean twitter_length_check( struct im_connection *ic, gchar *msg )
+static gboolean twitter_length_check(struct im_connection *ic, gchar * msg)
{
- int max = set_getint( &ic->acc->set, "message_length" ), len;
-
- if( max == 0 || ( len = g_utf8_strlen( msg, -1 ) ) <= max )
+ int max = set_getint(&ic->acc->set, "message_length"), len;
+
+ if (max == 0 || (len = g_utf8_strlen(msg, -1)) <= max)
return TRUE;
-
- imcb_error( ic, "Maximum message length exceeded: %d > %d", len, max );
-
+
+ imcb_error(ic, "Maximum message length exceeded: %d > %d", len, max);
+
return FALSE;
}
-static void twitter_init( account_t *acc )
+static void twitter_init(account_t * acc)
{
set_t *s;
char *def_url;
char *def_oauth;
-
- if( strcmp( acc->prpl->name, "twitter" ) == 0 )
- {
+
+ if (strcmp(acc->prpl->name, "twitter") == 0) {
def_url = TWITTER_API_URL;
def_oauth = "true";
- }
- else /* if( strcmp( acc->prpl->name, "identica" ) == 0 ) */
- {
+ } else { /* if( strcmp( acc->prpl->name, "identica" ) == 0 ) */
+
def_url = IDENTICA_API_URL;
def_oauth = "false";
}
-
- s = set_add( &acc->set, "auto_reply_timeout", "10800", set_eval_int, acc );
-
- s = set_add( &acc->set, "base_url", def_url, NULL, acc );
+
+ s = set_add(&acc->set, "auto_reply_timeout", "10800", set_eval_int, acc);
+
+ s = set_add(&acc->set, "base_url", def_url, NULL, acc);
s->flags |= ACC_SET_OFFLINE_ONLY;
-
- s = set_add( &acc->set, "commands", "true", set_eval_bool, acc );
-
- s = set_add( &acc->set, "message_length", "140", set_eval_int, acc );
-
- s = set_add( &acc->set, "mode", "chat", set_eval_mode, acc );
+
+ s = set_add(&acc->set, "commands", "true", set_eval_bool, acc);
+
+ s = set_add(&acc->set, "message_length", "140", set_eval_int, acc);
+
+ s = set_add(&acc->set, "mode", "chat", set_eval_mode, acc);
s->flags |= ACC_SET_OFFLINE_ONLY;
-
- s = set_add( &acc->set, "show_ids", "false", set_eval_bool, acc );
+
+ s = set_add(&acc->set, "show_ids", "false", set_eval_bool, acc);
s->flags |= ACC_SET_OFFLINE_ONLY;
-
- s = set_add( &acc->set, "oauth", def_oauth, set_eval_bool, acc );
+
+ s = set_add(&acc->set, "oauth", def_oauth, set_eval_bool, acc);
}
/**
* Login method. Since the twitter API works with seperate HTTP request we
* only save the user and pass to the twitter_data object.
*/
-static void twitter_login( account_t *acc )
+static void twitter_login(account_t * acc)
{
- struct im_connection *ic = imcb_new( acc );
+ struct im_connection *ic = imcb_new(acc);
struct twitter_data *td;
- char name[strlen(acc->user)+9];
+ char name[strlen(acc->user) + 9];
url_t url;
- if( !url_set( &url, set_getstr( &ic->acc->set, "base_url" ) ) ||
- ( url.proto != PROTO_HTTP && url.proto != PROTO_HTTPS ) )
- {
- imcb_error( ic, "Incorrect API base URL: %s", set_getstr( &ic->acc->set, "base_url" ) );
- imc_logout( ic, FALSE );
+ if (!url_set(&url, set_getstr(&ic->acc->set, "base_url")) ||
+ (url.proto != PROTO_HTTP && url.proto != PROTO_HTTPS)) {
+ imcb_error(ic, "Incorrect API base URL: %s", set_getstr(&ic->acc->set, "base_url"));
+ imc_logout(ic, FALSE);
return;
}
-
- twitter_connections = g_slist_append( twitter_connections, ic );
- td = g_new0( struct twitter_data, 1 );
+
+ twitter_connections = g_slist_append(twitter_connections, ic);
+ td = g_new0(struct twitter_data, 1);
ic->proto_data = td;
-
+
td->url_ssl = url.proto == PROTO_HTTPS;
td->url_port = url.port;
- td->url_host = g_strdup( url.host );
- if( strcmp( url.file, "/" ) != 0 )
- td->url_path = g_strdup( url.file );
+ td->url_host = g_strdup(url.host);
+ if (strcmp(url.file, "/") != 0)
+ td->url_path = g_strdup(url.file);
else
- td->url_path = g_strdup( "" );
- if( g_str_has_suffix( url.host, ".com" ) )
- td->prefix = g_strndup( url.host, strlen( url.host ) - 4 );
+ td->url_path = g_strdup("");
+ if (g_str_has_suffix(url.host, ".com"))
+ td->prefix = g_strndup(url.host, strlen(url.host) - 4);
else
- td->prefix = g_strdup( url.host );
-
+ td->prefix = g_strdup(url.host);
+
td->flags |= TWITTER_HAVE_FRIENDS;
td->user = acc->user;
- if( strstr( acc->pass, "oauth_token=" ) )
- td->oauth_info = oauth_from_string( acc->pass, get_oauth_service( ic ) );
-
- sprintf( name, "%s_%s", td->prefix, acc->user );
- imcb_add_buddy( ic, name, NULL );
- imcb_buddy_status( ic, name, OPT_LOGGED_IN, NULL, NULL );
-
- if( set_getbool( &acc->set, "show_ids" ) )
- td->log = g_new0( struct twitter_log_data, TWITTER_LOG_LENGTH );
-
- imcb_log( ic, "Connecting" );
-
- twitter_login_finish( ic );
+ if (strstr(acc->pass, "oauth_token="))
+ td->oauth_info = oauth_from_string(acc->pass, get_oauth_service(ic));
+
+ sprintf(name, "%s_%s", td->prefix, acc->user);
+ imcb_add_buddy(ic, name, NULL);
+ imcb_buddy_status(ic, name, OPT_LOGGED_IN, NULL, NULL);
+
+ if (set_getbool(&acc->set, "show_ids"))
+ td->log = g_new0(struct twitter_log_data, TWITTER_LOG_LENGTH);
+
+ imcb_log(ic, "Connecting");
+
+ twitter_login_finish(ic);
}
/**
* Logout method. Just free the twitter_data.
*/
-static void twitter_logout( struct im_connection *ic )
+static void twitter_logout(struct im_connection *ic)
{
struct twitter_data *td = ic->proto_data;
-
+
// Set the status to logged out.
- ic->flags &= ~ OPT_LOGGED_IN;
+ ic->flags &= ~OPT_LOGGED_IN;
// Remove the main_loop function from the function queue.
b_event_remove(td->main_loop_id);
- if(td->home_timeline_gc)
+ if (td->home_timeline_gc)
imcb_chat_free(td->home_timeline_gc);
- if( td )
- {
- oauth_info_free( td->oauth_info );
- g_free( td->prefix );
- g_free( td->url_host );
- g_free( td->url_path );
- g_free( td->pass );
- g_free( td->log );
- g_free( td );
+ if (td) {
+ oauth_info_free(td->oauth_info);
+ g_free(td->prefix);
+ g_free(td->url_host);
+ g_free(td->url_path);
+ g_free(td->pass);
+ g_free(td->log);
+ g_free(td);
}
- twitter_connections = g_slist_remove( twitter_connections, ic );
+ twitter_connections = g_slist_remove(twitter_connections, ic);
}
-static void twitter_handle_command( struct im_connection *ic, char *message );
+static void twitter_handle_command(struct im_connection *ic, char *message);
/**
*
*/
-static int twitter_buddy_msg( struct im_connection *ic, char *who, char *message, int away )
+static int twitter_buddy_msg(struct im_connection *ic, char *who, char *message, int away)
{
struct twitter_data *td = ic->proto_data;
- int plen = strlen( td->prefix );
-
+ int plen = strlen(td->prefix);
+
if (g_strncasecmp(who, td->prefix, plen) == 0 && who[plen] == '_' &&
- g_strcasecmp(who + plen + 1, ic->acc->user) == 0)
- {
- if( set_getbool( &ic->acc->set, "oauth" ) &&
- td->oauth_info && td->oauth_info->token == NULL )
- {
- char pin[strlen(message)+1], *s;
-
- strcpy( pin, message );
- for( s = pin + sizeof( pin ) - 2; s > pin && isspace( *s ); s -- )
+ g_strcasecmp(who + plen + 1, ic->acc->user) == 0) {
+ if (set_getbool(&ic->acc->set, "oauth") &&
+ td->oauth_info && td->oauth_info->token == NULL) {
+ char pin[strlen(message) + 1], *s;
+
+ strcpy(pin, message);
+ for (s = pin + sizeof(pin) - 2; s > pin && isspace(*s); s--)
*s = '\0';
- for( s = pin; *s && isspace( *s ); s ++ ) {}
-
- if( !oauth_access_token( s, td->oauth_info ) )
- {
- imcb_error( ic, "OAuth error: %s", "Failed to send access token request" );
- imc_logout( ic, TRUE );
+ for (s = pin; *s && isspace(*s); s++) {
+ }
+
+ if (!oauth_access_token(s, td->oauth_info)) {
+ imcb_error(ic, "OAuth error: %s",
+ "Failed to send access token request");
+ imc_logout(ic, TRUE);
return FALSE;
}
- }
- else
+ } else
twitter_handle_command(ic, message);
- }
- else
- {
+ } else {
twitter_direct_messages_new(ic, who, message);
}
- return( 0 );
+ return (0);
}
/**
*
*/
-static void twitter_set_my_name( struct im_connection *ic, char *info )
+static void twitter_set_my_name(struct im_connection *ic, char *info)
{
}
-static void twitter_get_info(struct im_connection *ic, char *who)
+static void twitter_get_info(struct im_connection *ic, char *who)
{
}
-static void twitter_add_buddy( struct im_connection *ic, char *who, char *group )
+static void twitter_add_buddy(struct im_connection *ic, char *who, char *group)
{
twitter_friendships_create_destroy(ic, who, 1);
}
-static void twitter_remove_buddy( struct im_connection *ic, char *who, char *group )
+static void twitter_remove_buddy(struct im_connection *ic, char *who, char *group)
{
twitter_friendships_create_destroy(ic, who, 0);
}
-static void twitter_chat_msg( struct groupchat *c, char *message, int flags )
+static void twitter_chat_msg(struct groupchat *c, char *message, int flags)
{
- if( c && message )
- twitter_handle_command( c->ic, message );
+ if (c && message)
+ twitter_handle_command(c->ic, message);
}
-static void twitter_chat_invite( struct groupchat *c, char *who, char *message )
+static void twitter_chat_invite(struct groupchat *c, char *who, char *message)
{
}
-static void twitter_chat_leave( struct groupchat *c )
+static void twitter_chat_leave(struct groupchat *c)
{
struct twitter_data *td = c->ic->proto_data;
-
- if( c != td->home_timeline_gc )
- return; /* WTF? */
-
+
+ if (c != td->home_timeline_gc)
+ return; /* WTF? */
+
/* If the user leaves the channel: Fine. Rejoin him/her once new
tweets come in. */
imcb_chat_free(td->home_timeline_gc);
td->home_timeline_gc = NULL;
}
-static void twitter_keepalive( struct im_connection *ic )
+static void twitter_keepalive(struct im_connection *ic)
{
}
-static void twitter_add_permit( struct im_connection *ic, char *who )
+static void twitter_add_permit(struct im_connection *ic, char *who)
{
}
-static void twitter_rem_permit( struct im_connection *ic, char *who )
+static void twitter_rem_permit(struct im_connection *ic, char *who)
{
}
-static void twitter_add_deny( struct im_connection *ic, char *who )
+static void twitter_add_deny(struct im_connection *ic, char *who)
{
}
-static void twitter_rem_deny( struct im_connection *ic, char *who )
+static void twitter_rem_deny(struct im_connection *ic, char *who)
{
}
//static char *twitter_set_display_name( set_t *set, char *value )
//{
-// return value;
+// return value;
//}
-static void twitter_buddy_data_add( struct bee_user *bu )
+static void twitter_buddy_data_add(struct bee_user *bu)
{
- bu->data = g_new0( struct twitter_user_data, 1 );
+ bu->data = g_new0(struct twitter_user_data, 1);
}
-static void twitter_buddy_data_free( struct bee_user *bu )
+static void twitter_buddy_data_free(struct bee_user *bu)
{
- g_free( bu->data );
+ g_free(bu->data);
}
-static void twitter_handle_command( struct im_connection *ic, char *message )
+static void twitter_handle_command(struct im_connection *ic, char *message)
{
struct twitter_data *td = ic->proto_data;
char *cmds, **cmd, *new = NULL;
guint64 in_reply_to = 0;
-
- cmds = g_strdup( message );
- cmd = split_command_parts( cmds );
-
- if( cmd[0] == NULL )
- {
- g_free( cmds );
+
+ cmds = g_strdup(message);
+ cmd = split_command_parts(cmds);
+
+ if (cmd[0] == NULL) {
+ g_free(cmds);
return;
- }
- else if( !set_getbool( &ic->acc->set, "commands" ) )
- {
+ } else if (!set_getbool(&ic->acc->set, "commands")) {
/* Not supporting commands. */
- }
- else if( g_strcasecmp( cmd[0], "undo" ) == 0 )
- {
+ } else if (g_strcasecmp(cmd[0], "undo") == 0) {
guint64 id;
-
- if( cmd[1] )
- id = g_ascii_strtoull( cmd[1], NULL, 10 );
+
+ if (cmd[1])
+ id = g_ascii_strtoull(cmd[1], NULL, 10);
else
id = td->last_status_id;
-
+
/* TODO: User feedback. */
- if( id )
- twitter_status_destroy( ic, id );
+ if (id)
+ twitter_status_destroy(ic, id);
else
- twitter_msg( ic, "Could not undo last action" );
-
- g_free( cmds );
+ twitter_msg(ic, "Could not undo last action");
+
+ g_free(cmds);
return;
- }
- else if( g_strcasecmp( cmd[0], "follow" ) == 0 && cmd[1] )
- {
- twitter_add_buddy( ic, cmd[1], NULL );
- g_free( cmds );
+ } else if (g_strcasecmp(cmd[0], "follow") == 0 && cmd[1]) {
+ twitter_add_buddy(ic, cmd[1], NULL);
+ g_free(cmds);
return;
- }
- else if( g_strcasecmp( cmd[0], "unfollow" ) == 0 && cmd[1] )
- {
- twitter_remove_buddy( ic, cmd[1], NULL );
- g_free( cmds );
+ } else if (g_strcasecmp(cmd[0], "unfollow") == 0 && cmd[1]) {
+ twitter_remove_buddy(ic, cmd[1], NULL);
+ g_free(cmds);
return;
- }
- else if( g_strcasecmp( cmd[0], "rt" ) == 0 && cmd[1] )
- {
+ } else if (g_strcasecmp(cmd[0], "rt") == 0 && cmd[1]) {
struct twitter_user_data *tud;
bee_user_t *bu;
guint64 id;
-
- if( ( bu = bee_user_by_handle( ic->bee, ic, cmd[1] ) ) &&
- ( tud = bu->data ) && tud->last_id )
+
+ if ((bu = bee_user_by_handle(ic->bee, ic, cmd[1])) &&
+ (tud = bu->data) && tud->last_id)
id = tud->last_id;
- else
- {
- id = g_ascii_strtoull( cmd[1], NULL, 10 );
- if( id < TWITTER_LOG_LENGTH && td->log )
+ else {
+ id = g_ascii_strtoull(cmd[1], NULL, 10);
+ if (id < TWITTER_LOG_LENGTH && td->log)
id = td->log[id].id;
}
-
+
td->last_status_id = 0;
- if( id )
- twitter_status_retweet( ic, id );
+ if (id)
+ twitter_status_retweet(ic, id);
else
- twitter_msg( ic, "User `%s' does not exist or didn't "
- "post any statuses recently", cmd[1] );
-
- g_free( cmds );
+ twitter_msg(ic, "User `%s' does not exist or didn't "
+ "post any statuses recently", cmd[1]);
+
+ g_free(cmds);
return;
- }
- else if( g_strcasecmp( cmd[0], "reply" ) == 0 && cmd[1] && cmd[2] )
- {
+ } else if (g_strcasecmp(cmd[0], "reply") == 0 && cmd[1] && cmd[2]) {
struct twitter_user_data *tud;
bee_user_t *bu = NULL;
guint64 id = 0;
-
- if( ( bu = bee_user_by_handle( ic->bee, ic, cmd[1] ) ) &&
- ( tud = bu->data ) && tud->last_id )
- {
+
+ if ((bu = bee_user_by_handle(ic->bee, ic, cmd[1])) &&
+ (tud = bu->data) && tud->last_id) {
id = tud->last_id;
- }
- else if( ( id = g_ascii_strtoull( cmd[1], NULL, 10 ) ) &&
- ( id < TWITTER_LOG_LENGTH ) && td->log )
- {
+ } else if ((id = g_ascii_strtoull(cmd[1], NULL, 10)) &&
+ (id < TWITTER_LOG_LENGTH) && td->log) {
bu = td->log[id].bu;
- if( g_slist_find( ic->bee->users, bu ) )
+ if (g_slist_find(ic->bee->users, bu))
id = td->log[id].id;
else
bu = NULL;
}
- if( !id || !bu )
- {
- twitter_msg( ic, "User `%s' does not exist or didn't "
- "post any statuses recently", cmd[1] );
+ if (!id || !bu) {
+ twitter_msg(ic, "User `%s' does not exist or didn't "
+ "post any statuses recently", cmd[1]);
return;
}
- message = new = g_strdup_printf( "@%s %s", bu->handle,
- message + ( cmd[2] - cmd[0] ) );
+ message = new = g_strdup_printf("@%s %s", bu->handle, message + (cmd[2] - cmd[0]));
in_reply_to = id;
- }
- else if( g_strcasecmp( cmd[0], "post" ) == 0 )
- {
+ } else if (g_strcasecmp(cmd[0], "post") == 0) {
message += 5;
}
-
+
{
char *s;
bee_user_t *bu;
-
- if( !twitter_length_check( ic, message ) )
- {
- g_free( new );
- g_free( cmds );
- return;
+
+ if (!twitter_length_check(ic, message)) {
+ g_free(new);
+ g_free(cmds);
+ return;
}
-
- s = cmd[0] + strlen( cmd[0] ) - 1;
- if( !new && s > cmd[0] && ( *s == ':' || *s == ',' ) )
- {
+
+ s = cmd[0] + strlen(cmd[0]) - 1;
+ if (!new && s > cmd[0] && (*s == ':' || *s == ',')) {
*s = '\0';
-
- if( ( bu = bee_user_by_handle( ic->bee, ic, cmd[0] ) ) )
- {
+
+ if ((bu = bee_user_by_handle(ic->bee, ic, cmd[0]))) {
struct twitter_user_data *tud = bu->data;
-
- new = g_strdup_printf( "@%s %s", bu->handle,
- message + ( s - cmd[0] ) + 2 );
+
+ new = g_strdup_printf("@%s %s", bu->handle,
+ message + (s - cmd[0]) + 2);
message = new;
-
- if( time( NULL ) < tud->last_time +
- set_getint( &ic->acc->set, "auto_reply_timeout" ) )
+
+ if (time(NULL) < tud->last_time +
+ set_getint(&ic->acc->set, "auto_reply_timeout"))
in_reply_to = tud->last_id;
}
}
-
+
/* If the user runs undo between this request and its response
this would delete the second-last Tweet. Prevent that. */
td->last_status_id = 0;
- twitter_post_status( ic, message, in_reply_to );
- g_free( new );
+ twitter_post_status(ic, message, in_reply_to);
+ g_free(new);
}
- g_free( cmds );
+ g_free(cmds);
}
void twitter_initmodule()
{
struct prpl *ret = g_new0(struct prpl, 1);
-
+
ret->options = OPT_NOOTR;
ret->name = "twitter";
ret->login = twitter_login;
@@ -624,7 +579,7 @@ void twitter_initmodule()
ret->buddy_data_add = twitter_buddy_data_add;
ret->buddy_data_free = twitter_buddy_data_free;
ret->handle_cmp = g_strcasecmp;
-
+
register_protocol(ret);
/* And an identi.ca variant: */
diff --git a/protocols/twitter/twitter_http.c b/protocols/twitter/twitter_http.c
index ff17f5f4..dbac5461 100644
--- a/protocols/twitter/twitter_http.c
+++ b/protocols/twitter/twitter_http.c
@@ -26,7 +26,7 @@
* Some funtions within this file have been copied from other files within *
* BitlBee. *
* *
-****************************************************************************/
+****************************************************************************/
#include "twitter.h"
#include "bitlbee.h"
@@ -40,13 +40,14 @@
#include "twitter_http.h"
-static char *twitter_url_append(char *url, char *key, char* value);
+static char *twitter_url_append(char *url, char *key, char *value);
/**
* Do a request.
* This is actually pretty generic function... Perhaps it should move to the lib/http_client.c
*/
-void *twitter_http(struct im_connection *ic, char *url_string, http_input_function func, gpointer data, int is_post, char** arguments, int arguments_len)
+void *twitter_http(struct im_connection *ic, char *url_string, http_input_function func,
+ gpointer data, int is_post, char **arguments, int arguments_len)
{
struct twitter_data *td = ic->proto_data;
char *tmp;
@@ -57,59 +58,51 @@ void *twitter_http(struct im_connection *ic, char *url_string, http_input_functi
url_arguments = g_strdup("");
// Construct the url arguments.
- if (arguments_len != 0)
- {
+ if (arguments_len != 0) {
int i;
- for (i=0; i<arguments_len; i+=2)
- {
- tmp = twitter_url_append(url_arguments, arguments[i], arguments[i+1]);
+ for (i = 0; i < arguments_len; i += 2) {
+ tmp = twitter_url_append(url_arguments, arguments[i], arguments[i + 1]);
g_free(url_arguments);
url_arguments = tmp;
}
}
-
// Make the request.
g_string_printf(request, "%s %s%s%s%s HTTP/1.0\r\n"
- "Host: %s\r\n"
- "User-Agent: BitlBee " BITLBEE_VERSION " " ARCH "/" CPU "\r\n",
- is_post ? "POST" : "GET",
- td->url_path, url_string,
- is_post ? "" : "?", is_post ? "" : url_arguments,
- td->url_host);
+ "Host: %s\r\n"
+ "User-Agent: BitlBee " BITLBEE_VERSION " " ARCH "/" CPU "\r\n",
+ is_post ? "POST" : "GET",
+ td->url_path, url_string,
+ is_post ? "" : "?", is_post ? "" : url_arguments, td->url_host);
// If a pass and user are given we append them to the request.
- if (td->oauth_info)
- {
+ if (td->oauth_info) {
char *full_header;
char *full_url;
-
- full_url = g_strconcat(set_getstr(&ic->acc->set, "base_url" ), url_string, NULL);
+
+ full_url = g_strconcat(set_getstr(&ic->acc->set, "base_url"), url_string, NULL);
full_header = oauth_http_header(td->oauth_info, is_post ? "POST" : "GET",
- full_url, url_arguments);
-
+ full_url, url_arguments);
+
g_string_append_printf(request, "Authorization: %s\r\n", full_header);
g_free(full_header);
g_free(full_url);
- }
- else
- {
- char userpass[strlen(ic->acc->user)+2+strlen(ic->acc->pass)];
+ } else {
+ char userpass[strlen(ic->acc->user) + 2 + strlen(ic->acc->pass)];
char *userpass_base64;
-
+
g_snprintf(userpass, sizeof(userpass), "%s:%s", ic->acc->user, ic->acc->pass);
- userpass_base64 = base64_encode((unsigned char*)userpass, strlen(userpass));
+ userpass_base64 = base64_encode((unsigned char *) userpass, strlen(userpass));
g_string_append_printf(request, "Authorization: Basic %s\r\n", userpass_base64);
- g_free( userpass_base64 );
+ g_free(userpass_base64);
}
// Do POST stuff..
- if (is_post)
- {
+ if (is_post) {
// Append the Content-Type and url-encoded arguments.
g_string_append_printf(request,
- "Content-Type: application/x-www-form-urlencoded\r\n"
- "Content-Length: %zd\r\n\r\n%s",
- strlen(url_arguments), url_arguments);
+ "Content-Type: application/x-www-form-urlencoded\r\n"
+ "Content-Length: %zd\r\n\r\n%s",
+ strlen(url_arguments), url_arguments);
} else {
// Append an extra \r\n to end the request...
g_string_append(request, "\r\n");
@@ -117,12 +110,12 @@ void *twitter_http(struct im_connection *ic, char *url_string, http_input_functi
ret = http_dorequest(td->url_host, td->url_port, td->url_ssl, request->str, func, data);
- g_free( url_arguments );
- g_string_free( request, TRUE );
+ g_free(url_arguments);
+ g_string_free(request, TRUE);
return ret;
}
-static char *twitter_url_append(char *url, char *key, char* value)
+static char *twitter_url_append(char *url, char *key, char *value)
{
char *key_encoded = g_strndup(key, 3 * strlen(key));
http_encode(key_encoded);
diff --git a/protocols/twitter/twitter_lib.c b/protocols/twitter/twitter_lib.c
index 472ce944..cdff9895 100644
--- a/protocols/twitter/twitter_lib.c
+++ b/protocols/twitter/twitter_lib.c
@@ -103,9 +103,9 @@ static void txl_free(struct twitter_xml_list *txl)
GSList *l;
if (txl == NULL)
return;
- for ( l = txl->list; l ; l = g_slist_next(l) )
+ for (l = txl->list; l; l = g_slist_next(l))
if (txl->type == TXL_STATUS)
- txs_free((struct twitter_xml_status *)l->data);
+ txs_free((struct twitter_xml_status *) l->data);
else if (txl->type == TXL_ID)
g_free(l->data);
g_slist_free(txl->list);
@@ -120,22 +120,19 @@ static void twitter_add_buddy(struct im_connection *ic, char *name, const char *
struct twitter_data *td = ic->proto_data;
// Check if the buddy is allready in the buddy list.
- if (!bee_user_by_handle( ic->bee, ic, name ))
- {
+ if (!bee_user_by_handle(ic->bee, ic, name)) {
char *mode = set_getstr(&ic->acc->set, "mode");
-
+
// The buddy is not in the list, add the buddy and set the status to logged in.
- imcb_add_buddy( ic, name, NULL );
- imcb_rename_buddy( ic, name, fullname );
- if (g_strcasecmp(mode, "chat") == 0)
- {
+ imcb_add_buddy(ic, name, NULL);
+ imcb_rename_buddy(ic, name, fullname);
+ if (g_strcasecmp(mode, "chat") == 0) {
/* Necessary so that nicks always get translated to the
exact Twitter username. */
- imcb_buddy_nick_hint( ic, name, name );
- imcb_chat_add_buddy( td->home_timeline_gc, name );
- }
- else if (g_strcasecmp(mode, "many") == 0)
- imcb_buddy_status( ic, name, OPT_LOGGED_IN, NULL, NULL );
+ imcb_buddy_nick_hint(ic, name, name);
+ imcb_chat_add_buddy(td->home_timeline_gc, name);
+ } else if (g_strcasecmp(mode, "many") == 0)
+ imcb_buddy_status(ic, name, OPT_LOGGED_IN, NULL, NULL);
}
}
@@ -146,25 +143,22 @@ char *twitter_parse_error(struct http_request *req)
static char *ret = NULL;
struct xt_parser *xp = NULL;
struct xt_node *node;
-
+
g_free(ret);
ret = NULL;
-
- if (req->body_size > 0)
- {
+
+ if (req->body_size > 0) {
xp = xt_new(NULL, NULL);
xt_feed(xp, req->reply_body, req->body_size);
-
+
if ((node = xt_find_node(xp->root, "hash")) &&
- (node = xt_find_node(node->children, "error")) &&
- node->text_len > 0)
- {
+ (node = xt_find_node(node->children, "error")) && node->text_len > 0) {
ret = g_strdup_printf("%s (%s)", req->status_string, node->text);
}
-
+
xt_free(xp);
}
-
+
return ret ? ret : req->status_string;
}
@@ -175,10 +169,10 @@ static void twitter_http_get_friends_ids(struct http_request *req);
*/
void twitter_get_friends_ids(struct im_connection *ic, gint64 next_cursor)
{
- // Primitive, but hey! It works...
- char* args[2];
+ // Primitive, but hey! It works...
+ char *args[2];
args[0] = "cursor";
- args[1] = g_strdup_printf ("%lld", (long long) next_cursor);
+ args[1] = g_strdup_printf("%lld", (long long) next_cursor);
twitter_http(ic, TWITTER_FRIENDS_IDS_URL, twitter_http_get_friends_ids, ic, 0, args, 2);
g_free(args[1]);
@@ -187,13 +181,13 @@ void twitter_get_friends_ids(struct im_connection *ic, gint64 next_cursor)
/**
* Function to help fill a list.
*/
-static xt_status twitter_xt_next_cursor( struct xt_node *node, struct twitter_xml_list *txl )
+static xt_status twitter_xt_next_cursor(struct xt_node *node, struct twitter_xml_list *txl)
{
char *end = NULL;
-
- if( node->text )
- txl->next_cursor = g_ascii_strtoll( node->text, &end, 10 );
- if( end == NULL )
+
+ if (node->text)
+ txl->next_cursor = g_ascii_strtoll(node->text, &end, 10);
+ if (end == NULL)
txl->next_cursor = -1;
return XT_HANDLED;
@@ -202,24 +196,21 @@ static xt_status twitter_xt_next_cursor( struct xt_node *node, struct twitter_xm
/**
* Fill a list of ids.
*/
-static xt_status twitter_xt_get_friends_id_list( struct xt_node *node, struct twitter_xml_list *txl )
+static xt_status twitter_xt_get_friends_id_list(struct xt_node *node, struct twitter_xml_list *txl)
{
struct xt_node *child;
-
+
// Set the list type.
txl->type = TXL_ID;
// The root <statuses> node should hold the list of statuses <status>
// Walk over the nodes children.
- for( child = node->children ; child ; child = child->next )
- {
- if ( g_strcasecmp( "id", child->name ) == 0)
- {
+ for (child = node->children; child; child = child->next) {
+ if (g_strcasecmp("id", child->name) == 0) {
// Add the item to the list.
- txl->list = g_slist_append (txl->list, g_memdup( child->text, child->text_len + 1 ));
- }
- else if ( g_strcasecmp( "next_cursor", child->name ) == 0)
- {
+ txl->list =
+ g_slist_append(txl->list, g_memdup(child->text, child->text_len + 1));
+ } else if (g_strcasecmp("next_cursor", child->name) == 0) {
twitter_xt_next_cursor(child, txl);
}
}
@@ -240,9 +231,9 @@ static void twitter_http_get_friends_ids(struct http_request *req)
ic = req->data;
// Check if the connection is still active.
- if( !g_slist_find( twitter_connections, ic ) )
+ if (!g_slist_find(twitter_connections, ic))
return;
-
+
td = ic->proto_data;
// Check if the HTTP request went well.
@@ -250,7 +241,7 @@ static void twitter_http_get_friends_ids(struct http_request *req)
// It didn't go well, output the error and return.
if (++td->http_fails >= 5)
imcb_error(ic, "Could not retrieve friends: %s", twitter_parse_error(req));
-
+
return;
} else {
td->http_fails = 0;
@@ -259,10 +250,10 @@ static void twitter_http_get_friends_ids(struct http_request *req)
txl = g_new0(struct twitter_xml_list, 1);
// Parse the data.
- parser = xt_new( NULL, txl );
- xt_feed( parser, req->reply_body, req->body_size );
+ parser = xt_new(NULL, txl);
+ xt_feed(parser, req->reply_body, req->body_size);
twitter_xt_get_friends_id_list(parser->root, txl);
- xt_free( parser );
+ xt_free(parser);
if (txl->next_cursor)
twitter_get_friends_ids(ic, txl->next_cursor);
@@ -276,20 +267,16 @@ static void twitter_http_get_friends_ids(struct http_request *req)
* - the name and
* - the screen_name.
*/
-static xt_status twitter_xt_get_user( struct xt_node *node, struct twitter_xml_user *txu )
+static xt_status twitter_xt_get_user(struct xt_node *node, struct twitter_xml_user *txu)
{
struct xt_node *child;
// Walk over the nodes children.
- for( child = node->children ; child ; child = child->next )
- {
- if ( g_strcasecmp( "name", child->name ) == 0)
- {
- txu->name = g_memdup( child->text, child->text_len + 1 );
- }
- else if (g_strcasecmp( "screen_name", child->name ) == 0)
- {
- txu->screen_name = g_memdup( child->text, child->text_len + 1 );
+ for (child = node->children; child; child = child->next) {
+ if (g_strcasecmp("name", child->name) == 0) {
+ txu->name = g_memdup(child->text, child->text_len + 1);
+ } else if (g_strcasecmp("screen_name", child->name) == 0) {
+ txu->screen_name = g_memdup(child->text, child->text_len + 1);
}
}
return XT_HANDLED;
@@ -300,7 +287,7 @@ static xt_status twitter_xt_get_user( struct xt_node *node, struct twitter_xml_u
* It sets:
* - all <user>s from the <users> element.
*/
-static xt_status twitter_xt_get_users( struct xt_node *node, struct twitter_xml_list *txl )
+static xt_status twitter_xt_get_users(struct xt_node *node, struct twitter_xml_list *txl)
{
struct twitter_xml_user *txu;
struct xt_node *child;
@@ -310,14 +297,12 @@ static xt_status twitter_xt_get_users( struct xt_node *node, struct twitter_xml_
// The root <users> node should hold the list of users <user>
// Walk over the nodes children.
- for( child = node->children ; child ; child = child->next )
- {
- if ( g_strcasecmp( "user", child->name ) == 0)
- {
+ for (child = node->children; child; child = child->next) {
+ if (g_strcasecmp("user", child->name) == 0) {
txu = g_new0(struct twitter_xml_user, 1);
twitter_xt_get_user(child, txu);
// Put the item in the front of the list.
- txl->list = g_slist_prepend (txl->list, txu);
+ txl->list = g_slist_prepend(txl->list, txu);
}
}
@@ -330,7 +315,7 @@ static xt_status twitter_xt_get_users( struct xt_node *node, struct twitter_xml_
* It sets:
* - the next_cursor.
*/
-static xt_status twitter_xt_get_user_list( struct xt_node *node, struct twitter_xml_list *txl )
+static xt_status twitter_xt_get_user_list(struct xt_node *node, struct twitter_xml_list *txl)
{
struct xt_node *child;
@@ -339,14 +324,10 @@ static xt_status twitter_xt_get_user_list( struct xt_node *node, struct twitter_
// The root <user_list> node should hold a users <users> element
// Walk over the nodes children.
- for( child = node->children ; child ; child = child->next )
- {
- if ( g_strcasecmp( "users", child->name ) == 0)
- {
+ for (child = node->children; child; child = child->next) {
+ if (g_strcasecmp("users", child->name) == 0) {
twitter_xt_get_users(child, txl);
- }
- else if ( g_strcasecmp( "next_cursor", child->name ) == 0)
- {
+ } else if (g_strcasecmp("next_cursor", child->name) == 0) {
twitter_xt_next_cursor(child, txl);
}
}
@@ -368,66 +349,50 @@ static xt_status twitter_xt_get_user_list( struct xt_node *node, struct twitter_
* - the status id and
* - the user in a twitter_xml_user struct.
*/
-static xt_status twitter_xt_get_status( struct xt_node *node, struct twitter_xml_status *txs )
+static xt_status twitter_xt_get_status(struct xt_node *node, struct twitter_xml_status *txs)
{
struct xt_node *child, *rt = NULL;
gboolean truncated = FALSE;
// Walk over the nodes children.
- for( child = node->children ; child ; child = child->next )
- {
- if ( g_strcasecmp( "text", child->name ) == 0)
- {
- txs->text = g_memdup( child->text, child->text_len + 1 );
- }
- else if (g_strcasecmp( "truncated", child->name ) == 0 && child->text)
- {
+ for (child = node->children; child; child = child->next) {
+ if (g_strcasecmp("text", child->name) == 0) {
+ txs->text = g_memdup(child->text, child->text_len + 1);
+ } else if (g_strcasecmp("truncated", child->name) == 0 && child->text) {
truncated = bool2int(child->text);
- }
- else if (g_strcasecmp( "retweeted_status", child->name ) == 0)
- {
+ } else if (g_strcasecmp("retweeted_status", child->name) == 0) {
rt = child;
- }
- else if (g_strcasecmp( "created_at", child->name ) == 0)
- {
+ } else if (g_strcasecmp("created_at", child->name) == 0) {
struct tm parsed;
-
+
/* Very sensitive to changes to the formatting of
this field. :-( Also assumes the timezone used
is UTC since C time handling functions suck. */
- if( strptime( child->text, TWITTER_TIME_FORMAT, &parsed ) != NULL )
- txs->created_at = mktime_utc( &parsed );
- }
- else if (g_strcasecmp( "user", child->name ) == 0)
- {
+ if (strptime(child->text, TWITTER_TIME_FORMAT, &parsed) != NULL)
+ txs->created_at = mktime_utc(&parsed);
+ } else if (g_strcasecmp("user", child->name) == 0) {
txs->user = g_new0(struct twitter_xml_user, 1);
- twitter_xt_get_user( child, txs->user );
- }
- else if (g_strcasecmp( "id", child->name ) == 0)
- {
- txs->id = g_ascii_strtoull (child->text, NULL, 10);
- }
- else if (g_strcasecmp( "in_reply_to_status_id", child->name ) == 0)
- {
- txs->reply_to = g_ascii_strtoull (child->text, NULL, 10);
+ twitter_xt_get_user(child, txs->user);
+ } else if (g_strcasecmp("id", child->name) == 0) {
+ txs->id = g_ascii_strtoull(child->text, NULL, 10);
+ } else if (g_strcasecmp("in_reply_to_status_id", child->name) == 0) {
+ txs->reply_to = g_ascii_strtoull(child->text, NULL, 10);
}
}
-
+
/* If it's a truncated retweet, get the original because dots suck. */
- if (truncated && rt)
- {
+ if (truncated && rt) {
struct twitter_xml_status *rtxs = g_new0(struct twitter_xml_status, 1);
- if (twitter_xt_get_status(rt, rtxs) != XT_HANDLED)
- {
+ if (twitter_xt_get_status(rt, rtxs) != XT_HANDLED) {
txs_free(rtxs);
return XT_HANDLED;
}
-
+
g_free(txs->text);
txs->text = g_strdup_printf("RT @%s: %s", rtxs->user->screen_name, rtxs->text);
txs_free(rtxs);
}
-
+
return XT_HANDLED;
}
@@ -437,7 +402,8 @@ static xt_status twitter_xt_get_status( struct xt_node *node, struct twitter_xml
* - all <status>es within the <status> element and
* - the next_cursor.
*/
-static xt_status twitter_xt_get_status_list( struct im_connection *ic, struct xt_node *node, struct twitter_xml_list *txl )
+static xt_status twitter_xt_get_status_list(struct im_connection *ic, struct xt_node *node,
+ struct twitter_xml_list *txl)
{
struct twitter_xml_status *txs;
struct xt_node *child;
@@ -448,29 +414,23 @@ static xt_status twitter_xt_get_status_list( struct im_connection *ic, struct xt
// The root <statuses> node should hold the list of statuses <status>
// Walk over the nodes children.
- for( child = node->children ; child ; child = child->next )
- {
- if ( g_strcasecmp( "status", child->name ) == 0)
- {
+ for (child = node->children; child; child = child->next) {
+ if (g_strcasecmp("status", child->name) == 0) {
txs = g_new0(struct twitter_xml_status, 1);
twitter_xt_get_status(child, txs);
// Put the item in the front of the list.
- txl->list = g_slist_prepend (txl->list, txs);
-
+ txl->list = g_slist_prepend(txl->list, txs);
+
if (txs->user && txs->user->screen_name &&
- (bu = bee_user_by_handle(ic->bee, ic, txs->user->screen_name)))
- {
+ (bu = bee_user_by_handle(ic->bee, ic, txs->user->screen_name))) {
struct twitter_user_data *tud = bu->data;
-
- if (txs->id > tud->last_id)
- {
+
+ if (txs->id > tud->last_id) {
tud->last_id = txs->id;
tud->last_time = txs->created_at;
}
}
- }
- else if ( g_strcasecmp( "next_cursor", child->name ) == 0)
- {
+ } else if (g_strcasecmp("next_cursor", child->name) == 0) {
twitter_xt_next_cursor(child, txl);
}
}
@@ -487,15 +447,16 @@ void twitter_get_home_timeline(struct im_connection *ic, gint64 next_cursor)
{
struct twitter_data *td = ic->proto_data;
- char* args[4];
+ char *args[4];
args[0] = "cursor";
- args[1] = g_strdup_printf ("%lld", (long long) next_cursor);
+ args[1] = g_strdup_printf("%lld", (long long) next_cursor);
if (td->home_timeline_id) {
args[2] = "since_id";
- args[3] = g_strdup_printf ("%llu", (long long unsigned int) td->home_timeline_id);
+ args[3] = g_strdup_printf("%llu", (long long unsigned int) td->home_timeline_id);
}
- twitter_http(ic, TWITTER_HOME_TIMELINE_URL, twitter_http_get_home_timeline, ic, 0, args, td->home_timeline_id ? 4 : 2);
+ twitter_http(ic, TWITTER_HOME_TIMELINE_URL, twitter_http_get_home_timeline, ic, 0, args,
+ td->home_timeline_id ? 4 : 2);
g_free(args[1]);
if (td->home_timeline_id) {
@@ -504,37 +465,33 @@ void twitter_get_home_timeline(struct im_connection *ic, gint64 next_cursor)
}
static char *twitter_msg_add_id(struct im_connection *ic,
- struct twitter_xml_status *txs, const char *prefix)
+ struct twitter_xml_status *txs, const char *prefix)
{
struct twitter_data *td = ic->proto_data;
char *ret = NULL;
-
- if (!set_getbool(&ic->acc->set, "show_ids"))
- {
+
+ if (!set_getbool(&ic->acc->set, "show_ids")) {
if (*prefix)
return g_strconcat(prefix, txs->text, NULL);
else
return NULL;
}
-
+
td->log[td->log_id].id = txs->id;
td->log[td->log_id].bu = bee_user_by_handle(ic->bee, ic, txs->user->screen_name);
- if (txs->reply_to)
- {
+ if (txs->reply_to) {
int i;
- for (i = 0; i < TWITTER_LOG_LENGTH; i ++)
- if (td->log[i].id == txs->reply_to)
- {
- ret = g_strdup_printf( "\002[\002%02d->%02d\002]\002 %s%s",
- td->log_id, i, prefix, txs->text);
+ for (i = 0; i < TWITTER_LOG_LENGTH; i++)
+ if (td->log[i].id == txs->reply_to) {
+ ret = g_strdup_printf("\002[\002%02d->%02d\002]\002 %s%s",
+ td->log_id, i, prefix, txs->text);
break;
}
}
if (ret == NULL)
- ret = g_strdup_printf( "\002[\002%02d\002]\002 %s%s",
- td->log_id, prefix, txs->text);
+ ret = g_strdup_printf("\002[\002%02d\002]\002 %s%s", td->log_id, prefix, txs->text);
td->log_id = (td->log_id + 1) % TWITTER_LOG_LENGTH;
-
+
return ret;
}
@@ -544,25 +501,24 @@ static void twitter_groupchat_init(struct im_connection *ic)
struct groupchat *gc;
struct twitter_data *td = ic->proto_data;
GSList *l;
-
- td->home_timeline_gc = gc = imcb_chat_new( ic, "home/timeline" );
-
- name_hint = g_strdup_printf( "%s_%s", td->prefix, ic->acc->user );
- imcb_chat_name_hint( gc, name_hint );
- g_free( name_hint );
-
- for( l = ic->bee->users; l; l = l->next )
- {
+
+ td->home_timeline_gc = gc = imcb_chat_new(ic, "home/timeline");
+
+ name_hint = g_strdup_printf("%s_%s", td->prefix, ic->acc->user);
+ imcb_chat_name_hint(gc, name_hint);
+ g_free(name_hint);
+
+ for (l = ic->bee->users; l; l = l->next) {
bee_user_t *bu = l->data;
- if( bu->ic == ic )
- imcb_chat_add_buddy( td->home_timeline_gc, bu->handle );
+ if (bu->ic == ic)
+ imcb_chat_add_buddy(td->home_timeline_gc, bu->handle);
}
}
/**
* Function that is called to see the statuses in a groupchat window.
*/
-static void twitter_groupchat(struct im_connection *ic, GSList *list)
+static void twitter_groupchat(struct im_connection *ic, GSList * list)
{
struct twitter_data *td = ic->proto_data;
GSList *l = NULL;
@@ -572,33 +528,32 @@ static void twitter_groupchat(struct im_connection *ic, GSList *list)
// Create a new groupchat if it does not exsist.
if (!td->home_timeline_gc)
twitter_groupchat_init(ic);
-
+
gc = td->home_timeline_gc;
if (!gc->joined)
- imcb_chat_add_buddy( gc, ic->acc->user );
+ imcb_chat_add_buddy(gc, ic->acc->user);
- for ( l = list; l ; l = g_slist_next(l) )
- {
+ for (l = list; l; l = g_slist_next(l)) {
char *msg;
-
+
status = l->data;
if (status->user == NULL || status->text == NULL)
continue;
twitter_add_buddy(ic, status->user->screen_name, status->user->name);
-
+
strip_html(status->text);
msg = twitter_msg_add_id(ic, status, "");
-
+
// Say it!
if (g_strcasecmp(td->user, status->user->screen_name) == 0)
imcb_chat_log(gc, "You: %s", msg ? msg : status->text);
else
imcb_chat_msg(gc, status->user->screen_name,
- msg ? msg : status->text, 0, status->created_at );
-
+ msg ? msg : status->text, 0, status->created_at);
+
g_free(msg);
-
+
// Update the home_timeline_id to hold the highest id, so that by the next request
// we won't pick up the updates already in the list.
td->home_timeline_id = MAX(td->home_timeline_id, status->id);
@@ -608,48 +563,45 @@ static void twitter_groupchat(struct im_connection *ic, GSList *list)
/**
* Function that is called to see statuses as private messages.
*/
-static void twitter_private_message_chat(struct im_connection *ic, GSList *list)
+static void twitter_private_message_chat(struct im_connection *ic, GSList * list)
{
struct twitter_data *td = ic->proto_data;
GSList *l = NULL;
struct twitter_xml_status *status;
char from[MAX_STRING];
gboolean mode_one;
-
- mode_one = g_strcasecmp( set_getstr( &ic->acc->set, "mode" ), "one" ) == 0;
- if( mode_one )
- {
- g_snprintf( from, sizeof( from ) - 1, "%s_%s", td->prefix, ic->acc->user );
- from[MAX_STRING-1] = '\0';
+ mode_one = g_strcasecmp(set_getstr(&ic->acc->set, "mode"), "one") == 0;
+
+ if (mode_one) {
+ g_snprintf(from, sizeof(from) - 1, "%s_%s", td->prefix, ic->acc->user);
+ from[MAX_STRING - 1] = '\0';
}
-
- for ( l = list; l ; l = g_slist_next(l) )
- {
+
+ for (l = list; l; l = g_slist_next(l)) {
char *prefix = NULL, *text = NULL;
-
+
status = l->data;
-
- strip_html( status->text );
- if( mode_one )
+
+ strip_html(status->text);
+ if (mode_one)
prefix = g_strdup_printf("\002<\002%s\002>\002 ",
- status->user->screen_name);
+ status->user->screen_name);
else
twitter_add_buddy(ic, status->user->screen_name, status->user->name);
-
+
text = twitter_msg_add_id(ic, status, prefix ? prefix : "");
-
- imcb_buddy_msg( ic,
- mode_one ? from : status->user->screen_name,
- text ? text : status->text,
- 0, status->created_at );
-
+
+ imcb_buddy_msg(ic,
+ mode_one ? from : status->user->screen_name,
+ text ? text : status->text, 0, status->created_at);
+
// Update the home_timeline_id to hold the highest id, so that by the next request
// we won't pick up the updates already in the list.
- td->home_timeline_id = MAX(td->home_timeline_id, status->id);
-
- g_free( text );
- g_free( prefix );
+ td->home_timeline_id = MAX(td->home_timeline_id, status->id);
+
+ g_free(text);
+ g_free(prefix);
}
}
@@ -664,30 +616,26 @@ static void twitter_http_get_home_timeline(struct http_request *req)
struct twitter_xml_list *txl;
// Check if the connection is still active.
- if( !g_slist_find( twitter_connections, ic ) )
+ if (!g_slist_find(twitter_connections, ic))
return;
-
+
td = ic->proto_data;
// Check if the HTTP request went well.
- if (req->status_code == 200)
- {
+ if (req->status_code == 200) {
td->http_fails = 0;
if (!(ic->flags & OPT_LOGGED_IN))
imcb_connected(ic);
- }
- else if (req->status_code == 401)
- {
- imcb_error( ic, "Authentication failure" );
- imc_logout( ic, FALSE );
+ } else if (req->status_code == 401) {
+ imcb_error(ic, "Authentication failure");
+ imc_logout(ic, FALSE);
return;
- }
- else
- {
+ } else {
// It didn't go well, output the error and return.
if (++td->http_fails >= 5)
- imcb_error(ic, "Could not retrieve " TWITTER_HOME_TIMELINE_URL ": %s", twitter_parse_error(req));
-
+ imcb_error(ic, "Could not retrieve " TWITTER_HOME_TIMELINE_URL ": %s",
+ twitter_parse_error(req));
+
return;
}
@@ -695,21 +643,20 @@ static void twitter_http_get_home_timeline(struct http_request *req)
txl->list = NULL;
// Parse the data.
- parser = xt_new( NULL, txl );
- xt_feed( parser, req->reply_body, req->body_size );
+ parser = xt_new(NULL, txl);
+ xt_feed(parser, req->reply_body, req->body_size);
// The root <statuses> node should hold the list of statuses <status>
twitter_xt_get_status_list(ic, parser->root, txl);
- xt_free( parser );
+ xt_free(parser);
// See if the user wants to see the messages in a groupchat window or as private messages.
- if (txl->list == NULL)
- ;
+ if (txl->list == NULL);
else if (g_strcasecmp(set_getstr(&ic->acc->set, "mode"), "chat") == 0)
twitter_groupchat(ic, txl->list);
else
twitter_private_message_chat(ic, txl->list);
- // Free the structure.
+ // Free the structure.
txl_free(txl);
}
@@ -730,59 +677,54 @@ static void twitter_http_get_statuses_friends(struct http_request *req)
struct twitter_xml_user *user;
// Check if the connection is still active.
- if( !g_slist_find( twitter_connections, ic ) )
+ if (!g_slist_find(twitter_connections, ic))
return;
-
+
td = ic->proto_data;
-
+
// Check if the HTTP request went well.
- if (req->status_code == 401)
- {
- imcb_error( ic, "Authentication failure" );
- imc_logout( ic, FALSE );
+ if (req->status_code == 401) {
+ imcb_error(ic, "Authentication failure");
+ imc_logout(ic, FALSE);
return;
} else if (req->status_code != 200) {
// It didn't go well, output the error and return.
- imcb_error(ic, "Could not retrieve " TWITTER_SHOW_FRIENDS_URL ": %s", twitter_parse_error(req));
- imc_logout( ic, TRUE );
+ imcb_error(ic, "Could not retrieve " TWITTER_SHOW_FRIENDS_URL ": %s",
+ twitter_parse_error(req));
+ imc_logout(ic, TRUE);
return;
} else {
td->http_fails = 0;
}
-
- if( !td->home_timeline_gc &&
- g_strcasecmp( set_getstr( &ic->acc->set, "mode" ), "chat" ) == 0 )
- twitter_groupchat_init( ic );
+
+ if (!td->home_timeline_gc && g_strcasecmp(set_getstr(&ic->acc->set, "mode"), "chat") == 0)
+ twitter_groupchat_init(ic);
txl = g_new0(struct twitter_xml_list, 1);
txl->list = NULL;
// Parse the data.
- parser = xt_new( NULL, txl );
- xt_feed( parser, req->reply_body, req->body_size );
+ parser = xt_new(NULL, txl);
+ xt_feed(parser, req->reply_body, req->body_size);
// Get the user list from the parsed xml feed.
twitter_xt_get_user_list(parser->root, txl);
- xt_free( parser );
+ xt_free(parser);
// Add the users as buddies.
- for ( l = txl->list; l ; l = g_slist_next(l) )
- {
+ for (l = txl->list; l; l = g_slist_next(l)) {
user = l->data;
twitter_add_buddy(ic, user->screen_name, user->name);
}
// if the next_cursor is set to something bigger then 0 there are more friends to gather.
- if (txl->next_cursor > 0)
- {
+ if (txl->next_cursor > 0) {
twitter_get_statuses_friends(ic, txl->next_cursor);
- }
- else
- {
+ } else {
td->flags |= TWITTER_HAVE_FRIENDS;
twitter_login_finish(ic);
}
-
+
// Free the structure.
txl_free(txl);
}
@@ -792,11 +734,12 @@ static void twitter_http_get_statuses_friends(struct http_request *req)
*/
void twitter_get_statuses_friends(struct im_connection *ic, gint64 next_cursor)
{
- char* args[2];
+ char *args[2];
args[0] = "cursor";
- args[1] = g_strdup_printf ("%lld", (long long) next_cursor);
+ args[1] = g_strdup_printf("%lld", (long long) next_cursor);
- twitter_http(ic, TWITTER_SHOW_FRIENDS_URL, twitter_http_get_statuses_friends, ic, 0, args, 2);
+ twitter_http(ic, TWITTER_SHOW_FRIENDS_URL, twitter_http_get_statuses_friends, ic, 0, args,
+ 2);
g_free(args[1]);
}
@@ -810,47 +753,46 @@ static void twitter_http_post(struct http_request *req)
struct twitter_data *td;
// Check if the connection is still active.
- if( !g_slist_find( twitter_connections, ic ) )
+ if (!g_slist_find(twitter_connections, ic))
return;
td = ic->proto_data;
td->last_status_id = 0;
-
+
// Check if the HTTP request went well.
if (req->status_code != 200) {
// It didn't go well, output the error and return.
imcb_error(ic, "HTTP error: %s", twitter_parse_error(req));
return;
}
-
- if (req->body_size > 0)
- {
+
+ if (req->body_size > 0) {
struct xt_parser *xp = NULL;
struct xt_node *node;
-
+
xp = xt_new(NULL, NULL);
xt_feed(xp, req->reply_body, req->body_size);
-
+
if ((node = xt_find_node(xp->root, "status")) &&
(node = xt_find_node(node->children, "id")) && node->text)
- td->last_status_id = g_ascii_strtoull( node->text, NULL, 10 );
-
+ td->last_status_id = g_ascii_strtoull(node->text, NULL, 10);
+
xt_free(xp);
}
}
/**
* Function to POST a new status to twitter.
- */
+ */
void twitter_post_status(struct im_connection *ic, char *msg, guint64 in_reply_to)
{
- char* args[4] = {
+ char *args[4] = {
"status", msg,
"in_reply_to_status_id",
g_strdup_printf("%llu", (unsigned long long) in_reply_to)
};
twitter_http(ic, TWITTER_STATUS_UPDATE_URL, twitter_http_post, ic, 1,
- args, in_reply_to ? 4 : 2);
+ args, in_reply_to ? 4 : 2);
g_free(args[3]);
}
@@ -860,29 +802,32 @@ void twitter_post_status(struct im_connection *ic, char *msg, guint64 in_reply_t
*/
void twitter_direct_messages_new(struct im_connection *ic, char *who, char *msg)
{
- char* args[4];
+ char *args[4];
args[0] = "screen_name";
args[1] = who;
args[2] = "text";
args[3] = msg;
// Use the same callback as for twitter_post_status, since it does basically the same.
twitter_http(ic, TWITTER_DIRECT_MESSAGES_NEW_URL, twitter_http_post, ic, 1, args, 4);
-// g_free(args[1]);
-// g_free(args[3]);
+// g_free(args[1]);
+// g_free(args[3]);
}
void twitter_friendships_create_destroy(struct im_connection *ic, char *who, int create)
{
- char* args[2];
+ char *args[2];
args[0] = "screen_name";
args[1] = who;
- twitter_http(ic, create ? TWITTER_FRIENDSHIPS_CREATE_URL : TWITTER_FRIENDSHIPS_DESTROY_URL, twitter_http_post, ic, 1, args, 2);
+ twitter_http(ic, create ? TWITTER_FRIENDSHIPS_CREATE_URL : TWITTER_FRIENDSHIPS_DESTROY_URL,
+ twitter_http_post, ic, 1, args, 2);
}
void twitter_status_destroy(struct im_connection *ic, guint64 id)
{
char *url;
- url = g_strdup_printf("%s%llu%s", TWITTER_STATUS_DESTROY_URL, (unsigned long long) id, ".xml");
+ url =
+ g_strdup_printf("%s%llu%s", TWITTER_STATUS_DESTROY_URL, (unsigned long long) id,
+ ".xml");
twitter_http(ic, url, twitter_http_post, ic, 1, NULL, 0);
g_free(url);
}
@@ -890,7 +835,9 @@ void twitter_status_destroy(struct im_connection *ic, guint64 id)
void twitter_status_retweet(struct im_connection *ic, guint64 id)
{
char *url;
- url = g_strdup_printf("%s%llu%s", TWITTER_STATUS_RETWEET_URL, (unsigned long long) id, ".xml");
+ url =
+ g_strdup_printf("%s%llu%s", TWITTER_STATUS_RETWEET_URL, (unsigned long long) id,
+ ".xml");
twitter_http(ic, url, twitter_http_post, ic, 1, NULL, 0);
g_free(url);
}