wsd/LOOLWSD.cpp | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-)
New commits: commit 2c167a2df29f358478a801d10a3c09bfad2381bf Author: Muhammet Kara <muhammet.k...@collabora.com> AuthorDate: Mon Oct 7 22:51:38 2019 +0300 Commit: Muhammet Kara <muhammet.k...@collabora.com> CommitDate: Tue Oct 8 15:33:37 2019 +0200 wsd: Add FullSheetPreview support for convert-to endpoint This requires commit 28eb367a3743002ecb1037e2dd2ca3c709f6893d on core distro/collabora/cp-6.2 Change-Id: I02a5616810a930c6add3c3a0373b5e25e863236c Reviewed-on: https://gerrit.libreoffice.org/80418 Reviewed-by: Muhammet Kara <muhammet.k...@collabora.com> Tested-by: Muhammet Kara <muhammet.k...@collabora.com> diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp index 4559f4c80..d0dd39878 100644 --- a/wsd/LOOLWSD.cpp +++ b/wsd/LOOLWSD.cpp @@ -2501,6 +2501,18 @@ private: return "application/octet-stream"; } + static bool isSpreadsheet(const std::string& fileName) + { + std::string sContentType = getContentType(fileName); + + if (sContentType == "application/vnd.oasis.opendocument.spreadsheet" + || sContentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + || sContentType == "application/vnd.ms-excel") + return true; + else + return false; + } + void handlePostRequest(const Poco::Net::HTTPRequest& request, Poco::MemoryInputStream& message, SocketDisposition &disposition) @@ -2531,7 +2543,10 @@ private: ConvertToPartHandler handler(/*convertTo =*/ true); HTMLForm form(request, message, handler); + std::string sOptions(""); std::string format = (form.has("format") ? form.get("format") : ""); + std::string sFullSheetPreview = (form.has("FullSheetPreview") ? form.get("FullSheetPreview") : ""); + bool bFullSheetPreview = sFullSheetPreview == "true" ? true : false; // prefer what is in the URI if (tokens.count() > 3) @@ -2545,6 +2560,15 @@ private: Poco::URI uriPublic = DocumentBroker::sanitizeURI(fromPath); const std::string docKey = DocumentBroker::getDocKey(uriPublic); + if (bFullSheetPreview && format == "pdf" && isSpreadsheet(fromPath)) + { + sOptions += std::string(",FullSheetPreview=") + sFullSheetPreview + std::string("FULLSHEETPREVEND"); + } + else + { + bFullSheetPreview = false; + } + // This lock could become a bottleneck. // In that case, we can use a pool and index by publicPath. std::unique_lock<std::mutex> docBrokersLock(DocBrokersMutex); @@ -2566,7 +2590,7 @@ private: nullptr, _id, uriPublic, docBroker, isReadOnly, "nocliphost"); if (clientSession) { - disposition.setMove([docBroker, clientSession, format] + disposition.setMove([docBroker, clientSession, format, sOptions] (const std::shared_ptr<Socket> &moveSocket) { // Perform all of this after removing the socket @@ -2577,7 +2601,7 @@ private: // We no longer own this socket. moveSocket->setThreadOwner(std::thread::id(0)); - docBroker->addCallback([docBroker, moveSocket, clientSession, format]() + docBroker->addCallback([docBroker, moveSocket, clientSession, format, sOptions]() { auto streamSocket = std::static_pointer_cast<StreamSocket>(moveSocket); clientSession->setSaveAsSocket(streamSocket); @@ -2603,7 +2627,7 @@ private: URI::encode(toJailURL, "", encodedTo); // Convert it to the requested format. - const auto saveas = "saveas url=" + encodedTo + " format=" + format + " options="; + const auto saveas = "saveas url=" + encodedTo + " format=" + format + " options=" + sOptions; std::vector<char> saveasRequest(saveas.begin(), saveas.end()); clientSession->handleMessage(true, WSOpCode::Text, saveasRequest); }); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits