aboutsummaryrefslogtreecommitdiffstats
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
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).
-rw-r--r--doc/user-guide/commands.xml11
-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
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)) {