diff options
Diffstat (limited to 'chat.c')
-rw-r--r-- | chat.c | 192 |
1 files changed, 0 insertions, 192 deletions
diff --git a/chat.c b/chat.c deleted file mode 100644 index 8c5ce0bc..00000000 --- a/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; -} |