Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/EionRobb/skype4pidgin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEion Robb <eion@robbmob.com>2017-08-06 02:17:12 +0300
committerGitHub <noreply@github.com>2017-08-06 02:17:12 +0300
commit2c461450c78775a5d831359dd99551a6e208ce75 (patch)
treebbe30a33c2a5344c1955dd4f58226f01f058df65
parentaec58e634274af3325dbc5f7bd618bda295edcac (diff)
parent302cec1e9b4b7874820e741cfec2ee9782b699a9 (diff)
Merge pull request #559 from xavery/valid-timestamp-for-images
Use the correct timestamp for image messages
-rw-r--r--skypeweb/skypeweb_contacts.c38
-rw-r--r--skypeweb/skypeweb_contacts.h4
-rw-r--r--skypeweb/skypeweb_messages.c8
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
+}