diff options
author | Daniel Kamil Kozar <dkk089@gmail.com> | 2017-07-19 15:35:33 +0300 |
---|---|---|
committer | Daniel Kamil Kozar <dkk089@gmail.com> | 2017-07-19 16:43:35 +0300 |
commit | 22433d97ea2ace62b9e479e3d931d6a4ebad9045 (patch) | |
tree | 969e55263b5e3399894bb5673298249319c5303a /skypeweb/skypeweb_contacts.c | |
parent | 2ea69c79db8d74797a8178d70b41302cf46802d0 (diff) |
Use the correct timestamp for image messages
The current implementation completely disregards the "composetime" member of
the received message if its type is RichText/UriObject or
RichText/Media_FlikMsg.
This results in the system messages with links to the images, as well as the
images themselves having the timestamp of the message's reception by the
client instead of the time when the message was actually sent.
Diffstat (limited to 'skypeweb/skypeweb_contacts.c')
-rw-r--r-- | skypeweb/skypeweb_contacts.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/skypeweb/skypeweb_contacts.c b/skypeweb/skypeweb_contacts.c index a97b5f9..2fdf165 100644 --- a/skypeweb/skypeweb_contacts.c +++ b/skypeweb/skypeweb_contacts.c @@ -117,17 +117,25 @@ skypeweb_get_icon(PurpleBuddy *buddy) purple_timeout_add(100, skypeweb_get_icon_queuepop, (gpointer)buddy);
}
+typedef struct SkypeImgMsgContext_ {
+ PurpleConversation *conv;
+ time_t composetimestamp;
+} SkypeImgMsgContext;
static void
skypeweb_got_imagemessage(PurpleHttpConnection *http_conn, PurpleHttpResponse *response, gpointer user_data)
{
- PurpleConversation *conv = user_data;
gint icon_id;
gchar *msg_tmp;
const gchar *url_text;
gsize len;
PurpleImage *image;
+ SkypeImgMsgContext *ctx = user_data;
+ PurpleConversation *conv = ctx->conv;
+ time_t ts = ctx->composetimestamp;
+ g_free(ctx);
+
// Conversation could have been closed before we retrieved the image
if (!purple_conversation_is_valid(conv)) {
return;
@@ -144,12 +152,12 @@ 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("<img id='%d'>", icon_id);
- purple_conversation_write_system_message(conv, msg_tmp, PURPLE_MESSAGE_NO_LOG | PURPLE_MESSAGE_IMAGES);
+ purple_conversation_write_system_message_ts(conv, msg_tmp, PURPLE_MESSAGE_NO_LOG | PURPLE_MESSAGE_IMAGES, ts);
g_free(msg_tmp);
}
void
-skypeweb_download_uri_to_conv(SkypeWebAccount *sa, const gchar *uri, PurpleConversation *conv)
+skypeweb_download_uri_to_conv(SkypeWebAccount *sa, const gchar *uri, PurpleConversation *conv, time_t ts)
{
gchar *url, *text;
PurpleHttpRequest *request;
@@ -158,16 +166,19 @@ skypeweb_download_uri_to_conv(SkypeWebAccount *sa, const gchar *uri, PurpleConve purple_http_request_set_keepalive_pool(request, sa->keepalive_pool);
purple_http_request_header_set_printf(request, "Cookie", "skypetoken_asm=%s", sa->skype_token);
purple_http_request_header_set(request, "Accept", "image/*");
- purple_http_request(sa->pc, request, skypeweb_got_imagemessage, conv);
+ SkypeImgMsgContext *ctx = g_new(SkypeImgMsgContext, 1);
+ ctx->composetimestamp = ts;
+ ctx->conv = conv;
+ 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("<a href=\"%s\">Click here to view full version</a>", url);
- purple_conversation_write_system_message(conv, text, PURPLE_MESSAGE_SYSTEM);
+ purple_conversation_write_system_message_ts(conv, text, PURPLE_MESSAGE_SYSTEM, ts);
}
void
-skypeweb_download_moji_to_conv(SkypeWebAccount *sa, const gchar *text, const gchar *url_thumbnail, PurpleConversation *conv)
+skypeweb_download_moji_to_conv(SkypeWebAccount *sa, const gchar *text, const gchar *url_thumbnail, PurpleConversation *conv, time_t ts)
{
gchar *cdn_url_thumbnail;
PurpleHttpURL *httpurl;
@@ -181,10 +192,13 @@ skypeweb_download_moji_to_conv(SkypeWebAccount *sa, const gchar *text, const gch purple_http_request_set_keepalive_pool(request, sa->keepalive_pool);
purple_http_request_header_set_printf(request, "Cookie", "vdms-skype-token=%s", sa->vdms_token);
purple_http_request_header_set(request, "Accept", "image/*");
- purple_http_request(sa->pc, request, skypeweb_got_imagemessage, conv);
+ SkypeImgMsgContext *ctx = g_new(SkypeImgMsgContext, 1);
+ ctx->composetimestamp = ts;
+ ctx->conv = conv;
+ purple_http_request(sa->pc, request, skypeweb_got_imagemessage, ctx);
purple_http_request_unref(request);
- purple_conversation_write_system_message(conv, text, PURPLE_MESSAGE_SYSTEM);
+ purple_conversation_write_system_message_ts(conv, text, PURPLE_MESSAGE_SYSTEM, ts);
g_free(cdn_url_thumbnail);
purple_http_url_free(httpurl);
|