diff options
-rw-r--r-- | irc.h | 17 | ||||
-rw-r--r-- | irc_channel.c | 23 |
2 files changed, 40 insertions, 0 deletions
@@ -161,6 +161,9 @@ struct irc_channel_funcs gboolean (*part)( irc_channel_t *ic, const char *msg ); gboolean (*topic)( irc_channel_t *ic, const char *new ); gboolean (*invite)( irc_channel_t *ic, irc_user_t *iu ); + + gboolean (*_init)( irc_channel_t *ic ); + gboolean (*_free)( irc_channel_t *ic ); }; typedef enum @@ -176,6 +179,20 @@ typedef struct irc_channel_user int flags; } irc_channel_user_t; +typedef enum +{ + IRC_CC_TYPE_DEFAULT, + IRC_CC_TYPE_REST, + IRC_CC_TYPE_GROUP, + IRC_CC_TYPE_ACCOUNT, +} irc_control_channel_type_t; + +struct irc_control_channel +{ + irc_control_channel_type_t type; + struct bee_group *group; +}; + extern const struct bee_ui_funcs irc_ui_funcs; /* irc.c */ diff --git a/irc_channel.c b/irc_channel.c index 528d0442..e6570f4c 100644 --- a/irc_channel.c +++ b/irc_channel.c @@ -53,6 +53,13 @@ irc_channel_t *irc_channel_new( irc_t *irc, const char *name ) else /* if( name[0] == '#' ) */ ic->f = &groupchat_stub_funcs; + if( ic->f->_init ) + if( !ic->f->_init( ic ) ) + { + irc_channel_free( ic ); + return NULL; + } + return ic; } @@ -248,8 +255,24 @@ static gboolean control_channel_privmsg( irc_channel_t *ic, const char *msg ) return TRUE; } +static gboolean control_channel_init( irc_channel_t *ic ) +{ + struct irc_control_channel *icc; + + ic->data = icc = g_new0( struct irc_control_channel, 1 ); + icc->type = IRC_CC_TYPE_DEFAULT; + + return TRUE; +} + static const struct irc_channel_funcs control_channel_funcs = { control_channel_privmsg, + NULL, + NULL, + NULL, + NULL, + + control_channel_init, }; /* Groupchat stub: Only handles /INVITE at least for now. */ |