[Libreoffice-commits] online.git: 2 commits - loleaflet/dist loolwsd/ChildSession.cpp loolwsd/ChildSession.hpp loolwsd/ClientSession.cpp loolwsd/ClientSession.hpp loolwsd/LOOLKit.cpp loolwsd/LOOLSession.cpp loolwsd/LOOLSession.hpp loolwsd/LOOLWSD.cpp
Pranav Kant
pranavk at collabora.co.uk
Tue Aug 30 07:45:46 UTC 2016
loleaflet/dist/toolbar/toolbar.js | 23 ++++++++++++++++++++++-
loolwsd/ChildSession.cpp | 2 +-
loolwsd/ChildSession.hpp | 1 +
loolwsd/ClientSession.cpp | 3 +++
loolwsd/ClientSession.hpp | 2 ++
loolwsd/LOOLKit.cpp | 34 ++++++++++++++++++++++++++++++++--
loolwsd/LOOLSession.cpp | 5 +++++
loolwsd/LOOLSession.hpp | 3 +++
loolwsd/LOOLWSD.cpp | 7 ++++++-
9 files changed, 75 insertions(+), 5 deletions(-)
New commits:
commit 67444eeb80ad521edcab905217c4777cdeacb8c2
Author: Pranav Kant <pranavk at collabora.co.uk>
Date: Mon Aug 29 23:38:01 2016 +0530
loolwsd: Pass sessions' usernames to core
Change-Id: I8c81c02fafd2cb9d0048729401e082bb422e299b
Reviewed-on: https://gerrit.libreoffice.org/28481
Reviewed-by: pranavk <pranavk at collabora.co.uk>
Tested-by: pranavk <pranavk at collabora.co.uk>
diff --git a/loolwsd/ChildSession.cpp b/loolwsd/ChildSession.cpp
index 3575fa9..67aae9c 100644
--- a/loolwsd/ChildSession.cpp
+++ b/loolwsd/ChildSession.cpp
@@ -317,7 +317,7 @@ bool ChildSession::loadDocument(const char * /*buffer*/, int /*length*/, StringT
std::unique_lock<std::recursive_mutex> lock(Mutex);
- _loKitDocument = _docManager.onLoad(getId(), _jailedFilePath, _docPassword, renderOpts, _haveDocPassword);
+ _loKitDocument = _docManager.onLoad(getId(), _jailedFilePath, _userName, _docPassword, renderOpts, _haveDocPassword);
if (!_loKitDocument)
{
Log::error("Failed to get LoKitDocument instance.");
diff --git a/loolwsd/ChildSession.hpp b/loolwsd/ChildSession.hpp
index 93fc820..649a7d3 100644
--- a/loolwsd/ChildSession.hpp
+++ b/loolwsd/ChildSession.hpp
@@ -30,6 +30,7 @@ public:
virtual
std::shared_ptr<lok::Document> onLoad(const std::string& sessionId,
const std::string& jailedFilePath,
+ const std::string& userName,
const std::string& docPassword,
const std::string& renderOpts,
const bool haveDocPassword) = 0;
diff --git a/loolwsd/ClientSession.cpp b/loolwsd/ClientSession.cpp
index c0607a9..c4ac637 100644
--- a/loolwsd/ClientSession.cpp
+++ b/loolwsd/ClientSession.cpp
@@ -228,6 +228,9 @@ bool ClientSession::loadDocument(const char* /*buffer*/, int /*length*/, StringT
oss << " url=" << _docBroker->getPublicUri().toString();
oss << " jail=" << _docBroker->getJailedUri().toString();
+ if (!_userName.empty())
+ oss << " author=" + _userName;
+
if (_loadPart >= 0)
oss << " part=" + std::to_string(_loadPart);
diff --git a/loolwsd/ClientSession.hpp b/loolwsd/ClientSession.hpp
index b6126a5..dc531c8 100644
--- a/loolwsd/ClientSession.hpp
+++ b/loolwsd/ClientSession.hpp
@@ -36,6 +36,8 @@ public:
void setPeer(const std::shared_ptr<PrisonerSession>& peer) { _peer = peer; }
bool shutdownPeer(Poco::UInt16 statusCode, const std::string& message);
+ void setUserName(const std::string& userName) { _userName = userName; }
+
/**
* Return the URL of the saved-as document when it's ready. If called
* before it's ready, the call blocks till then.
diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp
index 44b8b2c..6f4898d 100644
--- a/loolwsd/LOOLKit.cpp
+++ b/loolwsd/LOOLKit.cpp
@@ -26,11 +26,14 @@
#include <cstdlib>
#include <iostream>
#include <memory>
+#include <sstream>
#define LOK_USE_UNSTABLE_API
#include <LibreOfficeKit/LibreOfficeKitInit.h>
#include <Poco/Exception.h>
+#include <Poco/JSON/Object.h>
+#include <Poco/JSON/Parser.h>
#include <Poco/Net/HTTPClientSession.h>
#include <Poco/Net/HTTPRequest.h>
#include <Poco/Net/HTTPResponse.h>
@@ -66,6 +69,8 @@ typedef int (LokHookPreInit) (const char *install_path, const char *user_profil
using Poco::AutoPtr;
using Poco::Exception;
using Poco::File;
+using Poco::JSON::Object;
+using Poco::JSON::Parser;
using Poco::Net::HTTPClientSession;
using Poco::Net::HTTPRequest;
using Poco::Net::HTTPResponse;
@@ -841,6 +846,7 @@ private:
/// Load a document (or view) and register callbacks.
std::shared_ptr<lok::Document> onLoad(const std::string& sessionId,
const std::string& uri,
+ const std::string& userName,
const std::string& docPassword,
const std::string& renderOpts,
const bool haveDocPassword) override
@@ -859,7 +865,7 @@ private:
try
{
- load(sessionId, uri, docPassword, renderOpts, haveDocPassword);
+ load(sessionId, uri, userName, docPassword, renderOpts, haveDocPassword);
if (!_loKitDocument || !_loKitDocument->get())
{
return nullptr;
@@ -963,6 +969,7 @@ private:
std::shared_ptr<lok::Document> load(const std::string& sessionId,
const std::string& uri,
+ const std::string& userName,
const std::string& docPassword,
const std::string& renderOpts,
const bool haveDocPassword)
@@ -1064,9 +1071,32 @@ private:
}
}
+ Object::Ptr renderOptsObj = new Object();
+
+ // Fill the object with renderoptions, if any
+ if (!_renderOpts.empty()) {
+ Parser parser;
+ Poco::Dynamic::Var var = parser.parse(_renderOpts);
+ renderOptsObj = var.extract<Object::Ptr>();
+ }
+
+ // Append name of the user, if any, who opened the document to rendering options
+ if (!userName.empty())
+ {
+ Object::Ptr authorContainer = new Object();
+ Object::Ptr authorObj = new Object();
+ authorObj->set("type", "string");
+ authorObj->set("value", userName);
+
+ renderOptsObj->set(".uno:Author", authorObj);
+ }
+
+ std::ostringstream ossRenderOpts;
+ renderOptsObj->stringify(ossRenderOpts);
+
// initializeForRendering() should be called before
// registerCallback(), as the previous creates a new view in Impress.
- _loKitDocument->initializeForRendering(_renderOpts.c_str());
+ _loKitDocument->initializeForRendering(ossRenderOpts.str().c_str());
if (_multiView)
{
diff --git a/loolwsd/LOOLSession.cpp b/loolwsd/LOOLSession.cpp
index 091fd48..1e0686f 100644
--- a/loolwsd/LOOLSession.cpp
+++ b/loolwsd/LOOLSession.cpp
@@ -159,6 +159,11 @@ void LOOLSession::parseDocOptions(const StringTokenizer& tokens, int& part, std:
_jailedFilePath = tokens[i].substr(strlen("jail="));
++offset;
}
+ else if (tokens[i].find("author=") == 0)
+ {
+ _userName = tokens[i].substr(strlen("author="));
+ ++offset;
+ }
else if (tokens[i].find("timestamp=") == 0)
{
timestamp = tokens[i].substr(strlen("timestamp="));
diff --git a/loolwsd/LOOLSession.hpp b/loolwsd/LOOLSession.hpp
index 71d1e9f..0153339 100644
--- a/loolwsd/LOOLSession.hpp
+++ b/loolwsd/LOOLSession.hpp
@@ -175,6 +175,9 @@ protected:
/// Document options: a JSON string, containing options (rendering, also possibly load in the future).
std::string _docOptions;
+
+ /// Name of the user to whom the session belongs to
+ std::string _userName;
};
template<typename charT, typename traits>
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index 0de8e73..5749f9c 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -642,7 +642,7 @@ private:
// Validate the URI and Storage before moving on.
const auto fileinfo = docBroker->validate(uriPublic);
- Log::debug("Validated [" + uriPublic.toString() + "] requested with userid [" + fileinfo._userId + "] and username [" + fileinfo._userName + "]");
+ Log::debug("Validated [" + uriPublic.toString() + "]");
if (newDoc)
{
@@ -668,6 +668,11 @@ private:
// thread to pump them. This is to empty the queue when we get a "canceltiles" message.
auto queue = std::make_shared<BasicTileQueue>();
session = std::make_shared<ClientSession>(id, ws, docBroker, queue, isReadOnly);
+ if (!fileinfo._userName.empty())
+ {
+ Log::debug(uriPublic.toString() + " requested with username [" + fileinfo._userName + "]");
+ session->setUserName(fileinfo._userName);
+ }
// Request the child to connect to us and add this session.
auto sessionsCount = docBroker->addSession(session);
commit 3d29df6f998df339896b1355b6fa9186dcc60892
Author: Pranav Kant <pranavk at collabora.co.uk>
Date: Mon Aug 29 16:58:38 2016 +0530
loleaflet: Show a user list in bottom toolbar
Change-Id: I5aa87a6da3c6af9da0138bdfe51fbb707a47ba3e
Reviewed-on: https://gerrit.libreoffice.org/28480
Reviewed-by: pranavk <pranavk at collabora.co.uk>
Tested-by: pranavk <pranavk at collabora.co.uk>
diff --git a/loleaflet/dist/toolbar/toolbar.js b/loleaflet/dist/toolbar/toolbar.js
index a78d3fe..7637cf9 100644
--- a/loleaflet/dist/toolbar/toolbar.js
+++ b/loleaflet/dist/toolbar/toolbar.js
@@ -10,6 +10,17 @@ function onDelete(e) {
}
}
+function onChangeUserList() {
+ var usernames = [];
+ for (var viewid in map._viewInfo) {
+ usernames.push(map._viewInfo[viewid]);
+ }
+
+ $('#userlist').w2field('list', {
+ items: usernames
+ });
+}
+
function resizeToolbar() {
var hasMoreItems = false;
var toolbarUp = w2ui['toolbar-up'];
@@ -467,6 +478,8 @@ $(function () {
{type: 'html', id: 'right'},
{type: 'html', id: 'modifiedstatuslabel', html: '<div id="modifiedstatuslabel" class="loleaflet-font"></div>'},
{type: 'break'},
+ {type: 'html', id: 'userlistcontainer', html: '<div><label>Users: </label><input id="userlist" type="list" /></div>'},
+ {type: 'break'},
{type: 'button', id: 'prev', img: 'prev', hint: _('Previous page')},
{type: 'button', id: 'next', img: 'next', hint: _('Next page')},
{type: 'break', id: 'prevnextbreak'},
@@ -494,7 +507,6 @@ var formatButtons = {
var takeEditPopupMessage = '<div>' + _('You are viewing now.') + '<br/>' + _('Click here to take edit.') + '</div>';
var takeEditPopupTimeout = null;
-
function toggleButton(toolbar, state, command)
{
var checked;
@@ -1346,6 +1358,15 @@ map.on('statusindicator', function (e) {
}
});
+// TODO: Dynamically add/remove users from list
+map.on('addview', function(e) {
+ onChangeUserList();
+});
+
+map.on('removeview', function(e) {
+ onChangeUserList();
+});
+
$(window).resize(function() {
resizeToolbar();
});
More information about the Libreoffice-commits
mailing list