[Libreoffice-commits] online.git: loolwsd/TileCache.cpp loolwsd/TileCache.hpp

Tor Lillqvist tml at collabora.com
Fri May 29 02:28:11 PDT 2015


 loolwsd/TileCache.cpp |   39 +++++++++++++++++++++++++++------------
 loolwsd/TileCache.hpp |    2 ++
 2 files changed, 29 insertions(+), 12 deletions(-)

New commits:
commit 4303f1ee38d87cff8b1561674d729d1839c4fad9
Author: Tor Lillqvist <tml at collabora.com>
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;
 };


More information about the Libreoffice-commits mailing list