[Libreoffice-commits] online.git: Branch 'distro/collabora/collabora-online-cd' - loleaflet/admin.strings.js loleaflet/dist loleaflet/src wsd/Admin.cpp wsd/Admin.hpp wsd/AdminModel.cpp wsd/AdminModel.hpp wsd/DocumentBroker.cpp wsd/DocumentBroker.hpp

Aditya Dewan iit2015097 at iiita.ac.in
Fri Jul 7 16:38:16 UTC 2017


 loleaflet/admin.strings.js                 |    1 +
 loleaflet/dist/admin/admin.html            |    1 +
 loleaflet/src/admin/AdminSocketOverview.js |   23 +++++++++++++++++++++--
 wsd/Admin.cpp                              |    5 +++++
 wsd/Admin.hpp                              |    1 +
 wsd/AdminModel.cpp                         |   19 +++++++++++++++++++
 wsd/AdminModel.hpp                         |    6 ++++++
 wsd/DocumentBroker.cpp                     |   10 +++++++---
 wsd/DocumentBroker.hpp                     |    1 -
 9 files changed, 61 insertions(+), 6 deletions(-)

New commits:
commit 32b757989ba64ab8da509c8c37274cfdfa65bc87
Author: Aditya Dewan <iit2015097 at iiita.ac.in>
Date:   Fri May 12 19:29:01 2017 +0530

    tdf#107752 admin console: indicating whether a document is modified.
    
    Change-Id: I6055a601c1dd3b5e9700ef75d7c07d7e0b13d663
    (cherry picked from commit 9db39ce741604b24a43c08d0db6e7e641a42d19d)
    Reviewed-on: https://gerrit.libreoffice.org/39701
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
    Tested-by: Michael Meeks <michael.meeks at collabora.com>

diff --git a/loleaflet/admin.strings.js b/loleaflet/admin.strings.js
index fcfb574a..6a5e2d39 100644
--- a/loleaflet/admin.strings.js
+++ b/loleaflet/admin.strings.js
@@ -17,6 +17,7 @@ l10nstrings.strDocument = _('Document');
 l10nstrings.strNumberOfViews = _('Number of views');
 l10nstrings.strElapsedTime = _('Elapsed time');
 l10nstrings.strIdleTime = _('Idle time');
+l10nstrings.strModified = _('Modified');
 l10nstrings.strKill = _('Kill');
 l10nstrings.strGraphs = _('Graphs');
 l10nstrings.strSave = _('Save');
diff --git a/loleaflet/dist/admin/admin.html b/loleaflet/dist/admin/admin.html
index ac68b753..59e63507 100644
--- a/loleaflet/dist/admin/admin.html
+++ b/loleaflet/dist/admin/admin.html
@@ -89,6 +89,7 @@
 		  <th><script>document.write(l10nstrings.strMemoryConsumed)</script></th>
 		  <th><script>document.write(l10nstrings.strElapsedTime)</script></th>
 		  <th><script>document.write(l10nstrings.strIdleTime)</script></th>
+		  <th><script>document.write(l10nstrings.strModified)</script></th>
 		</tr>
 	      </thead>
 	      <tbody id="doclist">
