diff options
-rw-r--r-- | irc_commands.c | 1 | ||||
-rw-r--r-- | protocols/account.c | 1 | ||||
-rw-r--r-- | protocols/chat.c | 192 | ||||
-rw-r--r-- | protocols/chat.h | 51 | ||||
-rw-r--r-- | protocols/nogaim.c | 1 | ||||
-rw-r--r-- | root_commands.c | 1 | ||||
-rw-r--r-- | storage_xml.c | 51 |
7 files changed, 24 insertions, 274 deletions
diff --git a/irc_commands.c b/irc_commands.c index 5a0843ec..30518a99 100644 --- a/irc_commands.c +++ b/irc_commands.c @@ -26,7 +26,6 @@ #define BITLBEE_CORE #include "bitlbee.h" #include "ipc.h" -#include "chat.h" static void irc_cmd_pass( irc_t *irc, char **cmd ) { diff --git a/protocols/account.c b/protocols/account.c index 0bacea74..ba309b38 100644 --- a/protocols/account.c +++ b/protocols/account.c @@ -26,7 +26,6 @@ #define BITLBEE_CORE #include "bitlbee.h" #include "account.h" -#include "chat.h" account_t *account_add( bee_t *bee, struct prpl *prpl, char *user, char *pass ) { diff --git a/protocols/chat.c b/protocols/chat.c deleted file mode 100644 index 8c5ce0bc..00000000 --- a/protocols/chat.c +++ /dev/null @@ -1,192 +0,0 @@ - /********************************************************************\ - * BitlBee -- An IRC to other IM-networks gateway * - * * - * Copyright 2002-2008 Wilmer van der Gaast and others * - \********************************************************************/ - -/* Keep track of chatrooms the user is interested in */ - -/* - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License with - the Debian GNU/Linux distribution in /usr/share/common-licenses/GPL; - if not, write to the Free Software Foundation, Inc., 59 Temple Place, - Suite 330, Boston, MA 02111-1307 USA -*/ - -#include "bitlbee.h" -#include "chat.h" - -struct chat *chat_add( irc_t *irc, account_t *acc, char *handle, char *channel ) -{ - struct chat *c, *l; - set_t *s; - - if( acc->prpl->chat_join == NULL || !chat_chanok( channel ) || - chat_chancmp( channel, irc->channel ) == 0 ) - { - return NULL; - } - - for( c = irc->chatrooms; c; c = c->next ) - { - if( chat_chancmp( channel, c->channel ) == 0 ) - return NULL; - - if( acc == c->acc && g_strcasecmp( handle, c->handle ) == 0 ) - return NULL; - - l = c; - } - - if( irc->chatrooms == NULL ) - irc->chatrooms = c = g_new0( struct chat, 1 ); - else - l->next = c = g_new0( struct chat, 1 ); - - c->acc = acc; - c->handle = g_strdup( handle ); - c->channel = g_strdup( channel ); - - s = set_add( &c->set, "auto_join", "false", set_eval_bool, c ); - /* s = set_add( &c->set, "auto_rejoin", "false", set_eval_bool, c ); */ - s = set_add( &c->set, "nick", NULL, NULL, c ); - s->flags |= SET_NULL_OK; - - return c; -} - -struct chat *chat_byhandle( irc_t *irc, account_t *acc, char *handle ) -{ - struct chat *c; - - for( c = irc->chatrooms; c; c = c->next ) - { - if( acc == c->acc && g_strcasecmp( handle, c->handle ) == 0 ) - break; - } - - return c; -} - -struct chat *chat_bychannel( irc_t *irc, char *channel ) -{ - struct chat *c; - - for( c = irc->chatrooms; c; c = c->next ) - { - if( chat_chancmp( channel, c->channel ) == 0 ) - break; - } - - return c; -} - -struct chat *chat_get( irc_t *irc, char *id ) -{ - struct chat *c, *ret = NULL; - int nr; - - if( sscanf( id, "%d", &nr ) == 1 && nr < 1000 ) - { - for( c = irc->chatrooms; c; c = c->next ) - if( ( nr-- ) == 0 ) - return c; - - return NULL; - } - - for( c = irc->chatrooms; c; c = c->next ) - { - if( strstr( c->handle, id ) ) - { - if( !ret ) - ret = c; - else - return NULL; - } - else if( strstr( c->channel, id ) ) - { - if( !ret ) - ret = c; - else - return NULL; - } - } - - return ret; -} - -int chat_del( irc_t *irc, struct chat *chat ) -{ - struct chat *c, *l = NULL; - - for( c = irc->chatrooms; c; c = (l=c)->next ) - if( c == chat ) - break; - - if( c == NULL ) - return 0; - else if( l == NULL ) - irc->chatrooms = c->next; - else - l->next = c->next; - - while( c->set ) - set_del( &c->set, c->set->key ); - - g_free( c->handle ); - g_free( c->channel ); - g_free( c ); - - return 1; -} - -int chat_chancmp( char *a, char *b ) -{ - if( !chat_chanok( a ) || !chat_chanok( b ) ) - return 0; - - if( a[0] == b[0] ) - return nick_cmp( a + 1, b + 1 ); - else - return -1; -} - -int chat_chanok( char *a ) -{ - if( strchr( CTYPES, a[0] ) != NULL ) - return nick_ok( a + 1 ); - else - return 0; -} - -int chat_join( irc_t *irc, struct chat *c, const char *password ) -{ - struct groupchat *gc; - char *nick = set_getstr( &c->set, "nick" ); - - if( c->acc->ic == NULL || c->acc->prpl->chat_join == NULL ) - return 0; - - if( nick == NULL ) - nick = irc->nick; - - if( ( gc = c->acc->prpl->chat_join( c->acc->ic, c->handle, nick, password ) ) ) - { - g_free( gc->channel ); - gc->channel = g_strdup( c->channel ); - return 1; - } - - return 0; -} diff --git a/protocols/chat.h b/protocols/chat.h deleted file mode 100644 index 7196aea8..00000000 --- a/protocols/chat.h +++ /dev/null @@ -1,51 +0,0 @@ - /********************************************************************\ - * BitlBee -- An IRC to other IM-networks gateway * - * * - * Copyright 2002-2008 Wilmer van der Gaast and others * - \********************************************************************/ - -/* Keep track of chatrooms the user is interested in */ - -/* - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License with - the Debian GNU/Linux distribution in /usr/share/common-licenses/GPL; - if not, write to the Free Software Foundation, Inc., 59 Temple Place, - Suite 330, Boston, MA 02111-1307 USA -*/ - -#ifndef _CHAT_H -#define _CHAT_H - -struct chat -{ - account_t *acc; - - char *handle; - char *channel; - set_t *set; - - struct chat *next; -}; - -struct chat *chat_add( irc_t *irc, account_t *acc, char *handle, char *channel ); -struct chat *chat_byhandle( irc_t *irc, account_t *acc, char *handle ); -struct chat *chat_bychannel( irc_t *irc, char *channel ); -struct chat *chat_get( irc_t *irc, char *id ); -int chat_del( irc_t *irc, struct chat *chat ); - -int chat_chancmp( char *a, char *b ); -int chat_chanok( char *a ); - -int chat_join( irc_t *irc, struct chat *c, const char *password ); - -#endif diff --git a/protocols/nogaim.c b/protocols/nogaim.c index 6ecdfe12..f88ec693 100644 --- a/protocols/nogaim.c +++ b/protocols/nogaim.c @@ -35,7 +35,6 @@ #include <ctype.h> #include "nogaim.h" -#include "chat.h" GSList *connections; diff --git a/root_commands.c b/root_commands.c index 63f1c867..e075816a 100644 --- a/root_commands.c +++ b/root_commands.c @@ -27,7 +27,6 @@ #include "commands.h" #include "bitlbee.h" #include "help.h" -#include "chat.h" #include <string.h> diff --git a/storage_xml.c b/storage_xml.c index 3ce85713..73d77ade 100644 --- a/storage_xml.c +++ b/storage_xml.c @@ -28,7 +28,6 @@ #include "base64.h" #include "arc.h" #include "md5.h" -#include "chat.h" #if GLIB_CHECK_VERSION(2,8,0) #include <glib/gstdio.h> @@ -54,7 +53,7 @@ struct xml_parsedata irc_t *irc; char *current_setting; account_t *current_account; - struct chat *current_chat; + irc_channel_t *current_channel; set_t **current_set_head; char *given_nick; char *given_pass; @@ -175,9 +174,12 @@ static void xml_start_element( GMarkupParseContext *ctx, const gchar *element_na if( ( setting = xml_attr( attr_names, attr_values, "name" ) ) ) { + /* if( xd->current_chat != NULL ) xd->current_set_head = &xd->current_chat->set; - else if( xd->current_account != NULL ) + else + */ + if( xd->current_account != NULL ) xd->current_set_head = &xd->current_account->set; else xd->current_set_head = &xd->irc->b->set; @@ -214,7 +216,24 @@ static void xml_start_element( GMarkupParseContext *ctx, const gchar *element_na if( xd->current_account && handle && channel ) { - //xd->current_chat = chat_add( xd->irc, xd->current_account, handle, channel ); + irc_channel_t *ic; + char *acc; + + acc = g_strdup_printf( "%s(%s)", + xd->current_account->prpl->name, + xd->current_account->user ); + + if( ( ic = irc_channel_new( irc, channel ) ) && + set_setstr( &ic->set, "chat_type", "room" ) && + set_setstr( &ic->set, "account", acc ) && + set_setstr( &ic->set, "room", handle ) ) + { + /* Nothing else to do for now, really. */ + } + else if( ic ) + irc_channel_free( ic ); + + g_free( acc ); } else { @@ -244,7 +263,7 @@ static void xml_end_element( GMarkupParseContext *ctx, const gchar *element_name } else if( g_strcasecmp( element_name, "chat" ) == 0 ) { - xd->current_chat = NULL; + /* xd->current_chat = NULL; */ } } @@ -436,7 +455,6 @@ static storage_status_t xml_save( irc_t *irc, int overwrite ) unsigned char *pass_cr; char *pass_b64; int pass_len; - struct chat *c; pass_len = arc_encode( acc->pass, strlen( acc->pass ), (unsigned char**) &pass_cr, irc->password, 12 ); pass_b64 = base64_encode( pass_cr, pass_len ); @@ -469,27 +487,6 @@ static storage_status_t xml_save( irc_t *irc, int overwrite ) if( g_hash_table_find( acc->nicks, xml_save_nick, & fd ) ) goto write_error; -#if 0 - for( c = irc->chatrooms; c; c = c->next ) - { - if( c->acc != acc ) - continue; - - if( !xml_printf( fd, 2, "<chat handle=\"%s\" channel=\"%s\" type=\"%s\">\n", - c->handle, c->channel, "room" ) ) - goto write_error; - - for( set = c->set; set; set = set->next ) - if( set->value && !( set->flags & ACC_SET_NOSAVE ) ) - if( !xml_printf( fd, 3, "<setting name=\"%s\">%s</setting>\n", - set->key, set->value ) ) - goto write_error; - - if( !xml_printf( fd, 2, "</chat>\n" ) ) - goto write_error; - } -#endif - if( !xml_printf( fd, 1, "</account>\n" ) ) goto write_error; } |