diff options
author | Eion Robb <eion@robbmob.com> | 2017-08-06 02:17:12 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-06 02:17:12 +0300 |
commit | 2c461450c78775a5d831359dd99551a6e208ce75 (patch) | |
tree | bbe30a33c2a5344c1955dd4f58226f01f058df65 | |
parent | aec58e634274af3325dbc5f7bd618bda295edcac (diff) | |
parent | 302cec1e9b4b7874820e741cfec2ee9782b699a9 (diff) |
Merge pull request #559 from xavery/valid-timestamp-for-images
Use the correct timestamp for image messages
-rw-r--r-- | skypeweb/skypeweb_contacts.c | 38 | ||||
-rw-r--r-- | skypeweb/skypeweb_contacts.h | 4 | ||||
-rw-r--r-- | skypeweb/skypeweb_messages.c | 8 |
3 files changed, 36 insertions, 14 deletions
diff --git a/skypeweb/skypeweb_contacts.c b/skypeweb/skypeweb_contacts.c index a97b5f9..177cd7b 100644 --- a/skypeweb/skypeweb_contacts.c +++ b/skypeweb/skypeweb_contacts.c @@ -26,6 +26,14 @@ #include "xfer.h"
#include "image-store.h"
+static void purple_conversation_write_system_message_ts(
+ PurpleConversation *conv, const gchar *msg, PurpleMessageFlags flags,
+ time_t ts) {
+ PurpleMessage *pmsg = purple_message_new_system(msg, flags);
+ purple_message_set_time(pmsg, ts);
+ purple_conversation_write_message(conv, pmsg);
+}
+
// Check that the conversation hasn't been closed
static gboolean
purple_conversation_is_valid(PurpleConversation *conv)
@@ -117,17 +125,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 +160,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 +174,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 +200,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);
diff --git a/skypeweb/skypeweb_contacts.h b/skypeweb/skypeweb_contacts.h index 1f2eab1..dd5f298 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); +void skypeweb_download_uri_to_conv(SkypeWebAccount *sa, const gchar *uri, PurpleConversation *conv, time_t ts); 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); +void skypeweb_download_moji_to_conv(SkypeWebAccount *sa, const gchar *text, const gchar *url_thumbnail, PurpleConversation *conv, time_t ts); 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 27f331a..da77420 100644 --- a/skypeweb/skypeweb_messages.c +++ b/skypeweb/skypeweb_messages.c @@ -331,7 +331,7 @@ 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);
+ skypeweb_download_uri_to_conv(sa, uri, conv, composetimestamp);
purple_xmlnode_free(blob);
} else {
purple_debug_warning("skypeweb", "Unhandled thread message resource messagetype '%s'\n", messagetype);
@@ -418,7 +418,7 @@ process_message_resource(SkypeWebAccount *sa, JsonObject *resource) }
conv = PURPLE_CONVERSATION(imconv);
- skypeweb_download_uri_to_conv(sa, uri, conv);
+ skypeweb_download_uri_to_conv(sa, uri, conv, composetimestamp);
}
purple_xmlnode_free(blob);
} else if (g_str_equal(messagetype, "RichText/Media_GenericFile")) {
@@ -564,7 +564,7 @@ process_message_resource(SkypeWebAccount *sa, JsonObject *resource) conv = PURPLE_CONVERSATION(imconv);
- skypeweb_download_moji_to_conv(sa, text, url_thumbnail, conv);
+ skypeweb_download_moji_to_conv(sa, text, url_thumbnail, conv, composetimestamp);
const gchar *message = _("The user sent a Moji");
@@ -1662,4 +1662,4 @@ void skypeweb_gather_self_properties(SkypeWebAccount *sa)
{
skypeweb_post_or_get(sa, SKYPEWEB_METHOD_GET | SKYPEWEB_METHOD_SSL, sa->messages_host, "/v1/users/ME/properties", NULL, skypeweb_got_self_properties, NULL, TRUE);
-}
\ No newline at end of file +}
|