[Libreoffice-commits] online.git: Branch 'distro/collabora/milestone-7' - loleaflet/reference.html loleaflet/src loolwsd/bundled loolwsd/LOKitClient.cpp loolwsd/LOOLSession.cpp loolwsd/protocol.txt

Jan Holesovsky kendy at collabora.com
Wed Feb 3 10:18:50 UTC 2016


 loleaflet/reference.html                                     |    4 +++
 loleaflet/src/core/Socket.js                                 |    3 ++
 loleaflet/src/layer/tile/TileLayer.js                        |    9 ++++++-
 loolwsd/LOKitClient.cpp                                      |    1 
 loolwsd/LOOLSession.cpp                                      |   10 +++++++
 loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h |   14 +++++++++++
 loolwsd/protocol.txt                                         |    5 +++
 7 files changed, 44 insertions(+), 2 deletions(-)

New commits:
commit de0a21e9fddefba7d5591e5aedee561fe5448229
Author: Jan Holesovsky <kendy at collabora.com>
Date:   Wed Feb 3 11:15:07 2016 +0100

    loolwsd, loleaflet: Handle the ERROR callback.
    
    This introduces a new error id 5 - "document save failed".

diff --git a/loleaflet/reference.html b/loleaflet/reference.html
index 4724e54..bae4e86 100644
--- a/loleaflet/reference.html
+++ b/loleaflet/reference.html
@@ -2105,6 +2105,10 @@ The <code>id</code> property of ErrorEvent can have the following values:
 		<td><code><b>4</b></code></td>
 		<td>Socket connection was closed.</td>
 	</tr>
+	<tr>
+		<td><code><b>5</b></code></td>
+		<td>Document couldn't be saved.</td>
+	</tr>
 </table>
 
 <h3 id="hyperlinkclicked-event">HyperlinkClickedEvent</h3>
diff --git a/loleaflet/src/core/Socket.js b/loleaflet/src/core/Socket.js
index 7499773..7efcaed 100644
--- a/loleaflet/src/core/Socket.js
+++ b/loleaflet/src/core/Socket.js
@@ -220,6 +220,9 @@ L.Socket = L.Class.extend({
 			else if (tokens[i].substring(0, 4) === 'cmd=') {
 				command.errorCmd = tokens[i].substring(4);
 			}
+			else if (tokens[i].substring(0, 5) === 'code=') {
+				command.errorCode = tokens[i].substring(5);
+			}
 			else if (tokens[i].substring(0, 5) === 'kind=') {
 				command.errorKind = tokens[i].substring(5);
 			}
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 220efc8..f776337 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -393,8 +393,15 @@ L.TileLayer = L.GridLayer.extend({
 		if (command.errorCmd === 'load') {
 			errorId = 2; // document cannot be loaded
 		}
+		else if (command.errorCmd === 'save') {
+			errorId = 5; // document cannot be saved
+		}
+
+		var errorCode = -1;
+		if (command.errorCode !== undefined)
+			errorCode = command.errorCode;
 
-		this._map.fire('error', {cmd: command.errorCmd, kind: command.errorKind, id: errorId});
+		this._map.fire('error', {cmd: command.errorCmd, kind: command.errorKind, id: errorId, code: errorCode});
 	},
 
 	_onGetChildIdMsg: function (textMsg) {
diff --git a/loolwsd/LOKitClient.cpp b/loolwsd/LOKitClient.cpp
index 58c7e78..9542942 100644
--- a/loolwsd/LOKitClient.cpp
+++ b/loolwsd/LOKitClient.cpp
@@ -66,6 +66,7 @@ extern "C"
             CASE(UNO_COMMAND_RESULT);
             CASE(DOCUMENT_PASSWORD);
             CASE(DOCUMENT_PASSWORD_TO_MODIFY);
+            CASE(ERROR);
 #undef CASE
         }
         std::cout << " payload: " << pPayload << std::endl;
diff --git a/loolwsd/LOOLSession.cpp b/loolwsd/LOOLSession.cpp
index 8643196..cce38df 100644
--- a/loolwsd/LOOLSession.cpp
+++ b/loolwsd/LOOLSession.cpp
@@ -1075,6 +1075,16 @@ extern "C"
             break;
         case LOK_CALLBACK_DOCUMENT_PASSWORD_TO_MODIFY:
             break;
+        case LOK_CALLBACK_ERROR:
+            {
+                Poco::JSON::Parser parser;
+                Poco::Dynamic::Var var = parser.parse(pPayload);
+                Poco::JSON::Object::Ptr object = var.extract<Poco::JSON::Object::Ptr>();
+
+                srv->sendTextFrame("error: cmd=" + object->get("cmd").toString() +
+                        " kind=" + object->get("kind").toString() + " code=" + object->get("code").toString());
+            }
+            break;
         }
     }
 }
diff --git a/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h b/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h
index b615bd9..5ce8610 100644
--- a/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h
+++ b/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h
@@ -265,6 +265,20 @@ typedef enum
      * lok::Office::setDocumentPassword().
      */
     LOK_CALLBACK_DOCUMENT_PASSWORD_TO_MODIFY,
+
+    /**
+     * An error happened.
+     *
+     * The payload returns information further identifying the error, like:
+     *
+     * {
+     *     "classification": "error" | "warning" | "info"
+     *     "kind": "network" etc.
+     *     "code": 403 | 404 | ...
+     *     "message": freeform description
+     * }
+     */
+    LOK_CALLBACK_ERROR,
 }
 LibreOfficeKitCallbackType;
 
diff --git a/loolwsd/protocol.txt b/loolwsd/protocol.txt
index d3071c6..9f6366d 100644
--- a/loolwsd/protocol.txt
+++ b/loolwsd/protocol.txt
@@ -119,13 +119,16 @@ downloadas: jail=<jail directory> dir=<a tmp dir> name=<name> port=<port>
     The client should then request http://server:port/jail/dir/name in order to download
     the document
 
-error: cmd=<command> kind=<kind>
+error: cmd=<command> kind=<kind> [code=<error_code>]
 <freeErrorText>
 
     <command> is the command part of the corresponding client->server
     message that caused the error. <kind> is some single-word
     classification
 
+    <code> (when provided) further specifies the error as forwarded from
+    LibreOffice
+
 getchildid: id=<id>
 
     Returns the child id


More information about the Libreoffice-commits mailing list