aboutsummaryrefslogtreecommitdiffstats
path: root/protocols
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2010-08-21 23:25:37 +0100
committerWilmer van der Gaast <wilmer@gaast.net>2010-08-21 23:25:37 +0100
commit0ebf919dd8b47e50ce060f46f2dc5f10f3867207 (patch)
tree7a7ab813da9884d037547116c1d9b321f982f5cd /protocols
parenta758ec197f3a01dda26d394c1e5125787e4831b6 (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).
Diffstat (limited to 'protocols')
-rw-r--r--protocols/bee.c1
-rw-r--r--protocols/bee.h2
-rw-r--r--protocols/bee_user.c7
-rw-r--r--protocols/nogaim.h1
-rw-r--r--protocols/oscar/oscar.c4
5 files changed, 15 insertions, 0 deletions
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)) {