loleaflet/reference.html                 |   22 +++++++++++++++++++++-
 loleaflet/src/control/Control.Menubar.js |    8 ++++++++
 loleaflet/src/core/Socket.js             |    9 +++++++++
 loleaflet/src/map/handler/Map.WOPI.js    |   15 +++++++++++++--
 wsd/DocumentBroker.cpp                   |    1 +
 wsd/Storage.cpp                          |    4 +++-
 wsd/Storage.hpp                          |    4 ++++
 7 files changed, 59 insertions(+), 4 deletions(-)

New commits:
commit 36670bcffa1113f1839fdd5e0dbca253171a95ed
Author: Pranav Kant <pran...@collabora.co.uk>
Date:   Tue Oct 3 20:36:02 2017 +0530

    Show save-as option based on CheckFileInfo params
    
    If UserCanNotWriteRelative is mentioned in the CheckFileInfo response.
    
    Change-Id: I33d2e21159b3e18ae88fd72f404f2d1d1d9b64e5
    (cherry picked from commit df034096c1033137a0b5de4267585b8d5e20ad65)

diff --git a/loleaflet/src/control/Control.Menubar.js 
b/loleaflet/src/control/Control.Menubar.js
index 1a9abc2e..8744585d 100644
--- a/loleaflet/src/control/Control.Menubar.js
+++ b/loleaflet/src/control/Control.Menubar.js
@@ -187,6 +187,7 @@ L.Control.Menubar = L.Control.extend({
                presentation: [
                        {name: _('File'), id: 'file', type: 'menu', menu: [
                                {name: _('Save'), id: 'save', type: 'action'},
+                               {name: _('Save As'), id: 'saveas', type: 
'action'},
                                {name: _('Print'), id: 'print', type: 'action'},
                                {name: _('See revision history'), id: 
'rev-history', type: 'action'},
                                {name: _('Download as'), id: 'downloadas', 
type: 'menu', menu: [
@@ -251,6 +252,7 @@ L.Control.Menubar = L.Control.extend({
                spreadsheet: [
                        {name: _('File'), id: 'file', type: 'menu', menu: [
                                {name: _('Save'), id: 'save', type: 'action'},
+                               {name: _('Save As'), id: 'saveas', type: 
'action'},
                                {name: _('Print'), id: 'print', type: 'action'},
                                {name: _('See revision history'), id: 
'rev-history', type: 'action'},
                                {name: _('Download as'), id:'downloadas', type: 
'menu', menu: [
@@ -771,6 +773,9 @@ L.Control.Menubar = L.Control.extend({
                        if (menu[i].id === 'save' && 
this._map['wopi'].HideSaveOption)
                                continue;
 
+                       if (menu[i].id === 'saveas' && 
this._map['wopi'].UserCanNotWriteRelative)
+                               continue;
+
                        if (menu[i].id && 
menu[i].id.startsWith('fullscreen-presentation') && 
this._map['wopi'].HideExportOption)
                                continue;
 
diff --git a/loleaflet/src/map/handler/Map.WOPI.js 
b/loleaflet/src/map/handler/Map.WOPI.js
index a7bbcb8c..8aa364c1 100644
--- a/loleaflet/src/map/handler/Map.WOPI.js
+++ b/loleaflet/src/map/handler/Map.WOPI.js
@@ -16,6 +16,7 @@ L.Map.WOPI = L.Handler.extend({
        DisableExport: false,
        DisableCopy: false,
        DisableInactiveMessages: false,
+       UserCanNotWriteRelative: true,
 
        _appLoadedConditions: {
                doclayerinit: false,
@@ -67,6 +68,7 @@ L.Map.WOPI = L.Handler.extend({
                this.DisableExport = !!wopiInfo['DisableExport'];
                this.DisableCopy = !!wopiInfo['DisableCopy'];
                this.DisableInactiveMessages = 
!!wopiInfo['DisableInactiveMessages'];
+               this.UserCanNotWriteRelative = 
!!wopiInfo['UserCanNotWriteRelative'];
 
                this._map.fire('postMessage', {msgId: 'App_LoadingStatus', 
args: {Status: 'Frame_Ready'}});
        },
diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index 945e9f89..85042585 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -445,6 +445,7 @@ bool DocumentBroker::load(const 
std::shared_ptr<ClientSession>& session, const s
         wopiInfo->set("DisableExport", wopifileinfo->_disableExport);
         wopiInfo->set("DisableCopy", wopifileinfo->_disableCopy);
         wopiInfo->set("DisableInactiveMessages", 
wopifileinfo->_disableInactiveMessages);
+        wopiInfo->set("UserCanNotWriteRelative", 
wopifileinfo->_userCanNotWriteRelative);
 
         std::ostringstream ossWopiInfo;
         wopiInfo->stringify(ossWopiInfo);
diff --git a/wsd/Storage.cpp b/wsd/Storage.cpp
index 4d2ce0c5..14482b0c 100644
--- a/wsd/Storage.cpp
+++ b/wsd/Storage.cpp
@@ -552,6 +552,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> 
WopiStorage::getWOPIFileInfo(const Au
     bool disableCopy = false;
     bool disableInactiveMessages = false;
     std::string lastModifiedTime;
+    bool userCanNotWriteRelative = true;
 
     LOG_DBG("WOPI::CheckFileInfo returned: " << resMsg << ". Call duration: " 
<< callDuration.count() << "s");
     Poco::JSON::Object::Ptr object;
@@ -575,6 +576,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> 
WopiStorage::getWOPIFileInfo(const Au
         getWOPIValue(object, "DisableCopy", disableCopy);
         getWOPIValue(object, "DisableInactiveMessages", 
disableInactiveMessages);
         getWOPIValue(object, "LastModifiedTime", lastModifiedTime);
+        getWOPIValue(object, "UserCanNotWriteRelative", 
userCanNotWriteRelative);
     }
     else
     {
@@ -585,7 +587,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> 
WopiStorage::getWOPIFileInfo(const Au
     const Poco::Timestamp modifiedTime = iso8601ToTimestamp(lastModifiedTime);
     _fileInfo = FileInfo({filename, ownerId, modifiedTime, size});
 
-    return std::unique_ptr<WopiStorage::WOPIFileInfo>(new 
WOPIFileInfo({userId, userName, userExtraInfo, watermarkText, canWrite, 
postMessageOrigin, hidePrintOption, hideSaveOption, hideExportOption, 
enableOwnerTermination, disablePrint, disableExport, disableCopy, 
disableInactiveMessages, callDuration}));
+    return std::unique_ptr<WopiStorage::WOPIFileInfo>(new 
WOPIFileInfo({userId, userName, userExtraInfo, watermarkText, canWrite, 
postMessageOrigin, hidePrintOption, hideSaveOption, hideExportOption, 
enableOwnerTermination, disablePrint, disableExport, disableCopy, 
disableInactiveMessages, userCanNotWriteRelative, callDuration}));
 }
 
 /// uri format: http://server/<...>/wopi*/files/<id>/content
diff --git a/wsd/Storage.hpp b/wsd/Storage.hpp
index 12462b47..57fc9ad4 100644
--- a/wsd/Storage.hpp
+++ b/wsd/Storage.hpp
@@ -223,6 +223,7 @@ public:
                      const bool disableExport,
                      const bool disableCopy,
                      const bool disableInactiveMessages,
+                     const bool userCanNotWriteRelative,
                      const std::chrono::duration<double> callDuration)
             : _userid(userid),
               _username(username),
@@ -237,6 +238,7 @@ public:
               _disableExport(disableExport),
               _disableCopy(disableCopy),
               _disableInactiveMessages(disableInactiveMessages),
+              _userCanNotWriteRelative(userCanNotWriteRelative),
               _callDuration(callDuration)
             {
                 _userExtraInfo = userExtraInfo;
@@ -270,6 +272,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;
+        /// If set to false, users can access the save-as functionality
+        bool _userCanNotWriteRelative;
         /// Time it took to call WOPI's CheckFileInfo
         std::chrono::duration<double> _callDuration;
     };
commit b5c6a84d383a1f596d8b8bec63577ca3bde163a6
Author: Aditya Dewan <iit2015...@iiita.ac.in>
Date:   Thu Aug 10 04:32:03 2017 +0530

    'Save As' feature in the UI
    
    (partially cherry picked from commit 
c3711a4375ec15a25b47cd62c8137f57145dbef5)
    
    Change-Id: Ic4c80f4c4b54944143682c25a5878c1336787b27
    Reviewed-on: https://gerrit.libreoffice.org/40946
    Reviewed-by: pranavk <pran...@collabora.co.uk>
    Tested-by: pranavk <pran...@collabora.co.uk>

diff --git a/loleaflet/reference.html b/loleaflet/reference.html
index ddb9a47a..f87fa773 100644
--- a/loleaflet/reference.html
+++ b/loleaflet/reference.html
@@ -2849,7 +2849,6 @@ Editor to WOPI host
                export of the document.
                </td>
        </tr>
-
 </table>
 
 <h3 id="loleaflet-postmessage-sessions">Session Management</h3>
@@ -2914,6 +2913,18 @@ WOPI host to editor
                </td>
        </tr>
        <tr>
+               <td><code><b>Action_SaveAs</b></code></td>
+               <td><code>
+                   <nobr>Name: &lt;String&gt;</nobr>
+                   <nobr>Path: &lt;String&gt;</nobr>
+               </code></td>
+               <td>Creates copy of the document with given Name.<br/>
+               <code>Name</code> is the requested name for the new file.<br/>
+               <code>Path</code> is the relative path in the WOPI host file 
system where the
+               user wants the new file to be saved.<br/>
+               </td>
+       </tr>
+       <tr>
                <td><code><b>Action_Print</b></code></td>
                <td><code>
                </code></td>
@@ -3036,6 +3047,15 @@ Editor to WOPI host
                  via <code>Insert_Button</code> API above is clicked.
                </td>
        </tr>
+       <tr>
+               <td><code><b>UI_SaveAs</b></code></td>
+               <td></td>
+               <td>
+               Requests WOPI host to create appropriate UI, so that the user 
can choose
+               path and File name for creating a copy of the current file.
+               Response to this query is sent via <code>Action_SaveAs</code> 
message.
+               </td>
+       </tr>
 </table>
 
 <h2 id="marker">Marker</h2>
diff --git a/loleaflet/src/control/Control.Menubar.js 
b/loleaflet/src/control/Control.Menubar.js
index 6c7afaac..1a9abc2e 100644
--- a/loleaflet/src/control/Control.Menubar.js
+++ b/loleaflet/src/control/Control.Menubar.js
@@ -16,6 +16,7 @@ L.Control.Menubar = L.Control.extend({
                text:  [
                        {name: _('File'), id: 'file', type: 'menu', menu: [
                                {name: _('Save'), id: 'save', type: 'action'},
+                               {name: _('Save As'), id: 'saveas', type: 
'action'},
                                {name: _('Print'), id: 'print', type: 'action'},
                                {name: _('See revision history'), id: 
'rev-history', type: 'action'},
                                {name: _('Download as'), id: 'downloadas', 
type: 'menu', menu: [
@@ -491,6 +492,8 @@ L.Control.Menubar = L.Control.extend({
                var id = $(item).data('id');
                if (id === 'save') {
                        map.save(true, true);
+               } else if (id === 'saveas') {
+                       map.fire('postMessage', {msgId: 'UI_SaveAs'});
                } else if (id === 'print') {
                        map.print();
                } else if (id.startsWith('downloadas-')) {
diff --git a/loleaflet/src/core/Socket.js b/loleaflet/src/core/Socket.js
index 5e6b3819..e3c549b8 100644
--- a/loleaflet/src/core/Socket.js
+++ b/loleaflet/src/core/Socket.js
@@ -458,6 +458,9 @@ L.Socket = L.Class.extend({
 
                        return;
                }
+               else if (textMsg.startsWith('error:') && command.errorCmd === 
'saveas') {
+                       this._map.hideBusy();
+               }
                else if (textMsg.startsWith('error:') && command.errorCmd === 
'load') {
                        this.close();
 
@@ -555,6 +558,12 @@ L.Socket = L.Class.extend({
                                        ', last: ' + (command.rendercount - 
this._map._docLayer._debugRenderCount));
                        this._map._docLayer._debugRenderCount = 
command.rendercount;
                }
+               else if (textMsg.startsWith('saveas:')) {
+                       textMsg = (textMsg.substring(7)).trim();
+                       // var url = textMsg.substring(0, textMsg.indexOf(' '));
+                       // var fileName = textMsg.substring(textMsg.indexOf(' 
'));
+                       /// redirect or not?
+               }
                else if (textMsg.startsWith('statusindicator:')) {
                        //FIXME: We should get statusindicator when saving too, 
no?
                        this._map.showBusy(_('Connecting...'), false);
diff --git a/loleaflet/src/map/handler/Map.WOPI.js 
b/loleaflet/src/map/handler/Map.WOPI.js
index acc999b8..a7bbcb8c 100644
--- a/loleaflet/src/map/handler/Map.WOPI.js
+++ b/loleaflet/src/map/handler/Map.WOPI.js
@@ -208,11 +208,21 @@ L.Map.WOPI = L.Handler.extend({
 
                        this._postMessage({msgId: 'Get_Export_Formats_Resp', 
args: exportFormatsResp});
                }
+               else if (msg.MessageId === 'Action_SaveAs') {
+                       /* TODO
+                       if (msg.Values) {
+                               if (msg.Values.name === null || msg.Values.name 
=== undefined) {
+                                       msg.Values.name = '';
+                               }
+                               this.showBusy(_('Creating copy...'), false);
+                               map.saveAs(msg.Values.name, msg.Values.path);
+                       }
+                       */
+               }
        },
 
        _postMessage: function(e) {
                if (!this.enabled) { return; }
-
                var msgId = e.msgId;
                var values = e.args || {};
                if (!!this.PostMessageOrigin && window.parent !== window.self) {
@@ -229,7 +239,6 @@ L.Map.WOPI = L.Handler.extend({
                                'SendTime': Date.now(),
                                'Values': values
                        };
-
                        window.parent.postMessage(JSON.stringify(msg), 
this.PostMessageOrigin);
                }
        }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to