diff options
author | Wilmer van der Gaast <wilmer@gaast.net> | 2010-05-08 02:02:12 +0100 |
---|---|---|
committer | Wilmer van der Gaast <wilmer@gaast.net> | 2010-05-08 02:02:12 +0100 |
commit | a87754b68bb1eb07397d71a93ffcb0f3fc089266 (patch) | |
tree | d7ffb3b17f7c994dc7003b75d4888680be820949 | |
parent | e4816eab28eff86f2303261f8ae292acd84212dd (diff) |
Restored support for outgoing messages. This code is all so much saner now..
-rw-r--r-- | irc.h | 2 | ||||
-rw-r--r-- | irc_im.c | 37 | ||||
-rw-r--r-- | protocols/bee.h | 1 | ||||
-rw-r--r-- | protocols/bee_chat.c | 20 |
4 files changed, 50 insertions, 10 deletions
@@ -151,7 +151,7 @@ typedef struct irc_channel struct irc_channel_funcs { - gboolean (*privmsg)( irc_channel_t *iu, const char *msg ); + gboolean (*privmsg)( irc_channel_t *ic, const char *msg ); }; typedef enum @@ -251,7 +251,9 @@ static const struct irc_user_funcs irc_user_im_funcs = { /* IM->IRC: Groupchats */ -gboolean bee_irc_chat_new( bee_t *bee, struct groupchat *c ) +static const struct irc_channel_funcs irc_channel_im_chat_funcs; + +static gboolean bee_irc_chat_new( bee_t *bee, struct groupchat *c ) { irc_t *irc = bee->ui_data; irc_channel_t *ic; @@ -271,6 +273,7 @@ gboolean bee_irc_chat_new( bee_t *bee, struct groupchat *c ) c->ui_data = ic; ic->data = c; + ic->f = &irc_channel_im_chat_funcs; topic = g_strdup_printf( "BitlBee groupchat: \"%s\". Please keep in mind that root-commands won't work here. Have fun!", c->title ); irc_channel_set_topic( ic, topic, irc->root ); @@ -279,7 +282,7 @@ gboolean bee_irc_chat_new( bee_t *bee, struct groupchat *c ) return TRUE; } -gboolean bee_irc_chat_free( bee_t *bee, struct groupchat *c ) +static gboolean bee_irc_chat_free( bee_t *bee, struct groupchat *c ) { irc_channel_t *ic = c->ui_data; @@ -291,7 +294,7 @@ gboolean bee_irc_chat_free( bee_t *bee, struct groupchat *c ) return TRUE; } -gboolean bee_irc_chat_log( bee_t *bee, struct groupchat *c, const char *text ) +static gboolean bee_irc_chat_log( bee_t *bee, struct groupchat *c, const char *text ) { irc_channel_t *ic = c->ui_data; @@ -300,7 +303,7 @@ gboolean bee_irc_chat_log( bee_t *bee, struct groupchat *c, const char *text ) return TRUE; } -gboolean bee_irc_chat_msg( bee_t *bee, struct groupchat *c, bee_user_t *bu, const char *msg, time_t sent_at ) +static gboolean bee_irc_chat_msg( bee_t *bee, struct groupchat *c, bee_user_t *bu, const char *msg, time_t sent_at ) { irc_t *irc = bee->ui_data; irc_user_t *iu = bu->ui_data; @@ -316,7 +319,7 @@ gboolean bee_irc_chat_msg( bee_t *bee, struct groupchat *c, bee_user_t *bu, cons return TRUE; } -gboolean bee_irc_chat_add_user( bee_t *bee, struct groupchat *c, bee_user_t *bu ) +static gboolean bee_irc_chat_add_user( bee_t *bee, struct groupchat *c, bee_user_t *bu ) { irc_t *irc = bee->ui_data; @@ -325,7 +328,7 @@ gboolean bee_irc_chat_add_user( bee_t *bee, struct groupchat *c, bee_user_t *bu return TRUE; } -gboolean bee_irc_chat_remove_user( bee_t *bee, struct groupchat *c, bee_user_t *bu ) +static gboolean bee_irc_chat_remove_user( bee_t *bee, struct groupchat *c, bee_user_t *bu ) { irc_t *irc = bee->ui_data; @@ -334,6 +337,22 @@ gboolean bee_irc_chat_remove_user( bee_t *bee, struct groupchat *c, bee_user_t * return TRUE; } +/* IRC->IM */ + +static gboolean bee_irc_channel_chat_privmsg( irc_channel_t *ic, const char *msg ) +{ + struct groupchat *c = ic->data; + + bee_chat_msg( ic->irc->b, c, msg, 0 ); + + return TRUE; + +} + +static const struct irc_channel_funcs irc_channel_im_chat_funcs = { + bee_irc_channel_chat_privmsg, +}; + /* IM->IRC: File transfers */ static file_transfer_t *bee_irc_ft_in_start( bee_t *bee, bee_user_t *bu, const char *file_name, size_t file_size ) @@ -341,17 +360,17 @@ static file_transfer_t *bee_irc_ft_in_start( bee_t *bee, bee_user_t *bu, const c return dccs_send_start( bu->ic, (irc_user_t *) bu->ui_data, file_name, file_size ); } -gboolean bee_irc_ft_out_start( struct im_connection *ic, file_transfer_t *ft ) +static gboolean bee_irc_ft_out_start( struct im_connection *ic, file_transfer_t *ft ) { return dccs_recv_start( ft ); } -void bee_irc_ft_close( struct im_connection *ic, file_transfer_t *ft ) +static void bee_irc_ft_close( struct im_connection *ic, file_transfer_t *ft ) { return dcc_close( ft ); } -void bee_irc_ft_finished( struct im_connection *ic, file_transfer_t *file ) +static void bee_irc_ft_finished( struct im_connection *ic, file_transfer_t *file ) { dcc_file_transfer_t *df = file->priv; diff --git a/protocols/bee.h b/protocols/bee.h index 27e31d05..982bb914 100644 --- a/protocols/bee.h +++ b/protocols/bee.h @@ -125,5 +125,6 @@ void imcb_chat_add_buddy( struct groupchat *b, const char *handle ); void imcb_chat_remove_buddy( struct groupchat *b, const char *handle, const char *reason ); static int remove_chat_buddy_silent( struct groupchat *b, const char *handle ); #endif +int bee_chat_msg( bee_t *bee, struct groupchat *c, const char *msg, int flags ); #endif /* __BEE_H__ */ diff --git a/protocols/bee_chat.c b/protocols/bee_chat.c index f1d1a2c1..b523e544 100644 --- a/protocols/bee_chat.c +++ b/protocols/bee_chat.c @@ -246,3 +246,23 @@ static int remove_chat_buddy_silent( struct groupchat *b, const char *handle ) return 0; } #endif + +int bee_chat_msg( bee_t *bee, struct groupchat *c, const char *msg, int flags ) +{ + struct im_connection *ic = c->ic; + char *buf = NULL; + int st; + + if( ( ic->flags & OPT_DOES_HTML ) && ( g_strncasecmp( msg, "<html>", 6 ) != 0 ) ) + { + buf = escape_html( msg ); + msg = buf; + } + else + buf = g_strdup( msg ); + + ic->acc->prpl->chat_msg( c, buf, flags ); + g_free( buf ); + + return 1; +} |