# HG changeset patch # User Ma Yuan # Date 1155571640 0 # Node ID 90f89601d6d350ef7f898ba8bd79a020fc118e55 # Parent da3f8f7ec3ce5d9f73fdb789a7affbd237aba25d [gaim-migrate @ 16758] change to support Showing Yahoo Message committed by MaYuan committer: Ethan Blanton diff -r da3f8f7ec3ce -r 90f89601d6d3 src/protocols/msn/notification.c --- a/src/protocols/msn/notification.c Sun Aug 13 16:01:52 2006 +0000 +++ b/src/protocols/msn/notification.c Mon Aug 14 16:07:20 2006 +0000 @@ -426,6 +426,8 @@ { MsnMessage *msg; GaimConnection *gc; + const char *passport; + const char *content_type; gaim_debug_info("MaYuan","Process UBM payload:%s\n",payload); msg = msn_message_new_from_cmd(cmdproc->session, cmd); @@ -435,35 +437,62 @@ msn_message_show_readable(msg, "Notification", TRUE); #endif - gaim_debug_info("MaYuan","type:%d\n",msg->type); - if(msg->type == MSN_MSG_TEXT){ + gc = cmdproc->session->account->gc; + passport = msg->remote_user; + + content_type = msn_message_get_content_type(msg); + gaim_debug_info("MaYuan","type:%d\n",content_type); + if(!strcmp(content_type,"text/plain")){ const char *value; const char *body; char *body_str; char *body_enc; char *body_final; size_t body_len; - const char *passport; body = msn_message_get_bin_data(msg, &body_len); body_str = g_strndup(body, body_len); body_enc = g_markup_escape_text(body_str, -1); g_free(body_str); - passport = msg->remote_user; - gc = cmdproc->session->account->gc; - if ((value = msn_message_get_attr(msg, "X-MMS-IM-Format")) != NULL) { - char *pre, *post; + if ((value = msn_message_get_attr(msg, "X-MMS-IM-Format")) != NULL) { + char *pre, *post; - msn_parse_format(value, &pre, &post); - body_final = g_strdup_printf("%s%s%s", pre ? pre : "", - body_enc ? body_enc : "", post ? post : ""); - g_free(pre); - g_free(post); - g_free(body_enc); + msn_parse_format(value, &pre, &post); + body_final = g_strdup_printf("%s%s%s", pre ? pre : "", + body_enc ? body_enc : "", post ? post : ""); + g_free(pre); + g_free(post); + g_free(body_enc); } serv_got_im(gc, passport, body_final, 0, time(NULL)); } + if(!strcmp(content_type,"text/x-msmsgscontrol")){ + if(msn_message_get_attr(msg, "TypingUser") != NULL){ + serv_got_typing(gc, passport, MSN_TYPING_RECV_TIMEOUT, + GAIM_TYPING); + } + } + if(!strcmp(content_type,"text/x-msnmsgr-datacast")){ + char *username, *str; + GaimAccount *account; + GaimBuddy *buddy; + const char *user; + + account = cmdproc->session->account; + user = msg->remote_user; + + if ((buddy = gaim_find_buddy(account, user)) != NULL){ + username = g_markup_escape_text(gaim_buddy_get_alias(buddy), -1); + }else{ + username = g_markup_escape_text(user, -1); + } + + str = g_strdup_printf(_("%s just sent you a Nudge!"), username); + g_free(username); + msn_session_report_user(cmdproc->session,user,str,GAIM_MESSAGE_SYSTEM); + g_free(str); + } msn_message_destroy(msg); } @@ -650,43 +679,6 @@ } static void -add_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) -{ - MsnSession *session; - MsnUser *user; - const char *list; - const char *passport; - const char *friendly; - MsnListId list_id; - int group_id; - - list = cmd->params[1]; - passport = cmd->params[3]; - friendly = gaim_url_decode(cmd->params[4]); - - session = cmdproc->session; - - user = msn_userlist_find_user(session->userlist, passport); - - if (user == NULL){ - user = msn_user_new(session->userlist, passport, friendly); - msn_userlist_add_user(session->userlist, user); - }else{ - msn_user_set_friendly_name(user, friendly); - } - - list_id = msn_get_list_id(list); - - if (cmd->param_count >= 6) - group_id = atoi(cmd->params[5]); - else - group_id = -1; - - msn_got_add_user(session, user, list_id, group_id); - msn_user_update(user); -} - -static void add_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) { MsnSession *session; @@ -1707,7 +1699,6 @@ /* Synchronous */ msn_table_add_cmd(cbs_table, "CHG", "CHG", NULL); msn_table_add_cmd(cbs_table, "CHG", "ILN", iln_cmd); - msn_table_add_cmd(cbs_table, "ADD", "ADD", add_cmd); msn_table_add_cmd(cbs_table, "ADL", "ILN", iln_cmd); msn_table_add_cmd(cbs_table, "REM", "REM", rem_cmd); msn_table_add_cmd(cbs_table, "USR", "USR", usr_cmd); diff -r da3f8f7ec3ce -r 90f89601d6d3 src/protocols/msn/oim.c --- a/src/protocols/msn/oim.c Sun Aug 13 16:01:52 2006 +0000 +++ b/src/protocols/msn/oim.c Mon Aug 14 16:07:20 2006 +0000 @@ -202,35 +202,6 @@ msn_soap_read_cb(data,source,cond); } -/*get the conversation*/ -static GaimConversation * -msn_oim_get_conv(MsnOim *oim,const char *passport) -{ - GaimAccount *account; - GaimConversation * conv; - - g_return_val_if_fail(oim != NULL, NULL); - account = oim->session->account; - - conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, - passport, account); - if(conv == NULL){ - conv = gaim_conversation_new(GAIM_CONV_TYPE_IM, account, passport); - } - return conv; -} - -/*put the OIM Message to User Conversation*/ -void -msn_oim_report_user(MsnOim *oim,const char *passport,char *msg) -{ - GaimConversation * conv; - - if ((conv = msn_oim_get_conv(oim,passport)) != NULL){ - gaim_conversation_write(conv, NULL, msg, GAIM_MESSAGE_SYSTEM, time(NULL)); - } -} - /*parse the oim XML data*/ void msn_parse_oim_msg(MsnOim *oim,const char *xmlmsg) @@ -250,7 +221,7 @@ nNode = xmlnode_get_child(mNode,"N"); nickname = xmlnode_get_data(nNode); gaim_debug_info("MaYuan","E:{%s},I:{%s},rTime:{%s}\n",passport,msgid,rTime); -// msn_oim_report_user(oim,passport,"hello"); +// msn_session_report_user(oim->session,passport,"hello"); oim->oim_list = g_list_append(oim->oim_list,msgid); } if(msn_soap_connected(oim->retrieveconn) == -1){ diff -r da3f8f7ec3ce -r 90f89601d6d3 src/protocols/msn/session.c --- a/src/protocols/msn/session.c Sun Aug 13 16:01:52 2006 +0000 +++ b/src/protocols/msn/session.c Mon Aug 14 16:07:20 2006 +0000 @@ -163,6 +163,38 @@ return NULL; } +/*get the conversation*/ +GaimConversation * +msn_session_get_conv(MsnSession *session,const char *passport) +{ + GaimAccount *account; + GaimConversation * conv; + + g_return_val_if_fail(session != NULL, NULL); + account = session->account; + + conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, + passport, account); + if(conv == NULL){ + conv = gaim_conversation_new(GAIM_CONV_TYPE_IM, account, passport); + } + return conv; +} + +/* put Message to User Conversation + * + * passport - the one want to talk to you + */ +void +msn_session_report_user(MsnSession *session,const char *passport,char *msg,GaimMessageFlags flags) +{ + GaimConversation * conv; + + if ((conv = msn_session_get_conv(session,passport)) != NULL){ + gaim_conversation_write(conv, NULL, msg, flags, time(NULL)); + } +} + MsnSwitchBoard * msn_session_find_swboard_with_conv(MsnSession *session, GaimConversation *conv) { diff -r da3f8f7ec3ce -r 90f89601d6d3 src/protocols/msn/session.h --- a/src/protocols/msn/session.h Sun Aug 13 16:01:52 2006 +0000 +++ b/src/protocols/msn/session.h Mon Aug 14 16:07:20 2006 +0000 @@ -234,4 +234,12 @@ */ void msn_session_finish_login(MsnSession *session); +/*get conversation via session, + * If has one, return that,else create a new one; + */ +GaimConversation *msn_session_get_conv(MsnSession *session,const char *passport); + +/*post message to User*/ +void msn_session_report_user(MsnSession *session,const char *passport, + char *msg,GaimMessageFlags flags); #endif /* _MSN_SESSION_H_ */