loolwsd/TileCache.cpp | 39 +++++++++++++++++++++++++++------------ loolwsd/TileCache.hpp | 2 ++ 2 files changed, 29 insertions(+), 12 deletions(-)
New commits: commit 4303f1ee38d87cff8b1561674d729d1839c4fad9 Author: Tor Lillqvist <[email protected]> Date: Fri May 29 12:23:57 2015 +0300 Improve tile cache handling for file: documents Handle also documents specified with a file: URI. Move creating the modtime.txt file to the constructor of the TileCache object for the document. diff --git a/loolwsd/TileCache.cpp b/loolwsd/TileCache.cpp index 42b7f61..6622841 100644 --- a/loolwsd/TileCache.cpp +++ b/loolwsd/TileCache.cpp @@ -19,11 +19,13 @@ #include <Poco/DigestEngine.h> #include <Poco/DirectoryIterator.h> +#include <Poco/Exception.h> #include <Poco/File.h> #include <Poco/Path.h> #include <Poco/SHA1Engine.h> #include <Poco/StringTokenizer.h> #include <Poco/Timestamp.h> +#include <Poco/URI.h> #include "TileCache.hpp" @@ -32,20 +34,26 @@ using Poco::DirectoryIterator; using Poco::File; using Poco::SHA1Engine; using Poco::StringTokenizer; +using Poco::SyntaxException; using Poco::Timestamp; +using Poco::URI; TileCache::TileCache(const std::string& docURL) : _docURL(docURL) { File dir(cacheDirName()); - // TODO: Actually handle URLs (file: and http:), not file names. - if (dir.exists() && dir.isDirectory() && File(_docURL).exists() && File(_docURL).isFile()) + try { - if (getLastModified() != File(_docURL).getLastModified()) + URI uri(_docURL); + if (uri.getScheme() == "" || + uri.getScheme() == "file") { - dir.remove(true); - } + setupForFile(dir, uri.getPath()); + } + } + catch (SyntaxException& e) + { } } @@ -74,13 +82,6 @@ void TileCache::saveTile(int part, int width, int height, int tilePosX, int tile std::fstream outStream(fileName, std::ios::out); outStream.write(data, size); outStream.close(); - - // TODO: Actually handle URLs (file: and http:), not file names. - if (!File(_docURL).exists() || !File(_docURL).isFile()) - return; - std::fstream modTimeFile(dirName + "/modtime.txt", std::ios::out); - modTimeFile << File(_docURL).getLastModified().raw() << std::endl; - modTimeFile.close(); } std::string TileCache::getStatus() @@ -220,5 +221,19 @@ Timestamp TileCache::getLastModified() return result; } +void TileCache::setupForFile(File& cacheDir, const std::string& path) +{ + if (File(path).exists() && File(path).isFile()) + { + if (cacheDir.exists() && getLastModified() != File(path).getLastModified()) + { + cacheDir.remove(true); + } + cacheDir.createDirectories(); + std::fstream modTimeFile(cacheDir.path() + "/modtime.txt", std::ios::out); + modTimeFile << File(path).getLastModified().raw() << std::endl; + modTimeFile.close(); + } +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/loolwsd/TileCache.hpp b/loolwsd/TileCache.hpp index 21704a2..7c856b4 100644 --- a/loolwsd/TileCache.hpp +++ b/loolwsd/TileCache.hpp @@ -14,6 +14,7 @@ #include <memory> #include <string> +#include <Poco/File.h> #include <Poco/Timestamp.h> class TileCache @@ -38,6 +39,7 @@ private: std::string cacheFileName(int part, int width, int height, int tilePosX, int tilePosY, int tileWidth, int tileHeight); bool parseCacheFileName(std::string& fileName, int& part, int& width, int& height, int& tilePosX, int& tilePosY, int& tileWidth, int& tileHeight); Poco::Timestamp getLastModified(); + void setupForFile(Poco::File& cacheDir, const std::string& path); const std::string& _docURL; }; _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