diff --git a/loleaflet/src/admin/AdminSocketOverview.js b/loleaflet/src/admin/AdminSocketOverview.js
index 96c29a0b..b1070fcd 100644
--- a/loleaflet/src/admin/AdminSocketOverview.js
+++ b/loleaflet/src/admin/AdminSocketOverview.js
@@ -23,7 +23,7 @@ var AdminSocketOverview = AdminSocketBase.extend({
 		this.base.call(this);
 
 		this.socket.send('documents');
-		this.socket.send('subscribe adddoc rmdoc resetidle propchange');
+		this.socket.send('subscribe adddoc rmdoc resetidle propchange modifications');
 
 		this._getBasicStats();
 		var socketOverview = this;
@@ -101,7 +101,8 @@ var AdminSocketOverview = AdminSocketBase.extend({
 				sMem = docProps['memory'];
 				sDocTime = docProps['elapsedTime'];
 				sDocIdle = docProps['idleTime'];
-				userListJson = docProps['views']
+				modified = docProps['modified'];
+				userListJson = docProps['views'];
 
 				$doc = $('#doc' + sPid);
 				$rowContainer = $(document.createElement('tr')).attr('id', 'doc' + sPid);
@@ -137,6 +138,11 @@ var AdminSocketOverview = AdminSocketBase.extend({
 									      .val(parseInt(sDocIdle))
 									      .text(Util.humanizeSecs(sDocIdle));
 				$rowContainer.append($docIdle);
+
+				$mod = $(document.createElement('td')).attr('id', 'mod' + sPid)
+										  .text(modified);
+				$rowContainer.append($mod);
+
 				$('#doclist').append($rowContainer);
 			}
 		}
@@ -187,6 +193,10 @@ var AdminSocketOverview = AdminSocketBase.extend({
 					                                      .text(Util.humanizeSecs(0));
 				$rowContainer.append($docIdle);
 
+				$mod = $(document.createElement('td')).attr('id', 'mod' + sPid)
+										  .text('');
+				$rowContainer.append($mod);
+
 				$('#doclist').append($rowContainer);
 
 				$a = $(document.getElementById('active_docs_count'));
@@ -255,6 +265,15 @@ var AdminSocketOverview = AdminSocketBase.extend({
 				}
 			}
 		}
+		else if (textMsg.startsWith('modifications')) {
+			textMsg = textMsg.substring('modifications'.length);
+			docProps = textMsg.trim().split(' ');
+			sPid = docProps[0];
+			value = docProps[1];
+
+			$mod = $(document.getElementById('mod' + sPid));
+			$mod.text(value);
+		}
 	},
 
 	onSocketClose: function() {
diff --git a/wsd/Admin.cpp b/wsd/Admin.cpp
index afcc9cf8..5153586d 100644
--- a/wsd/Admin.cpp
+++ b/wsd/Admin.cpp
@@ -345,6 +345,11 @@ void Admin::pollingThread()
     }
 }
 
+void Admin::modificationAlert(const std::string& dockey, Poco::Process::PID pid, bool value){
+    addCallback([this, dockey, pid, value]
+                { _model.modificationAlert(dockey, pid, value); });
+}
+
 void Admin::addDoc(const std::string& docKey, Poco::Process::PID pid, const std::string& filename, const std::string& sessionId, const std::string& userName)
 {
     addCallback([this, docKey, pid, filename, sessionId, userName]
diff --git a/wsd/Admin.hpp b/wsd/Admin.hpp
index d04fa543..f9d8bb6a 100644
--- a/wsd/Admin.hpp
+++ b/wsd/Admin.hpp
@@ -71,6 +71,7 @@ public:
 
     unsigned getTotalMemoryUsage();
 
+    void modificationAlert(const std::string& dockey, Poco::Process::PID pid, bool value);
     /// Update the Admin Model.
     void update(const std::string& message);
 
diff --git a/wsd/AdminModel.cpp b/wsd/AdminModel.cpp
index 2d3671e8..dcb8279f 100644
--- a/wsd/AdminModel.cpp
+++ b/wsd/AdminModel.cpp
@@ -274,6 +274,24 @@ void AdminModel::notify(const std::string& message)
     }
 }
 
+void AdminModel::modificationAlert(const std::string& docKey, Poco::Process::PID pid, bool value)
+{
+    assertCorrectThread();
+
+    auto doc = _documents.find(docKey);
+    if(doc != _documents.end())
+    {
+        doc->second.setModified(value);
+    }
+
+    std::ostringstream oss;
+    oss << "modifications "
+        << pid << ' '
+        << (value?"Yes":"No");
+
+    notify(oss.str());
+}
+
 void AdminModel::addDocument(const std::string& docKey, Poco::Process::PID pid,
                              const std::string& filename, const std::string& sessionId,
                              const std::string& userName)
@@ -429,6 +447,7 @@ std::string AdminModel::getDocuments() const
                 << "\"memory\"" << ':' << it.second.getMemoryDirty() << ','
                 << "\"elapsedTime\"" << ':' << it.second.getElapsedTime() << ','
                 << "\"idleTime\"" << ':' << it.second.getIdleTime() << ','
+                << "\"modified\"" << ':' << '"' << (it.second.getModifiedStatus() ? "Yes" : "No") << '"' << ','
                 << "\"views\"" << ':' << '[';
             viewers = it.second.getViews();
             std::string separator = "";
diff --git a/wsd/AdminModel.hpp b/wsd/AdminModel.hpp
index 3748e7ba..5445224b 100644
--- a/wsd/AdminModel.hpp
+++ b/wsd/AdminModel.hpp
@@ -81,7 +81,11 @@ public:
     bool updateMemoryDirty(int dirty);
     int getMemoryDirty() const { return _memoryDirty; }
 
+    void setModified(bool value) { _isModified = value; }
+    bool getModifiedStatus() const { return _isModified; }
+
 private:
+    bool _isModified;
     const std::string _docKey;
     const Poco::Process::PID _pid;
     /// SessionId mapping to View object
@@ -170,6 +174,8 @@ public:
 
     void unsubscribe(int sessionId, const std::string& command);
 
+    void modificationAlert(const std::string& docKey, Poco::Process::PID pid, bool value);
+
     void clearMemStats() { _memStats.clear(); }
 
     void clearCpuStats() { _cpuStats.clear(); }
diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index 1c03ab6a..bd506fc2 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -606,8 +606,7 @@ bool DocumentBroker::saveToStorageInternal(const std::string& sessionId,
     StorageBase::SaveResult storageSaveResult = _storage->saveLocalFileToStorage(accessToken);
     if (storageSaveResult == StorageBase::SaveResult::OK)
     {
-        _isModified = false;
-        _tileCache->setUnsavedChanges(false);
+        setModified(false);
         _lastFileModifiedTime = newFileModifiedTime;
         _tileCache->saveLastModified(_lastFileModifiedTime);
         _lastSaveTime = std::chrono::steady_clock::now();
@@ -1244,8 +1243,13 @@ void DocumentBroker::destroyIfLastEditor(const std::string& id)
 
 void DocumentBroker::setModified(const bool value)
 {
+    if(_isModified != value)
+    {
+        _isModified = value;
+        Admin::instance().modificationAlert(_docKey, getPid(), value);
+    }
+
     _tileCache->setUnsavedChanges(value);
-    _isModified = value;
 }
 
 bool DocumentBroker::forwardToChild(const std::string& viewId, const std::string& message)
diff --git a/wsd/DocumentBroker.hpp b/wsd/DocumentBroker.hpp
index 23b699e4..27d525c0 100644
--- a/wsd/DocumentBroker.hpp
+++ b/wsd/DocumentBroker.hpp
@@ -241,7 +241,6 @@ public:
     bool saveToStorage(const std::string& sesionId, bool success, const std::string& result = "");
     bool isModified() const { return _isModified; }
     void setModified(const bool value);
-
     /// Save the document if the document is modified.
     /// @param force when true, will force saving if there
     /// has been any recent activity after the last save.


More information about the Libreoffice-commits mailing list