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

Aditya Dewan iit2015097 at iiita.ac.in
Thu Jul 6 07:18:27 UTC 2017


 loleaflet/admin.strings.js                   |    2 
 loleaflet/dist/admin/admin.html              |    1 
 loleaflet/dist/admin/bootstrap/dashboard.css |    7 -
 loleaflet/src/admin/AdminSocketOverview.js   |  146 ++++++++++++---------------
 wsd/Admin.cpp                                |    7 -
 wsd/Admin.hpp                                |    2 
 wsd/AdminModel.cpp                           |   14 +-
 wsd/AdminModel.hpp                           |    9 +
 wsd/DocumentBroker.cpp                       |    2 
 9 files changed, 91 insertions(+), 99 deletions(-)

New commits:
commit bc7fa9a8120a5fb94ff032785186f4453416ab3a
Author: Aditya Dewan <iit2015097 at iiita.ac.in>
Date:   Fri Jun 23 18:02:44 2017 +0530

    admin: convert document list to drop down
    
    Change-Id: I23635599b008fb0bfa694b4e73cb8f18f49c8ab7
    Reviewed-on: https://gerrit.libreoffice.org/39170
    Reviewed-by: pranavk <pranavk at collabora.co.uk>
    Tested-by: pranavk <pranavk at collabora.co.uk>

diff --git a/loleaflet/admin.strings.js b/loleaflet/admin.strings.js
index 26f232ba..21db2e5d 100644
--- a/loleaflet/admin.strings.js
+++ b/loleaflet/admin.strings.js
@@ -11,7 +11,7 @@ l10nstrings.strAnalytics = _('Analytics');
 l10nstrings.strHistory = _('History');
 l10nstrings.strDashboard = _('Dashboard');
 l10nstrings.strUsersOnline = _('Users online');
-l10nstrings.strUserName = _('Users Name');
+l10nstrings.strUserName = _('User Name');
 l10nstrings.strDocumentsOpened = _('Documents opened');
 l10nstrings.strDocumentNumber = _('Number of Documents');
 l10nstrings.strMemoryConsumed = _('Memory consumed');
diff --git a/loleaflet/dist/admin/admin.html b/loleaflet/dist/admin/admin.html
index 62be8e56..ddcf3e46 100644
--- a/loleaflet/dist/admin/admin.html
+++ b/loleaflet/dist/admin/admin.html
@@ -125,7 +125,6 @@
               <tr>
                 <th><script>document.write(l10nstrings.strUserName)</script></th>
                 <th><script>document.write(l10nstrings.strDocumentNumber)</script></th>
-                <th><script>document.write(l10nstrings.strDocumentsOpened)</script></th>
               </tr>
             </thead>
             <tbody id="userlist">
diff --git a/loleaflet/dist/admin/bootstrap/dashboard.css b/loleaflet/dist/admin/bootstrap/dashboard.css
index 95d62235..82fb2f5f 100644
--- a/loleaflet/dist/admin/bootstrap/dashboard.css
+++ b/loleaflet/dist/admin/bootstrap/dashboard.css
@@ -113,10 +113,10 @@ body {
   position: absolute;
   display: none;
 }
