| 831 break; |
831 break; |
| 832 } |
832 } |
| 833 jabber_message_free(jm); |
833 jabber_message_free(jm); |
| 834 } |
834 } |
| 835 |
835 |
| 836 static const gchar * |
|
| 837 jabber_message_get_mimetype_from_ext(const gchar *ext) |
|
| 838 { |
|
| 839 if (strcmp(ext, "png") == 0) { |
|
| 840 return "image/png"; |
|
| 841 } else if (strcmp(ext, "gif") == 0) { |
|
| 842 return "image/gif"; |
|
| 843 } else if (strcmp(ext, "jpg") == 0) { |
|
| 844 return "image/jpeg"; |
|
| 845 } else if (strcmp(ext, "tif") == 0) { |
|
| 846 return "image/tif"; |
|
| 847 } else { |
|
| 848 return "image/x-icon"; /* or something... */ |
|
| 849 } |
|
| 850 } |
|
| 851 |
|
| 852 static gboolean |
836 static gboolean |
| 853 jabber_conv_support_custom_smileys(JabberStream *js, |
837 jabber_conv_support_custom_smileys(JabberStream *js, |
| 854 PurpleConversation *conv, |
838 PurpleConversation *conv, |
| 855 const gchar *who) |
839 const gchar *who) |
| 856 { |
840 { |
| 918 conv = purple_conversations_find_with_account(jm->to, account); |
902 conv = purple_conversations_find_with_account(jm->to, account); |
| 919 |
903 |
| 920 if (!jabber_conv_support_custom_smileys(jm->js, conv, jm->to)) |
904 if (!jabber_conv_support_custom_smileys(jm->js, conv, jm->to)) |
| 921 return NULL; |
905 return NULL; |
| 922 |
906 |
| 923 found_smileys = purple_smiley_find(purple_smiley_custom_get_list(), |
907 found_smileys = purple_smiley_parser_find( |
| 924 xhtml, TRUE); |
908 purple_smiley_custom_get_list(), xhtml, TRUE); |
| 925 if (!found_smileys) |
909 if (!found_smileys) |
| 926 return NULL; |
910 return NULL; |
| 927 |
911 |
| 928 for (it = found_smileys; it; it = it_next) { |
912 for (it = found_smileys; it; it = it_next) { |
| 929 PurpleSmiley *smiley = it->data; |
913 PurpleSmiley *smiley = it->data; |
| 930 PurpleStoredImage *smiley_image; |
914 PurpleImage *smiley_image; |
| 931 gboolean valid = TRUE; |
915 gboolean valid = TRUE; |
| 932 |
916 |
| 933 it_next = g_list_next(it); |
917 it_next = g_list_next(it); |
| 934 |
918 |
| 935 smiley_image = purple_smiley_get_image(smiley); |
919 smiley_image = purple_smiley_get_image(smiley); |
| 936 if (!smiley_image) { |
920 if (!smiley_image) { |
| 937 valid = FALSE; |
921 valid = FALSE; |
| 938 purple_debug_warning("jabber", "broken smiley %s", |
922 purple_debug_warning("jabber", "broken smiley %s", |
| 939 purple_smiley_get_shortcut(smiley)); |
923 purple_smiley_get_shortcut(smiley)); |
| 940 } else if (purple_imgstore_get_size(smiley_image) > |
924 } else if (purple_image_get_size(smiley_image) > |
| 941 JABBER_DATA_MAX_SIZE) |
925 JABBER_DATA_MAX_SIZE) |
| 942 { |
926 { |
| 943 has_too_large_smiley = TRUE; |
927 has_too_large_smiley = TRUE; |
| 944 valid = FALSE; |
928 valid = FALSE; |
| 945 purple_debug_warning("jabber", "Refusing to send " |
929 purple_debug_warning("jabber", "Refusing to send " |
| 961 if (!found_smileys) |
945 if (!found_smileys) |
| 962 return NULL; |
946 return NULL; |
| 963 |
947 |
| 964 for (it = found_smileys; it; it = g_list_next(it)) { |
948 for (it = found_smileys; it; it = g_list_next(it)) { |
| 965 PurpleSmiley *smiley = it->data; |
949 PurpleSmiley *smiley = it->data; |
| 966 PurpleStoredImage *smiley_image; |
950 PurpleImage *smiley_image; |
| 967 const gchar *shortcut = purple_smiley_get_shortcut(smiley); |
951 const gchar *shortcut = purple_smiley_get_shortcut(smiley); |
| 968 const gchar *mimetype; |
952 const gchar *mimetype; |
| 969 JabberData *jdata; |
953 JabberData *jdata; |
| 970 |
954 |
| 971 /* the object has been sent before */ |
955 /* the object has been sent before */ |
| 973 continue; |
957 continue; |
| 974 |
958 |
| 975 smiley_image = purple_smiley_get_image(smiley); |
959 smiley_image = purple_smiley_get_image(smiley); |
| 976 g_assert(smiley_image != NULL); |
960 g_assert(smiley_image != NULL); |
| 977 |
961 |
| 978 mimetype = jabber_message_get_mimetype_from_ext( |
962 mimetype = purple_image_get_mimetype(smiley_image); |
| 979 purple_imgstore_get_extension(smiley_image)); |
963 if (!mimetype) { |
| |
964 purple_debug_error("jabber", |
| |
965 "unknown mime type for image"); |
| |
966 continue; |
| |
967 } |
| 980 |
968 |
| 981 jdata = jabber_data_create_from_data( |
969 jdata = jabber_data_create_from_data( |
| 982 purple_imgstore_get_data(smiley_image), |
970 purple_image_get_data(smiley_image), |
| 983 purple_imgstore_get_size(smiley_image), |
971 purple_image_get_size(smiley_image), |
| 984 mimetype, FALSE, jm->js); |
972 mimetype, FALSE, jm->js); |
| 985 |
973 |
| 986 purple_debug_info("jabber", "cache local smiley alt=%s, cid=%s", |
974 purple_debug_info("jabber", "cache local smiley alt=%s, cid=%s", |
| 987 shortcut, jabber_data_get_cid(jdata)); |
975 shortcut, jabber_data_get_cid(jdata)); |
| 988 jabber_data_associate_local(jdata, shortcut); |
976 jabber_data_associate_local(jdata, shortcut); |
| 989 } |
977 } |
| 990 |
978 |
| 991 g_list_free(found_smileys); |
979 g_list_free(found_smileys); |
| 992 |
980 |
| 993 smileyfied_xhtml = purple_smiley_parse_custom(xhtml, |
981 smileyfied_xhtml = purple_smiley_parser_replace( |
| |
982 purple_smiley_custom_get_list(), xhtml, |
| 994 jabber_message_smileyify_cb, NULL); |
983 jabber_message_smileyify_cb, NULL); |
| 995 |
984 |
| 996 return smileyfied_xhtml; |
985 return smileyfied_xhtml; |
| 997 } |
986 } |
| 998 |
987 |