aboutsummaryrefslogtreecommitdiffstats
path: root/protocols/nogaim.c
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/nogaim.c')
-rw-r--r--protocols/nogaim.c100
1 files changed, 29 insertions, 71 deletions
diff --git a/protocols/nogaim.c b/protocols/nogaim.c
index 710b7645..645d7d82 100644
--- a/protocols/nogaim.c
+++ b/protocols/nogaim.c
@@ -660,10 +660,9 @@ void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags,
/* else waste_any_state_information_for_now(); */
/* LISPy... */
- if( ( set_getbool( &ic->irc->set, "away_devoice" ) ) && /* Don't do a thing when user doesn't want it */
- ( u->online ) && /* Don't touch offline people */
- ( ( ( u->online != oo ) && !u->away ) || /* Voice joining people */
- ( ( u->online == oo ) && ( oa == !u->away ) ) ) ) /* (De)voice people changing state */
+ if( ( u->online ) && /* Don't touch offline people */
+ ( ( ( u->online != oo ) && !u->away ) || /* Do joining people */
+ ( ( u->online == oo ) && ( oa == !u->away ) ) ) ) /* Do people changing state */
{
char *from;
@@ -676,8 +675,18 @@ void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags,
from = g_strdup_printf( "%s!%s@%s", ic->irc->mynick, ic->irc->mynick,
ic->irc->myhost );
}
- irc_write( ic->irc, ":%s MODE %s %cv %s", from, ic->irc->channel,
- u->away?'-':'+', u->nick );
+ if(!strcmp(set_getstr(&ic->irc->set, "voice_buddies"), "notaway")) {
+ irc_write( ic->irc, ":%s MODE %s %cv %s", from, ic->irc->channel,
+ u->away?'-':'+', u->nick );
+ }
+ if(!strcmp(set_getstr(&ic->irc->set, "halfop_buddies"), "notaway")) {
+ irc_write( ic->irc, ":%s MODE %s %ch %s", from, ic->irc->channel,
+ u->away?'-':'+', u->nick );
+ }
+ if(!strcmp(set_getstr(&ic->irc->set, "op_buddies"), "notaway")) {
+ irc_write( ic->irc, ":%s MODE %s %co %s", from, ic->irc->channel,
+ u->away?'-':'+', u->nick );
+ }
g_free( from );
}
}
@@ -687,9 +696,15 @@ void imcb_buddy_msg( struct im_connection *ic, char *handle, char *msg, uint32_t
irc_t *irc = ic->irc;
char *wrapped;
user_t *u;
-
+
+ /* pass the message through OTR */
+ msg = otr_handle_message(ic, handle, msg);
+ if(!msg) {
+ /* this was an internal OTR protocol message */
+ return;
+ }
+
u = user_findhandle( ic, handle );
-
if( !u )
{
char *h = set_getstr( &irc->set, "handle_unknown" );
@@ -699,6 +714,7 @@ void imcb_buddy_msg( struct im_connection *ic, char *handle, char *msg, uint32_t
if( set_getbool( &irc->set, "debug" ) )
imcb_log( ic, "Ignoring message from unknown handle %s", handle );
+ g_free(msg);
return;
}
else if( g_strncasecmp( h, "add", 3 ) == 0 )
@@ -731,6 +747,7 @@ void imcb_buddy_msg( struct im_connection *ic, char *handle, char *msg, uint32_t
wrapped = word_wrap( msg, 425 );
irc_msgfrom( irc, u->nick, wrapped );
g_free( wrapped );
+ g_free( msg );
}
void imcb_buddy_typing( struct im_connection *ic, char *handle, uint32_t flags )
@@ -971,66 +988,6 @@ static int remove_chat_buddy_silent( struct groupchat *b, const char *handle )
}
-/* Misc. BitlBee stuff which shouldn't really be here */
-
-char *set_eval_away_devoice( set_t *set, char *value )
-{
- irc_t *irc = set->data;
- int st;
-
- if( !is_bool( value ) )
- return SET_INVALID;
-
- st = bool2int( value );
-
- /* Horror.... */
-
- if( st != set_getbool( &irc->set, "away_devoice" ) )
- {
- char list[80] = "";
- user_t *u = irc->users;
- int i = 0, count = 0;
- char pm;
- char v[80];
-
- if( st )
- pm = '+';
- else
- pm = '-';
-
- while( u )
- {
- if( u->ic && u->online && !u->away )
- {
- if( ( strlen( list ) + strlen( u->nick ) ) >= 79 )
- {
- for( i = 0; i < count; v[i++] = 'v' ); v[i] = 0;
- irc_write( irc, ":%s MODE %s %c%s%s",
- irc->myhost,
- irc->channel, pm, v, list );
-
- *list = 0;
- count = 0;
- }
-
- sprintf( list + strlen( list ), " %s", u->nick );
- count ++;
- }
- u = u->next;
- }
-
- /* $v = 'v' x $i */
- for( i = 0; i < count; v[i++] = 'v' ); v[i] = 0;
- irc_write( irc, ":%s MODE %s %c%s%s", irc->myhost,
- irc->channel, pm, v, list );
- }
-
- return value;
-}
-
-
-
-
/* The plan is to not allow straight calls to prpl functions anymore, but do
them all from some wrappers. We'll start to define some down here: */
@@ -1044,10 +1001,11 @@ int imc_buddy_msg( struct im_connection *ic, char *handle, char *msg, int flags
buf = escape_html( msg );
msg = buf;
}
+
+ /* if compiled without otr support, this just calls the prpl buddy_msg */
+ st = otr_send_message(ic, handle, msg, flags);
- st = ic->acc->prpl->buddy_msg( ic, handle, msg, flags );
- g_free( buf );
-
+ g_free(buf);
return st;
}