kit/ChildSession.cpp | 46 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 8 deletions(-)
New commits: commit 9d8cc0b7663a79f2c8bf4ab5bbd92c1a7270c0d7 Author: Tor Lillqvist <t...@collabora.com> AuthorDate: Thu Nov 29 13:00:24 2018 +0200 Commit: Tor Lillqvist <t...@collabora.com> CommitDate: Thu Nov 29 13:00:35 2018 +0200 Initial attempt at C++ part of image insertion in the mobile app Change-Id: I4b10f168f9283ba8a3f10dc272e24032af13b23b diff --git a/kit/ChildSession.cpp b/kit/ChildSession.cpp index cff93a276..056779a32 100644 --- a/kit/ChildSession.cpp +++ b/kit/ChildSession.cpp @@ -11,6 +11,7 @@ #include "ChildSession.hpp" +#include <fstream> #include <sstream> #define LOK_USE_UNSTABLE_API @@ -41,6 +42,18 @@ using namespace LOOLProtocol; std::recursive_mutex ChildSession::Mutex; +namespace { + +std::vector<unsigned char> decodeBase64(const std::string & inputBase64) +{ + std::istringstream stream(inputBase64); + Poco::Base64Decoder base64Decoder(stream); + std::istreambuf_iterator<char> eos; + return std::vector<unsigned char>(std::istreambuf_iterator<char>(base64Decoder), eos); +} + +} + ChildSession::ChildSession(const std::string& id, const std::string& jailId, DocumentManagerInterface& docManager) : @@ -773,6 +786,8 @@ bool ChildSession::paste(const char* buffer, int length, const std::vector<std:: bool ChildSession::insertFile(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens) { std::string name, type; + +#ifndef MOBILEAPP if (tokens.size() != 3 || !getTokenString(tokens[1], "name", name) || !getTokenString(tokens[2], "type", type)) @@ -780,14 +795,37 @@ bool ChildSession::insertFile(const char* /*buffer*/, int /*length*/, const std: sendTextFrame("error: cmd=insertfile kind=syntax"); return false; } +#else + std::string data; + if (tokens.size() != 4 || + !getTokenString(tokens[1], "name", name) || + !getTokenString(tokens[2], "type", type) || + !getTokenString(tokens[3], "data", data)) + { + sendTextFrame("error: cmd=insertfile kind=syntax"); + return false; + } +#endif if (type == "graphic" || type == "graphicurl") { std::string url; + +#ifndef MOBILEAPP if (type == "graphic") url = "file://" + std::string(JAILED_DOCUMENT_ROOT) + "insertfile/" + name; else if (type == "graphicurl") URI::decode(name, url); +#else + assert(type == "graphic"); + auto binaryData = decodeBase64(data); + std::string tempFile = Util::createRandomTmpDir() + "/" + name; + std::ofstream fileStream; + fileStream.open(tempFile); + fileStream << binaryData.data(); + fileStream.close(); + url = "file://" + tempFile; +#endif std::string command = ".uno:InsertGraphic"; std::string arguments = "{" @@ -1172,14 +1210,6 @@ std::string extractPrivateKey(const std::string & privateKey) return privateKey.substr(pos1, pos2); } -std::vector<unsigned char> decodeBase64(const std::string & inputBase64) -{ - std::istringstream stream(inputBase64); - Poco::Base64Decoder base64Decoder(stream); - std::istreambuf_iterator<char> eos; - return std::vector<unsigned char>(std::istreambuf_iterator<char>(base64Decoder), eos); -} - } bool ChildSession::signDocumentContent(const char* buffer, int length, const std::vector<std::string>& /*tokens*/) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits