diff options
Diffstat (limited to 'backend/loader.py')
| -rw-r--r-- | backend/loader.py | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/backend/loader.py b/backend/loader.py index 9c2b33f4..b4559180 100644 --- a/backend/loader.py +++ b/backend/loader.py @@ -25,8 +25,11 @@ class FileChangeHandler(RegexMatchingEventHandler): self.logger = getLogger("file-watcher") self.plugin_path = plugin_path self.queue = queue + self.disabled = True def maybe_reload(self, src_path): + if self.disabled: + return plugin_dir = Path(path.relpath(src_path, self.plugin_path)).parts[0] if exists(path.join(self.plugin_path, plugin_dir, "plugin.json")): self.queue.put_nowait((path.join(self.plugin_path, plugin_dir, "main.py"), plugin_dir, True)) @@ -66,13 +69,17 @@ class Loader: self.plugin_path = plugin_path self.logger.info(f"plugin_path: {self.plugin_path}") self.plugins = {} + self.watcher = None + self.live_reload = live_reload if live_reload: self.reload_queue = Queue() self.observer = Observer() - self.observer.schedule(FileChangeHandler(self.reload_queue, plugin_path), self.plugin_path, recursive=True) + self.watcher = FileChangeHandler(self.reload_queue, plugin_path) + self.observer.schedule(self.watcher, self.plugin_path, recursive=True) self.observer.start() self.loop.create_task(self.handle_reloads()) + self.loop.create_task(self.enable_reload_wait()) server_instance.add_routes([ web.get("/frontend/{path:.*}", self.handle_frontend_assets), @@ -87,6 +94,12 @@ class Loader: web.get("/steam_resource/{path:.+}", self.get_steam_resource) ]) + async def enable_reload_wait(self): + if self.live_reload: + await sleep(10) + self.logger.info("Hot reload enabled") + self.watcher.disabled = False + async def handle_frontend_assets(self, request): file = path.join(path.dirname(__file__), "static", request.match_info["path"]) |
