MainMenuHooks Patch

  • Ich habe den MainMenuHooks-Patch dahingehend erweitert das dieser nun sämtliche Plugins verwenden kann (und nicht nur Plugins die ein Menü verwenden wie epgsearch,extrecmenu).


    Hintergrund ist folgender: Ich darf/werde das tvonscreen-Plugin auf vdr-developer weiterentwickeln und wollte tvonscreen als Ersatz für den normalen Programm-Unterpunkt. Also habe ich Unterstützung für den MainMenuHooks-Patch hinzugefügt. Leider stürzte das Plugin nur ab. Der Grund ist folgender: Die MainMenuAction() ist ein cOsdObject (und wird als solches von TvOnScreen verwendet), aber der MainMenuHooks-Patch akzeptiert nur cOsdMenus (abgeleitet von cOsdObject) als Rückgabe. Die Folge ist ein Crash, da TvOnScreen eben kein Menü ist.


    Bei meinem Patch habe ich nur ein Problem: Wird ein "neues" Plugin mit einem "alten" gepatchten VDR verwendet so stürzt dieser ab, er kann mit dem cOsdObject nicht umgehen.


    In der config.h gibt es ein define MAINMENUHOOKSVERSNUM das habe ich einfach mal auf 1.1 gesetzt. Mit dem define können neue Plugins ihr Verhalten steuern. Wird es gegen einen 1.0-gepatchten VDR kompiliert darf eben kein cOsdObject zurückgegeben werden.


    Oder sollte man im Service zusätzlich ein MainMenuHooksPatch-v1.1 anfragen?


    Gruß

    Joe_D

  • Aus der Readme des MainMenuhook Patch


    Ich würde die Autoren kontaktieren und die Service ID in jedem Fall auf 1.1 hochsetzen. Der Patch sollte dann auch bei epgsearch und extrecmenu, ExtP etc. verwendet werden.


    LG


    Joachim

    Mein VDR: Digitainer II Gehäuse, Asus M85M-US2H, AMD Sempron 140, 2 GB RAM, 1 TB WD Festplatte, Satelco Easywatch / Terratec Cinergy DVB-C, IR- Fernbedienung mit Atric-Einschalter, yavdr-0.5.0a

  • Da cOsdObject die Basisklasse von cOsdMenu ist, ist die neue Version des Patches rückwärtskompatibel. Die Service-ID müsste daher nicht geändert werden. Voraussetzung ist dann aber, dass jedes Plugin das ein cOsdObject zurückliefert die MAINMENUHOOKSVERSNUM prüft. Steht diese auf 1.0, muss das Plugin den MainMenuHooks Patch ignorieren.


    Bei der Alternative mit geänderter Service-ID müsste entweder VDR zukünftig zwei Serviceaufrufe machen (mit Service-ID 1.1 und wenn die nichts liefert mit Service-ID 1.0 um nicht angepasste Plugins zu erreichen) oder man macht einen Schnitt und müsste alle Plugins auf 1.1 anpassen (was sich letzlich auf das Ändern der überprüften ID beschränkt).


    Ich favorisiere die erste Variante: Service-ID bleibt auf 1.0, MAINMENUHOOKSVERSNUM auf 1.1

  • Das ganze wird sicherlich wenn überhaupt nur deutlich verändert in VDR wandern. Der erste Denkfehler des Patch ist schon, dass er das Service-Interface verwendet. Das Service-Interface ist eigentlich für Plugin-zu-Plugin Kommunikation gedacht, da diese anders nicht möglich ist. Für Patch-zu-Plugin wäre das nicht erforderlich, da können Callbacks auch direkt in die Plugin-Schnittstelle eingebaut werden.


    Gruß,


    Udo

  • Zitat

    Original von schmirl
    ...
    oder man macht einen Schnitt und müsste alle Plugins auf 1.1 anpassen (was sich letzlich auf das Ändern der überprüften ID beschränkt).


    So hatte ich mir das vorgestellt. [OT] Ich verstehe auch nicht, warum manche neue Plugin-Versionen noch Kompatibilitätscode für vdr-1.4 haben. [/OT]


    Zitat


    Das ganze wird sicherlich wenn überhaupt nur deutlich verändert in VDR wandern. Der erste Denkfehler des Patch ist schon, dass er das Service-Interface verwendet. Das Service-Interface ist eigentlich für Plugin-zu-Plugin Kommunikation gedacht, da diese anders nicht möglich ist. Für Patch-zu-Plugin wäre das nicht erforderlich, da können Callbacks auch direkt in die Plugin-Schnittstelle eingebaut werden.


    Ich finde die Lösung eigentlich für einen Patch sehr elegant, weil er sozusagen minimalinvasiv ist. Aber als Teil vom vdr sollte das sicherlich in die Plugin-API.Aber aller Wahrscheinlichkeit nach wird diese Funktion noch lange ein Patch bleiben.


    LG
    Joachim

    Mein VDR: Digitainer II Gehäuse, Asus M85M-US2H, AMD Sempron 140, 2 GB RAM, 1 TB WD Festplatte, Satelco Easywatch / Terratec Cinergy DVB-C, IR- Fernbedienung mit Atric-Einschalter, yavdr-0.5.0a

  • schmirl


    Das ist schön, denn ich favorisiere auch die von mir gewählte Methode. Man könnte die MAINMENUHOOKSVERSNUM z.B. auch auf 1.0.1 setzen, fände ich z.B. noch besser.


    @ganpheus


    Wenn man nur noch 1.1 verwendet funktionieren epgsearch, extrecmenu etc. pp. nicht mehr. Da wäre der Änderungsaufwand aber dann sehr hoch. In den Plugins selber müsste dann eine Unterscheidung zwischen 1.0 und 1.1 rein. Selbst in die Plugins, die das gar nicht funktional betrifft (epgsearch, extrecmenu, etc. pp)


    Copperhead


    Mir ist klar das der Patch nicht in den VDR aufgenommen wird. Wurde er ja zu Zeiten von 1.3.x,1.4.x,1.5.x und 1.6.x nicht, warum sollte er es nun? Ich denke eine Kontaktaufnahme ist da sinnlos.


    Urig


    Wenn man aber schon weiss das das anders zu lösen sein sollte (und das laut Mailingliste auch schon seit 2006, aufgewärmt 2007) könnte man doch mal eine Lösung dazu anbieten, oder?


    Ich selbst habe dazu keine Zeit und (vielmehr noch!) keine Lust. Warum sollte ich viel Zeit in einen Patch investieren, wenn er schlussendlich doch nicht aufgenommen wird? Da arbeite ich lieber mit den Distributionsverwaltern zusammen, die sind kooperativer und auch pragmatischer!


    Gruß


    Joe_D

  • Zitat

    Original von Joe_D
    Ich selbst habe dazu keine Zeit und (vielmehr noch!) keine Lust. Warum sollte ich viel Zeit in einen Patch investieren, wenn er schlussendlich doch nicht aufgenommen wird? Da arbeite ich lieber mit den Distributionsverwaltern zusammen, die sind kooperativer und auch pragmatischer!


    Das kann man verstehen, klare Worte

    Gruß utiltiy



    VDR Projekte VDR Projects

  • Anbei eine Version wie sie Klaus vielleicht akzeptieren würde. Wichtig: Alle Plugins neu kompilieren! Wenn ihr beim Menüaufruf im Setup irgendeines Plugins landet, habt ihr das vergessen.


    Die Notwendigkeit alle Plugins neu zu kompilieren war damals übrigens ausschlaggebend dafür, eine auf den Service-Calls basierende Variante zu entwickeln. Dass das so nie im VDR landen würde, war uns durchaus bewusst. Das ganze auf Plugin-Interface umzumünzen war aber sicher nicht der Punkt.


    Aufruf in einem Plugin:

  • schmirl


    warum das hier?

    Code
    -                     Menu = plugin->MainMenuAction();
    +                     Menu = plugin->MainMenuAction(osPlugin);


    Müssen dann nicht alle Plugins angepasst werden? Wäre es nicht sinnvoller diesen Aufruf so zu lassen wie er ist?


    Vorteil wäre doch, das nur Plugins, die Hauptmenüeinträge ersetzen wollen virtual cOsdObject *MainMenuAction(eOSState State); implementieren müssten. Die alten Plugins müssten nur neu kompiliert aber nicht angepasst werden, oder?


    Gruß


    Joe_D

  • Zitat

    Müssen dann nicht alle Plugins angepasst werden? Wäre es nicht sinnvoller diesen Aufruf so zu lassen wie er ist?


    Ich persönlich finde es eleganter, nur eine Funktion für diesen Zweck zu haben. Für eine Übergangszeit könnte beides unterstützt werden - siehe plugin.c:

    Code
    cOsdObject *cPlugin::MainMenuAction(void)
    {
       return MainMenuAction(osPlugin);
    }


    Aber das bleibt letzlich Klaus überlassen - sofern er den Patch annimmt. Falls Klaus nichts derartiges integrieren will, sollten wir ohnehin bei der Service-Variante bleiben.

  • Zitat

    Originally posted by Joe_D
    Mir ist klar das der Patch nicht in den VDR aufgenommen wird. Wurde er ja zu Zeiten von 1.3.x,1.4.x,1.5.x und 1.6.x nicht, warum sollte er es nun? Ich denke eine Kontaktaufnahme ist da sinnlos.


    Sinnlos sicher nicht. Zu mutmaßen, was Klaus wohl davon denkt, und dann gleich so tun, als hätte er alles abgelehnt, bringt garantiert nichts. Klaus ist nicht allwissend, und liest nicht überall mit. Ein offenes Ohr für die Community hat er aber trotzdem immer gehabt.


    Zitat

    Wenn man aber schon weiss das das anders zu lösen sein sollte (und das laut Mailingliste auch schon seit 2006, aufgewärmt 2007) könnte man doch mal eine Lösung dazu anbieten, oder?


    Ich selbst habe dazu keine Zeit und (vielmehr noch!) keine Lust. Warum sollte ich viel Zeit in einen Patch investieren, wenn er schlussendlich doch nicht aufgenommen wird?


    Zeit ist da sicher das entscheidende Problem. Ich wünschte, ich hätte so viel Zeit, wie ich gute Ideen habe. Tatsächlich schaffe ich es nicht mal 10% meiner Ideen zu realisieren.


    Wenn ich mich recht erinnere, waren es hier auch die Ideen, die diesen Patch auf Eis gelegt haben: Klaus wollte glaube ich eher die gesamte Hauptmenüstruktur flexibilisieren, als punktuell einzelne Funktionen austauschen zu können. Und wie das so ist, es gibt immer etwas wichtigeres, das zu erst gemacht werden muss...



    Gruß,


    Udo

  • @ Joe_D

    Zitat

    Original von Joe_D
    In der config.h gibt es ein define MAINMENUHOOKSVERSNUM das habe ich einfach mal auf 1.1 gesetzt. Mit dem define können neue Plugins ihr Verhalten steuern. Wird es gegen einen 1.0-gepatchten VDR kompiliert darf eben kein cOsdObject zurückgegeben werden.


    Wäre es nicht besser die Versionnummer wie die übrigen Versionsnummern zu kodieren, sprich:



    Dann kann man auch vernünftig die Versionsnummer abfragen


    LG


    Joachim

    Mein VDR: Digitainer II Gehäuse, Asus M85M-US2H, AMD Sempron 140, 2 GB RAM, 1 TB WD Festplatte, Satelco Easywatch / Terratec Cinergy DVB-C, IR- Fernbedienung mit Atric-Einschalter, yavdr-0.5.0a

  • gnapheus


    Ja, da hast du vollkommen Recht. Aber statt 1.1.0 würde ich 1.0.1 nehmen, da ja die Grundfunktionalität von 1.0 erhalten bleibt und nur etwas hinzukommt.


    Urig


    Zitat

    Klaus wollte glaube ich eher die gesamte Hauptmenüstruktur flexibilisieren

    Und auch sowas gibt es nun schon seit fast 3 Jahren: http://www.vdr-wiki.de/wiki/index.php/Menuorg-plugin (bestimmt auch nicht in einer Form die es in den VDR schaffen könnte, aber immerhin es gibt etwas!)


    Gruß


    Joe_D

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!