[Libreoffice-commits] online.git: loolwsd/DocumentBroker.cpp loolwsd/Storage.hpp loolwsd/TileCache.cpp loolwsd/TileCache.hpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Sat Mar 26 17:10:43 UTC 2016
loolwsd/DocumentBroker.cpp | 5 +-
loolwsd/Storage.hpp | 9 +++--
loolwsd/TileCache.cpp | 81 ++++++++++-----------------------------------
loolwsd/TileCache.hpp | 6 ---
4 files changed, 29 insertions(+), 72 deletions(-)
New commits:
commit b4a4c45a36b73368cacd989a4b240021afcddb35
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Sat Mar 26 10:42:15 2016 -0400
loolwsd: Storage gets last modified time and simplified TileCache construction
Change-Id: I4a7e7b941c136b59ffd7d935310d37d73ac4ec63
Reviewed-on: https://gerrit.libreoffice.org/23540
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loolwsd/DocumentBroker.cpp b/loolwsd/DocumentBroker.cpp
index 7ee2d50..d36998f 100644
--- a/loolwsd/DocumentBroker.cpp
+++ b/loolwsd/DocumentBroker.cpp
@@ -104,8 +104,9 @@ bool DocumentBroker::load(const std::string& jailId)
Log::info("jailPath: " + jailPath.toString() + ", jailRoot: " + jailRoot);
- const std::string timestamp = ""; //FIXME: Should come from load options.
- _tileCache.reset(new TileCache(_uriPublic.toString(), timestamp, _cacheRoot));
+ auto storage = createStorage("", "", _uriPublic);
+ const auto fileInfo = storage->getFileInfo(_uriPublic);
+ _tileCache.reset(new TileCache(_uriPublic.toString(), fileInfo.ModifiedTime, _cacheRoot));
_storage = createStorage(jailRoot, jailPath.toString(), _uriPublic);
diff --git a/loolwsd/Storage.hpp b/loolwsd/Storage.hpp
index f33084b..1f92541 100644
--- a/loolwsd/Storage.hpp
+++ b/loolwsd/Storage.hpp
@@ -33,6 +33,7 @@ public:
{
public:
std::string Filename;
+ Poco::Timestamp ModifiedTime;
size_t Size;
};
@@ -110,8 +111,9 @@ public:
const auto path = uri.getPath();
Log::debug("Getting info for local uri [" + uri.toString() + "], path [" + path + "].");
const auto filename = Poco::Path(path).getFileName();
+ const auto lastModified = Poco::File(path).getLastModified();
const auto size = Poco::File(path).getSize();
- return FileInfo({filename, size});
+ return FileInfo({filename, lastModified, size});
}
std::string loadStorageFileToLocal() override
@@ -227,7 +229,8 @@ public:
size = std::stoul (object->get("Size").toString(), nullptr, 0);
}
- return FileInfo({filename, size});
+ // WOPI doesn't support file last modified time.
+ return FileInfo({filename, Poco::Timestamp(), size});
}
/// uri format: http://server/<...>/wopi*/files/<id>/content
@@ -331,7 +334,7 @@ public:
Log::debug("Getting info for webdav uri [" + uri.toString() + "].");
(void)uri;
assert(!"Not Implemented!");
- return FileInfo({"bazinga", 0});
+ return FileInfo({"bazinga", Poco::Timestamp(), 0});
}
std::string loadStorageFileToLocal() override
diff --git a/loolwsd/TileCache.cpp b/loolwsd/TileCache.cpp
index 58d0900..bed7681 100644
--- a/loolwsd/TileCache.cpp
+++ b/loolwsd/TileCache.cpp
@@ -44,7 +44,7 @@ using Poco::URI;
using namespace LOOLProtocol;
TileCache::TileCache(const std::string& docURL,
- const std::string& timestamp,
+ const Poco::Timestamp& modifiedTime,
const std::string& rootCacheDir) :
_docURL(docURL),
_rootCacheDir(rootCacheDir),
@@ -54,7 +54,24 @@ TileCache::TileCache(const std::string& docURL,
_hasUnsavedChanges(false)
{
Log::info("TileCache ctor.");
- setup(timestamp);
+ const bool cleanEverything = (getLastModified() < modifiedTime);
+ if (cleanEverything)
+ {
+ // document changed externally, clean up everything
+ Util::removeFile(_rootCacheDir, true);
+ Log::info("Completely cleared cache: " + _rootCacheDir);
+ }
+ else
+ {
+ // remove only the Editing cache
+ Util::removeFile(_editCacheDir, true);
+ Log::info("Cleared the editing cache: " + _editCacheDir);
+ }
+
+ File cacheDir(_rootCacheDir);
+ cacheDir.createDirectories();
+
+ saveLastModified(modifiedTime);
}
TileCache::~TileCache()
@@ -374,64 +391,4 @@ void TileCache::saveLastModified(const Poco::Timestamp& timestamp)
modTimeFile.close();
}
-void TileCache::setup(const std::string& timestamp)
-{
- bool cleanEverything = true;
- std::string filePath;
- Timestamp lastModified;
-
- try
- {
- URI uri(_docURL);
- if (uri.getScheme() == "" ||
- uri.getScheme() == "file")
- {
- filePath = uri.getPath();
- }
- }
- catch (SyntaxException& e)
- {
- }
-
- if (!filePath.empty() && File(filePath).exists() && File(filePath).isFile())
- {
- // for files, always use the real path
- lastModified = File(filePath).getLastModified();
- cleanEverything = (getLastModified() < lastModified);
- }
- else if (!timestamp.empty())
- {
- // otherwise try the timestamp provided by the caller
- Timestamp::TimeVal lastTimeVal;
- std::istringstream(timestamp) >> lastTimeVal;
- lastModified = lastTimeVal;
- Log::info("Timestamp provided externally: " + timestamp);
-
- cleanEverything = (getLastModified() < Timestamp(lastModified));
- }
- else
- {
- // when no timestamp, and non-file, assume 'now'
- lastModified = Timestamp();
- }
-
- if (cleanEverything)
- {
- // document changed externally, clean up everything
- Util::removeFile(_rootCacheDir, true);
- Log::info("Completely cleared cache: " + _rootCacheDir);
- }
- else
- {
- // remove only the Editing cache
- Util::removeFile(_editCacheDir, true);
- Log::info("Cleared the editing cache: " + _editCacheDir);
- }
-
- File cacheDir(_rootCacheDir);
- cacheDir.createDirectories();
-
- saveLastModified(lastModified);
-}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/loolwsd/TileCache.hpp b/loolwsd/TileCache.hpp
index aad3e8d..bb25d62 100644
--- a/loolwsd/TileCache.hpp
+++ b/loolwsd/TileCache.hpp
@@ -34,7 +34,7 @@ public:
/// When the docURL is a non-file:// url, the timestamp has to be provided by the caller.
/// For file:// url's, it's ignored.
/// When it is missing for non-file:// url, it is assumed the document must be read, and no cached value used.
- TileCache(const std::string& docURL, const std::string& timestamp, const std::string& rootCacheDir);
+ TileCache(const std::string& docURL, const Poco::Timestamp& modifiedTime, const std::string& rootCacheDir);
~TileCache();
TileCache(const TileCache&) = delete;
@@ -82,10 +82,6 @@ private:
/// Store the timestamp to modtime.txt.
void saveLastModified(const Poco::Timestamp& timestamp);
- /// Create or cleanup the cache directory.
- /// For non-file:// protocols, the timestamp has to be provided externally.
- void setup(const std::string& timestamp);
-
private:
const std::string _docURL;
const std::string _rootCacheDir;
More information about the Libreoffice-commits
mailing list