Idee: Einträge im Erweiterungsmenü live hinzufügen/entfernen (ohne GUI-Neustart)

  • Hallo


    Da man Menü-Einträge im Erweiterungsmenü (where = [PluginDescriptor.WHERE_EXTENSIONSMENU]) normalerweise nur nach einem GUI-Neustart hinzufügen/entfernen kann, hab ich mir mal eine Lösung gebastelt, um das live im SetupScreen zu erledigen (also ohne GUI-Neustart) ;)


    Dazu habe ich im SetupScreen eine Option zum Anzeigen des Plugin im Erweiterungsmenü (config.plugins.updatecheck.show_extmenu.value).

    Im keySave (Speichern der Settings) wird dann je nach Einstellung der Menü-Eintrag live im Erweiterungsmenü hinzugefügt bzw. entfernt.


    Bisher habe ich keine Einschränkungen bei der Nutzung festgestellt.

    Falls es aber doch irgendwo Probleme macht bzw. machen könnte, wäre ich für einen Tipp dankbar. ;)


    Hier mal beispielhaft der Code aus meinem UpdateCheck-Plugin:

    (die Imports habe ich zum besseren Verständnis mal in die functions gelegt)

    Gruß Sven (aka Dreamy)


    (DM920 mit unstable OE2.5 DMM)

  • Stimmt, jetzt wo du es sagst ;)

    Ist mir vorher in deinem komplexen Code gar nicht ins Auge gefallen.

    Der obige Code ist jetzt zumindest problemlos in ein eigenes Plugin integrierbar ;)

    Wichtig ist bei der Sache nur (wie du in deinem Code auch angemerkt hast), dass der ExtensionsMenu-Eintrag eine eigene function in der plugin.py bekommt.

    Den PluginBrowser-Eintrag und den Extensionmenu-Eintrag z.B. auf die gleiche Function "main" zu legen, klappt nicht.

    Da wird sonst beim plugins.removePlugin() evtl. der falsche Eintrag entfernt, weil das beim pluginList.remove() irgendwie nicht sauber erkannt/getrennt wird.

    Im Ergebnis kann es dann beim GUI-Neustart einen GS geben: ValueError: list.remove(x): x not in list

    Gruß Sven (aka Dreamy)


    (DM920 mit unstable OE2.5 DMM)

    Edited 2 times, last by Sven H ().

  • Wenn man das für einen PluginDescriptor mit WHERE_PLUGINMENU macht, erscheint im PluginBrowser nach dem Hinzufügen kein Icon zum Eintrag, wenn der Descriptor beim E2-Start nicht geladen wurde (weil im Setup noch nicht aktiviert).


    Wenn ich zum obigen plugins.addPlugin(pd) noch zusätzlich ein updateIcon ausführe, wird auch dann das Icon korrekt im PluginBrowser angezeigt ;)

    Code
    1. if pd not in pdList:
    2. if pd.icon is None:
    3. pd.updateIcon("/usr/lib/enigma2/python/Plugins/Extensions/UpdateCheck")
    4. plugins.addPlugin(pd)

    Mit plugins.readPluginList(resolveFilename(SCOPE_PLUGINS)) funktioniert es auch.

    Aber das halte ich für etwas übertrieben, weil da ja die PluginDescriptoren aller Plugins inkl. der Icons neu gelesen werden ;)

    Das merkt man auch, weil das dann etwas mehr Zeit benötigt.


    Kann man da mit updateIcon arbeiten oder gäbe es Gründe hier doch besser readPluginList zu verwenden?

    Hab bis jetzt zumindest keine Einschränkung festgestellt, wenn ich das schnellere "updateIcon" nutze.

    Der Descriptor bekommt beim einfachen addPlugin() (ohne zusätzliches readPluginList) auch keinen echten .path-Value - keine Ahnung, ob der irgendwo später benötigt wird ?? :/

    Gruß Sven (aka Dreamy)


    (DM920 mit unstable OE2.5 DMM)