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:
authorJan Palus <jpalus@fastmail.com>2021-01-26 17:23:08 +0300
committerJan Palus <jpalus@fastmail.com>2021-01-31 17:36:55 +0300
commitb6766782ec838f3e4b7dc3e3d0181f6c0bdb7d91 (patch)
tree9b1059b84bc2c3fb739d0ec68b3b178663528be6
parentfb955962c2d18dd079412a5f7a7fedb575a25ae6 (diff)
Preliminary video attachment support
Message looks almost the same as image attachment hence logic is almost the same. For now Pidgin displays thumbnail + link to full video while Bitlbee shows link.
-rw-r--r--skypeweb/skypeweb_contacts.c28
-rw-r--r--skypeweb/skypeweb_contacts.h3
-rw-r--r--skypeweb/skypeweb_messages.c33
-rw-r--r--skypeweb/skypeweb_messages.h7
4 files changed, 54 insertions, 17 deletions
diff --git a/skypeweb/skypeweb_contacts.c b/skypeweb/skypeweb_contacts.c
index 35dddc9..aab23e4 100644
--- a/skypeweb/skypeweb_contacts.c
+++ b/skypeweb/skypeweb_contacts.c
@@ -180,16 +180,37 @@ skypeweb_got_imagemessage(PurpleHttpConnection *http_conn, PurpleHttpResponse *r
g_free(ctx_from);
}
+static const char*
+skypeweb_uri_type_name(SkypeWebURIType uri_type) {
+ switch (uri_type) {
+ case SKYPEWEB_URI_TYPE_IMAGE:
+ return "image";
+ case SKYPEWEB_URI_TYPE_VIDEO:
+ return "video";
+ default:
+ return "(unknown)";
+ }
+}
void
-skypeweb_download_uri_to_conv(SkypeWebAccount *sa, const gchar *uri, PurpleConversation *conv, time_t ts, const gchar* from)
+skypeweb_download_uri_to_conv(SkypeWebAccount *sa, const gchar *uri, SkypeWebURIType uri_type, PurpleConversation *conv, time_t ts, const gchar* from)
{
gchar *url, *text;
PurpleHttpRequest *request;
+ switch (uri_type) {
+ case SKYPEWEB_URI_TYPE_IMAGE:
+ url = purple_strreplace(uri, "imgt1", "imgpsh_fullsize");
+ break;
+ case SKYPEWEB_URI_TYPE_VIDEO:
+ url = purple_strreplace(uri, "thumbnail", "video");
+ break;
+ default:
+ url = g_strdup(uri);
+ break;
+ }
if (purple_strequal(purple_core_get_ui(), "BitlBee")) {
// Bitlbee doesn't support images, so just plop a url to the image instead
- url = purple_strreplace(uri, "imgt1", "imgpsh_fullsize");
if (PURPLE_IS_IM_CONVERSATION(conv)) {
purple_serv_got_im(sa->pc, from, url, PURPLE_MESSAGE_RECV, ts);
} else if (PURPLE_IS_CHAT_CONVERSATION(conv)) {
@@ -212,8 +233,7 @@ skypeweb_download_uri_to_conv(SkypeWebAccount *sa, const gchar *uri, PurpleConve
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);
+ text = g_strdup_printf("<a href=\"%s\">Click here to view full %s</a>", url, skypeweb_uri_type_name(uri_type));
purple_conversation_write_img_message(conv, from, text, 0, ts);
g_free(url);
diff --git a/skypeweb/skypeweb_contacts.h b/skypeweb/skypeweb_contacts.h
index 885f865..8eef9c7 100644
--- a/skypeweb/skypeweb_contacts.h
+++ b/skypeweb/skypeweb_contacts.h
@@ -20,9 +20,10 @@
#define SKYPEWEB_CONTACTS_H
#include "libskypeweb.h"
+#include "skypeweb_messages.h"
void skypeweb_get_icon(PurpleBuddy *buddy);
-void skypeweb_download_uri_to_conv(SkypeWebAccount *sa, const gchar *uri, PurpleConversation *conv, time_t ts, const gchar* from);
+void skypeweb_download_uri_to_conv(SkypeWebAccount *sa, const gchar *uri, SkypeWebURIType uri_type, 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, const gchar* from);
void skypeweb_present_uri_as_filetransfer(SkypeWebAccount *sa, const gchar *uri, const gchar *from);
diff --git a/skypeweb/skypeweb_messages.c b/skypeweb/skypeweb_messages.c
index 8e6ba79..bf9f472 100644
--- a/skypeweb/skypeweb_messages.c
+++ b/skypeweb/skypeweb_messages.c
@@ -117,6 +117,22 @@ process_userpresence_resource(SkypeWebAccount *sa, JsonObject *resource)
// }
static void
+skypeweb_process_uri_message(const gchar* messagetype, SkypeWebAccount *sa, PurpleConversation* conv, const gchar* uri_content, time_t composetimestamp, const gchar* from) {
+ PurpleXmlNode *blob = purple_xmlnode_from_str(uri_content, -1);
+ const gchar *uri = purple_xmlnode_get_attrib(blob, "url_thumbnail");
+ SkypeWebURIType uri_type;
+
+ if (g_str_has_suffix(messagetype, "Media_Video")) {
+ uri_type = SKYPEWEB_URI_TYPE_VIDEO;
+ } else {
+ uri_type = SKYPEWEB_URI_TYPE_IMAGE;
+ }
+
+ skypeweb_download_uri_to_conv(sa, uri, uri_type, conv, composetimestamp, from);
+ purple_xmlnode_free(blob);
+}
+
+static void
process_message_resource(SkypeWebAccount *sa, JsonObject *resource)
{
const gchar *clientmessageid = NULL;
@@ -337,15 +353,11 @@ process_message_resource(SkypeWebAccount *sa, JsonObject *resource)
}
purple_xmlnode_free(blob);
- } else if (g_str_equal(messagetype, "RichText/UriObject")) {
- PurpleXmlNode *blob = purple_xmlnode_from_str(content, -1);
- const gchar *uri = purple_xmlnode_get_attrib(blob, "url_thumbnail");
-
+ } else if (g_str_equal(messagetype, "RichText/UriObject") || g_str_equal(messagetype, "RichText/Media_Video")) {
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);
+ skypeweb_process_uri_message(messagetype, sa, conv, content, composetimestamp, from);
} else {
purple_debug_warning("skypeweb", "Unhandled thread message resource messagetype '%s'\n", messagetype);
}
@@ -420,11 +432,9 @@ process_message_resource(SkypeWebAccount *sa, JsonObject *resource)
conv = PURPLE_CONVERSATION(imconv);
}
g_free(html);
- } else if (g_str_equal(messagetype, "RichText/UriObject")) {
- PurpleXmlNode *blob = purple_xmlnode_from_str(content, -1);
- const gchar *uri = purple_xmlnode_get_attrib(blob, "url_thumbnail");
+ } else if (g_str_equal(messagetype, "RichText/UriObject") || g_str_equal(messagetype, "RichText/Media_Video")) {
PurpleIMConversation *imconv;
-
+
if (skypeweb_is_user_self(sa, from)) {
from = convbuddyname;
}
@@ -436,9 +446,8 @@ process_message_resource(SkypeWebAccount *sa, JsonObject *resource)
}
conv = PURPLE_CONVERSATION(imconv);
- skypeweb_download_uri_to_conv(sa, uri, conv, composetimestamp, from);
+ skypeweb_process_uri_message(messagetype, sa, conv, content, composetimestamp, from);
}
- purple_xmlnode_free(blob);
} else if (g_str_equal(messagetype, "RichText/Media_GenericFile")) {
PurpleXmlNode *blob = purple_xmlnode_from_str(content, -1);
const gchar *uri = purple_xmlnode_get_attrib(blob, "uri");
diff --git a/skypeweb/skypeweb_messages.h b/skypeweb/skypeweb_messages.h
index 5c03fa9..98fcb60 100644
--- a/skypeweb/skypeweb_messages.h
+++ b/skypeweb/skypeweb_messages.h
@@ -21,6 +21,13 @@
#include "libskypeweb.h"
+typedef enum
+{
+ SKYPEWEB_URI_TYPE_IMAGE,
+ SKYPEWEB_URI_TYPE_VIDEO,
+ SKYPEWEB_URI_TYPE_UNKNOWN
+} SkypeWebURIType;
+
gint skypeweb_send_im(PurpleConnection *pc,
#if PURPLE_VERSION_CHECK(3, 0, 0)
PurpleMessage *msg