-.userContainer{
+.userContainer, .docContainer{
   position: absolute;
 }
-tr:hover .dropdown-menu{
+tr:hover .userContainer .dropdown-menu, td:hover .docContainer .dropdown-menu{
   display: block;
 }
 
@@ -136,9 +136,6 @@ tr:hover .dropdown-menu{
 .selected-view-opt{
   background-color: #f5f5f5;
 }
-.doc_list_label{
-  cursor: pointer;
-}
 
 /*
  * Graph view buttons
diff --git a/loleaflet/src/admin/AdminSocketOverview.js b/loleaflet/src/admin/AdminSocketOverview.js
index a0726e60..858d5f75 100644
--- a/loleaflet/src/admin/AdminSocketOverview.js
+++ b/loleaflet/src/admin/AdminSocketOverview.js
@@ -82,18 +82,6 @@ var AdminSocketOverview = AdminSocketBase.extend({
 			$('#docview').toggle();
 			$('#userview').toggle();
 		});
-
-		$('body').on('click', '#userlist .doc_list_label', function() {
-			if ($(this).text() === '🢃 list') {
-				docName = $($('.docentry', $(this).parent())[0]).text();
-				$user = $(this).parent().parent();
-				docCount = parseInt($('.doc_number', $user).text()) - 1 ;
-				$(this).text('🡺 ' + docName + ' and ' + String(docCount) + ' other docs');
-			}
-			else
-				$(this).text('🢃 list');
-			$('.docentry', $(this).parent()).toggle();
-		});
 	},
 
 	onSocketMessage: function(e) {
@@ -142,50 +130,54 @@ var AdminSocketOverview = AdminSocketBase.extend({
 					$listContainer.append($user);
 
 					sessionid = userListJson[j]['sessionid'];
-					encodedUName = userListJson[j]['userName'].replace(/ /g, '');
-					// this isn't the right way to do this, but we can't also use encode here. what should we do then.
+					UName = userListJson[j]['userName'];
+					encodedUId = encodeURI(userListJson[j]['userId']);
 
-					$userListRow = $('#usr' + encodedUName);
+					$userListRow = $(document.getElementById('usr' + encodedUId));
 
 					if ($userListRow.length == 0) {
 
-						$userListRow = $(document.createElement('tr')).attr('id', 'usr' + encodedUName);
+						$userListRow = $(document.createElement('tr')).attr('id', 'usr' + encodedUId);
 
 						$uName = $(document.createElement('td')).text(userListJson[j]['userName']);
 						$userListRow.append($uName);
 
-						$noOfDocuments = $(document.createElement('td')).addClass('doc_number')
-																	.text('1');
-						$userListRow.append($noOfDocuments);
+						$number = $(document.createElement('div')).addClass('doc_number').attr('id', 'num' + encodedUId).text(1);
+						$noOfDocuments = $(document.createElement('td')).append($number);
+						// Document List
+						$docListContainer = $(document.createElement('div')).addClass('dropdown docContainer');
+						$docDropDown = $(document.createElement('ul')).addClass('dropdown-menu')
+												.attr('id', 'docListContainer_' + encodedUId);
+						$docListHeader = $(document.createElement('li')).addClass('dropdown-header')
+												.text(_('Documents'));
+						$name = $(document.createElement('a')).text(sName);
+						$docentry = $(document.createElement('li')).addClass('docentry')
+												.attr('id', sessionid + '_' + sPid)
+												.append($name);
+						$docDropDown.append($docListHeader);
+						$docDropDown.append($docentry);
+						$docListContainer.append($docDropDown);
+						$noOfDocuments.append($docListContainer);
 
-						$docList = $(document.createElement('td')).addClass('doc_list');
-						$docLabel = $(document.createElement('div')).addClass('doc_list_label');
-						$docentry = $(document.createElement('div')).addClass('docentry')
-																.attr('id', sessionid + '_' + sPid)
-																.text(sName);
-						$docList.append($docLabel);
-						$docList.append($docentry);
-						$userListRow.append($docList);
+						$userListRow.append($noOfDocuments);
 
 						$('#userlist').append($userListRow);
 					}
 					else {
 						userListChildren = $userListRow[0].childNodes;
 
-						docCount = parseInt($(userListChildren[1]).text())
-						$(userListChildren[1]).text(docCount + 1);
-
-						$docLabel = $(userListChildren[2].getElementsByClassName('doc_list_label')[0]);
-						$docLabel.text('🡺 ' + sName + ' and ' + String(docCount) + ' other docs');
+						var $number = $(document.getElementById('num' + encodedUId));
+						docCount = parseInt($number.text())
+						$number.text(docCount + 1);
 
-						$('.docentry', $('userListChildren[2]').hide());
+						$docParent = $(userListChildren[1]);
 
-						$docentry = $(document.createElement('div')).addClass('docentry')
-																.attr('id', sessionid + '_' + sPid)
-																.text(sName);
+						$name = $(document.createElement('a')).text(sName);
+						$docentry = $(document.createElement('li')).addClass('docentry')
+												.attr('id', sessionid + '_' + sPid)
+												.append($name);
 
-						$(userListChildren[2]).append($docentry);
-						$('.docentry', $userListRow).css('display', 'none');
+						$(document.getElementById('docListContainer_' + encodedUId)).append($docentry);
 					}
 				}
 				$userContainer.append($listContainer);
@@ -235,7 +227,8 @@ var AdminSocketOverview = AdminSocketBase.extend({
 			sName = decodeURI(docProps[1]);
 			sessionid = docProps[2];
 			uName = decodeURI(docProps[3]);
-			sMem = docProps[4];
+			encodedUId = encodeURI(docProps[4]);
+			sMem = docProps[5];
 
 			$doc = $('#doc' + sPid);
 			if ($doc.length === 0) {
@@ -246,7 +239,7 @@ var AdminSocketOverview = AdminSocketBase.extend({
 										  .addClass('userContainer dropdown');
 				$listContainer = $(document.createElement('ul')).addClass('dropdown-menu');
 				$listLabel = $(document.createElement('li')).addClass('dropdown-header')
-															.text('Users');
+													.text('Users');
 				$listContainer.append($listLabel);
 				$userContainer.append($listContainer);
 				$pid.append($userContainer);
@@ -299,46 +292,51 @@ var AdminSocketOverview = AdminSocketBase.extend({
 			nTotalViews = parseInt($a.text());
 			$a.text(nTotalViews + 1);
 
+			$userListRow = $(document.getElementById('usr' + encodedUId));
+			if ($userListRow.length === 0) {
 
-			encodedUName = uName.replace(/ /g, '');
-			$user = $('#usr' + encodedUName);
-			if ($user.length === 0) {
-
-				$userListRow = $(document.createElement('tr')).attr('id', 'usr' + encodedUName);
+				$userListRow = $(document.createElement('tr')).attr('id', 'usr' + encodedUId);
 
 				$uName = $(document.createElement('td')).text(uName);
 				$userListRow.append($uName);
 
-				$noOfDocuments = $(document.createElement('td')).addClass('doc_number')
-															.text('1');
-				$userListRow.append($noOfDocuments);
+				$number = $(document.createElement('div')).addClass('doc_number').attr('id', 'num' + encodedUId).text(1);
+				$noOfDocuments = $(document.createElement('td')).append($number);
+
+				// Document List
+				$docListContainer = $(document.createElement('div')).addClass('dropdown docContainer');
+				$docDropDown = $(document.createElement('ul')).addClass('dropdown-menu')
+										.attr('id', 'docListContainer_' + encodedUId);
+				$docListHeader = $(document.createElement('li')).addClass('dropdown-header')
+										.text(_('Documents'));
+				$name = $(document.createElement('a')).text(sName);
+				$docentry = $(document.createElement('li')).addClass('docentry')
+										.attr('id', sessionid + '_' + sPid)
+										.append($name);
+				$docDropDown.append($docListHeader);
+				$docDropDown.append($docentry);
+				$docListContainer.append($docDropDown);
+				$noOfDocuments.append($docListContainer);
 
-				$docList = $(document.createElement('td')).addClass('doc_list');
-				$docLabel = $(document.createElement('div')).addClass('doc_list_label');
-				$docentry = $(document.createElement('div')).addClass('docentry')
-														.attr('id', sessionid + '_' + sPid)
-														.text(sName);
-				$docList.append($docLabel);
-				$docList.append($docentry);
-				$userListRow.append($docList);
+				$userListRow.append($noOfDocuments);
 
 				$('#userlist').append($userListRow);
 			}
 			else {
-				userListChildren = $user[0].childNodes;
+				userListChildren = $userListRow[0].childNodes;
 
-				docCount = parseInt($(userListChildren[1]).text())
-				$(userListChildren[1]).text(docCount + 1);
+				var $number = $(document.getElementById('num' + encodedUId));
+				docCount = parseInt($number.text())
+				$number.text(docCount + 1);
 
-				$docLabel = $(userListChildren[2].getElementsByClassName('doc_list_label')[0]);
-				$docLabel.text('🡺 ' + sName + ' and ' + String(docCount) + ' other docs');
+				$docParent = $(userListChildren[1]);
 
-				$docentry = $(document.createElement('div')).addClass('docentry')
-														.attr('id', sessionid + '_' + sPid)
-														.text(sName);
+				$name = $(document.createElement('a')).text(sName);
+				$docentry = $(document.createElement('li')).addClass('docentry')
+										.attr('id', sessionid + '_' + sPid)
+										.append($name);
 
-				$(userListChildren[2]).append($docentry);
-				$('.docentry', $(userListChildren[2])).hide();
+				$(document.getElementById('docListContainer_' + encodedUId)).append($docentry);
 			}
 		}
 		else if (textMsg.startsWith('total_mem') ||
@@ -380,24 +378,14 @@ var AdminSocketOverview = AdminSocketBase.extend({
 			}
 
 			$docEntry = $('#' + sessionid + '_' + sPid);
-			$user = $docEntry.parent().parent();
-			$nDocs = $('.doc_number', $user);
+			$user = $docEntry.parent().parent().parent();
+			$nDocs = $('.doc_number', $user.parent());
 			docCount = parseInt($nDocs.text());
 			if (docCount == 1) {
-				$user.remove();
-			}
-			else if (docCount == 2) {
-				$('.doc_list_label', $user).text('');
-				$('.docentry', $user).show();
-				$nDocs.text(docCount - 1);
-				$docEntry.remove();
+				$user.parent().remove();
 			}
 			else {
-				$parent = $docEntry.parent()
 				$docEntry.remove();
-				$child = $('.docentry', $parent);
-				$('.doc_list_label', $user).text('🡺 ' + $($child[0]).text() + ' and ' + String(docCount - 2) + ' other docs')
-				$('.docentry', $user).hide();
 				$nDocs.text(docCount - 1);
 			}
 		}
diff --git a/wsd/Admin.cpp b/wsd/Admin.cpp
index deeaecc0..04a20ad5 100644
--- a/wsd/Admin.cpp
+++ b/wsd/Admin.cpp
@@ -415,10 +415,11 @@ void Admin::modificationAlert(const std::string& dockey, Poco::Process::PID pid,
                 { _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)
+void Admin::addDoc(const std::string& docKey, Poco::Process::PID pid, const std::string& filename,
+        const std::string& sessionId, const std::string& userName, const std::string& userId)
 {
-    addCallback([this, docKey, pid, filename, sessionId, userName]
-                 { _model.addDocument(docKey, pid, filename, sessionId, userName); });
+    addCallback([this, docKey, pid, filename, sessionId, userName, userId]
+                 { _model.addDocument(docKey, pid, filename, sessionId, userName, userId); });
 }
 
 void Admin::rmDoc(const std::string& docKey, const std::string& sessionId)
diff --git a/wsd/Admin.hpp b/wsd/Admin.hpp
index 18acab4a..d5b62cb8 100644
--- a/wsd/Admin.hpp
+++ b/wsd/Admin.hpp
@@ -77,7 +77,7 @@ public:
     void update(const std::string& message);
 
     /// Calls with same pid will increment view count, if pid already exists
-    void addDoc(const std::string& docKey, Poco::Process::PID pid, const std::string& filename, const std::string& sessionId, const std::string& userName);
+    void addDoc(const std::string& docKey, Poco::Process::PID pid, const std::string& filename, const std::string& sessionId, const std::string& userName, const std::string& userId);
 
     /// Decrement view count till becomes zero after which doc is removed
     void rmDoc(const std::string& docKey, const std::string& sessionId);
diff --git a/wsd/AdminModel.cpp b/wsd/AdminModel.cpp
index 26097fd0..440de191 100644
--- a/wsd/AdminModel.cpp
+++ b/wsd/AdminModel.cpp
@@ -26,9 +26,9 @@
 #include "Unit.hpp"
 #include "Util.hpp"
 
-void Document::addView(const std::string& sessionId, const std::string& userName)
+void Document::addView(const std::string& sessionId, const std::string& userName, const std::string& userId)
 {
-    const auto ret = _views.emplace(sessionId, View(sessionId, userName));
+    const auto ret = _views.emplace(sessionId, View(sessionId, userName, userId));
     if (!ret.second)
     {
         LOG_WRN("View with SessionID [" << sessionId << "] already exists.");
@@ -464,17 +464,19 @@ void AdminModel::modificationAlert(const std::string& docKey, Poco::Process::PID
 
 void AdminModel::addDocument(const std::string& docKey, Poco::Process::PID pid,
                              const std::string& filename, const std::string& sessionId,
-                             const std::string& userName)
+                             const std::string& userName, const std::string& userId)
 {
     assertCorrectThread();
 
     const auto ret = _documents.emplace(docKey, Document(docKey, pid, filename));
     ret.first->second.takeSnapshot();
-    ret.first->second.addView(sessionId, userName);
+    ret.first->second.addView(sessionId, userName, userId);
     LOG_DBG("Added admin document [" << docKey << "].");
 
     std::string encodedUsername;
     std::string encodedFilename;
+    std::string encodedUserId;
+    Poco::URI::encode(userId, " ", encodedUserId);
     Poco::URI::encode(filename, " ", encodedFilename);
     Poco::URI::encode(userName, " ", encodedUsername);
 
@@ -484,7 +486,8 @@ void AdminModel::addDocument(const std::string& docKey, Poco::Process::PID pid,
         << pid << ' '
         << encodedFilename << ' '
         << sessionId << ' '
-        << encodedUsername << ' ';
+        << encodedUsername << ' '
+        << encodedUserId << ' ';
 
     // We have to wait until the kit sends us its PSS.
     // Here we guestimate until we get an update.
@@ -656,6 +659,7 @@ std::string AdminModel::getDocuments() const
                 if(!viewIt.second.isExpired()) {
                     oss << separator << '{'
                         << "\"userName\"" << ':' << '"' << viewIt.second.getUserName() << '"' << ','
+                        << "\"userId\"" << ':' << '"' << viewIt.second.getUserId() << '"' << ','
                         << "\"sessionid\"" << ':' << '"' << viewIt.second.getSessionId() << '"' << '}';
                         separator = ',';
                 }
diff --git a/wsd/AdminModel.hpp b/wsd/AdminModel.hpp
index e9eed373..b217c2be 100644
--- a/wsd/AdminModel.hpp
+++ b/wsd/AdminModel.hpp
@@ -24,21 +24,24 @@
 class View
 {
 public:
-    View(const std::string& sessionId, const std::string& userName) :
+    View(const std::string& sessionId, const std::string& userName, const std::string& userId) :
         _sessionId(sessionId),
         _userName(userName),
+        _userId(userId),
         _start(std::time(nullptr))
     {
     }
 
     void expire() { _end = std::time(nullptr); }
     std::string getUserName() const { return _userName; }
+    std::string getUserId() const { return _userId; }
     std::string getSessionId() const { return _sessionId; }
     bool isExpired() const { return _end != 0 && std::time(nullptr) >= _end; }
 
 private:
     const std::string _sessionId;
     const std::string _userName;
+    const std::string _userId;
     const std::time_t _start;
     std::time_t _end = 0;
 };
@@ -80,7 +83,7 @@ public:
 
     std::time_t getIdleTime() const { return std::time(nullptr) - _lastActivity; }
 
-    void addView(const std::string& sessionId, const std::string& userName);
+    void addView(const std::string& sessionId, const std::string& userName, const std::string& userId);
 
     int expireView(const std::string& sessionId);
 
@@ -231,7 +234,7 @@ public:
 
     void notify(const std::string& message);
 
-    void addDocument(const std::string& docKey, Poco::Process::PID pid, const std::string& filename, const std::string& sessionId, const std::string& userName);
+    void addDocument(const std::string& docKey, Poco::Process::PID pid, const std::string& filename, const std::string& sessionId, const std::string& userName, const std::string& userId);
 
     void removeDocument(const std::string& docKey, const std::string& sessionId);
     void removeDocument(const std::string& docKey);
diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index 3be3375c..9af4ba4a 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -906,7 +906,7 @@ size_t DocumentBroker::addSessionInternal(const std::shared_ptr<ClientSession>&
     _childProcess->sendTextFrame(aMessage);
 
     // Tell the admin console about this new doc
-    Admin::instance().addDoc(_docKey, getPid(), getFilename(), id, session->getUserName());
+    Admin::instance().addDoc(_docKey, getPid(), getFilename(), id, session->getUserName(), session->getUserId());
 
     // Add and attach the session.
     _sessions.emplace(session->getId(), session);


More information about the Libreoffice-commits mailing list