loolwsd: LibreOfficeKitDocument* -> shared_ptr<lok::Document>

Change-Id: Ie94882482729e4d6bb69c9f92badd375231fece2
Reviewed-on: https://gerrit.libreoffice.org/25094
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
This commit is contained in:
Ashod Nakashian 2016-05-18 06:51:14 -04:00 committed by Ashod Nakashian
parent 35ecc2b8d0
commit 5a8b3c8169
3 changed files with 52 additions and 53 deletions

View file

@ -292,7 +292,6 @@ ChildSession::ChildSession(const std::string& id,
OnLoadCallback onLoad, OnLoadCallback onLoad,
OnUnloadCallback onUnload) : OnUnloadCallback onUnload) :
LOOLSession(id, Kind::ToMaster, ws), LOOLSession(id, Kind::ToMaster, ws),
_loKitDocument(nullptr),
_multiView(std::getenv("LOK_VIEW_CALLBACK")), _multiView(std::getenv("LOK_VIEW_CALLBACK")),
_jailId(jailId), _jailId(jailId),
_viewId(0), _viewId(0),
@ -323,7 +322,7 @@ void ChildSession::disconnect()
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
_onUnload(getId()); _onUnload(getId());
@ -345,9 +344,9 @@ bool ChildSession::_handleInput(const char *buffer, int length)
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
const int curPart = _loKitDocument->pClass->getPart(_loKitDocument); const int curPart = _loKitDocument->getPart();
sendTextFrame("curpart: part=" + std::to_string(curPart)); sendTextFrame("curpart: part=" + std::to_string(curPart));
sendTextFrame("setpart: part=" + std::to_string(curPart)); sendTextFrame("setpart: part=" + std::to_string(curPart));
@ -603,14 +602,14 @@ bool ChildSession::loadDocument(const char * /*buffer*/, int /*length*/, StringT
if (_multiView) if (_multiView)
{ {
_viewId = _loKitDocument->pClass->getView(_loKitDocument); _viewId = _loKitDocument->getView();
_loKitDocument->pClass->initializeForRendering(_loKitDocument, (renderOpts.empty() ? nullptr : renderOpts.c_str())); _loKitDocument->initializeForRendering((renderOpts.empty() ? nullptr : renderOpts.c_str()));
} }
_docType = LOKitHelper::getDocumentTypeAsString(_loKitDocument); _docType = LOKitHelper::getDocumentTypeAsString(_loKitDocument->get());
if (_docType != "text" && part != -1) if (_docType != "text" && part != -1)
{ {
_loKitDocument->pClass->setPart(_loKitDocument, part); _loKitDocument->setPart(part);
} }
// Respond by the document status, which has no arguments. // Respond by the document status, which has no arguments.
@ -636,7 +635,7 @@ void ChildSession::sendFontRendering(const char* /*buffer*/, int /*length*/, Str
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
URI::decode(font, decodedFont); URI::decode(font, decodedFont);
std::string response = "renderfont: " + Poco::cat(std::string(" "), tokens.begin() + 1, tokens.end()) + "\n"; std::string response = "renderfont: " + Poco::cat(std::string(" "), tokens.begin() + 1, tokens.end()) + "\n";
@ -647,7 +646,7 @@ void ChildSession::sendFontRendering(const char* /*buffer*/, int /*length*/, Str
Timestamp timestamp; Timestamp timestamp;
int width, height; int width, height;
unsigned char *pixmap = _loKitDocument->pClass->renderFont(_loKitDocument, decodedFont.c_str(), &width, &height); unsigned char *pixmap = _loKitDocument->renderFont(decodedFont.c_str(), &width, &height);
Log::trace("renderFont [" + font + "] rendered in " + std::to_string(timestamp.elapsed()/1000.) + "ms"); Log::trace("renderFont [" + font + "] rendered in " + std::to_string(timestamp.elapsed()/1000.) + "ms");
if (pixmap != nullptr) if (pixmap != nullptr)
@ -669,9 +668,9 @@ bool ChildSession::getStatus(const char* /*buffer*/, int /*length*/)
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
const auto status = LOKitHelper::documentStatus(_loKitDocument); const auto status = LOKitHelper::documentStatus(_loKitDocument->get());
if (status.empty()) if (status.empty())
{ {
Log::error("Failed to get document status."); Log::error("Failed to get document status.");
@ -694,9 +693,9 @@ bool ChildSession::getCommandValues(const char* /*buffer*/, int /*length*/, Stri
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
sendTextFrame("commandvalues: " + std::string(_loKitDocument->pClass->getCommandValues(_loKitDocument, command.c_str()))); sendTextFrame("commandvalues: " + std::string(_loKitDocument->getCommandValues(command.c_str())));
return true; return true;
} }
@ -705,9 +704,9 @@ bool ChildSession::getPartPageRectangles(const char* /*buffer*/, int /*length*/)
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
sendTextFrame("partpagerectangles: " + std::string(_loKitDocument->pClass->getPartPageRectangles(_loKitDocument))); sendTextFrame("partpagerectangles: " + std::string(_loKitDocument->getPartPageRectangles()));
return true; return true;
} }
@ -728,9 +727,9 @@ bool ChildSession::clientZoom(const char* /*buffer*/, int /*length*/, StringToke
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
_loKitDocument->pClass->setClientZoom(_loKitDocument, tilePixelWidth, tilePixelHeight, tileTwipWidth, tileTwipHeight); _loKitDocument->setClientZoom(tilePixelWidth, tilePixelHeight, tileTwipWidth, tileTwipHeight);
return true; return true;
} }
@ -754,9 +753,9 @@ bool ChildSession::clientVisibleArea(const char* /*buffer*/, int /*length*/, Str
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
_loKitDocument->pClass->setClientVisibleArea(_loKitDocument, x, y, width, height); _loKitDocument->setClientVisibleArea(x, y, width, height);
return true; return true;
} }
@ -788,7 +787,7 @@ bool ChildSession::downloadAs(const char* /*buffer*/, int /*length*/, StringToke
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
//TODO: Cleanup the file after downloading. //TODO: Cleanup the file after downloading.
_loKitDocument->pClass->saveAs(_loKitDocument, url.c_str(), _loKitDocument->saveAs(url.c_str(),
format.size() == 0 ? nullptr :format.c_str(), format.size() == 0 ? nullptr :format.c_str(),
filterOptions.size() == 0 ? nullptr : filterOptions.c_str()); filterOptions.size() == 0 ? nullptr : filterOptions.c_str());
@ -817,9 +816,9 @@ bool ChildSession::getTextSelection(const char* /*buffer*/, int /*length*/, Stri
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
char *textSelection = _loKitDocument->pClass->getTextSelection(_loKitDocument, mimeType.c_str(), nullptr); char *textSelection = _loKitDocument->getTextSelection(mimeType.c_str(), nullptr);
sendTextFrame("textselectioncontent: " + std::string(textSelection)); sendTextFrame("textselectioncontent: " + std::string(textSelection));
@ -844,10 +843,10 @@ bool ChildSession::paste(const char* buffer, int length, StringTokenizer& tokens
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
Log::info("Calling _loKit->pClass->paste()"); Log::info("Calling _loKit->paste()");
_loKitDocument->pClass->paste(_loKitDocument, mimeType.c_str(), data, size); _loKitDocument->paste(mimeType.c_str(), data, size);
Log::info("paste() returned"); Log::info("paste() returned");
return true; return true;
@ -877,9 +876,9 @@ bool ChildSession::insertFile(const char* /*buffer*/, int /*length*/, StringToke
"\"value\":\"" + fileName + "\"" "\"value\":\"" + fileName + "\""
"}}"; "}}";
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
_loKitDocument->pClass->postUnoCommand(_loKitDocument, command.c_str(), arguments.c_str(), false); _loKitDocument->postUnoCommand(command.c_str(), arguments.c_str(), false);
} }
return true; return true;
@ -919,9 +918,9 @@ bool ChildSession::keyEvent(const char* /*buffer*/, int /*length*/, StringTokeni
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
_loKitDocument->pClass->postKeyEvent(_loKitDocument, type, charcode, keycode); _loKitDocument->postKeyEvent(type, charcode, keycode);
return true; return true;
} }
@ -965,9 +964,9 @@ bool ChildSession::mouseEvent(const char* /*buffer*/, int /*length*/, StringToke
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
_loKitDocument->pClass->postMouseEvent(_loKitDocument, type, x, y, count, buttons, modifier); _loKitDocument->postMouseEvent(type, x, y, count, buttons, modifier);
return true; return true;
} }
@ -983,18 +982,18 @@ bool ChildSession::unoCommand(const char* /*buffer*/, int /*length*/, StringToke
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
// we need to get LOK_CALLBACK_UNO_COMMAND_RESULT callback when saving // we need to get LOK_CALLBACK_UNO_COMMAND_RESULT callback when saving
const bool bNotify = (tokens[1] == ".uno:Save"); const bool bNotify = (tokens[1] == ".uno:Save");
if (tokens.count() == 2) if (tokens.count() == 2)
{ {
_loKitDocument->pClass->postUnoCommand(_loKitDocument, tokens[1].c_str(), nullptr, bNotify); _loKitDocument->postUnoCommand(tokens[1].c_str(), nullptr, bNotify);
} }
else else
{ {
_loKitDocument->pClass->postUnoCommand(_loKitDocument, tokens[1].c_str(), _loKitDocument->postUnoCommand(tokens[1].c_str(),
Poco::cat(std::string(" "), tokens.begin() + 2, tokens.end()).c_str(), Poco::cat(std::string(" "), tokens.begin() + 2, tokens.end()).c_str(),
bNotify); bNotify);
} }
@ -1022,9 +1021,9 @@ bool ChildSession::selectText(const char* /*buffer*/, int /*length*/, StringToke
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
_loKitDocument->pClass->setTextSelection(_loKitDocument, type, x, y); _loKitDocument->setTextSelection(type, x, y);
return true; return true;
} }
@ -1048,9 +1047,9 @@ bool ChildSession::selectGraphic(const char* /*buffer*/, int /*length*/, StringT
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
_loKitDocument->pClass->setGraphicSelection(_loKitDocument, type, x, y); _loKitDocument->setGraphicSelection(type, x, y);
return true; return true;
} }
@ -1066,9 +1065,9 @@ bool ChildSession::resetSelection(const char* /*buffer*/, int /*length*/, String
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
_loKitDocument->pClass->resetSelection(_loKitDocument); _loKitDocument->resetSelection();
return true; return true;
} }
@ -1097,9 +1096,9 @@ bool ChildSession::saveAs(const char* /*buffer*/, int /*length*/, StringTokenize
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
bool success = _loKitDocument->pClass->saveAs(_loKitDocument, url.c_str(), bool success = _loKitDocument->saveAs(url.c_str(),
format.size() == 0 ? nullptr :format.c_str(), format.size() == 0 ? nullptr :format.c_str(),
filterOptions.size() == 0 ? nullptr : filterOptions.c_str()); filterOptions.size() == 0 ? nullptr : filterOptions.c_str());
@ -1124,12 +1123,12 @@ bool ChildSession::setClientPart(const char* /*buffer*/, int /*length*/, StringT
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (part != _loKitDocument->pClass->getPart(_loKitDocument)) if (part != _loKitDocument->getPart())
{ {
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
_loKitDocument->pClass->setPart(_loKitDocument, part); _loKitDocument->setPart(part);
} }
return true; return true;
@ -1148,9 +1147,9 @@ bool ChildSession::setPage(const char* /*buffer*/, int /*length*/, StringTokeniz
std::unique_lock<std::recursive_mutex> lock(Mutex); std::unique_lock<std::recursive_mutex> lock(Mutex);
if (_multiView) if (_multiView)
_loKitDocument->pClass->setView(_loKitDocument, _viewId); _loKitDocument->setView(_viewId);
_loKitDocument->pClass->setPart(_loKitDocument, page); _loKitDocument->setPart(page);
return true; return true;
} }

View file

@ -20,7 +20,7 @@
#include "LibreOfficeKit.hpp" #include "LibreOfficeKit.hpp"
class CallbackWorker; class CallbackWorker;
typedef std::function<LibreOfficeKitDocument*(const std::string&, const std::string&, const std::string&, const std::string&, bool)> OnLoadCallback; typedef std::function<std::shared_ptr<lok::Document>(const std::string&, const std::string&, const std::string&, const std::string&, bool)> OnLoadCallback;
typedef std::function<void(const std::string&)> OnUnloadCallback; typedef std::function<void(const std::string&)> OnUnloadCallback;
class ChildSession final : public LOOLSession class ChildSession final : public LOOLSession
@ -48,7 +48,7 @@ public:
const std::string& getDocType() const { return _docType; } const std::string& getDocType() const { return _docType; }
LibreOfficeKitDocument *getLoKitDocument() const { return _loKitDocument; } LibreOfficeKitDocument *getLoKitDocument() const { return _loKitDocument->get(); }
void loKitCallback(const int nType, const char* pPayload); void loKitCallback(const int nType, const char* pPayload);
@ -84,7 +84,7 @@ private:
virtual bool _handleInput(const char *buffer, int length) override; virtual bool _handleInput(const char *buffer, int length) override;
private: private:
LibreOfficeKitDocument *_loKitDocument; std::shared_ptr<lok::Document> _loKitDocument;
std::string _docType; std::string _docType;
const bool _multiView; const bool _multiView;
const std::string _jailId; const std::string _jailId;

View file

@ -843,7 +843,7 @@ private:
} }
/// Load a document (or view) and register callbacks. /// Load a document (or view) and register callbacks.
LibreOfficeKitDocument* onLoad(const std::string& sessionId, std::shared_ptr<lok::Document> onLoad(const std::string& sessionId,
const std::string& uri, const std::string& uri,
const std::string& docPassword, const std::string& docPassword,
const std::string& renderOpts, const std::string& renderOpts,
@ -882,7 +882,7 @@ private:
--_isLoading; --_isLoading;
_cvLoading.notify_one(); _cvLoading.notify_one();
return _loKitDocument->get(); return _loKitDocument;
} }
void onUnload(const std::string& sessionId) void onUnload(const std::string& sessionId)