diff -Nru purple-skypeweb-1.4.0+git20170724/debian/changelog purple-skypeweb-1.4.0+git20170806/debian/changelog --- purple-skypeweb-1.4.0+git20170724/debian/changelog 2017-08-02 10:22:35.000000000 +0000 +++ purple-skypeweb-1.4.0+git20170806/debian/changelog 2017-08-07 10:01:41.000000000 +0000 @@ -1,4 +1,10 @@ -purple-skypeweb (1.4.0+git20170724-1~webupd8~trusty0) trusty; urgency=medium +purple-skypeweb (1.4.0+git20170806-1~webupd8~trusty0) trusty; urgency=medium + + * New git pull + + -- Alin Andrei Mon, 07 Aug 2017 12:50:39 +0200 + +purple-skypeweb (1.4.0+git20170724-1~webupd8~zesty0) zesty; urgency=medium * New git pull * Bump version diff -Nru purple-skypeweb-1.4.0+git20170724/skypeweb_contacts.c purple-skypeweb-1.4.0+git20170806/skypeweb_contacts.c --- purple-skypeweb-1.4.0+git20170724/skypeweb_contacts.c 2017-08-02 10:22:57.000000000 +0000 +++ purple-skypeweb-1.4.0+git20170806/skypeweb_contacts.c 2017-08-07 09:58:49.000000000 +0000 @@ -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 @@ 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 @@ 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(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 @@ 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("Click here to view full version", 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 @@ 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 -Nru purple-skypeweb-1.4.0+git20170724/skypeweb_contacts.h purple-skypeweb-1.4.0+git20170806/skypeweb_contacts.h --- purple-skypeweb-1.4.0+git20170724/skypeweb_contacts.h 2017-08-02 10:22:57.000000000 +0000 +++ purple-skypeweb-1.4.0+git20170806/skypeweb_contacts.h 2017-08-07 09:58:49.000000000 +0000 @@ -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 -Nru purple-skypeweb-1.4.0+git20170724/skypeweb_messages.c purple-skypeweb-1.4.0+git20170806/skypeweb_messages.c --- purple-skypeweb-1.4.0+git20170724/skypeweb_messages.c 2017-08-02 10:22:57.000000000 +0000 +++ purple-skypeweb-1.4.0+git20170806/skypeweb_messages.c 2017-08-07 09:58:49.000000000 +0000 @@ -22,6 +22,12 @@ #include "skypeweb_contacts.h" #include "skypeweb_login.h" +static GString* make_last_timestamp_setting(const gchar *convname) { + GString *rv = g_string_new(NULL); + g_string_printf(rv, "%s_last_message_timestamp", convname); + return rv; +} + static gboolean skypeweb_is_user_self(SkypeWebAccount *sa, const gchar *username) { if (!username || *username == 0) { @@ -161,6 +167,10 @@ skypeweb_get_conversation_history(sa, chatname); skypeweb_get_thread_users(sa, chatname); } + GString *chat_last_timestamp = make_last_timestamp_setting(convname); + purple_account_set_int(sa->account, chat_last_timestamp->str, composetimestamp); + g_string_free(chat_last_timestamp, TRUE); + conv = PURPLE_CONVERSATION(chatconv); if (g_str_equal(messagetype, "Control/Typing")) { @@ -321,7 +331,7 @@ 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); @@ -408,7 +418,7 @@ } 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")) { @@ -554,7 +564,7 @@ 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"); @@ -890,7 +900,9 @@ void skypeweb_get_conversation_history(SkypeWebAccount *sa, const gchar *convname) { - skypeweb_get_conversation_history_since(sa, convname, 0); + GString *timestamp_key = make_last_timestamp_setting(convname); + skypeweb_get_conversation_history_since(sa, convname, purple_account_get_int(sa->account, timestamp_key->str, 0)); + g_string_free(timestamp_key, TRUE); } static void @@ -1650,4 +1662,4 @@ 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 +}