aboutsummaryrefslogtreecommitdiffstats
path: root/protocols/twitter/twitter.c
diff options
context:
space:
mode:
authorSven Moritz Hallberg <pesco@khjk.org>2010-07-11 19:21:21 +0200
committerSven Moritz Hallberg <pesco@khjk.org>2010-07-11 19:21:21 +0200
commiteb6df6a280c458546ebc57126e63a828674b4cd8 (patch)
treeb8eead746fe97b7fb4bcf9a518c452ad87caed65 /protocols/twitter/twitter.c
parent37598495deeb42e1cd216a0a4ba8068e4a6da453 (diff)
parent00540d40be63b4db537a661d1a17c49a1790f79c (diff)
merge with upstraem bitlbee 1.2.8
Diffstat (limited to 'protocols/twitter/twitter.c')
-rw-r--r--protocols/twitter/twitter.c44
1 files changed, 32 insertions, 12 deletions
diff --git a/protocols/twitter/twitter.c b/protocols/twitter/twitter.c
index 90fca1fa..fca619c3 100644
--- a/protocols/twitter/twitter.c
+++ b/protocols/twitter/twitter.c
@@ -39,11 +39,6 @@ gboolean twitter_main_loop(gpointer data, gint fd, b_input_condition cond)
if (!g_slist_find( twitter_connections, ic ))
return 0;
- // If the user uses multiple private message windows we need to get the
- // users buddies.
- if (g_strcasecmp(set_getstr(&ic->acc->set, "mode"), "many") == 0)
- twitter_get_statuses_friends(ic, -1);
-
// Do stuff..
twitter_get_home_timeline(ic, -1);
@@ -55,7 +50,7 @@ static void twitter_main_loop_start( struct im_connection *ic )
{
struct twitter_data *td = ic->proto_data;
- imcb_log( ic, "Connecting to Twitter" );
+ imcb_log( ic, "Getting initial statuses" );
// Run this once. After this queue the main loop function.
twitter_main_loop(ic, -1, 0);
@@ -65,6 +60,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 );
+
+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 );
+}
static const struct oauth_service twitter_oauth =
{
@@ -127,7 +139,7 @@ static gboolean twitter_oauth_callback( struct oauth_info *info )
g_free( ic->acc->pass );
ic->acc->pass = oauth_to_string( info );
- twitter_main_loop_start( ic );
+ twitter_login_finish( ic );
}
return TRUE;
@@ -210,10 +222,9 @@ static void twitter_login( account_t *acc )
imcb_add_buddy( ic, name, NULL );
imcb_buddy_status( ic, name, OPT_LOGGED_IN, NULL, NULL );
- if( td->oauth_info || !set_getbool( &acc->set, "oauth" ) )
- twitter_main_loop_start( ic );
- else
- twitter_oauth_start( ic );
+ imcb_log( ic, "Connecting" );
+
+ twitter_login_finish( ic );
}
/**
@@ -235,6 +246,8 @@ static void twitter_logout( struct im_connection *ic )
if( td )
{
oauth_info_free( td->oauth_info );
+ g_free( td->url_host );
+ g_free( td->url_path );
g_free( td->pass );
g_free( td );
}
@@ -255,7 +268,14 @@ static int twitter_buddy_msg( struct im_connection *ic, char *who, char *message
if( set_getbool( &ic->acc->set, "oauth" ) &&
td->oauth_info && td->oauth_info->token == NULL )
{
- if( !oauth_access_token( message, td->oauth_info ) )
+ 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 );