From c35353ed2aa668a95fcd6e737fcedfb60e193ae0 Mon Sep 17 00:00:00 2001 From: Eric Callahan Date: Mon, 17 Feb 2025 06:36:03 -0500 Subject: [PATCH] file_manager: delay file observer initialization The addition of "gcode file processors" makes it possible for processor registration to occur in "component_init". The file observer init must be delayed until after all processors are registered to correctly process metadata for gcode files added while Moonraker was not running. Signed-off-by: Eric Callahan --- moonraker/components/file_manager/file_manager.py | 4 +++- moonraker/server.py | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/moonraker/components/file_manager/file_manager.py b/moonraker/components/file_manager/file_manager.py index aef5d8190..758c99496 100644 --- a/moonraker/components/file_manager/file_manager.py +++ b/moonraker/components/file_manager/file_manager.py @@ -176,7 +176,7 @@ def __init__(self, config: ConfigHelper) -> None: if prune: self.gcode_metadata.prune_storage() - async def component_init(self): + def start_file_observer(self): self.fs_observer.initialize() def _update_fixed_paths(self) -> None: @@ -1889,6 +1889,8 @@ def add_root_watch(self, root: str, root_path: str) -> None: self._notify_root_updated, mevts, root, root_path) def initialize(self) -> None: + if self.initialized: + return for root, node in self.watched_roots.items(): try: evts = node.scan_node() diff --git a/moonraker/server.py b/moonraker/server.py index 40177a814..fac1250f6 100755 --- a/moonraker/server.py +++ b/moonraker/server.py @@ -195,6 +195,13 @@ async def server_init(self, start_server: bool = True) -> None: if optional_comps: await asyncio.gather(*optional_comps) + # Wait until all components are initialized to start the file + # observer. This allows other components to register gcode file + # processors before metadata is processed for gcode files that + # do not have a metadata entry. + file_manager: FileManager = self.lookup_component("file_manager") + file_manager.start_file_observer() + if not self.warnings: await self.event_loop.run_in_thread(self.config.create_backup)