Changeset e88fbe27 for protocols/twitter


Ignore:
Timestamp:
2010-04-15T23:10:10Z (15 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
55b1e69
Parents:
f9ed311
Message:

Added a meta-contact twitter_$username and replaced the "use_groupchat"
setting with a "mode" setting which also allows for a mode where everything
just comes from the meta-contact. Tweets should now go to that user or to
the channel (if available). Messages to others become DMs.

Location:
protocols/twitter
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • protocols/twitter/twitter.c

    rf9ed311 re88fbe27  
    4141        // If the user uses multiple private message windows we need to get the
    4242        // users buddies.
    43         if (!set_getbool( &ic->acc->set, "use_groupchat" ))
     43        if (g_strcasecmp(set_getstr(&ic->acc->set, "mode"), "many") == 0)
    4444                twitter_get_statuses_friends(ic, -1);
    4545
     
    5151}
    5252
     53static char *set_eval_mode( set_t *set, char *value )
     54{
     55        if( g_strcasecmp( value, "one" ) == 0 ||
     56            g_strcasecmp( value, "many" ) == 0 ||
     57            g_strcasecmp( value, "char" ) == 0 )
     58                return value;
     59        else
     60                return NULL;
     61}
    5362
    5463static void twitter_init( account_t *acc )
    5564{
    5665        set_t *s;
    57         s = set_add( &acc->set, "use_groupchat", "false", set_eval_bool, acc );
     66       
     67        s = set_add( &acc->set, "mode", "one", set_eval_mode, acc );
    5868        s->flags |= ACC_SET_OFFLINE_ONLY;
    5969}
     
    6777        struct im_connection *ic = imcb_new( acc );
    6878        struct twitter_data *td = g_new0( struct twitter_data, 1 );
     79        char name[strlen(acc->user)+9];
    6980
    7081        twitter_connections = g_slist_append( twitter_connections, ic );
     
    8495        // Save the return value, so we can remove the timeout on logout.
    8596        td->main_loop_id = b_timeout_add(60000, twitter_main_loop, ic);
     97       
     98        sprintf( name, "twitter_%s", acc->user );
     99        imcb_add_buddy( ic, name, NULL );
     100        imcb_buddy_status( ic, name, OPT_LOGGED_IN, NULL, NULL );
    86101}
    87102
     
    115130static int twitter_buddy_msg( struct im_connection *ic, char *who, char *message, int away )
    116131{
    117         // Let's just update the status.
    118 //      if ( g_strcasecmp(who, ic->acc->user) == 0 )
     132        if (g_strncasecmp(who, "twitter_", 8) == 0 &&
     133            g_strcasecmp(who + 8, ic->acc->user) == 0)
    119134                twitter_post_status(ic, message);
    120 //      else
    121 //              twitter_direct_messages_new(ic, who, message);
     135        else
     136                twitter_direct_messages_new(ic, who, message);
     137       
    122138        return( 0 );
    123139}
  • protocols/twitter/twitter_lib.c

    rf9ed311 re88fbe27  
    105105        if (!imcb_find_buddy( ic, name ))
    106106        {
     107                char *mode = set_getstr(&ic->acc->set, "mode");
     108               
    107109                // The buddy is not in the list, add the buddy and set the status to logged in.
    108110                imcb_add_buddy( ic, name, NULL );
    109111                imcb_rename_buddy( ic, name, fullname );
    110                 if (set_getbool( &ic->acc->set, "use_groupchat" ))
     112                if (g_strcasecmp(mode, "chat") == 0)
    111113                        imcb_chat_add_buddy( td->home_timeline_gc, name );
    112                 else
     114                else if (g_strcasecmp(mode, "many") == 0)
    113115                        imcb_buddy_status( ic, name, OPT_LOGGED_IN, NULL, NULL );
    114116        }
     
    452454        GSList *l = NULL;
    453455        struct twitter_xml_status *status;
    454 
     456        char from[MAX_STRING];
     457        gboolean mode_one;
     458       
     459        mode_one = g_strcasecmp( set_getstr( &ic->acc->set, "mode" ), "one" ) == 0;
     460
     461        if( mode_one )
     462        {
     463                g_snprintf( from, sizeof( from ) - 1, "twitter_%s", ic->acc->user );
     464                from[MAX_STRING-1] = '\0';
     465        }
     466       
    455467        for ( l = list; l ; l = g_slist_next(l) )
    456468        {
     469                char *text = NULL;
     470               
    457471                status = l->data;
    458                 imcb_buddy_msg( ic, status->user->screen_name, status->text, 0, status->created_at );
     472               
     473                if( mode_one )
     474                        text = g_strdup_printf( "\002<\002%s\002>\002 %s",
     475                                                status->user->screen_name, status->text );
     476               
     477                imcb_buddy_msg( ic,
     478                                mode_one ? from : status->user->screen_name,
     479                                mode_one ? text : status->text,
     480                                0, status->created_at );
     481               
    459482                // Update the home_timeline_id to hold the highest id, so that by the next request
    460483                // we won't pick up the updates allready in the list.
    461484                td->home_timeline_id = td->home_timeline_id < status->id ? status->id : td->home_timeline_id;
     485               
     486                g_free( text );
    462487        }
    463488}
     
    512537
    513538        // See if the user wants to see the messages in a groupchat window or as private messages.
    514         if (set_getbool( &ic->acc->set, "use_groupchat" ))
     539        if (g_strcasecmp(set_getstr(&ic->acc->set, "mode"), "chat") == 0)
    515540                twitter_groupchat(ic, txl->list);
    516541        else
     
    612637        if (req->status_code != 200) {
    613638                // It didn't go well, output the error and return.
    614                 imcb_error(ic, "Could not post tweet... HTTP STATUS: %d", req->status_code);
     639                imcb_error(ic, "Could not post message... HTTP STATUS: %d", req->status_code);
    615640                return;
    616641        }
Note: See TracChangeset for help on using the changeset viewer.