Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • protocols/nogaim.c

    rda3b536 rdd89a55  
    3838#include <ctype.h>
    3939
     40static char *proto_away_alias[8][5] =
     41{
     42        { "Away from computer", "Away", "Extended away", NULL },
     43        { "NA", "N/A", "Not available", NULL },
     44        { "Busy", "Do not disturb", "DND", "Occupied", NULL },
     45        { "Be right back", "BRB", NULL },
     46        { "On the phone", "Phone", "On phone", NULL },
     47        { "Out to lunch", "Lunch", "Food", NULL },
     48        { "Invisible", "Hidden" },
     49        { NULL }
     50};
     51static char *proto_away_alias_find( GList *gcm, char *away );
     52
    4053static int remove_chat_buddy_silent( struct conversation *b, char *handle );
    4154
     
    145158GSList *get_connections() { return connections; }
    146159
     160int proto_away( struct gaim_connection *gc, char *away )
     161{
     162        GList *m, *ms;
     163        char *s;
     164       
     165        if( !away ) away = "";
     166        ms = m = gc->prpl->away_states( gc );
     167       
     168        while( m )
     169        {
     170                if( *away )
     171                {
     172                        if( g_strncasecmp( m->data, away, strlen( m->data ) ) == 0 )
     173                                break;
     174                }
     175                else
     176                {
     177                        if( g_strcasecmp( m->data, "Available" ) == 0 )
     178                                break;
     179                        if( g_strcasecmp( m->data, "Online" ) == 0 )
     180                                break;
     181                }
     182                m = m->next;
     183        }
     184       
     185        if( m )
     186        {
     187                gc->prpl->set_away( gc, m->data, *away ? away : NULL );
     188        }
     189        else
     190        {
     191                s = proto_away_alias_find( ms, away );
     192                if( s )
     193                {
     194                        gc->prpl->set_away( gc, s, away );
     195                        if( set_getint( gc->irc, "debug" ) )
     196                                serv_got_crap( gc, "Setting away state to %s", s );
     197                }
     198                else
     199                        gc->prpl->set_away( gc, GAIM_AWAY_CUSTOM, away );
     200        }
     201       
     202        g_list_free( ms );
     203       
     204        return( 1 );
     205}
     206
     207static char *proto_away_alias_find( GList *gcm, char *away )
     208{
     209        GList *m;
     210        int i, j;
     211       
     212        for( i = 0; *proto_away_alias[i]; i ++ )
     213        {
     214                for( j = 0; proto_away_alias[i][j]; j ++ )
     215                        if( g_strncasecmp( away, proto_away_alias[i][j], strlen( proto_away_alias[i][j] ) ) == 0 )
     216                                break;
     217               
     218                if( !proto_away_alias[i][j] )   /* If we reach the end, this row */
     219                        continue;               /* is not what we want. Next!    */
     220               
     221                /* Now find an entry in this row which exists in gcm */
     222                for( j = 0; proto_away_alias[i][j]; j ++ )
     223                {
     224                        m = gcm;
     225                        while( m )
     226                        {
     227                                if( g_strcasecmp( proto_away_alias[i][j], m->data ) == 0 )
     228                                        return( proto_away_alias[i][j] );
     229                                m = m->next;
     230                        }
     231                }
     232        }
     233       
     234        return( NULL );
     235}
     236
    147237/* multi.c */
    148238
     
    269359        /* Also necessary when we're not away, at least for some of the
    270360           protocols. */
    271         bim_set_away( gc, u->away );
     361        proto_away( gc, u->away );
    272362}
    273363
     
    393483        else if( gc->user->proto_opt[0] && *gc->user->proto_opt[0] )
    394484        {
    395                 char *colon;
    396                
    397                 if( ( colon = strchr( gc->user->proto_opt[0], ':' ) ) )
    398                         u->host = g_strndup( gc->user->proto_opt[0],
    399                                              colon - gc->user->proto_opt[0] );
    400                 else
    401                         u->host = g_strdup( gc->user->proto_opt[0] );
    402                
     485                u->host = g_strdup( gc->user->proto_opt[0] );
    403486                u->user = g_strdup( handle );
    404487               
     
    9411024}
    9421025
    943 
    944 
    945 
    946 /* The plan is to not allow straight calls to prpl functions anymore, but do
    947    them all from some wrappers. We'll start to define some down here: */
    948 
    949 int bim_buddy_msg( struct gaim_connection *gc, char *handle, char *msg, int flags )
     1026int serv_send_im( irc_t *irc, user_t *u, char *msg, int flags )
    9501027{
    9511028        char *buf = NULL;
    9521029        int st;
    9531030       
    954         if( ( gc->flags & OPT_CONN_HTML ) && ( g_strncasecmp( msg, "<html>", 6 ) != 0 ) )
     1031        if( ( u->gc->flags & OPT_CONN_HTML ) && ( g_strncasecmp( msg, "<html>", 6 ) != 0 ) )
    9551032        {
    9561033                buf = escape_html( msg );
     
    9581035        }
    9591036       
    960         st = gc->prpl->send_im( gc, handle, msg, strlen( msg ), flags );
     1037        st = ((struct gaim_connection *)u->gc)->prpl->send_im( u->gc, u->handle, msg, strlen( msg ), flags );
    9611038        g_free( buf );
    9621039       
     
    9641041}
    9651042
    966 int bim_chat_msg( struct gaim_connection *gc, int id, char *msg )
     1043int serv_send_chat( irc_t *irc, struct gaim_connection *gc, int id, char *msg )
    9671044{
    9681045        char *buf = NULL;
     
    9801057        return st;
    9811058}
    982 
    983 static char *bim_away_alias_find( GList *gcm, char *away );
    984 
    985 int bim_set_away( struct gaim_connection *gc, char *away )
    986 {
    987         GList *m, *ms;
    988         char *s;
    989        
    990         if( !away ) away = "";
    991         ms = m = gc->prpl->away_states( gc );
    992        
    993         while( m )
    994         {
    995                 if( *away )
    996                 {
    997                         if( g_strncasecmp( m->data, away, strlen( m->data ) ) == 0 )
    998                                 break;
    999                 }
    1000                 else
    1001                 {
    1002                         if( g_strcasecmp( m->data, "Available" ) == 0 )
    1003                                 break;
    1004                         if( g_strcasecmp( m->data, "Online" ) == 0 )
    1005                                 break;
    1006                 }
    1007                 m = m->next;
    1008         }
    1009        
    1010         if( m )
    1011         {
    1012                 gc->prpl->set_away( gc, m->data, *away ? away : NULL );
    1013         }
    1014         else
    1015         {
    1016                 s = bim_away_alias_find( ms, away );
    1017                 if( s )
    1018                 {
    1019                         gc->prpl->set_away( gc, s, away );
    1020                         if( set_getint( gc->irc, "debug" ) )
    1021                                 serv_got_crap( gc, "Setting away state to %s", s );
    1022                 }
    1023                 else
    1024                         gc->prpl->set_away( gc, GAIM_AWAY_CUSTOM, away );
    1025         }
    1026        
    1027         g_list_free( ms );
    1028        
    1029         return( 1 );
    1030 }
    1031 
    1032 static char *bim_away_alias_list[8][5] =
    1033 {
    1034         { "Away from computer", "Away", "Extended away", NULL },
    1035         { "NA", "N/A", "Not available", NULL },
    1036         { "Busy", "Do not disturb", "DND", "Occupied", NULL },
    1037         { "Be right back", "BRB", NULL },
    1038         { "On the phone", "Phone", "On phone", NULL },
    1039         { "Out to lunch", "Lunch", "Food", NULL },
    1040         { "Invisible", "Hidden" },
    1041         { NULL }
    1042 };
    1043 
    1044 static char *bim_away_alias_find( GList *gcm, char *away )
    1045 {
    1046         GList *m;
    1047         int i, j;
    1048        
    1049         for( i = 0; *bim_away_alias_list[i]; i ++ )
    1050         {
    1051                 for( j = 0; bim_away_alias_list[i][j]; j ++ )
    1052                         if( g_strncasecmp( away, bim_away_alias_list[i][j], strlen( bim_away_alias_list[i][j] ) ) == 0 )
    1053                                 break;
    1054                
    1055                 if( !bim_away_alias_list[i][j] )        /* If we reach the end, this row */
    1056                         continue;                       /* is not what we want. Next!    */
    1057                
    1058                 /* Now find an entry in this row which exists in gcm */
    1059                 for( j = 0; bim_away_alias_list[i][j]; j ++ )
    1060                 {
    1061                         m = gcm;
    1062                         while( m )
    1063                         {
    1064                                 if( g_strcasecmp( bim_away_alias_list[i][j], m->data ) == 0 )
    1065                                         return( bim_away_alias_list[i][j] );
    1066                                 m = m->next;
    1067                         }
    1068                 }
    1069         }
    1070        
    1071         return( NULL );
    1072 }
    1073 
    1074 void bim_add_allow( struct gaim_connection *gc, char *handle )
    1075 {
    1076         if( g_slist_find_custom( gc->permit, handle, (GCompareFunc) gc->prpl->cmp_buddynames ) == NULL )
    1077         {
    1078                 gc->permit = g_slist_prepend( gc->permit, g_strdup( handle ) );
    1079         }
    1080        
    1081         gc->prpl->add_permit( gc, handle );
    1082 }
    1083 
    1084 void bim_rem_allow( struct gaim_connection *gc, char *handle )
    1085 {
    1086         GSList *l;
    1087        
    1088         if( ( l = g_slist_find_custom( gc->permit, handle, (GCompareFunc) gc->prpl->cmp_buddynames ) ) )
    1089         {
    1090                 g_free( l->data );
    1091                 gc->permit = g_slist_delete_link( gc->permit, l );
    1092         }
    1093        
    1094         gc->prpl->rem_permit( gc, handle );
    1095 }
    1096 
    1097 void bim_add_block( struct gaim_connection *gc, char *handle )
    1098 {
    1099         if( g_slist_find_custom( gc->deny, handle, (GCompareFunc) gc->prpl->cmp_buddynames ) == NULL )
    1100         {
    1101                 gc->deny = g_slist_prepend( gc->deny, g_strdup( handle ) );
    1102         }
    1103        
    1104         gc->prpl->add_deny( gc, handle );
    1105 }
    1106 
    1107 void bim_rem_block( struct gaim_connection *gc, char *handle )
    1108 {
    1109         GSList *l;
    1110        
    1111         if( ( l = g_slist_find_custom( gc->deny, handle, (GCompareFunc) gc->prpl->cmp_buddynames ) ) )
    1112         {
    1113                 g_free( l->data );
    1114                 gc->deny = g_slist_delete_link( gc->deny, l );
    1115         }
    1116        
    1117         gc->prpl->rem_deny( gc, handle );
    1118 }
Note: See TracChangeset for help on using the changeset viewer.