Changes in protocols/nogaim.c [449a51d:4cf80bb]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
protocols/nogaim.c
r449a51d r4cf80bb 2 2 * BitlBee -- An IRC to other IM-networks gateway * 3 3 * * 4 * Copyright 2002-20 10Wilmer van der Gaast and others *4 * Copyright 2002-2006 Wilmer van der Gaast and others * 5 5 \********************************************************************/ 6 6 … … 98 98 void register_protocol (struct prpl *p) 99 99 { 100 int i; 101 gboolean refused = global.conf->protocols != NULL; 102 103 for (i = 0; global.conf->protocols && global.conf->protocols[i]; i++) 104 { 105 if (g_strcasecmp(p->name, global.conf->protocols[i]) == 0) 106 refused = FALSE; 107 } 108 109 if (refused) 110 log_message(LOGLVL_WARNING, "Protocol %s disabled\n", p->name); 111 else 112 protocols = g_list_append(protocols, p); 100 protocols = g_list_append(protocols, p); 113 101 } 114 102 … … 280 268 ic->flags |= OPT_LOGGED_IN; 281 269 282 /* Necessary to send initial presence status, even if we're not away. */ 283 imc_away_send_update( ic ); 270 /* Also necessary when we're not away, at least for some of the 271 protocols. */ 272 imc_set_away( ic, u->away ); 284 273 285 274 /* Apparently we're connected successfully, so reset the … … 383 372 /* list.c */ 384 373 385 void imcb_add_buddy( struct im_connection *ic, c onst char *handle, constchar *group )374 void imcb_add_buddy( struct im_connection *ic, char *handle, char *group ) 386 375 { 387 376 user_t *u; … … 457 446 } 458 447 459 void imcb_rename_buddy( struct im_connection *ic, c onst char *handle, constchar *realname )448 void imcb_rename_buddy( struct im_connection *ic, char *handle, char *realname ) 460 449 { 461 450 user_t *u = user_findhandle( ic, handle ); 462 char *set;463 451 464 452 if( !u || !realname ) return; … … 473 461 imcb_log( ic, "User `%s' changed name to `%s'", u->nick, u->realname ); 474 462 } 475 476 set = set_getstr( &ic->acc->set, "nick_source" ); 477 if( strcmp( set, "handle" ) != 0 ) 478 { 479 char *name = g_strdup( realname ); 480 481 if( strcmp( set, "first_name" ) == 0 ) 482 { 483 int i; 484 for( i = 0; name[i] && !isspace( name[i] ); i ++ ) {} 485 name[i] = '\0'; 486 } 487 488 imcb_buddy_nick_hint( ic, handle, name ); 489 490 g_free( name ); 491 } 492 } 493 494 void imcb_remove_buddy( struct im_connection *ic, const char *handle, char *group ) 463 } 464 465 void imcb_remove_buddy( struct im_connection *ic, char *handle, char *group ) 495 466 { 496 467 user_t *u; … … 502 473 /* Mainly meant for ICQ (and now also for Jabber conferences) to allow IM 503 474 modules to suggest a nickname for a handle. */ 504 void imcb_buddy_nick_hint( struct im_connection *ic, c onst char *handle, constchar *nick )475 void imcb_buddy_nick_hint( struct im_connection *ic, char *handle, char *nick ) 505 476 { 506 477 user_t *u = user_findhandle( ic, handle ); … … 647 618 oo = u->online; 648 619 649 g_free( u->away ); 650 g_free( u->status_msg ); 651 u->away = u->status_msg = NULL; 620 if( u->away ) 621 { 622 g_free( u->away ); 623 u->away = NULL; 624 } 652 625 653 626 if( ( flags & OPT_LOGGED_IN ) && !u->online ) … … 687 660 } 688 661 } 689 else 690 { 691 u->status_msg = g_strdup( message ); 692 } 662 /* else waste_any_state_information_for_now(); */ 693 663 694 664 /* LISPy... */ … … 715 685 } 716 686 717 void imcb_buddy_msg( struct im_connection *ic, c onst char *handle, char *msg, uint32_t flags, time_t sent_at )687 void imcb_buddy_msg( struct im_connection *ic, char *handle, char *msg, uint32_t flags, time_t sent_at ) 718 688 { 719 689 irc_t *irc = ic->irc; … … 848 818 } 849 819 850 void imcb_chat_msg( struct groupchat *c, c onst char *who, char *msg, uint32_t flags, time_t sent_at )820 void imcb_chat_msg( struct groupchat *c, char *who, char *msg, uint32_t flags, time_t sent_at ) 851 821 { 852 822 struct im_connection *ic = c->ic; … … 920 890 /* buddy_chat.c */ 921 891 922 void imcb_chat_add_buddy( struct groupchat *b, c onst char *handle )892 void imcb_chat_add_buddy( struct groupchat *b, char *handle ) 923 893 { 924 894 user_t *u = user_findhandle( b->ic, handle ); … … 955 925 956 926 /* This function is one BIG hack... :-( EREWRITE */ 957 void imcb_chat_remove_buddy( struct groupchat *b, c onst char *handle, constchar *reason )927 void imcb_chat_remove_buddy( struct groupchat *b, char *handle, char *reason ) 958 928 { 959 929 user_t *u; … … 1100 1070 } 1101 1071 1102 static char *imc_away_state_find( GList *gcm, char *away, char **message ); 1103 1104 int imc_away_send_update( struct im_connection *ic ) 1105 { 1106 char *away, *msg = NULL; 1107 1108 away = set_getstr( &ic->acc->set, "away" ) ? 1109 : set_getstr( &ic->irc->set, "away" ); 1110 if( away && *away ) 1111 { 1112 GList *m = ic->acc->prpl->away_states( ic ); 1113 msg = ic->acc->flags & ACC_FLAG_AWAY_MESSAGE ? away : NULL; 1114 away = imc_away_state_find( m, away, &msg ) ? : m->data; 1115 } 1116 else if( ic->acc->flags & ACC_FLAG_STATUS_MESSAGE ) 1117 { 1118 away = NULL; 1119 msg = set_getstr( &ic->acc->set, "status" ) ? 1120 : set_getstr( &ic->irc->set, "status" ); 1121 } 1122 1123 ic->acc->prpl->set_away( ic, away, msg ); 1124 1125 return 1; 1072 static char *imc_away_alias_find( GList *gcm, char *away ); 1073 1074 int imc_set_away( struct im_connection *ic, char *away ) 1075 { 1076 GList *m, *ms; 1077 char *s; 1078 1079 if( !away ) away = ""; 1080 ms = m = ic->acc->prpl->away_states( ic ); 1081 1082 while( m ) 1083 { 1084 if( *away ) 1085 { 1086 if( g_strncasecmp( m->data, away, strlen( m->data ) ) == 0 ) 1087 break; 1088 } 1089 else 1090 { 1091 if( g_strcasecmp( m->data, "Available" ) == 0 ) 1092 break; 1093 if( g_strcasecmp( m->data, "Online" ) == 0 ) 1094 break; 1095 } 1096 m = m->next; 1097 } 1098 1099 if( m ) 1100 { 1101 ic->acc->prpl->set_away( ic, m->data, *away ? away : NULL ); 1102 } 1103 else 1104 { 1105 s = imc_away_alias_find( ms, away ); 1106 if( s ) 1107 { 1108 ic->acc->prpl->set_away( ic, s, away ); 1109 if( set_getbool( &ic->irc->set, "debug" ) ) 1110 imcb_log( ic, "Setting away state to %s", s ); 1111 } 1112 else 1113 ic->acc->prpl->set_away( ic, GAIM_AWAY_CUSTOM, away ); 1114 } 1115 1116 return( 1 ); 1126 1117 } 1127 1118 … … 1138 1129 }; 1139 1130 1140 static char *imc_away_ state_find( GList *gcm, char *away, char **message)1131 static char *imc_away_alias_find( GList *gcm, char *away ) 1141 1132 { 1142 1133 GList *m; 1143 1134 int i, j; 1144 1135 1145 for( m = gcm; m; m = m->next )1146 if( g_strncasecmp( m->data, away, strlen( m->data ) ) == 0 )1147 {1148 /* At least the Yahoo! module works better if message1149 contains no data unless it adds something to what1150 we have in state already. */1151 if( strlen( m->data ) == strlen( away ) )1152 *message = NULL;1153 1154 return m->data;1155 }1156 1157 1136 for( i = 0; *imc_away_alias_list[i]; i ++ ) 1158 1137 { 1159 int keep_message;1160 1161 1138 for( j = 0; imc_away_alias_list[i][j]; j ++ ) 1162 1139 if( g_strncasecmp( away, imc_away_alias_list[i][j], strlen( imc_away_alias_list[i][j] ) ) == 0 ) 1163 {1164 keep_message = strlen( away ) != strlen( imc_away_alias_list[i][j] );1165 1140 break; 1166 }1167 1141 1168 1142 if( !imc_away_alias_list[i][j] ) /* If we reach the end, this row */ … … 1172 1146 for( j = 0; imc_away_alias_list[i][j]; j ++ ) 1173 1147 { 1174 for( m = gcm; m; m = m->next ) 1148 m = gcm; 1149 while( m ) 1150 { 1175 1151 if( g_strcasecmp( imc_away_alias_list[i][j], m->data ) == 0 ) 1176 { 1177 if( !keep_message ) 1178 *message = NULL; 1179 1180 return imc_away_alias_list[i][j]; 1181 } 1182 } 1183 1184 /* No need to look further, apparently this state doesn't 1185 have any good alias for this protocol. */ 1186 break; 1187 } 1188 1189 return NULL; 1152 return( imc_away_alias_list[i][j] ); 1153 m = m->next; 1154 } 1155 } 1156 } 1157 1158 return( NULL ); 1190 1159 } 1191 1160
Note: See TracChangeset
for help on using the changeset viewer.