Changeset 7b23afd for protocols/nogaim.c


Ignore:
Timestamp:
2005-11-07T16:16:18Z (19 years ago)
Author:
Jelmer Vernooij <jelmer@…>
Branches:
master
Children:
f7f3ada
Parents:
fe51bcf
Message:

Migrate my pluginable branch to use Wilmers' branch as parent

File:
1 edited

Legend:

Unmodified
Added
Removed
  • protocols/nogaim.c

    rfe51bcf r7b23afd  
    3939#include <iconv.h>
    4040
    41 struct prpl *proto_prpl[PROTO_MAX];
    42 char proto_name[PROTO_MAX][8] = { "TOC", "OSCAR", "YAHOO", "ICQ", "MSN", "", "", "", "JABBER", "", "", "", "", "", "", "" };
    43 
    4441static char *proto_away_alias[7][5] =
    4542{
     
    5855GSList *connections;
    5956
     57gboolean load_plugin(char *path)
     58{
     59        void (*init_function) (void);
     60       
     61        GModule *mod = g_module_open(path, G_MODULE_BIND_LAZY);
     62
     63        if(!mod) {
     64                log_message(LOGLVL_ERROR, "Can't find `%s', not loading", path);
     65                return FALSE;
     66        }
     67
     68        if(!g_module_symbol(mod,"init_plugin",(gpointer *) &init_function)) {
     69                log_message(LOGLVL_WARNING, "Can't find function `init_plugin' in `%s'\n", path);
     70                return FALSE;
     71        }
     72
     73        init_function();
     74
     75        return TRUE;
     76}
    6077
    6178/* nogaim.c */
    6279
     80GList *protocols = NULL;
     81 
     82void register_protocol (struct prpl *p)
     83{
     84        protocols = g_list_append(protocols, p);
     85}
     86
     87 
     88struct prpl *find_protocol(const char *name)
     89{
     90        GList *gl;
     91        for (gl = protocols; gl; gl = gl->next)
     92        {
     93                struct prpl *proto = gl->data;
     94                if(!g_strcasecmp(proto->name, name))
     95                        return proto;
     96        }
     97        return NULL;
     98}
     99
     100/* nogaim.c */
    63101void nogaim_init()
    64102{
    65         proto_prpl[PROTO_MSN] = g_new0 ( struct prpl, 1 );
     103        GDir *dir;
     104        GError *error = NULL;
     105
    66106#ifdef WITH_MSN
    67         msn_init( proto_prpl[PROTO_MSN] );
     107        extern void msn_init();
     108        msn_init();
    68109#endif
    69110
    70         proto_prpl[PROTO_OSCAR] = g_new0( struct prpl, 1 );
    71111#ifdef WITH_OSCAR
    72         oscar_init( proto_prpl[PROTO_OSCAR] );
     112        extern void oscar_init();
     113        oscar_init();
    73114#endif
    74115       
    75         proto_prpl[PROTO_YAHOO] = g_new0( struct prpl, 1 );
    76116#ifdef WITH_YAHOO
    77         byahoo_init( proto_prpl[PROTO_YAHOO] );
     117        extern void byahoo_init();
     118        byahoo_init();
    78119#endif
    79120       
    80         proto_prpl[PROTO_JABBER] = g_new0( struct prpl, 1 );
    81121#ifdef WITH_JABBER
    82         jabber_init( proto_prpl[PROTO_JABBER] );
     122        extern void jabber_init();
     123        jabber_init();
    83124#endif
     125
     126        dir = g_dir_open(PLUGINDIR, 0, &error);
     127
     128        if (dir) {
     129                const gchar *entry;
     130                char *path;
     131
     132                while ((entry = g_dir_read_name(dir))) {
     133                        path = g_build_filename(PLUGINDIR, entry, NULL);
     134                        if(!path) {
     135                                log_message(LOGLVL_WARNING, "Can't build path for %s\n", entry);
     136                                continue;
     137                        }
     138
     139                        load_plugin(path);
     140
     141                        g_free(path);
     142                }
     143
     144                g_dir_close(dir);
     145        }
    84146}
    85147
     
    122184                        gc->prpl->set_away( gc, s, away );
    123185                        if( set_getint( gc->irc, "debug" ) )
    124                                 irc_usermsg( gc->irc, "Setting away state for %s to %s", proto_name[gc->protocol], s );
     186                                irc_usermsg( gc->irc, "Setting away state for %s to %s", gc->prpl->name, s );
    125187                }
    126188                else
     
    168230   way for now because I don't want to touch the Gaim code too much since
    169231   it's not going to be here for too long anymore. */
    170 int handle_cmp( char *a, char *b, int protocol )
    171 {
    172         if( protocol == PROTO_TOC || protocol == PROTO_ICQ )
     232int handle_cmp( char *a, char *b, struct prpl *protocol )
     233{
     234        if( !strcmp(protocol->name, "oscar") )
    173235        {
    174236                /* AIM, being teh evil, thinks it's cool that users can put
     
    210272        gc = g_new0( struct gaim_connection, 1 );
    211273       
    212         gc->protocol = user->protocol;
    213         gc->prpl = proto_prpl[gc->protocol];
     274        gc->prpl = user->prpl;
    214275        g_snprintf( gc->username, sizeof( gc->username ), "%s", user->username );
    215276        g_snprintf( gc->password, sizeof( gc->password ), "%s", user->password );
     
    254315void set_login_progress( struct gaim_connection *gc, int step, char *msg )
    255316{
    256         irc_usermsg( gc->irc, "%s(%s) - Logging in: %s", proto_name[gc->protocol], gc->username, msg );
     317        irc_usermsg( gc->irc, "%s(%s) - Logging in: %s", gc->prpl->name, gc->username, msg );
    257318}
    258319
     
    260321void hide_login_progress( struct gaim_connection *gc, char *msg )
    261322{
    262         irc_usermsg( gc->irc, "%s(%s) - Login error: %s", proto_name[gc->protocol], gc->username, msg );
     323        irc_usermsg( gc->irc, "%s(%s) - Login error: %s", gc->prpl->name, gc->username, msg );
    263324}
    264325
     
    266327void hide_login_progress_error( struct gaim_connection *gc, char *msg )
    267328{
    268         irc_usermsg( gc->irc, "%s(%s) - Logged out: %s", proto_name[gc->protocol], gc->username, msg );
     329        irc_usermsg( gc->irc, "%s(%s) - Logged out: %s", gc->prpl->name, gc->username, msg );
    269330}
    270331
     
    289350                strip_html( msg );
    290351       
    291         irc_usermsg( gc->irc, "%s(%s) - %s", proto_name[gc->protocol], gc->username, msg );
     352        irc_usermsg( gc->irc, "%s(%s) - %s", gc->prpl->name, gc->username, msg );
    292353}
    293354
     
    314375        u = user_find( gc->irc, gc->irc->nick );
    315376       
    316         irc_usermsg( gc->irc, "%s(%s) - Logged in", proto_name[gc->protocol], gc->username );
     377        irc_usermsg( gc->irc, "%s(%s) - Logged in", gc->prpl->name, gc->username );
    317378       
    318379        gc->keepalive = g_timeout_add( 60000, send_keepalive, gc );
     
    321382        if( u && u->away ) proto_away( gc, u->away );
    322383       
    323         if( gc->protocol == PROTO_ICQ )
     384        if( !strcmp(gc->prpl->name, "icq") )
    324385        {
    325386                for( u = gc->irc->users; u; u = u->next )
     
    361422        account_t *a;
    362423       
    363         irc_usermsg( gc->irc, "%s(%s) - Signing off..", proto_name[gc->protocol], gc->username );
     424        irc_usermsg( gc->irc, "%s(%s) - Signing off..", gc->prpl->name, gc->username );
    364425
    365426        gaim_input_remove( gc->keepalive );
     
    393454        {
    394455                int delay = set_getint( irc, "auto_reconnect_delay" );
    395                 irc_usermsg( gc->irc, "%s(%s) - Reconnecting in %d seconds..", proto_name[gc->protocol], gc->username, delay);
     456                irc_usermsg( gc->irc, "%s(%s) - Reconnecting in %d seconds..", gc->prpl->name, gc->username, delay);
    396457               
    397458                a->reconnect = 1;
     
    449510       
    450511        memset( nick, 0, MAX_NICK_LENGTH + 1 );
    451         strcpy( nick, nick_get( gc->irc, handle, gc->protocol, realname ) );
     512        strcpy( nick, nick_get( gc->irc, handle, gc->prpl, realname ) );
    452513       
    453514        u = user_add( gc->irc, nick );
     
    473534        else
    474535        {
    475                 u->host = g_strdup( proto_name[gc->user->protocol] );
     536                u->host = g_strdup( gc->user->prpl->name );
    476537                u->user = g_strdup( handle );
    477538        }
     
    567628                        if( set_getint( gc->irc, "debug" ) || g_strcasecmp( set_getstr( gc->irc, "handle_unknown" ), "ignore" ) != 0 )
    568629                        {
    569                                 irc_usermsg( gc->irc, "serv_got_update() for handle %s on connection %s(%s):", handle, proto_name[gc->protocol], gc->username );
     630                                irc_usermsg( gc->irc, "serv_got_update() for handle %s on connection %s(%s):", handle, gc->prpl->name, gc->username );
    570631                                irc_usermsg( gc->irc, "loggedin = %d, type = %d", loggedin, type );
    571632                        }
     
    602663        }
    603664       
    604         if( ( type & UC_UNAVAILABLE ) && ( gc->protocol == PROTO_OSCAR || gc->protocol == PROTO_TOC ) )
     665        if( ( type & UC_UNAVAILABLE ) && ( !strcmp(gc->prpl->name, "oscar") || !strcmp(gc->prpl->name, "icq")) )
    605666        {
    606667                u->away = g_strdup( "Away" );
    607668        }
    608         else if( ( type & UC_UNAVAILABLE ) && ( gc->protocol == PROTO_JABBER ) )
     669        else if( ( type & UC_UNAVAILABLE ) && ( !strcmp(gc->prpl->name, "jabber") ) )
    609670        {
    610671                if( type & UC_DND )
     
    648709                {
    649710                        if( set_getint( irc, "debug" ) )
    650                                 irc_usermsg( irc, "Ignoring message from unknown handle %s on connection %s(%s)", handle, proto_name[gc->protocol], gc->username );
     711                                irc_usermsg( irc, "Ignoring message from unknown handle %s on connection %s(%s)", handle, gc->prpl->name, gc->username );
    651712                       
    652713                        return;
     
    670731                else
    671732                {
    672                         irc_usermsg( irc, "Message from unknown handle %s on connection %s(%s):", handle, proto_name[gc->protocol], gc->username );
     733                        irc_usermsg( irc, "Message from unknown handle %s on connection %s(%s):", handle, gc->prpl->name, gc->username );
    673734                        u = user_find( irc, irc->mynick );
    674735                }
     
    836897       
    837898        /* It might be yourself! */
    838         if( handle_cmp ( handle, b->gc->user->username, b->gc->protocol ) == 0 )
     899        if( handle_cmp ( handle, b->gc->user->username, b->gc->prpl ) == 0 )
    839900        {
    840901                u = user_find( b->gc->irc, b->gc->irc->nick );
Note: See TracChangeset for help on using the changeset viewer.