Sun, 23 Jun 2013 23:44:05 +0530
Refactored msn protocol to use GObject-based PurpleConversation
--- a/libpurple/protocols/msn/msg.c Sun Jun 23 21:49:15 2013 +0530 +++ b/libpurple/protocols/msn/msg.c Sun Jun 23 23:44:05 2013 +0530 @@ -705,7 +705,7 @@ if (swboard->current_users > 1 || ((swboard->conv != NULL) && - purple_conversation_get_type(swboard->conv) == PURPLE_CONV_TYPE_CHAT)) + PURPLE_IS_CHAT_CONVERSATION(swboard->conv))) { /* If current_users is always ok as it should then there is no need to * check if this is a chat. */ @@ -717,7 +717,7 @@ time(NULL)); if (swboard->conv == NULL) { - swboard->conv = purple_conversations_find_chat(gc, swboard->chat_id); + swboard->conv = PURPLE_CONVERSATION(purple_conversations_find_chat(gc, swboard->chat_id)); swboard->flag |= MSN_SB_FLAG_IM; } } @@ -727,8 +727,8 @@ serv_got_im(gc, passport, body_final, 0, time(NULL)); if (swboard->conv == NULL) { - swboard->conv = purple_conversations_find_with_account(PURPLE_CONV_TYPE_IM, - passport, purple_connection_get_account(gc)); + swboard->conv = PURPLE_CONVERSATION(purple_conversations_find_im_with_account( + passport, purple_connection_get_account(gc))); swboard->flag |= MSN_SB_FLAG_IM; } } @@ -795,18 +795,19 @@ if (swboard->conv == NULL) { if (chat) - swboard->conv = purple_conversations_find_chat(purple_account_get_connection(account), swboard->chat_id); + swboard->conv = PURPLE_CONVERSATION(purple_conversations_find_chat( + purple_account_get_connection(account), swboard->chat_id)); else { - swboard->conv = purple_conversations_find_with_account(PURPLE_CONV_TYPE_IM, - who, account); + swboard->conv = PURPLE_CONVERSATION(purple_conversations_find_im_with_account( + who, account)); if (swboard->conv == NULL) - swboard->conv = purple_im_conversation_new(account, who); + swboard->conv = PURPLE_CONVERSATION(purple_im_conversation_new(account, who)); } } if (chat) serv_got_chat_in(pc, - purple_chat_conversation_get_id(PURPLE_CONV_CHAT(swboard->conv)), + purple_chat_conversation_get_id(PURPLE_CHAT_CONVERSATION(swboard->conv)), who, PURPLE_MESSAGE_RECV|PURPLE_MESSAGE_SYSTEM, str, time(NULL)); else @@ -996,7 +997,8 @@ * the conversation doesn't exist then we cannot associate the new * smiley with its GtkIMHtml widget. */ if (!conv) { - conv = purple_im_conversation_new(session->account, who); + /* TODO memory leak - dispose this conv */ + conv = PURPLE_CONVERSATION(purple_im_conversation_new(session->account, who)); } if (purple_conversation_custom_smiley_add(conv, smile, "sha1", sha1, TRUE)) { @@ -1034,7 +1036,7 @@ MsnSwitchBoard *swboard = cmdproc->data; if (swboard->current_users > 1 || ((swboard->conv != NULL) && - purple_conversation_get_type(swboard->conv) == PURPLE_CONV_TYPE_CHAT)) + PURPLE_IS_CHAT_CONVERSATION(swboard->conv))) purple_prpl_got_attention_in_chat(gc, swboard->chat_id, user, MSN_NUDGE); else @@ -1140,21 +1142,20 @@ purple_debug_info("msn", "Computer call\n"); if (cmdproc->session) { - PurpleConversation *conv = NULL; + PurpleIMConversation *im = NULL; gchar *from = msg->remote_user; gchar *buf = NULL; if (from) - conv = purple_conversations_find_with_account( - PURPLE_CONV_TYPE_IM, from, - cmdproc->session->account); - if (conv) + im = purple_conversations_find_im_with_account( + from, cmdproc->session->account); + if (im) buf = g_strdup_printf( _("%s sent you a voice chat " "invite, which is not yet " "supported."), from); if (buf) { - purple_conversation_write(conv, NULL, buf, + purple_conversation_write(PURPLE_CONVERSATION(im), NULL, buf, PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_NOTIFY, time(NULL));
--- a/libpurple/protocols/msn/msn.c Sun Jun 23 21:49:15 2013 +0530 +++ b/libpurple/protocols/msn/msn.c Sun Jun 23 23:44:05 2013 +0530 @@ -849,7 +849,8 @@ /* TODO: This might move somewhere else, after USR might be */ swboard->chat_id = msn_switchboard_get_chat_id(); - swboard->conv = serv_got_joined_chat(gc, swboard->chat_id, "MSN Chat"); + swboard->conv = PURPLE_CONVERSATION(serv_got_joined_chat(gc, + swboard->chat_id, "MSN Chat")); swboard->flag = MSN_SB_FLAG_IM; /* Local alias > Display name > Username */ @@ -857,7 +858,7 @@ if ((alias = purple_connection_get_display_name(gc)) == NULL) alias = purple_account_get_username(account); - purple_chat_conversation_add_user(PURPLE_CONV_CHAT(swboard->conv), + purple_chat_conversation_add_user(PURPLE_CHAT_CONVERSATION(swboard->conv), alias, NULL, PURPLE_CHAT_CONVERSATION_BUDDY_NONE, TRUE); } @@ -1970,7 +1971,7 @@ swboard = msn_switchboard_new(session); msn_switchboard_request(swboard); swboard->chat_id = id; - swboard->conv = purple_conversations_find_chat(gc, id); + swboard->conv = PURPLE_CONVERSATION(purple_conversations_find_chat(gc, id)); } swboard->flag |= MSN_SB_FLAG_IM; @@ -2885,11 +2886,11 @@ if (!g_ascii_strcasecmp(cmd, "Chat")) { char *sname = g_hash_table_lookup(params, "contact"); if (sname) { - PurpleConversation *conv = purple_conversations_find_with_account( - PURPLE_CONV_TYPE_IM, sname, acct); - if (conv == NULL) - conv = purple_im_conversation_new(acct, sname); - purple_conversation_present(conv); + PurpleIMConversation *im = purple_conversations_find_im_with_account( + sname, acct); + if (im == NULL) + im = purple_im_conversation_new(acct, sname); + purple_conversation_present(PURPLE_CONVERSATION(im)); } /*else **If pidgindialogs_im() was in the core, we could use it here.
--- a/libpurple/protocols/msn/notification.c Sun Jun 23 21:49:15 2013 +0530 +++ b/libpurple/protocols/msn/notification.c Sun Jun 23 23:44:05 2013 +0530 @@ -1202,8 +1202,7 @@ if (id && strcmp(id, "1")) { PurpleConversation *conv - = purple_conversations_find_with_account(PURPLE_CONV_TYPE_ANY, - who, purple_connection_get_account(gc)); + = purple_conversations_find_with_account(who, purple_connection_get_account(gc)); if (conv != NULL) { const char *error; if (!strcmp(id, "407"))
--- a/libpurple/protocols/msn/session.c Sun Jun 23 21:49:15 2013 +0530 +++ b/libpurple/protocols/msn/session.c Sun Jun 23 23:44:05 2013 +0530 @@ -177,21 +177,20 @@ return NULL; } -static PurpleConversation * -msn_session_get_conv(MsnSession *session,const char *passport) +static PurpleIMConversation * +msn_session_get_im(MsnSession *session,const char *passport) { PurpleAccount *account; - PurpleConversation * conv; + PurpleIMConversation * im; g_return_val_if_fail(session != NULL, NULL); account = session->account; - conv = purple_conversations_find_with_account(PURPLE_CONV_TYPE_IM, - passport, account); - if(conv == NULL){ - conv = purple_im_conversation_new(account, passport); + im = purple_conversations_find_im_with_account(passport, account); + if(im == NULL){ + im = purple_im_conversation_new(account, passport); } - return conv; + return im; } /* put Message to User Conversation @@ -201,10 +200,10 @@ void msn_session_report_user(MsnSession *session,const char *passport,const char *msg,PurpleMessageFlags flags) { - PurpleConversation * conv; + PurpleIMConversation * im; - if ((conv = msn_session_get_conv(session,passport)) != NULL){ - purple_conversation_write(conv, NULL, msg, flags, time(NULL)); + if ((im = msn_session_get_im(session,passport)) != NULL){ + purple_conversation_write(PURPLE_CONVERSATION(im), NULL, msg, flags, time(NULL)); } }
--- a/libpurple/protocols/msn/slpcall.c Sun Jun 23 21:49:15 2013 +0530 +++ b/libpurple/protocols/msn/slpcall.c Sun Jun 23 23:44:05 2013 +0530 @@ -566,18 +566,17 @@ } else if (!strcmp(euf_guid, MSN_CAM_REQUEST_GUID)) { purple_debug_info("msn", "Cam request.\n"); if (slpcall->slplink && slpcall->slplink->session) { - PurpleConversation *conv; + PurpleIMConversation *im; gchar *from = slpcall->slplink->remote_user; - conv = purple_conversations_find_with_account( - PURPLE_CONV_TYPE_IM, from, - slpcall->slplink->session->account); - if (conv) { + im = purple_conversations_find_im_with_account( + from, slpcall->slplink->session->account); + if (im) { char *buf; buf = g_strdup_printf( _("%s requests to view your " "webcam, but this request is " "not yet supported."), from); - purple_conversation_write(conv, NULL, buf, + purple_conversation_write(PURPLE_CONVERSATION(im), NULL, buf, PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_NOTIFY, time(NULL)); @@ -588,17 +587,16 @@ } else if (!strcmp(euf_guid, MSN_CAM_GUID)) { purple_debug_info("msn", "Cam invite.\n"); if (slpcall->slplink && slpcall->slplink->session) { - PurpleConversation *conv; + PurpleIMConversation *im; gchar *from = slpcall->slplink->remote_user; - conv = purple_conversations_find_with_account( - PURPLE_CONV_TYPE_IM, from, - slpcall->slplink->session->account); - if (conv) { + im = purple_conversations_find_im_with_account( + from, slpcall->slplink->session->account); + if (im) { char *buf; buf = g_strdup_printf( _("%s invited you to view his/her webcam, but " "this is not yet supported."), from); - purple_conversation_write(conv, NULL, buf, + purple_conversation_write(PURPLE_CONVERSATION(im), NULL, buf, PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_NOTIFY, time(NULL));
--- a/libpurple/protocols/msn/switchboard.c Sun Jun 23 21:49:15 2013 +0530 +++ b/libpurple/protocols/msn/switchboard.c Sun Jun 23 23:44:05 2013 +0530 @@ -288,22 +288,21 @@ return; } - if ((swboard->conv != NULL) && - (purple_conversation_get_type(swboard->conv) == PURPLE_CONV_TYPE_CHAT)) + if ((swboard->conv != NULL) && (PURPLE_IS_CHAT_CONVERSATION(swboard->conv))) { - purple_chat_conversation_add_user(PURPLE_CONV_CHAT(swboard->conv), msnuser->passport, NULL, - PURPLE_CHAT_CONVERSATION_BUDDY_NONE, TRUE); + purple_chat_conversation_add_user(PURPLE_CHAT_CONVERSATION(swboard->conv), + msnuser->passport, NULL, PURPLE_CHAT_CONVERSATION_BUDDY_NONE, TRUE); msn_servconn_set_idle_timeout(swboard->servconn, 0); } else if (swboard->current_users > 1) { msn_servconn_set_idle_timeout(swboard->servconn, 0); if (swboard->conv == NULL || - purple_conversation_get_type(swboard->conv) != PURPLE_CONV_TYPE_CHAT) + PURPLE_IS_IM_CONVERSATION(swboard->conv)) { GList *l; -#if 0 +#if 0 /* TODO if conv exists, it gets leaked? */ /* this is bad - it causes msn_switchboard_close to be called on the * switchboard we're in the middle of using :( */ if (swboard->conv != NULL) @@ -312,9 +311,9 @@ swboard->chat_id = msn_switchboard_get_chat_id(); swboard->flag |= MSN_SB_FLAG_IM; - swboard->conv = serv_got_joined_chat(purple_account_get_connection(account), + swboard->conv = PURPLE_CONVERSATION(serv_got_joined_chat(purple_account_get_connection(account), swboard->chat_id, - "MSN Chat"); + "MSN Chat")); for (l = swboard->users; l != NULL; l = l->next) { @@ -322,11 +321,11 @@ tmp_user = ((MsnUser*)l->data)->passport; - purple_chat_conversation_add_user(PURPLE_CONV_CHAT(swboard->conv), + purple_chat_conversation_add_user(PURPLE_CHAT_CONVERSATION(swboard->conv), tmp_user, NULL, PURPLE_CHAT_CONVERSATION_BUDDY_NONE, TRUE); } - purple_chat_conversation_add_user(PURPLE_CONV_CHAT(swboard->conv), + purple_chat_conversation_add_user(PURPLE_CHAT_CONVERSATION(swboard->conv), purple_account_get_username(account), NULL, PURPLE_CHAT_CONVERSATION_BUDDY_NONE, TRUE); @@ -336,8 +335,8 @@ } else if (swboard->conv == NULL) { - swboard->conv = purple_conversations_find_with_account(PURPLE_CONV_TYPE_IM, - msnuser->passport, account); + swboard->conv = PURPLE_CONVERSATION(purple_conversations_find_im_with_account( + msnuser->passport, account)); } else { @@ -359,8 +358,8 @@ account = swboard->session->account; - return (swboard->conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, - account, swboard->im_user)); + return (swboard->conv = PURPLE_CONVERSATION(purple_im_conversation_new( + account, swboard->im_user))); } static void @@ -618,11 +617,11 @@ msn_switchboard_destroy(swboard); } else if ((swboard->current_users > 1) || - (purple_conversation_get_type(swboard->conv) == PURPLE_CONV_TYPE_CHAT)) + PURPLE_IS_CHAT_CONVERSATION(swboard->conv)) { GList *passport; /* This is a switchboard used for a chat */ - purple_chat_conversation_remove_user(PURPLE_CONV_CHAT(swboard->conv), user, NULL); + purple_chat_conversation_remove_user(PURPLE_CHAT_CONVERSATION(swboard->conv), user, NULL); passport = g_list_find_custom(swboard->users, user, (GCompareFunc)strcmp); if (passport) @@ -833,7 +832,7 @@ if (swboard->current_users > 1 || ((swboard->conv != NULL) && - purple_conversation_get_type(swboard->conv) == PURPLE_CONV_TYPE_CHAT)) + PURPLE_IS_CHAT_CONVERSATION(swboard->conv))) serv_got_chat_in(gc, swboard->chat_id, passport, 0, image_msg, time(NULL)); else