loleaflet/reference.html | 18 ++++++++++++++++++ loleaflet/src/layer/tile/TileLayer.js | 5 ++++- loleaflet/src/map/handler/Map.WOPI.js | 2 ++ wsd/DocumentBroker.cpp | 1 + wsd/Storage.cpp | 4 +++- wsd/Storage.hpp | 6 ++++++ wsd/reference.md | 7 +++++++ 7 files changed, 41 insertions(+), 2 deletions(-)
New commits: commit 3c45a0abab883dadc8d1733f24bff36150648c88 Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Tue Jun 4 13:57:53 2019 +0200 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Tue Jun 4 14:54:36 2019 +0200 Introduce Download_As postmessage & a CheckFileInfo entry to enables that. The Download_As is emitted when the user chooses 'Print' or 'Show slideshow' or 'Download As [some type'] and the integration indicates via DownloadAsPostMessage in the CheckFileInfo that it wants to handle the downloading of pdf for printing or svg for slideshows or experted document. This is particularly useful in situations when the integration cannot rely on browser's support for downloading like in mobile apps that use the Online in a WebView. Change-Id: Iefdf214937c0c0dafd7462340a1c5e88df94e716 Reviewed-on: https://gerrit.libreoffice.org/73449 Reviewed-by: Jan Holesovsky <ke...@collabora.com> Tested-by: Jan Holesovsky <ke...@collabora.com> diff --git a/loleaflet/reference.html b/loleaflet/reference.html index b0f62caaf..27f969bfd 100644 --- a/loleaflet/reference.html +++ b/loleaflet/reference.html @@ -3240,6 +3240,24 @@ Note that they usually don't change but there is no guarantee that they are stab </td> </tr> <tr> + <td><code><b>Download_As</b></code></td> + <td><code> + <nobr>Type: 'print'|'slideshow'|'export'</nobr><br/> + <nobr>URL: <string></nobr><br/> + </code></td> + <td> + This event is emitted when the user chooses 'Print' or 'Show + slideshow' or 'Download As [some type'] and the integration + indicates via DownloadAsPostMessage in the CheckFileInfo that it + wants to handle the downloading of pdf for printing or svg for + slideshows or experted document. + + This is in situations when the integration cannot rely on browser's + support for downloading like in mobile apps that use the Online in + a WebView. + </td> + </tr> + <tr> <td><code><b>UI_CreateFile</b></code></td> <td></td> <td> diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js index 6dc66544e..b936cad94 100644 --- a/loleaflet/src/layer/tile/TileLayer.js +++ b/loleaflet/src/layer/tile/TileLayer.js @@ -583,7 +583,10 @@ L.TileLayer = L.GridLayer.extend({ encodeURIComponent(this._map.options.doc) + '/' + command.jail + '/' + command.dir + '/' + command.name + wopiSrc; this._map.hideBusy(); - if (command.id === 'print') { + if (this._map['wopi'].DownloadAsPostMessage) { + this._map.fire('postMessage', {msgId: 'Download_As', args: {Type: command.id, URL: url}}); + } + else if (command.id === 'print') { if (L.Browser.gecko || L.Browser.edge || this._map.options.print === false) { // the print dialog doesn't work well on firefox // due to a pdf.js issue - https://github.com/mozilla/pdf.js/issues/5397 diff --git a/loleaflet/src/map/handler/Map.WOPI.js b/loleaflet/src/map/handler/Map.WOPI.js index bff0a062f..97b4c7176 100644 --- a/loleaflet/src/map/handler/Map.WOPI.js +++ b/loleaflet/src/map/handler/Map.WOPI.js @@ -19,6 +19,7 @@ L.Map.WOPI = L.Handler.extend({ DisableExport: false, DisableCopy: false, DisableInactiveMessages: false, + DownloadAsPostMessage: false, UserCanNotWriteRelative: true, EnableInsertRemoteImage: false, EnableShare: false, @@ -83,6 +84,7 @@ L.Map.WOPI = L.Handler.extend({ this.DisableExport = !!wopiInfo['DisableExport']; this.DisableCopy = !!wopiInfo['DisableCopy']; this.DisableInactiveMessages = !!wopiInfo['DisableInactiveMessages']; + this.DownloadAsPostMessage = !!wopiInfo['DownloadAsPostMessage']; this.UserCanNotWriteRelative = !!wopiInfo['UserCanNotWriteRelative']; this.EnableInsertRemoteImage = !!wopiInfo['EnableInsertRemoteImage']; this.SupportsRename = !!wopiInfo['SupportsRename']; diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp index fefe15ccd..e45f6bff0 100644 --- a/wsd/DocumentBroker.cpp +++ b/wsd/DocumentBroker.cpp @@ -570,6 +570,7 @@ bool DocumentBroker::load(const std::shared_ptr<ClientSession>& session, const s wopiInfo->set("DisableExport", wopifileinfo->getDisableExport()); wopiInfo->set("DisableCopy", wopifileinfo->getDisableCopy()); wopiInfo->set("DisableInactiveMessages", wopifileinfo->getDisableInactiveMessages()); + wopiInfo->set("DownloadAsPostMessage", wopifileinfo->getDownloadAsPostMessage()); wopiInfo->set("UserCanNotWriteRelative", wopifileinfo->getUserCanNotWriteRelative()); wopiInfo->set("EnableInsertRemoteImage", wopifileinfo->getEnableInsertRemoteImage()); wopiInfo->set("EnableShare", wopifileinfo->getEnableShare()); diff --git a/wsd/Storage.cpp b/wsd/Storage.cpp index d29bbaa63..4b914ca2a 100644 --- a/wsd/Storage.cpp +++ b/wsd/Storage.cpp @@ -495,6 +495,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> WopiStorage::getWOPIFileInfo(const Au bool disableExport = false; bool disableCopy = false; bool disableInactiveMessages = false; + bool downloadAsPostMessage = false; std::string lastModifiedTime; bool userCanNotWriteRelative = true; bool enableInsertRemoteImage = false; @@ -582,6 +583,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> WopiStorage::getWOPIFileInfo(const Au JsonUtil::findJSONValue(object, "DisableExport", disableExport); JsonUtil::findJSONValue(object, "DisableCopy", disableCopy); JsonUtil::findJSONValue(object, "DisableInactiveMessages", disableInactiveMessages); + JsonUtil::findJSONValue(object, "DownloadAsPostMessage", downloadAsPostMessage); JsonUtil::findJSONValue(object, "LastModifiedTime", lastModifiedTime); JsonUtil::findJSONValue(object, "UserCanNotWriteRelative", userCanNotWriteRelative); JsonUtil::findJSONValue(object, "EnableInsertRemoteImage", enableInsertRemoteImage); @@ -616,7 +618,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> WopiStorage::getWOPIFileInfo(const Au {userId, obfuscatedUserId, userName, userExtraInfo, watermarkText, templateSaveAs, canWrite, postMessageOrigin, hidePrintOption, hideSaveOption, hideExportOption, enableOwnerTermination, disablePrint, disableExport, disableCopy, - disableInactiveMessages, userCanNotWriteRelative, enableInsertRemoteImage, enableShare, + disableInactiveMessages, downloadAsPostMessage, userCanNotWriteRelative, enableInsertRemoteImage, enableShare, hideUserList, disableChangeTrackingShow, disableChangeTrackingRecord, hideChangeTrackingControls, supportsRename, userCanRename, callDuration})); } diff --git a/wsd/Storage.hpp b/wsd/Storage.hpp index 02539b8f1..6bfac902a 100644 --- a/wsd/Storage.hpp +++ b/wsd/Storage.hpp @@ -322,6 +322,7 @@ public: const bool disableExport, const bool disableCopy, const bool disableInactiveMessages, + const bool downloadAsPostMessage, const bool userCanNotWriteRelative, const bool enableInsertRemoteImage, const bool enableShare, @@ -347,6 +348,7 @@ public: _disableExport(disableExport), _disableCopy(disableCopy), _disableInactiveMessages(disableInactiveMessages), + _downloadAsPostMessage(downloadAsPostMessage), _userCanNotWriteRelative(userCanNotWriteRelative), _enableInsertRemoteImage(enableInsertRemoteImage), _enableShare(enableShare), @@ -395,6 +397,8 @@ public: bool getDisableInactiveMessages() const { return _disableInactiveMessages; } + bool getDownloadAsPostMessage() const { return _downloadAsPostMessage; } + bool getUserCanNotWriteRelative() const { return _userCanNotWriteRelative; } bool getEnableInsertRemoteImage() const { return _enableInsertRemoteImage; } @@ -448,6 +452,8 @@ public: bool _disableCopy; /// If WOPI host has allowed the loleaflet to show texts on the overlay informing about inactivity, or if the integration is handling that. bool _disableInactiveMessages; + /// For the (mobile) integrations, to indicate that the downloading for printing, exporting or slideshows should be intercepted and sent as a postMessage instead of handling directly. + bool _downloadAsPostMessage; /// If set to false, users can access the save-as functionality bool _userCanNotWriteRelative; /// If set to true, users can access the insert remote image functionality diff --git a/wsd/reference.md b/wsd/reference.md index fdcd0c121..a0163dd80 100644 --- a/wsd/reference.md +++ b/wsd/reference.md @@ -98,6 +98,13 @@ Disables copying from the document in libreoffice online backend. Pasting into t ### DisableInactiveMessages Disables displaying of the explanation text on the overlay when the document becomes inactive or killed. With this, the JS integration must provide the user with appropriate message when it gets Session_Closed or User_Idle postMessage's. +### DownloadAsPostMessage +Indicate that the integration wants to handle the downloading of pdf for printing or svg for slideshows or experted document, because it cannot rely on browser's support for downloading. + +When this is set to true, the user's eg. Print action will trigger a postMessage called Download_As, with the following JSON in the Values: + + { Type: 'print'|'slideshow'|'export', URL: ...url you use for the actual downloading... } + ### EnableOwnerTermination If set to true, it allows the document owner (the one with OwnerId =UserId) to send a 'closedocument' message (see protocol.txt) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits