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. */ | 
