comparison libpurple/protocols/msn/msn.c @ 23488:8aa7e01bc4d5

An MSN patch from Masca to check if there's a SB available before sending OIM's. References #4877.
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Fri, 20 Jun 2008 04:58:20 +0000
parents 46d8edad1647
children efa4534fd23a
comparison
equal deleted inserted replaced
23487:d65150b5622f 23488:8aa7e01bc4d5
1093 msn_send_im(PurpleConnection *gc, const char *who, const char *message, 1093 msn_send_im(PurpleConnection *gc, const char *who, const char *message,
1094 PurpleMessageFlags flags) 1094 PurpleMessageFlags flags)
1095 { 1095 {
1096 PurpleAccount *account; 1096 PurpleAccount *account;
1097 PurpleBuddy *buddy = purple_find_buddy(gc->account, who); 1097 PurpleBuddy *buddy = purple_find_buddy(gc->account, who);
1098 MsnSession *session;
1099 MsnSwitchBoard *swboard;
1098 MsnMessage *msg; 1100 MsnMessage *msg;
1099 char *msgformat; 1101 char *msgformat;
1100 char *msgtext; 1102 char *msgtext;
1101 const char *username; 1103 const char *username;
1102 1104
1103 purple_debug_info("MSNP14","send IM {%s} to %s\n",message,who); 1105 purple_debug_info("MSNP14","send IM {%s} to %s\n",message,who);
1104 account = purple_connection_get_account(gc); 1106 account = purple_connection_get_account(gc);
1105 username = purple_account_get_username(account); 1107 username = purple_account_get_username(account);
1108
1109 session = gc->proto_data;
1110 swboard = msn_session_find_swboard(session, who);
1106 1111
1107 if (buddy) { 1112 if (buddy) {
1108 PurplePresence *p = purple_buddy_get_presence(buddy); 1113 PurplePresence *p = purple_buddy_get_presence(buddy);
1109 if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_MOBILE)) { 1114 if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_MOBILE)) {
1110 char *text = purple_markup_strip_html(message); 1115 char *text = purple_markup_strip_html(message);
1113 return 1; 1118 return 1;
1114 } 1119 }
1115 } 1120 }
1116 1121
1117 msn_import_html(message, &msgformat, &msgtext); 1122 msn_import_html(message, &msgformat, &msgtext);
1118 /* this is incorrect, we should try to initiate a connection to the
1119 buddy first, and only falls back if that fails. Otherwise we can
1120 only send offline message to invisible buddies */
1121 if (msn_user_is_online(account, who)|| 1123 if (msn_user_is_online(account, who)||
1122 msn_user_is_yahoo(account, who)){ 1124 msn_user_is_yahoo(account, who) ||
1123 /*User online,then send Online Instant Message*/ 1125 swboard != NULL){
1124 1126 /*User online or have a swboard open because it's invisible
1127 * and sent us a message,then send Online Instant Message*/
1128
1125 if (strlen(msgtext) + strlen(msgformat) + strlen(VERSION) > 1564) 1129 if (strlen(msgtext) + strlen(msgformat) + strlen(VERSION) > 1564)
1126 { 1130 {
1127 g_free(msgformat); 1131 g_free(msgformat);
1128 g_free(msgtext); 1132 g_free(msgtext);
1129 1133
1138 g_free(msgtext); 1142 g_free(msgtext);
1139 1143
1140 purple_debug_info("MSNP14","prepare to send online Message\n"); 1144 purple_debug_info("MSNP14","prepare to send online Message\n");
1141 if (g_ascii_strcasecmp(who, username)) 1145 if (g_ascii_strcasecmp(who, username))
1142 { 1146 {
1143 MsnSession *session;
1144 MsnSwitchBoard *swboard;
1145 MsnEmoticon *smile; 1147 MsnEmoticon *smile;
1146 GSList *smileys; 1148 GSList *smileys;
1147 GString *emoticons = NULL; 1149 GString *emoticons = NULL;
1148 1150
1149 session = gc->proto_data;
1150 if(msn_user_is_yahoo(account,who)){ 1151 if(msn_user_is_yahoo(account,who)){
1151 /*we send the online and offline Message to Yahoo User via UBM*/ 1152 /*we send the online and offline Message to Yahoo User via UBM*/
1152 purple_debug_info("MSNP14","send to Yahoo User\n"); 1153 purple_debug_info("MSNP14","send to Yahoo User\n");
1153 uum_send_msg(session,msg); 1154 uum_send_msg(session,msg);
1154 }else{ 1155 }else{
1201 } 1202 }
1202 1203
1203 msn_message_destroy(msg); 1204 msn_message_destroy(msg);
1204 } else { 1205 } else {
1205 /*send Offline Instant Message,only to MSN Passport User*/ 1206 /*send Offline Instant Message,only to MSN Passport User*/
1206 MsnSession *session;
1207 char *friendname; 1207 char *friendname;
1208 1208
1209 purple_debug_info("MSNP14","prepare to send offline Message\n"); 1209 purple_debug_info("MSNP14","prepare to send offline Message\n");
1210 session = gc->proto_data;
1211 1210
1212 friendname = msn_encode_mime(account->username); 1211 friendname = msn_encode_mime(account->username);
1213 msn_oim_prep_send_msg_info(session->oim, 1212 msn_oim_prep_send_msg_info(session->oim,
1214 purple_account_get_username(account), 1213 purple_account_get_username(account),
1215 friendname, who, msgtext); 1214 friendname, who, msgtext);