[Libreoffice-commits] online.git: loleaflet/reference.html loleaflet/src wsd/LOOLWSD.cpp wsd/Storage.cpp
Samuel Mehrbrodt (via logerrit)
logerrit at kemper.freedesktop.org
Wed Jul 15 07:49:03 UTC 2020
loleaflet/reference.html | 16 ++++++++++++++++
loleaflet/src/core/Socket.js | 7 +++++++
wsd/LOOLWSD.cpp | 19 +++++++++++++++++++
wsd/Storage.cpp | 7 +++++--
4 files changed, 47 insertions(+), 2 deletions(-)
New commits:
commit ce91fa4201a53400e677857b6a1c82ee4e8606ec
Author: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
AuthorDate: Tue Jul 7 21:18:13 2020 +0200
Commit: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
CommitDate: Wed Jul 15 09:48:43 2020 +0200
Report back load result to integrator
Integrator currently gets no message when loading the document
from WOPI host fails.
Similiar to Action_Save_Resp, introduce Action_Load_Resp with
the result of the load action.
Change-Id: I3b0f9ee691a1c5d58e9f833d511435a0b25a465f
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/98299
Tested-by: Jenkins
Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
diff --git a/loleaflet/reference.html b/loleaflet/reference.html
index 99cae5ec6..4c07de27d 100644
--- a/loleaflet/reference.html
+++ b/loleaflet/reference.html
@@ -3035,6 +3035,22 @@ Editor to WOPI host
<th>Values</th>
<th>Description</th>
</tr>
+ <tr>
+ <td><code><b>Action_Load_Resp</b></code></td>
+ <td><code>
+ <nobr>success: <boolean></nobr>
+ <nobr>result: <string></nobr>
+ <nobr>errorMsg: <string></nobr>
+ </code></td>
+ <td>Acknowledgement when load finishes.<br/>
+ <code>success</code> tells if LOOL was able to load the document
+ successfully.<br/>
+ <code>result</code> contains the reason the document was not loaded.<br/>
+ <code>errorMsg</code> contains a detailed error message in case loading failed.
+ Probably it will contain the error message returned from the WOPI/Webdav host.
+ </td>
+ </tr>
+
<tr>
<td><code><b>Action_Save_Resp</b></code></td>
<td><code>
diff --git a/loleaflet/src/core/Socket.js b/loleaflet/src/core/Socket.js
index 9b9b3c236..790c7885d 100644
--- a/loleaflet/src/core/Socket.js
+++ b/loleaflet/src/core/Socket.js
@@ -370,6 +370,13 @@ L.Socket = L.Class.extend({
errorMsg: commandresult['errorMsg']
};
this._map.fire('postMessage', {msgId: 'Action_Save_Resp', args: postMessageObj});
+ } else if (commandresult['command'] === 'load') {
+ postMessageObj = {
+ success: commandresult['success'],
+ result: commandresult['result'],
+ errorMsg: commandresult['errorMsg']
+ };
+ this._map.fire('postMessage', {msgId: 'Action_Load_Resp', args: postMessageObj});
}
return;
}
diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index cef10cc11..1df218e83 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -690,6 +690,20 @@ inline std::string getServiceURI(const std::string &sub, bool asAdmin = false)
#endif
+void sendLoadResult(std::shared_ptr<ClientSession> clientSession, bool success,
+ const std::string &errorMsg)
+{
+ const std::string result = success ? "" : "Error while loading document";
+ const std::string resultstr = success ? "true" : "false";
+ // Some sane limit, otherwise we get problems transfering this
+ // to the client with large strings (can be a whole webpage)
+ // Replace reserved characters
+ std::string errorMsgFormatted = LOOLProtocol::getAbbreviatedMessage(errorMsg);
+ errorMsgFormatted = Poco::translate(errorMsg, "\"", "'");
+ clientSession->sendMessage("commandresult: { \"command\": \"load\", \"success\": " + resultstr +
+ ", \"result\": \"" + result + "\", \"errorMsg\": \"" + errorMsgFormatted + "\"}");
+}
+
} // anonymous namespace
#endif // MOBILEAPP
@@ -3235,15 +3249,19 @@ private:
// Users of development versions get just an info
// when reaching max documents or connections
LOOLWSD::checkSessionLimitsAndWarnClients();
+
+ sendLoadResult(clientSession, true, "");
}
catch (const UnauthorizedRequestException& exc)
{
LOG_ERR("Unauthorized Request while loading session for " << docBroker->getDocKey() << ": " << exc.what());
+ sendLoadResult(clientSession, false, "Unauthorized Request");
const std::string msg = "error: cmd=internal kind=unauthorized";
clientSession->sendMessage(msg);
}
catch (const StorageConnectionException& exc)
{
+ sendLoadResult(clientSession, false, exc.what());
// Alert user about failed load
const std::string msg = "error: cmd=storage kind=loadfailed";
clientSession->sendMessage(msg);
@@ -3255,6 +3273,7 @@ private:
// Alert user about failed load
const std::string msg = "error: cmd=storage kind=loadfailed";
clientSession->sendMessage(msg);
+ sendLoadResult(clientSession, false, exc.what());
}
});
});
diff --git a/wsd/Storage.cpp b/wsd/Storage.cpp
index e15f1abcb..e67c568ac 100644
--- a/wsd/Storage.cpp
+++ b/wsd/Storage.cpp
@@ -898,8 +898,11 @@ std::string WopiStorage::loadStorageFileToLocal(const Authorization& auth,
if (response.getStatus() != Poco::Net::HTTPResponse::HTTP_OK)
{
- LOG_ERR("WOPI::GetFile failed with " << response.getStatus() << ' ' << response.getReason());
- throw StorageConnectionException("WOPI::GetFile failed");
+ std::ostringstream oss;
+ Poco::StreamCopier::copyStream(rs, oss);
+ std::string responseString = oss.str();
+ LOG_ERR("WOPI::GetFile failed with " << response.getStatus() << ' ' << responseString);
+ throw StorageConnectionException("WOPI::GetFile failed: " + responseString);
}
else // Successful
{
More information about the Libreoffice-commits
mailing list