From d9e54669e0278892a0c346f6725b10f80be05a7b Mon Sep 17 00:00:00 2001 From: himselfv Date: Fri, 4 Jan 2019 09:58:26 +0000 Subject: Turning image message into non-PURPLE_MESSAGE_SYSTEM --- skypeweb/skypeweb_contacts.c | 25 ++++++++++++++++++++----- skypeweb/skypeweb_contacts.h | 4 ++-- skypeweb/skypeweb_messages.c | 9 ++++++--- 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/skypeweb/skypeweb_contacts.c b/skypeweb/skypeweb_contacts.c index 363f75f..96ac099 100644 --- a/skypeweb/skypeweb_contacts.c +++ b/skypeweb/skypeweb_contacts.c @@ -33,6 +33,15 @@ static void purple_conversation_write_system_message_ts( purple_message_set_time(pmsg, ts); purple_conversation_write_message(conv, pmsg); } +static void purple_conversation_write_img_message_ts( + PurpleConversation *conv, const gchar *msg, PurpleMessageFlags flags, + time_t ts, const char* who) { + PurpleMessage *pmsg = purple_message_new_system(msg, flags); + pmsg->who = g_strdup(who); //to non-const + purple_message_set_time(pmsg, ts); + purple_conversation_write_message(conv, pmsg); + g_free(pmsg->who); +} // Check that the conversation hasn't been closed static gboolean @@ -127,6 +136,7 @@ skypeweb_get_icon(PurpleBuddy *buddy) typedef struct SkypeImgMsgContext_ { PurpleConversation *conv; time_t composetimestamp; + gchar* from; } SkypeImgMsgContext; static void @@ -141,6 +151,8 @@ skypeweb_got_imagemessage(PurpleHttpConnection *http_conn, PurpleHttpResponse *r SkypeImgMsgContext *ctx = user_data; PurpleConversation *conv = ctx->conv; time_t ts = ctx->composetimestamp; + gchar* ctx_from = ctx->from; + ctx->from = NULL; g_free(ctx); // Conversation could have been closed before we retrieved the image @@ -159,12 +171,13 @@ skypeweb_got_imagemessage(PurpleHttpConnection *http_conn, PurpleHttpResponse *r image = purple_image_new_from_data(g_memdup(url_text, len), len); icon_id = purple_image_store_add(image); msg_tmp = g_strdup_printf("", icon_id); - purple_conversation_write_system_message_ts(conv, msg_tmp, PURPLE_MESSAGE_NO_LOG | PURPLE_MESSAGE_IMAGES, ts); + purple_conversation_write_img_message_ts(conv, msg_tmp, PURPLE_MESSAGE_NO_LOG | PURPLE_MESSAGE_IMAGES, ts, ctx_from); g_free(msg_tmp); + g_free(ctx_from); } void -skypeweb_download_uri_to_conv(SkypeWebAccount *sa, const gchar *uri, PurpleConversation *conv, time_t ts) +skypeweb_download_uri_to_conv(SkypeWebAccount *sa, const gchar *uri, PurpleConversation *conv, time_t ts, const gchar* from) { gchar *url, *text; PurpleHttpRequest *request; @@ -186,19 +199,20 @@ skypeweb_download_uri_to_conv(SkypeWebAccount *sa, const gchar *uri, PurpleConve SkypeImgMsgContext *ctx = g_new(SkypeImgMsgContext, 1); ctx->composetimestamp = ts; ctx->conv = conv; + ctx->from = g_strdup(from); purple_http_request(sa->pc, request, skypeweb_got_imagemessage, ctx); purple_http_request_unref(request); url = purple_strreplace(uri, "imgt1", "imgpsh_fullsize"); text = g_strdup_printf("Click here to view full version", url); - purple_conversation_write_system_message_ts(conv, text, PURPLE_MESSAGE_SYSTEM, ts); + purple_conversation_write_img_message_ts(conv, text, PURPLE_MESSAGE_SYSTEM, ts, from); g_free(url); g_free(text); } void -skypeweb_download_moji_to_conv(SkypeWebAccount *sa, const gchar *text, const gchar *url_thumbnail, PurpleConversation *conv, time_t ts) +skypeweb_download_moji_to_conv(SkypeWebAccount *sa, const gchar *text, const gchar *url_thumbnail, PurpleConversation *conv, time_t ts, const gchar* from) { gchar *cdn_url_thumbnail; PurpleHttpURL *httpurl; @@ -215,10 +229,11 @@ skypeweb_download_moji_to_conv(SkypeWebAccount *sa, const gchar *text, const gch SkypeImgMsgContext *ctx = g_new(SkypeImgMsgContext, 1); ctx->composetimestamp = ts; ctx->conv = conv; + ctx->from = g_strdup(from); purple_http_request(sa->pc, request, skypeweb_got_imagemessage, ctx); purple_http_request_unref(request); - purple_conversation_write_system_message_ts(conv, text, PURPLE_MESSAGE_SYSTEM, ts); + purple_conversation_write_img_message_ts(conv, text, PURPLE_MESSAGE_SYSTEM, ts, from); g_free(cdn_url_thumbnail); purple_http_url_free(httpurl); diff --git a/skypeweb/skypeweb_contacts.h b/skypeweb/skypeweb_contacts.h index e30f985..6d837a1 100644 --- a/skypeweb/skypeweb_contacts.h +++ b/skypeweb/skypeweb_contacts.h @@ -22,9 +22,9 @@ #include "libskypeweb.h" void skypeweb_get_icon(PurpleBuddy *buddy); -void skypeweb_download_uri_to_conv(SkypeWebAccount *sa, const gchar *uri, PurpleConversation *conv, time_t ts); +void skypeweb_download_uri_to_conv(SkypeWebAccount *sa, const gchar *uri, PurpleConversation *conv, time_t ts, const gchar* from); void skypeweb_download_video_message(SkypeWebAccount *sa, const gchar *sid, PurpleConversation *conv); -void skypeweb_download_moji_to_conv(SkypeWebAccount *sa, const gchar *text, const gchar *url_thumbnail, PurpleConversation *conv, time_t ts); +void skypeweb_download_moji_to_conv(SkypeWebAccount *sa, const gchar *text, const gchar *url_thumbnail, PurpleConversation *conv, time_t ts, const gchar* from); void skypeweb_present_uri_as_filetransfer(SkypeWebAccount *sa, const gchar *uri, const gchar *from); PurpleXfer *skypeweb_new_xfer(PurpleConnection *pc, const char *who); diff --git a/skypeweb/skypeweb_messages.c b/skypeweb/skypeweb_messages.c index 8e6100d..aa29c58 100644 --- a/skypeweb/skypeweb_messages.c +++ b/skypeweb/skypeweb_messages.c @@ -331,7 +331,10 @@ process_message_resource(SkypeWebAccount *sa, JsonObject *resource) PurpleXmlNode *blob = purple_xmlnode_from_str(content, -1); const gchar *uri = purple_xmlnode_get_attrib(blob, "url_thumbnail"); - skypeweb_download_uri_to_conv(sa, uri, conv, composetimestamp); + from = skypeweb_contact_url_to_name(from); + g_return_if_fail(from); + + skypeweb_download_uri_to_conv(sa, uri, conv, composetimestamp, from); purple_xmlnode_free(blob); } else { purple_debug_warning("skypeweb", "Unhandled thread message resource messagetype '%s'\n", messagetype); @@ -418,7 +421,7 @@ process_message_resource(SkypeWebAccount *sa, JsonObject *resource) } conv = PURPLE_CONVERSATION(imconv); - skypeweb_download_uri_to_conv(sa, uri, conv, composetimestamp); + skypeweb_download_uri_to_conv(sa, uri, conv, composetimestamp, from); } purple_xmlnode_free(blob); } else if (g_str_equal(messagetype, "RichText/Media_GenericFile")) { @@ -564,7 +567,7 @@ process_message_resource(SkypeWebAccount *sa, JsonObject *resource) conv = PURPLE_CONVERSATION(imconv); - skypeweb_download_moji_to_conv(sa, text, url_thumbnail, conv, composetimestamp); + skypeweb_download_moji_to_conv(sa, text, url_thumbnail, conv, composetimestamp, from); const gchar *message = _("The user sent a Moji"); -- cgit v1.2.3