Sortierung im Erweiterungsmenü nicht dauerhaft

  • Stimmt, ist der Unix-Timestamp vermutlich. Das heisst, es gibt einen Eintrag, der nicht geparsed werden kann. Also deine xml ist nicht konform.


    Du kannst mal in Zeile 110 (also nach except ParseError as pe:) ein
    print(pe)
    einfügen und dann beim e2 neustart mitloggen (e2log).


    Ein XML-Validator stört sich am &, welches durch

    Code
    & a m p;


    ersetzt werden sollte. Danach ist es konform. halt ohne die Leerzeichen. Doofe auto-Umwandlung.

    Gruss
    Dre


    Boxen (im Einsatz): DM920, DM900, DMOne
    Developer Project Merlin - we are OpenSource

  • Ja, das kann am dBackup liegen.
    Hab den Text dann aber im Plugin geändert. Danach wurde die komische xml mit Zahlen dran nicht neu erstellt.


    Ich teste wie gesagt, erstmal den Plugin-Code durch. Alles andere ist jetzt glaub ich ein zu wildes rumstochern im Dunkeln :face_with_tongue:


    Trotzdem erstmal Danke für euer Bemühen :smiling_face:

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • So, wenn ich die Zeile 473 im PluginSort (plugin.py) deaktiviere, funktioniert die Sortierung nach Neustart auch im Extensions-Menü:
    http://git.opendreambox.org/?p…8951896d036a;hb=HEAD#l473


    Problem ist, dass der Code jedes Plugin beim autostart nur 1 x verarbeitet.
    Das es aber unterschiedliche Sortierungswerte (weight) für WHERE_PLUGINMENU und WHERE_EXTENSIONSMENU geben kann, wird aber meist im 1. Durchlauf nur der weight-Wert für WHERE_PLUGIN_MENU eingelesen.
    Damit fehlt dann die Sortierung für WHERE_EXTENSIONSMENU sofern sich die weight-Werte eines Plugins für WHERE_PLUGINMENU und WHERE_EXTENSIONSMENU unterscheiden.


    Soweit so gut, wenn ich aber o.g. Zeile deaktiviere funktioniert zwar die Sortierung, dafür kommt dann aber beim GUI-Neustart dieser GS. Irgendwo fehl da jetzt noch ne kleine Anpassung :smiling_face:


    Code
    ------------------------------------------------------------
    Traceback (most recent call last):
      File "/usr/lib/enigma2/python/mytest.py", line 803, in <module>
        plugins.shutdown()
      File "/usr/lib/enigma2/python/Components/PluginComponent.py", line 173, in shutdown
        self.removePlugin(p)
      File "/usr/lib/enigma2/python/Components/PluginComponent.py", line 42, in removePlugin
        self.plugins[x].remove(plugin)
    ValueError: list.remove(x): x not in list
    ------------------------------------------------------------

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • Problem ist wohl, dass PluginSort nur solche Plugins für alle WHERE-Menüs untersützt:
    (also, wo in einen Descriptor alle WHERE-Menüs enthalten sind.

    Python
    return PluginDescriptor(
      name="YouTube Player",
      description=_("Search and play YouTube movies"),
      where = [ PluginDescriptor.WHERE_EXTENSIONSMENU, PluginDescriptor.WHERE_PLUGINMENU ],
      icon = "plugin.png", fnc = main)

    Ist es aber so programmiert, stößt PluginSort an seine Grenzen, da es nur den ersten Eintrag (meist für WHERE_PLUGINMENU) verarbeitet, wegen Zeile 473:


    Python
    descriptors = []
    descriptors.append( PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart, needsRestart = False) )
    descriptors.append( PluginDescriptor(where = PluginDescriptor.WHERE_SESSIONSTART, fnc = sessionstart, needsRestart = False) )
    descriptors.append( PluginDescriptor(name =_("PzyEMAIL"), description=_("imap, pop3, smtp, ssl, tls"), where = PluginDescriptor.WHERE_PLUGINMENU, fnc = main, needsRestart = False, icon=pzymailIcon) )
    descriptors.append( PluginDescriptor(name =_("PzyEMAIL"), description=_("imap, pop3, smtp, ssl, tls"), where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=main) )
    
    
    return descriptors

    Ich muss mal schauen, wie es bei den Plugins abgelegt wird, wo beide WHERE-Bereiche angeben sind.
    Da steht im Logfile, dass ein "Splitting MyTube Player up in individual entries ([0, 2])" erfolgt.
    Da werden dann wohl beide Weight-Werte übernommen.


    Evtl. könnte ich das ja bei den Plugins mit mehrfachen Einträgen im 2. Durchlauf auch als 2. Splitwert zum ersten dazuspeichern,
    ohne dass das Plugin selbst nochmal angelegt wird.

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

    Einmal editiert, zuletzt von Sven H ()

  • Wenn ich in Zeile 36 den Debug-Modus auf "True" setze, dann verwendet das Plugin eine eigene def PluginComponent_removePlugin zum removen der Plugins.
    Damit gibt es keinen GS beim GIU-Neustart.
    http://git.opendreambox.org/?p…48951896d036a;hb=HEAD#l36


    Also nutze ich erstmal PluginSort mit DEBUG=True und deaktivierter Zeile 473.


    Damit funktioniert es nun zu 100% bei mir.
    Ich kann das WHERE_PLUGINMENU und WHERE_EXTENSIONSMENU getrennt voneinander sortieren :smiling_face:


    Vielleicht findet ja ein kluger Kopf eine abschließende Lösung.


    Hier nochmal kurz die Problembeschreibung:
    aufgrund der Zeile 473 in der plugin.py von PluginSort wird jedes Plugin nur mit dem zuerst gefundenen Menü-Eintrag sortiert (über weight-Wert aus der pluginsort.xml).
    Meist ist das aber nur der Eintrag aus WHERE_PLUGINMENU. Somit fehlt dann der Sortierungswert für WHERE_EXTENSIONSMENU.
    Das PluginSort müsste hier grundsätzlich beide weight-Werte aus der pluginsort.xml verarbeiten (WHERE_PLUGINMENU und WHERE_EXTENSIONSMENU).
    Das funktioniert bisher nur, wenn im jeweiligen Plugin die Menüeinträge für WHERE_PLUGINMENU und WHERE_EXTENSIONSMENU in einem Descriptor übergeben werden (wie oben schon aufgezeigt beim YouTube Player).

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • Edit:
    Hier stand erst eine Theorie zum PluginHider als Ursache.
    Hat sich aber doch nicht bestätigt :smiling_face:

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

    Einmal editiert, zuletzt von Sven H ()

  • So, ich habe für mich erstmal folgende Lösung gefunden: :face_with_tongue:


    Die Zeile 473 der plugin.py (PluginSort)


    habe ich durch folgende Zeilen ersetzt:



    Damit werden nun alle Menü-Befehle der Plugins abgearbeitet und sortiert und nicht nur der erste gefundene Menü-Befehl je Plugin.
    Doppelte Menü-Befehle werden dabei auch nicht erfasst, so dass es nun beim GUI-Neustart auch keinen GS mehr gibt.
    (den GS gab es ja noch, wenn man lediglich die Zeile 473 deaktiviert hatte)


    Vielleicht kann das ja mal jemand gegentesten und ggf. für das PluginSort im Feed anpassen.
    Dann muss ich das nicht nach jedem Feed-Update wieder umschreiben


    nochmal kurze Erläuterung des Problems:
    Wurde beispielsweise die Sortierung eines Menü-Eintrages für den Pluginbrowser (WHERE_PLUGINMENU) abgearbeitet, wurde der Menü-Eintrag des jeweiligen Plugins in Zeile 497 in die fixed-Liste aufgenommen.
    Wurde dann aber in der "pluginlist" für das gleiche Plugin ein Menü-Eintrag für die Erweiterungen (WHERE_EXTENSIONSMENU) gefunden, wurde bei diesem wegen Zeile 473 keine Sortierung mehr verarbeitet.


    Hier mal auszugsweise der Inhalt der Einträge in der "pluginlist":
    (in der Klammer steht, für welches Menü der Eintrag ist)


    Audio Sync Setup [WHERE_PLUGINMENU]
    AutoTimer [WHERE_PLUGINMENU]
    AutoTimer [WHERE_MOVIELIST]
    AutoTimer hinzufügen... [WHERE_EVENTINFO]
    Cool Channel Guide [WHERE_EXTENSIONSMENU]
    Cool Channel Guide [WHERE_EVENTINFO]
    MediaCenter [WHERE_EXTENSIONSMENU, WHERE_PLUGINMENU]
    PzyEMAIL [WHERE_PLUGINMENU]
    PzyEMAIL [WHERE_EXTENSIONSMENU]
    ...


    Aufgrund von Zeile 473 wurde immer nur der erste Eintrag gleichnamiger Einträge in der Liste für die Sortierung verarbeitet.
    (also der weight-Wert aus der pluginsort.xml ausgelesen)
    Somit wurden gleichnamige weitere Menü-Einträge nicht mehr sortiert (siehe z.B. bei PzyEMAIL für das EXTENSIONSMENU)

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

    3 Mal editiert, zuletzt von Sven H ()

  • müsste nicht generell einfach die Sortierung unterschiedlich möglich sein für das Plugin-Menü und das Erweiterungsmenü? Also zwei separate Listen.

    Gruss
    Dre


    Boxen (im Einsatz): DM920, DM900, DMOne
    Developer Project Merlin - we are OpenSource

  • So ist es ja auch gedacht in der pluginsort.xml. Da gibt es für jedes Menü unterschiedliche Sortierungslisten. Weiter oben ist ja der Inhalt der pluginsort.xml zu sehen.


    Nur durch o.g. "Fehler" im Code wurde beim Neustart pro Plugin immer nur ein Menüeintrag sortiert.
    (sofern der mehrfache Menüeintrag eines Plugins namensgleich war)
    Die Sortierung der weiteren Menü-Einträge dieses Plugins erfolgte dann nicht mehr.


    Der Sortierungs-Fehler trat ja auch nur nach dem GUI-Neustart auf. Direkt nach dem Sortieren der verschiedenen Menüs hat es ja funktioniert.

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

    4 Mal editiert, zuletzt von Sven H ()

  • hier mal auszugsweise der Inhalt einer älteren pluginsort.xml (hab bewusst die Doppellungen bei PLUGINMENU und EXTENSIONSMENU dringelassen)
    In der XML gibt es für jedes Menü eine eigene Sortierungsliste.
    Wenn aber ein Plugin mit gleichem Menüeintrag in mehreren Menüs vorhanden war (z.B. PzyEMAIL), wurde der Eintrag nach einem Neustart immer nur in 1 Menü sortiert.
    (je nachdem zu welchem Menü der erste Eintrag in der oben - Post #29 - dargestellten "pluginlist" gefunden wurde)


    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • @dre


    Hab gerade nochmal geprüft und festgestellt, dass das Problem bei mir nur bei dbackup und drei eigenen/angepassten Plugins auftritt.
    Somit kann es sein, dass sich das Problem bei dir gar nicht bemerkbar macht.


    Zum Nachvollziehen einfach mal folgende 4 Schritte ausführen:


    1. dbackup installieren


    2. dort in der Konfiguration bei "Plugin anzeigen unter" den Wert "Alle" auswählen
    (damit erscheinen die Einträge zu "Sichern & Flashen" in allen Menüs).


    3. Dann mit ganz oben beschriebener Weise das EXTENSIONSMENU sortieren (im Plugin-Browser über Menü-Taste)
    und dabei "Sichern & Flashen" ganz nach oben schieben und einen anderen Plugin-Eintrag von unten auf den 2. Platz verschieben.
    (evtl. auch einfach die weight-Werte in der pluginsort.xml im Bereich "WHERE_EXTENSIONSMENU" manuell ändern mit "-2" und "-1")


    4. GUI-Neustart


    Nun sollte von der Logik her, nach einem Neustart das "Sichern & Flashen" im EXTENSIONSMENU über dem anderen verschobenen Plugin liegen.
    Ich tippe aber, es wird darunter sein.


    Wenn du dann aber meine 5 neuen Zeilen aus Post #29 nutzt, wird "Sichern & Flashen" nach einem Neustart wie gewünscht über dem anderen Plugin stehen.


    PS: das "&" im Menüeintrag stört dabei nicht und ist auch nicht die Ursache

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

    2 Mal editiert, zuletzt von Sven H ()

  • So, jetzt kommt die komplette Aufklärung des Sortierproblems im Erweiterungsmenü (EXTENSIONSMENU) :winking_face:


    Es gibt nur wenige "Problem-Plugins" (u.a. auch dBackup), die den gleichen Menü-Befehl sowohl im Plugin-Browser als auch im Erweiterungsmenü haben und dabei die Menü-Einträge in der plugin.py mit mehreren Einträgen realisiert werden.


    Diese Plugins werden im Extensionsmenü immer mit dem Wert "0" einsortiert und mischen sich somit irgendwo in die Sortierung.


    1. immer ganz oben:
    Sofern es in der pluginsort.xml im Abschnitt "WHERE_EXTENSIONSMENU" nur weight-Werte >0 gibt, steht der Menüeintrag eines Problem-Plugins immer ganz oben.


    2. mittendrin:
    Falls es Einträge mit negativem weight-Wert gibt (z.B "-1") gibt, ordnet sich das Problem-Plugin nach diesen Menüeinträgen ein, selbst wenn das Problem-Plugin in der pluginsort.xml einen kleineren weight-Wert hat (z.B. "-2), da es beim Neustart immer den Sortier-Wert "0" bekommt.


    Das komische Sortier-Verhalten der "Problem-Plugins" wird durch diesen Code in der jeweiligen plugin.py verursacht:
    (pro Menüeintrag ein eigener PluginDescriptor-Eintrag)



    Nun gibt es 2 Lösungen für das erkannte Sortier-Problem:


    1. meine o.g. 5 neuen Zeilen im PluginSort ab Zeile 473 verwenden oder


    2. in allen "Problem-Plugins" die Menüeinträge wie folgt anpassen:
    (alle Menü-Einträge in einem PluginDescriptor zusammenfassen - ggf. auch WHERE_MOVIELIST und WHERE_EVENTINFO, Einträge für autostart und sessionstart sollten dabei weiterhin einen eigenen Plugindescriptor behalten)



    Ich hoffe, ich konnte das Geheimnis jetzt halbwegs verständlich lüften :smiling_face:

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

    5 Mal editiert, zuletzt von Sven H ()

  • na ja teweilse macht es Sinn die Plugin descriptoren für verschiedene Stellen mehrfach zu übergeben, dann ist es leichter dynamisch umzuschalten ob ein Plugin angezeigt werden soll oder nicht.


    Insofern wären deine Codeanpassungen wohl die sinnvollere Variante, weil dann z.B. auch Altplugins wo es keine Maintainer mehr gibt die Sie anpassen könnten wieder sauber gehandhabt würden.

  • Hallo zusammen,


    ich muß dieses alte Thema wieder aufmachen, da ich genau dieses Problem habe - plugins habe ich sortiert, nach Neustart wieder die alte Reihenfolge. Gibt es letzte Erkenntnisse, welche plugins sich da gegenseitig beeinflussen?


    Meine Box:


    dm920 mit GP 4.1


    Vielen Dank

    Dreambox OS Version: 4.3.2r14-2020-12-02
    Image Version: Experimental 2020-12-02
  • Hallo arki


    Mir gehts um die Sortierung im Plugin-Browser, nicht im BP. Hatte menusort und pluginsort drauf und es wurde nichts gespeichert, habe nun beides mal deinstalliert.

    Weiche Sortierfunktion bringt das BP standardmäßig mit?


    es läuft übrigens auch eine Anfrage im IHAD-Forum, nicht sauer sein wegen der Doppelung

  • Bei mir läuft das normale PluginSort parallel zum GP4-BP.


    Du musst nach dem Anpassen der Reihenfolge der Plugins im Plugin-Browser über das PluginSort nur kurz das BP öffnen.

    Dann wird die neue Reihenfolge auch gespeichert.

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • arki hat es ja schon gesagt ,Menü taste im bluepanel drücken ,dort steht unten ein Eintrag (Pluginmenü sortieren) ,dies ist für das sortieren der Plugins im pluginbrowser ,die Plugins im bluepanel selber dafür ist der erste Eintrag unter der Menü taste (Einträge verschieben) :winking_face: