aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--irc_im.c10
-rw-r--r--protocols/bee.h3
-rw-r--r--protocols/bee_chat.c2
-rw-r--r--protocols/bee_user.c7
-rw-r--r--protocols/nogaim.c2
-rw-r--r--root_commands.c2
6 files changed, 19 insertions, 7 deletions
diff --git a/irc_im.c b/irc_im.c
index 72dc2cc9..6e257b03 100644
--- a/irc_im.c
+++ b/irc_im.c
@@ -65,6 +65,16 @@ static gboolean bee_irc_user_new( bee_t *bee, bee_user_t *bu )
if( set_getbool( &bee->set, "private" ) )
iu->flags |= IRC_USER_PRIVATE;
+ if( bu->flags & BEE_USER_LOCAL )
+ {
+ char *s = set_getstr( &bee->set, "handle_unknown" );
+
+ if( strcmp( s, "add_private" ) == 0 )
+ iu->flags |= IRC_USER_PRIVATE;
+ else if( strcmp( s, "add_channel" ) == 0 )
+ iu->flags &= ~IRC_USER_PRIVATE;
+ }
+
iu->f = &irc_user_im_funcs;
//iu->last_typing_notice = 0;
diff --git a/protocols/bee.h b/protocols/bee.h
index 100593f9..e421db57 100644
--- a/protocols/bee.h
+++ b/protocols/bee.h
@@ -53,6 +53,7 @@ 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_LOCAL = 256, /* Locally-added contacts (not in real contact list) */
} bee_user_flags_t;
typedef struct bee_user
@@ -106,7 +107,7 @@ bee_t *bee_new();
void bee_free( bee_t *b );
/* bee_user.c */
-bee_user_t *bee_user_new( bee_t *bee, struct im_connection *ic, const char *handle );
+bee_user_t *bee_user_new( bee_t *bee, struct im_connection *ic, const char *handle, bee_user_flags_t flags );
int bee_user_free( bee_t *bee, bee_user_t *bu );
bee_user_t *bee_user_by_handle( bee_t *bee, struct im_connection *ic, const char *handle );
int bee_user_msg( bee_t *bee, bee_user_t *bu, const char *msg, int flags );
diff --git a/protocols/bee_chat.c b/protocols/bee_chat.c
index 3e17a42f..3be6f189 100644
--- a/protocols/bee_chat.c
+++ b/protocols/bee_chat.c
@@ -159,7 +159,7 @@ void imcb_chat_add_buddy( struct groupchat *c, const char *handle )
/* Most protocols allow people to join, even when they're not in
your contact list. Try to handle that here */
if( !me && !bu )
- bu = bee_user_new( bee, ic, handle );
+ bu = bee_user_new( bee, ic, handle, BEE_USER_LOCAL );
/* Add the handle to the room userlist */
/* TODO: Use bu instead of a string */
diff --git a/protocols/bee_user.c b/protocols/bee_user.c
index b1dcffc8..fd2e8635 100644
--- a/protocols/bee_user.c
+++ b/protocols/bee_user.c
@@ -26,7 +26,7 @@
#define BITLBEE_CORE
#include "bitlbee.h"
-bee_user_t *bee_user_new( bee_t *bee, struct im_connection *ic, const char *handle )
+bee_user_t *bee_user_new( bee_t *bee, struct im_connection *ic, const char *handle, bee_user_flags_t flags )
{
bee_user_t *bu;
@@ -36,6 +36,7 @@ bee_user_t *bee_user_new( bee_t *bee, struct im_connection *ic, const char *hand
bu = g_new0( bee_user_t, 1 );
bu->bee = bee;
bu->ic = ic;
+ bu->flags = flags;
bu->handle = g_strdup( handle );
bee->users = g_slist_prepend( bee->users, bu );
@@ -159,7 +160,7 @@ void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags,
{
if( g_strcasecmp( set_getstr( &ic->bee->set, "handle_unknown" ), "add" ) == 0 )
{
- bu = bee_user_new( bee, ic, handle );
+ bu = bee_user_new( bee, ic, handle, BEE_USER_LOCAL );
}
else
{
@@ -207,7 +208,7 @@ void imcb_buddy_msg( struct im_connection *ic, const char *handle, char *msg, ui
}
else if( g_strncasecmp( h, "add", 3 ) == 0 )
{
- bu = bee_user_new( bee, ic, handle );
+ bu = bee_user_new( bee, ic, handle, BEE_USER_LOCAL );
}
}
diff --git a/protocols/nogaim.c b/protocols/nogaim.c
index 241c9833..00fe0ebf 100644
--- a/protocols/nogaim.c
+++ b/protocols/nogaim.c
@@ -375,7 +375,7 @@ void imcb_add_buddy( struct im_connection *ic, const char *handle, const char *g
bee_t *bee = ic->bee;
if( !( bu = bee_user_by_handle( bee, ic, handle ) ) )
- bu = bee_user_new( bee, ic, handle );
+ bu = bee_user_new( bee, ic, handle, 0 );
bu->group = bee_group_by_name( bee, group, TRUE );
}
diff --git a/root_commands.c b/root_commands.c
index bbf888c1..aeb4f62a 100644
--- a/root_commands.c
+++ b/root_commands.c
@@ -531,7 +531,7 @@ static void cmd_add( irc_t *irc, char **cmd )
else
/* Only for add -tmp. For regular adds, this callback will
be called once the IM server confirms. */
- bee_user_new( irc->b, a->ic, cmd[2] );
+ bee_user_new( irc->b, a->ic, cmd[2], BEE_USER_LOCAL );
irc_usermsg( irc, "Adding `%s' to your contact list", cmd[2] );
}