aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2010-03-06 17:10:32 +0000
committerWilmer van der Gaast <wilmer@gaast.net>2010-03-06 17:10:32 +0000
commit4049061ea3b1fbe939c623a8501aea60906893ea (patch)
tree3c50acbc2a2c3b551cbed996ea55a070cf771716
parent17f952299cd2780a2dfecc4d4b9861f6f0f4b1c2 (diff)
Fixed up Yahoo! I'll have to do some more thorough testing of this code
since I may have broken something.
-rw-r--r--protocols/yahoo/libyahoo2.c20
-rw-r--r--protocols/yahoo/yahoo.c37
2 files changed, 12 insertions, 45 deletions
diff --git a/protocols/yahoo/libyahoo2.c b/protocols/yahoo/libyahoo2.c
index 836670f7..20e284f7 100644
--- a/protocols/yahoo/libyahoo2.c
+++ b/protocols/yahoo/libyahoo2.c
@@ -4086,6 +4086,9 @@ void yahoo_send_typing(int id, const char *from, const char *who, int typ)
yahoo_packet_free(pkt);
}
+/* TODO(wilmer): See if this this function still works since I got rid of a
+ lot of things that seemed illogical. Some things may have
+ been intentional. */
void yahoo_set_away(int id, enum yahoo_status state, const char *msg, int away)
{
struct yahoo_input_data *yid = find_input_by_id_and_type(id, YAHOO_CONNECTION_PAGER);
@@ -4098,14 +4101,8 @@ void yahoo_set_away(int id, enum yahoo_status state, const char *msg, int away)
return;
yd = yid->yd;
-
old_status = yd->current_status;
-
- if (msg && strncmp(msg,"Invisible",9)) {
- yd->current_status = YAHOO_STATUS_CUSTOM;
- } else {
- yd->current_status = state;
- }
+ yd->current_status = state;
/* Thank you libpurple :) */
if (yd->current_status == YAHOO_STATUS_INVISIBLE) {
@@ -4120,15 +4117,8 @@ void yahoo_set_away(int id, enum yahoo_status state, const char *msg, int away)
pkt = yahoo_packet_new(YAHOO_SERVICE_Y6_STATUS_UPDATE, yd->current_status, yd->session_id);
snprintf(s, sizeof(s), "%d", yd->current_status);
yahoo_packet_hash(pkt, 10, s);
-
- if (yd->current_status == YAHOO_STATUS_CUSTOM) {
- yahoo_packet_hash(pkt, 19, msg);
- } else {
- yahoo_packet_hash(pkt, 19, "");
- }
-
+ yahoo_packet_hash(pkt, 19, msg);
yahoo_packet_hash(pkt, 47, (away == 2)? "2": (away) ?"1":"0");
-
yahoo_send_packet(yid, pkt, 0);
yahoo_packet_free(pkt);
diff --git a/protocols/yahoo/yahoo.c b/protocols/yahoo/yahoo.c
index ac57d4b6..78a8eb8a 100644
--- a/protocols/yahoo/yahoo.c
+++ b/protocols/yahoo/yahoo.c
@@ -129,6 +129,8 @@ static char *byahoo_strip( const char *in )
static void byahoo_init( account_t *acc )
{
set_add( &acc->set, "mail_notifications", "false", set_eval_bool, acc );
+
+ acc->flags |= ACC_FLAG_AWAY_MESSAGE | ACC_FLAG_STATUS_MESSAGE;
}
static void byahoo_login( account_t *acc )
@@ -196,29 +198,10 @@ static int byahoo_send_typing( struct im_connection *ic, char *who, int typing )
static void byahoo_set_away( struct im_connection *ic, char *state, char *msg )
{
struct byahoo_data *yd = (struct byahoo_data *) ic->proto_data;
- char *away;
-
- away = NULL;
- if( state && msg && g_strcasecmp( state, msg ) != 0 )
- {
- yd->current_status = YAHOO_STATUS_CUSTOM;
- away = "";
- }
- else if( state )
+ if( state )
{
- /* Set msg to NULL since (if it isn't NULL already) it's equal
- to state. msg must be empty if we want to use an existing
- away state. */
- msg = NULL;
-
- away = "";
- if( g_strcasecmp( state, "Available" ) == 0 )
- {
- yd->current_status = YAHOO_STATUS_AVAILABLE;
- away = NULL;
- }
- else if( g_strcasecmp( state, "Be Right Back" ) == 0 )
+ if( g_strcasecmp( state, "Be Right Back" ) == 0 )
yd->current_status = YAHOO_STATUS_BRB;
else if( g_strcasecmp( state, "Busy" ) == 0 )
yd->current_status = YAHOO_STATUS_BUSY;
@@ -238,17 +221,13 @@ static void byahoo_set_away( struct im_connection *ic, char *state, char *msg )
yd->current_status = YAHOO_STATUS_STEPPEDOUT;
else if( g_strcasecmp( state, "Invisible" ) == 0 )
yd->current_status = YAHOO_STATUS_INVISIBLE;
- else if( g_strcasecmp( state, GAIM_AWAY_CUSTOM ) == 0 )
- {
- yd->current_status = YAHOO_STATUS_AVAILABLE;
-
- away = NULL;
- }
+ else
+ yd->current_status = YAHOO_STATUS_CUSTOM;
}
else
yd->current_status = YAHOO_STATUS_AVAILABLE;
- yahoo_set_away( yd->y2_id, yd->current_status, msg, away != NULL ? 2 : 0 );
+ yahoo_set_away( yd->y2_id, yd->current_status, msg, state ? 2 : 0 );
}
static GList *byahoo_away_states( struct im_connection *ic )
@@ -257,7 +236,6 @@ static GList *byahoo_away_states( struct im_connection *ic )
if( m == NULL )
{
- m = g_list_append( m, "Available" );
m = g_list_append( m, "Be Right Back" );
m = g_list_append( m, "Busy" );
m = g_list_append( m, "Not At Home" );
@@ -268,7 +246,6 @@ static GList *byahoo_away_states( struct im_connection *ic )
m = g_list_append( m, "Out To Lunch" );
m = g_list_append( m, "Stepped Out" );
m = g_list_append( m, "Invisible" );
- m = g_list_append( m, GAIM_AWAY_CUSTOM );
}
return m;