diff options
author | Vitaly Takmazov <vitalyster@gmail.com> | 2022-02-06 00:29:23 +0300 |
---|---|---|
committer | Vitaly Takmazov <vitalyster@gmail.com> | 2022-02-06 00:29:23 +0300 |
commit | 44a322044c9a6ec3beb350b63253c3f2b81049ea (patch) | |
tree | 8a84ae38f9a37e65fbb6c43b14ab8de61325bd53 | |
parent | 5af40fe1381a3f14c839040aefa75e611e3e23d6 (diff) |
Handle Attachment description
* NetworkPluginServer: forward Attachment description as {jabber:x:oob}desc element
* libpurple: use remote filename as Attachment description
-rw-r--r-- | backends/libpurple/main.cpp | 2 | ||||
-rw-r--r-- | include/transport/NetworkPluginServer.h | 2 | ||||
-rw-r--r-- | libtransport/NetworkPluginServer.cpp | 8 |
3 files changed, 7 insertions, 5 deletions
diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index 7966625b..70aafd1a 100644 --- a/backends/libpurple/main.cpp +++ b/backends/libpurple/main.cpp @@ -1966,6 +1966,8 @@ static void XferReceiveComplete(PurpleXfer *xfer) { pbnetwork::Attachment attachment; gchar *base_filename = g_path_get_basename(filename.c_str()); attachment.set_url(web_url + "/" + std::string(base_filename)); + std::string remote_filename(xfer ? purple_xfer_get_filename_wrapped(xfer) : ""); + attachment.set_description(remote_filename.c_str()); g_free(base_filename); std::vector<pbnetwork::Attachment> attachments = { attachment }; np->handleMessage(np->m_accounts[account], w, message, "", "", xfer->end_time? std::to_string(xfer->end_time) : "", false, false, false, attachments); diff --git a/include/transport/NetworkPluginServer.h b/include/transport/NetworkPluginServer.h index 51d0f4d8..96708ef0 100644 --- a/include/transport/NetworkPluginServer.h +++ b/include/transport/NetworkPluginServer.h @@ -161,7 +161,7 @@ class NetworkPluginServer : Swift::XMPPParserClient { void handleStreamStart(const Swift::ProtocolHeader&) {} void handleElement(std::shared_ptr<Swift::ToplevelElement> element); void handleStreamEnd() {} - void addOobPayload(Swift::Message::ref message, const std::string &url); + void addOobPayload(Swift::Message::ref message, const std::string &url, const std::string &description); UserManager *m_userManager; VCardResponder *m_vcardResponder; diff --git a/libtransport/NetworkPluginServer.cpp b/libtransport/NetworkPluginServer.cpp index e19416bf..86794db1 100644 --- a/libtransport/NetworkPluginServer.cpp +++ b/libtransport/NetworkPluginServer.cpp @@ -718,7 +718,7 @@ void NetworkPluginServer::handleConvMessagePayload(const std::string &data, bool } for (const pbnetwork::Attachment &att : payload.attachment()) { - addOobPayload(msg, att.url()); + addOobPayload(msg, att.url(), att.description()); } // Split the message if configured, or just preprocess @@ -1731,11 +1731,11 @@ enum OobMode { OobSplit = 3, //3. Split into multiple text-only/media-only messages. }; -void NetworkPluginServer::addOobPayload(Swift::Message::ref message, const std::string &url) { +void NetworkPluginServer::addOobPayload(Swift::Message::ref message, const std::string &url, const std::string &description) { //Add OOB tag std::shared_ptr<Swift::RawXMLPayload> oob_payload(new Swift::RawXMLPayload( - "<x xmlns='jabber:x:oob'><url>" + url + "</url>" + "</x>")); + "<x xmlns='jabber:x:oob'><url>" + url + "</url>" + "<desc>" + description + "</desc>" + "</x>")); // todo: add the payload itself as a caption message->addPayload(oob_payload); } @@ -1820,7 +1820,7 @@ NetworkPluginServer::wrapIncomingMedia(std::shared_ptr<Swift::Message>& msg) { this_msg = msg; } - addOobPayload(this_msg, image_url); + addOobPayload(this_msg, image_url, ""); //In single-OOB mode there's no point to process further media if (oobMode == OobExclusive) |