comparison libpurple/protocols/jabber/message.c @ 23446:44feef3c885c

A couple of leak fixes.
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Sun, 01 Jun 2008 21:02:39 +0000
parents 4ac5db6e39f3
children b2697ab66d23
comparison
equal deleted inserted replaced
23445:4ac5db6e39f3 23446:44feef3c885c
793 jabber_message_xhtml_find_smileys(const char *xhtml) 793 jabber_message_xhtml_find_smileys(const char *xhtml)
794 { 794 {
795 GList *smileys = purple_smileys_get_all(); 795 GList *smileys = purple_smileys_get_all();
796 GList *found_smileys = NULL; 796 GList *found_smileys = NULL;
797 797
798 for (; smileys ; smileys = g_list_next(smileys)) { 798 for (; smileys ; smileys = g_list_delete_link(smileys)) {
799 PurpleSmiley *smiley = (PurpleSmiley *) smileys->data; 799 PurpleSmiley *smiley = (PurpleSmiley *) smileys->data;
800 const gchar *shortcut = purple_smiley_get_shortcut(smiley); 800 const gchar *shortcut = purple_smiley_get_shortcut(smiley);
801 const gssize len = strlen(shortcut); 801 const gssize len = strlen(shortcut);
802 802
803 gchar *escaped = g_markup_escape_text(shortcut, len); 803 gchar *escaped = g_markup_escape_text(shortcut, len);
813 return found_smileys; 813 return found_smileys;
814 } 814 }
815 815
816 static gchar * 816 static gchar *
817 jabber_message_get_smileyfied_xhtml(const PurpleConversation *conv, 817 jabber_message_get_smileyfied_xhtml(const PurpleConversation *conv,
818 const gchar *xhtml, const GList *smileys) 818 const gchar *xhtml, const GList *smileys)
819 { 819 {
820 /* create XML element for all smileys (img tags) */ 820 /* create XML element for all smileys (img tags) */
821 GString *result = g_string_new(NULL); 821 GString *result = g_string_new(NULL);
822 int pos = 0; 822 int pos = 0;
823 int length = strlen(xhtml); 823 int length = strlen(xhtml);
971 xmlnode_insert_data(child, jm->body, -1); 971 xmlnode_insert_data(child, jm->body, -1);
972 } 972 }
973 973
974 if(jm->xhtml) { 974 if(jm->xhtml) {
975 PurpleAccount *account = purple_connection_get_account(jm->js->gc); 975 PurpleAccount *account = purple_connection_get_account(jm->js->gc);
976 PurpleConversation *conv = 976 PurpleConversation *conv =
977 purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY, jm->to, 977 purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY, jm->to,
978 account); 978 account);
979 979
980 if (jabber_conv_support_custom_smileys(jm->js->gc, conv, jm->to)) { 980 if (jabber_conv_support_custom_smileys(jm->js->gc, conv, jm->to)) {
981 const GList *found_smileys = 981 GList *found_smileys = jabber_message_xhtml_find_smileys(jm->xhtml);
982 jabber_message_xhtml_find_smileys(jm->xhtml); 982
983
984 if (found_smileys) { 983 if (found_smileys) {
985 gchar *smileyfied_xhtml = NULL; 984 gchar *smileyfied_xhtml = NULL;
986 const GList *iterator; 985 const GList *iterator;
987 986
988 for (iterator = found_smileys; iterator ; 987 for (iterator = found_smileys; iterator ;
989 iterator = g_list_next(iterator)) { 988 iterator = g_list_next(iterator)) {
990 const PurpleSmiley *smiley = 989 const PurpleSmiley *smiley =
991 (PurpleSmiley *) iterator->data; 990 (PurpleSmiley *) iterator->data;
992 const gchar *shortcut = purple_smiley_get_shortcut(smiley); 991 const gchar *shortcut = purple_smiley_get_shortcut(smiley);
993 const JabberData *data = 992 const JabberData *data =
994 jabber_data_find_local_by_alt(conv, shortcut); 993 jabber_data_find_local_by_alt(conv, shortcut);
995 994
996 /* if data has not been sent before, include data */ 995 /* if data has not been sent before, include data */
997 if (!data) { 996 if (!data) {
998 PurpleStoredImage *image = 997 PurpleStoredImage *image =
999 purple_smiley_get_stored_image(smiley); 998 purple_smiley_get_stored_image(smiley);
1000 const gchar *ext = purple_imgstore_get_extension(image); 999 const gchar *ext = purple_imgstore_get_extension(image);
1001 1000
1002 JabberData *new_data = 1001 JabberData *new_data =
1003 jabber_data_create_from_data(purple_imgstore_get_data(image), 1002 jabber_data_create_from_data(purple_imgstore_get_data(image),
1004 purple_imgstore_get_size(image), 1003 purple_imgstore_get_size(image),
1005 jabber_message_get_mimetype_from_ext(ext), 1004 jabber_message_get_mimetype_from_ext(ext),
1006 shortcut); 1005 shortcut);
1007 jabber_data_associate_local_with_conv(new_data, conv); 1006 jabber_data_associate_local_with_conv(new_data, conv);
1008 xmlnode_insert_child(message, 1007 xmlnode_insert_child(message,
1009 jabber_data_get_xml_definition(new_data)); 1008 jabber_data_get_xml_definition(new_data));
1010 } 1009 }
1011 } 1010 }
1012 1011
1013 smileyfied_xhtml = 1012 smileyfied_xhtml =
1014 jabber_message_get_smileyfied_xhtml(conv, jm->xhtml, 1013 jabber_message_get_smileyfied_xhtml(conv, jm->xhtml,
1015 found_smileys); 1014 found_smileys);
1016 child = xmlnode_from_str(smileyfied_xhtml, -1); 1015 child = xmlnode_from_str(smileyfied_xhtml, -1);
1017 g_free(smileyfied_xhtml); 1016 g_free(smileyfied_xhtml);
1017 g_list_free(found_smileys);
1018 } else { 1018 } else {
1019 child = xmlnode_from_str(jm->xhtml, -1); 1019 child = xmlnode_from_str(jm->xhtml, -1);
1020 } 1020 }
1021 } else { 1021 } else {
1022 child = xmlnode_from_str(jm->xhtml, -1); 1022 child = xmlnode_from_str(jm->xhtml, -1);
1197 gboolean jabber_custom_smileys_isenabled(JabberStream *js, const gchar *shortname, 1197 gboolean jabber_custom_smileys_isenabled(JabberStream *js, const gchar *shortname,
1198 const gchar *namespace) 1198 const gchar *namespace)
1199 { 1199 {
1200 const PurpleConnection *gc = js->gc; 1200 const PurpleConnection *gc = js->gc;
1201 PurpleAccount *account = purple_connection_get_account(gc); 1201 PurpleAccount *account = purple_connection_get_account(gc);
1202 1202
1203 return purple_account_get_bool(account, "custom_smileys", TRUE); 1203 return purple_account_get_bool(account, "custom_smileys", TRUE);
1204 } 1204 }