From d6a373c726a4f6594e9b4c75a6ea3284f35f22fd Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Thu, 3 Apr 2025 20:46:11 -0400 Subject: [PATCH] Fixed some errors with plugins. --- src/cthulhu/plugin_system_manager.py | 51 +++++++++++++++++++++--- src/cthulhu/plugins/ByeCthulhu/plugin.py | 9 +++-- 2 files changed, 51 insertions(+), 9 deletions(-) diff --git a/src/cthulhu/plugin_system_manager.py b/src/cthulhu/plugin_system_manager.py index edb35ac..2d6d5cd 100644 --- a/src/cthulhu/plugin_system_manager.py +++ b/src/cthulhu/plugin_system_manager.py @@ -149,19 +149,31 @@ class PluginSystemManager: def _scan_plugins_in_directory(self, directory): """Scan for plugins in a directory.""" if not os.path.exists(directory) or not os.path.isdir(directory): + logger.warning(f"Plugin directory not found or not a directory: {directory}") return + logger.info(f"Scanning for plugins in directory: {directory}") for item in os.listdir(directory): plugin_dir = os.path.join(directory, item) if not os.path.isdir(plugin_dir): continue + # Check for the traditional structure first (plugin.py & plugin.info) plugin_file = os.path.join(plugin_dir, "plugin.py") metadata_file = os.path.join(plugin_dir, "plugin.info") + # Fall back to [PluginName].py if plugin.py doesn't exist + if not os.path.isfile(plugin_file): + alternative_plugin_file = os.path.join(plugin_dir, f"{item}.py") + if os.path.isfile(alternative_plugin_file): + plugin_file = alternative_plugin_file + logger.info(f"Using alternative plugin file: {alternative_plugin_file}") + + # Check if we have any valid plugin file if os.path.isfile(plugin_file): # Extract plugin info module_name = os.path.basename(plugin_dir) + logger.info(f"Found plugin: {module_name} in {plugin_dir}") metadata = self._load_plugin_metadata(metadata_file) plugin_info = PluginInfo( @@ -175,7 +187,10 @@ class PluginSystemManager: plugin_info.builtin = metadata.get('builtin', 'false').lower() == 'true' plugin_info.hidden = metadata.get('hidden', 'false').lower() == 'true' + logger.info(f"Adding plugin to registry: {module_name}") self._plugins[module_name] = plugin_info + else: + logger.warning(f"No plugin file found in directory: {plugin_dir}") def _load_plugin_metadata(self, metadata_file): """Load plugin metadata from a file.""" @@ -254,9 +269,23 @@ class PluginSystemManager: logger.debug(f"Plugin {module_name} is already loaded, considered active") return True - # Check if plugin is in the active plugins list - is_active = module_name in self.getActivePlugins() - logger.debug(f"Plugin {module_name} active status: {is_active}") + # Check case-insensitive match in active plugins list + active_plugins = self.getActivePlugins() + + # Try exact match first + if module_name in active_plugins: + logger.debug(f"Plugin {module_name} found in active plugins list") + return True + + # Try case-insensitive match + module_name_lower = module_name.lower() + is_active = any(plugin.lower() == module_name_lower for plugin in active_plugins) + + if is_active: + logger.debug(f"Plugin {module_name} found in active plugins list (case-insensitive match)") + else: + logger.debug(f"Plugin {module_name} not found in active plugins list") + return is_active def syncAllPluginsActive(self): @@ -305,8 +334,20 @@ class PluginSystemManager: logger.info(f"Plugin {module_name} already loaded, skipping") return True - # Import plugin module - plugin_file = os.path.join(pluginInfo.get_module_dir(), "plugin.py") + # Try to find the plugin file + module_name = pluginInfo.get_module_name() + plugin_dir = pluginInfo.get_module_dir() + + # Check for plugin.py first (standard format) + plugin_file = os.path.join(plugin_dir, "plugin.py") + + # Fall back to [PluginName].py if plugin.py doesn't exist + if not os.path.exists(plugin_file): + alternative_plugin_file = os.path.join(plugin_dir, f"{module_name}.py") + if os.path.exists(alternative_plugin_file): + plugin_file = alternative_plugin_file + logger.info(f"Using alternative plugin file: {alternative_plugin_file}") + if not os.path.exists(plugin_file): logger.error(f"Plugin file not found: {plugin_file}") return False diff --git a/src/cthulhu/plugins/ByeCthulhu/plugin.py b/src/cthulhu/plugins/ByeCthulhu/plugin.py index 4720e87..d3174ea 100644 --- a/src/cthulhu/plugins/ByeCthulhu/plugin.py +++ b/src/cthulhu/plugins/ByeCthulhu/plugin.py @@ -37,7 +37,8 @@ class ByeCthulhu(Plugin): signal_manager = self.app.getSignalManager() self._signal_handler_id = signal_manager.connectSignal( "stop-application-completed", - self.process + self.process, + "default" # Add profile parameter ) except Exception as e: logger.error(f"Error activating ByeCthulhu plugin: {e}") @@ -54,9 +55,9 @@ class ByeCthulhu(Plugin): # Disconnect signal if we have an ID if self._signal_handler_id is not None: signal_manager = self.app.getSignalManager() - signal_manager.disconnectSignal( - "stop-application-completed", - self._signal_handler_id + # Use disconnectSignalByFunction instead since disconnectSignal doesn't exist + signal_manager.disconnectSignalByFunction( + self.process ) self._signal_handler_id = None except Exception as e: