Nightly: deterministic plugin loading and docs refresh

This commit is contained in:
2026-02-07 17:23:29 +01:00
parent 6ce1bf71c1
commit 09d2fc850d
5 changed files with 61 additions and 15 deletions

View File

@@ -1230,11 +1230,16 @@ def _discover_plugins() -> dict[str, BasisPlugin]:
except Exception as exc:
xbmc.log(f"Plugin-Datei {file_path.name} konnte nicht geladen werden: {exc}", xbmc.LOGWARNING)
continue
plugin_classes = [
obj
for obj in module.__dict__.values()
if inspect.isclass(obj) and issubclass(obj, BasisPlugin) and obj is not BasisPlugin
]
preferred = getattr(module, "Plugin", None)
if inspect.isclass(preferred) and issubclass(preferred, BasisPlugin) and preferred is not BasisPlugin:
plugin_classes = [preferred]
else:
plugin_classes = [
obj
for obj in module.__dict__.values()
if inspect.isclass(obj) and issubclass(obj, BasisPlugin) and obj is not BasisPlugin
]
plugin_classes.sort(key=lambda cls: cls.__name__.casefold())
for cls in plugin_classes:
try:
instance = cls()
@@ -1245,7 +1250,21 @@ def _discover_plugins() -> dict[str, BasisPlugin]:
reason = getattr(instance, "unavailable_reason", "Nicht verfuegbar.")
xbmc.log(f"Plugin {cls.__name__} deaktiviert: {reason}", xbmc.LOGWARNING)
continue
plugins[instance.name] = instance
plugin_name = str(getattr(instance, "name", "") or "").strip()
if not plugin_name:
xbmc.log(
f"Plugin {cls.__name__} wurde ohne Name registriert und wird uebersprungen.",
xbmc.LOGWARNING,
)
continue
if plugin_name in plugins:
xbmc.log(
f"Plugin-Name doppelt ({plugin_name}), {cls.__name__} wird uebersprungen.",
xbmc.LOGWARNING,
)
continue
plugins[plugin_name] = instance
plugins = dict(sorted(plugins.items(), key=lambda item: item[0].casefold()))
_PLUGIN_CACHE = plugins
return plugins