diff options
author | Wilmer van der Gaast <wilmer@gaast.net> | 2010-08-21 23:25:37 +0100 |
---|---|---|
committer | Wilmer van der Gaast <wilmer@gaast.net> | 2010-08-21 23:25:37 +0100 |
commit | 0ebf919dd8b47e50ce060f46f2dc5f10f3867207 (patch) | |
tree | 7a7ab813da9884d037547116c1d9b321f982f5cd | |
parent | a758ec197f3a01dda26d394c1e5125787e4831b6 (diff) |
Pass "user is mobile" info coming from OSCAR up to BitlBee and show mobile
people as away=Mobile. Bug #462 (and others for other protocols).
-rw-r--r-- | doc/user-guide/commands.xml | 11 | ||||
-rw-r--r-- | protocols/bee.c | 1 | ||||
-rw-r--r-- | protocols/bee.h | 2 | ||||
-rw-r--r-- | protocols/bee_user.c | 7 | ||||
-rw-r--r-- | protocols/nogaim.h | 1 | ||||
-rw-r--r-- | protocols/oscar/oscar.c | 4 |
6 files changed, 26 insertions, 0 deletions
diff --git a/doc/user-guide/commands.xml b/doc/user-guide/commands.xml index 8bbada95..989fc392 100644 --- a/doc/user-guide/commands.xml +++ b/doc/user-guide/commands.xml @@ -828,6 +828,17 @@ </bitlbee-setting> + <bitlbee-setting name="mobile_is_away" type="boolean" scope="global"> + <default>false</default> + + <description> + <para> + Most IM networks have a mobile version of their client. People who use these may not be paying that much attention to messages coming in. By enabling this setting, people using mobile clients will always be shown as away. + </para> + </description> + + </bitlbee-setting> + <bitlbee-setting name="nick" type="string" scope="chat"> <description> <para> diff --git a/protocols/bee.c b/protocols/bee.c index c5eeee17..81cb7619 100644 --- a/protocols/bee.c +++ b/protocols/bee.c @@ -39,6 +39,7 @@ bee_t *bee_new() s = set_add( &b->set, "auto_reconnect", "true", set_eval_bool, b ); s = set_add( &b->set, "auto_reconnect_delay", "5*3<900", set_eval_account_reconnect_delay, b ); s = set_add( &b->set, "debug", "false", set_eval_bool, b ); + s = set_add( &b->set, "mobile_is_away", "false", set_eval_bool, b ); s = set_add( &b->set, "save_on_quit", "true", set_eval_bool, b ); s = set_add( &b->set, "status", NULL, set_eval_away_status, b ); s->flags |= SET_NULL_OK; diff --git a/protocols/bee.h b/protocols/bee.h index 5792e988..2fd3562e 100644 --- a/protocols/bee.h +++ b/protocols/bee.h @@ -55,10 +55,12 @@ typedef struct bee bee_t *bee_new(); void bee_free( bee_t *b ); +/* TODO(wilmer): Kill at least the OPT_ flags that have an equivalent here. */ typedef enum { BEE_USER_ONLINE = 1, /* Compatibility with old OPT_LOGGED_IN flag */ BEE_USER_AWAY = 4, /* Compatibility with old OPT_AWAY flag */ + BEE_USER_MOBILE = 8, /* Compatibility with old OPT_MOBILE flag */ BEE_USER_LOCAL = 256, /* Locally-added contacts (not in real contact list) */ } bee_user_flags_t; diff --git a/protocols/bee_user.c b/protocols/bee_user.c index db7842a0..04253c47 100644 --- a/protocols/bee_user.c +++ b/protocols/bee_user.c @@ -189,6 +189,13 @@ void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags, bu->status = g_strdup( ( flags & OPT_AWAY ) && state == NULL ? "Away" : state ); bu->status_msg = g_strdup( message ); + if( bu->status == NULL && ( flags & OPT_MOBILE ) && + set_getbool( &bee->set, "mobile_is_away" ) ) + { + bu->flags |= BEE_USER_AWAY; + bu->status = g_strdup( "Mobile" ); + } + if( bee->ui->user_status ) bee->ui->user_status( bee, bu, old ); diff --git a/protocols/nogaim.h b/protocols/nogaim.h index 3407236f..693b5d16 100644 --- a/protocols/nogaim.h +++ b/protocols/nogaim.h @@ -62,6 +62,7 @@ #define OPT_LOGGED_IN 0x00000001 #define OPT_LOGGING_OUT 0x00000002 #define OPT_AWAY 0x00000004 +#define OPT_MOBILE 0x00000008 #define OPT_DOES_HTML 0x00000010 #define OPT_LOCALBUDDY 0x00000020 /* For nicks local to one groupchat */ #define OPT_TYPING 0x00000100 /* Some pieces of code make assumptions */ diff --git a/protocols/oscar/oscar.c b/protocols/oscar/oscar.c index 3f5272cd..db6a28f4 100644 --- a/protocols/oscar/oscar.c +++ b/protocols/oscar/oscar.c @@ -898,6 +898,10 @@ static int gaim_parse_oncoming(aim_session_t *sess, aim_frame_t *fr, ...) { flags |= OPT_AWAY; } + /* Maybe this should be done just for AIM contacts, not sure. */ + if (info->flags & AIM_FLAG_WIRELESS) + flags |= OPT_MOBILE; + if (info->present & AIM_USERINFO_PRESENT_ICQEXTSTATUS) { if (!(info->icqinfo.status & AIM_ICQ_STATE_CHAT) && (info->icqinfo.status != AIM_ICQ_STATE_NORMAL)) { |