From 1bd6e2f493e5ee49b81610c01c21da945996d371 Mon Sep 17 00:00:00 2001 From: shortcutme Date: Sun, 4 Sep 2016 17:43:30 +0200 Subject: [PATCH] Cache bad_files and optional hashfield in sites.json --- src/Content/ContentManager.py | 9 +++++++++ src/Site/Site.py | 16 ++++++++++++---- src/Site/SiteManager.py | 11 +++++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/Content/ContentManager.py b/src/Content/ContentManager.py index 4b4b7aa7..10935545 100644 --- a/src/Content/ContentManager.py +++ b/src/Content/ContentManager.py @@ -31,6 +31,15 @@ class ContentManager(object): self.loadContent(add_bad_files=False, delete_removed_files=False) self.site.settings["size"] = self.getTotalSize() + # Load hashfield cache + if "hashfield" in self.site.settings.get("cache", {}): + self.hashfield.fromstring(self.site.settings["cache"]["hashfield"].decode("base64")) + del self.site.settings["cache"]["hashfield"] + self.has_optional_files = True + elif self.getOptionalSize() > 0: + self.site.storage.updateBadFiles() # No hashfield cache created yet + self.has_optional_files = True + # Load content.json to self.content # Return: Changed files ["index.html", "data/messages.json"], Deleted files ["old.jpg"] def loadContent(self, content_inner_path="content.json", add_bad_files=True, delete_removed_files=True, load_includes=True, force=False): diff --git a/src/Site/Site.py b/src/Site/Site.py index 0cfc5e0d..8d9f3721 100644 --- a/src/Site/Site.py +++ b/src/Site/Site.py @@ -76,10 +76,18 @@ class Site(object): return "<%s>" % self.__str__() # Load site settings from data/sites.json - def loadSettings(self): - sites_settings = json.load(open("%s/sites.json" % config.data_dir)) - if self.address in sites_settings: - self.settings = sites_settings[self.address] + def loadSettings(self, settings=None): + if not settings: + settings = json.load(open("%s/sites.json" % config.data_dir)).get(self.address) + if settings: + self.settings = settings + if "cache" not in settings: + settings["cache"] = {} + self.bad_files = settings["cache"].get("bad_files", {}) + settings["cache"]["bad_files"] = {} + # Reset tries + for inner_path in self.bad_files: + self.bad_files[inner_path] = 1 else: self.settings = {"own": False, "serving": True, "permissions": [], "added": int(time.time())} # Default diff --git a/src/Site/SiteManager.py b/src/Site/SiteManager.py index aa96031f..864788ce 100644 --- a/src/Site/SiteManager.py +++ b/src/Site/SiteManager.py @@ -7,6 +7,7 @@ import time import gevent from Plugin import PluginManager +from Content import ContentDb from Config import config from util import helper @@ -50,9 +51,19 @@ class SiteManager(object): self.log.error("Save error: No sites found") s = time.time() data = {} + # Generate data file for address, site in self.list().iteritems(): + site.settings["size"] = site.content_manager.getTotalSize() # Update site size data[address] = site.settings + data[address]["cache"] = {} + data[address]["cache"]["bad_files"] = site.bad_files + data[address]["cache"]["hashfield"] = site.content_manager.hashfield.tostring().encode("base64") + helper.atomicWrite("%s/sites.json" % config.data_dir, json.dumps(data, indent=2, sort_keys=True)) + # Remove cache from site settings + for address, site in self.list().iteritems(): + site.settings["cache"] = {} + self.log.debug("Saved sites in %.2fs" % (time.time() - s)) def saveTimer(self):