onclick mit Condition in einem Panel (Estuary)

  • Mehrfach verwendeter Code ist eine feine Sache, das spart Platz, Lade- und Rechenzeit. Der Estuary verwendet sowas z.B. in Form eines einmal definierten Panels, welches zur Ansicht der zuletzt gesehenen Kanäle, der Aufnahmen usw. genutzt wird. Bumblebee und ich nutzen diese auch zur Anzeige der German Telecast Offers. Eigentlich eine feine Sache, wenn...

    Ich bekomme es nicht hin, einen onclick mit entsprechender Condition zu formulieren. onclick (ohne condition) geht generell, auch condition="true" oder condition="false" funktioniert (oder eben auch nicht). Ich möchte den onclick aber nur auslösen, wenn eine betsimmte Bedingung erfüllt ist, die da sein könnten:

    • Panel hat die id=12350 und kann auch per Parameter an die Liste übergeben werden
    • Panel wird von einem Addon bestückt, welches ebenfalls per Parameter aus der Home.xml übergeben wird usw. usf.

    Nur irgendwie funktioniert das alles nicht???

    Ich habe mal den Code fürs Panel sowie die wichtigen Stellen aus der Home.xml angefügt

    Includes_Home.xml:


    Home.xml


    Code
    <include content="WidgetListChannels" condition="System.HasPVRAddon + System.HasAddon(plugin.service.gto)">
    							<param name="content_path" value="plugin://plugin.service.gto?action=getcontent&ts=$INFO[Window(Home).Property(GTO.timestamp)]"/>
    							<param name="widget_header" value="$ADDON[plugin.service.gto 30104]: $INFO[Window(Home).Property(GTO.Provider)]"/>
    							<param name="widget_target" value="pvr"/>
    							<param name="list_id" value="12350"/>
    							<param name="addon" value="plugin.service.gto"/>
    							<param name="label" value="$INFO[ListItem.label2]$INFO[ListItem.Property(StartTime), (,)]"/>
    							<param name="label2" value="$INFO[ListItem.label]"/>
    						</include>

    Any Hints?

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960
    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Das geht so nicht, weil der übergebene Parameter "addon" kein String Info Label an sich ist. Probier es mit Info Labels wie dem Container Foldername oder Path.

    Edit:
    Du könntest aber auch probieren in dem Panel Template ne Default Value hinzufügen:
    <param name="onclick" default="select" />
    ....
    <onclick>$PARAM[onclick]</onclick>

    und diese dann im call überschreiben, indem du den Parameter direkt übergibst:
    <param name="onclick" value="RunScript(plugin.service.gto,action=infopopup&blob=$INFO[ListItem.Property(BlobID)])"/>

    Kann nur sein, dass es dann mit dem BlobID Probleme gibt. Das ist manchmal ein bischen tricky die Value im richtigen Moment aufzlösen.


    Edit2:
    Ach, und lass ALLE <!-- balblab --> ausgeklammerten Geschichten in Params weg. Kodi hat hier irgendeinen Bug, der nicht gefixt wird. Manchmal brechen ausgeklammerte Geschichten das komplette Feature. Hatte den Fehler vor Monaten reportet, aber wurde ignoriert.

    "I don't caretaker"

    SKIN: Embuary - Donate: HIER de Hoibe bestellen, merci :thumbup:

    Devices: Nvidia Shield + Fire TV 4k --- NAS: i3 6100 | 8GB | 15tb | OMV4 | Emby --- TV: Sony 55" XF9005 + LG 47" LM640S | 114x Adalight | Yamaha 683

    3 Mal editiert, zuletzt von sualfred (30. April 2017 um 10:36)

  • Du könntest aber auch in dem Panel Template ne Default Value hinzufügen:
    <param name="onclick" default="select" />
    ....
    <onclick>$PARAM[onclick]</onclick>

    und diese dann im call überschreiben, indem du den Parameter direkt übergibst:
    <param name="onclick" value="RunScript(plugin.service.gto,action=infopopup&blob=$INFO[ListItem.Property(BlobID)])"/>

    Das funktioniert zwar für das spezielle Panel, allerdings reagieren dann die anderen Widgets nicht mehr. Ursprünglich haben die Widgets keinen <onclick>, jedenfalls nicht in der Includes_Home.xml.

    Das $INFO[Container.xyz] liefert nichts zurück. http://kodi.wiki/view/InfoLabels#Container

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960
    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Das sollte eigentlich die default "Select" Geschichte regeln. Aber Kodi typisch wieder nur halbgar eingebaut...

    Probier doch mal:
    ListItem.Path
    ListItem.FolderName
    ListItem.FolderPath

    Diese sollten einen String zurückwerfen, der per "String.StartsWith" und Co. abgeglichen werden kann.

    Edit:
    Du könntest aber auch ein <include condition="onclick">MyCustomOnClick</include> im template einbaun und einfach per Param "true" übergeben lassen.
    Haust halt dein onlick Gedöns als eigenes include irgendwo rein.
    <include name="MyCustomOnClick">
    <onclick>RunScript(plugin.service.gto,action=infopopup&blob=$INFO[ListItem.Property(BlobID)])</onclick>
    </include>

    Somit umgehst du das onclick Problem aus dem Ansatz von oben. Nicht schön, aber das funktioniert definitiv.

    "I don't caretaker"

    SKIN: Embuary - Donate: HIER de Hoibe bestellen, merci :thumbup:

    Devices: Nvidia Shield + Fire TV 4k --- NAS: i3 6100 | 8GB | 15tb | OMV4 | Emby --- TV: Sony 55" XF9005 + LG 47" LM640S | 114x Adalight | Yamaha 683

  • Das meinte ich damals im Flex das ich nen eigenen Comtainer für das Widget brauch weil der click die anderen clicks verdrängt..
    Ich hab dann einen eigenen Container dafür verwendet weil mir das zu blöd war anders.
    Damals ging es nur wenn ich alle clicks definiere - da ich aber in den strings für die Widgets keine Info hab in was für nem Fenster falls es was anderes ist,
    hab ich extra includes verwendet.

    Du rufst ja eh ein include auf.

    <include content="WidgetListChannels" condition="System.HasPVRAddon + System.HasAddon(plugin.service.gto)">

    Kopier es doch einfach und nenn es anders und verwende das - so ist es wenigstens Bombensicher.

    Grüße

  • Das würde wieder 2 Templates benötigen. Genauso Pfusch :) Damit ist der Sinn von einem Template zu haben wieder weg.

    Aber wenn ihr meine Params sehen würdet.... teils gehen die über 4-5 Ebenen. Lesbar ist was anderes, aber es geht ^^

    "I don't caretaker"

    SKIN: Embuary - Donate: HIER de Hoibe bestellen, merci :thumbup:

    Devices: Nvidia Shield + Fire TV 4k --- NAS: i3 6100 | 8GB | 15tb | OMV4 | Emby --- TV: Sony 55" XF9005 + LG 47" LM640S | 114x Adalight | Yamaha 683

  • Da hast natürlich recht;).. Nur das Template ist eben auch nicht für solche Dinge gedacht gewesen da es der Ersteller nicht vorsah.
    Ich kopier es da lieber als irgendwo drumherum zu kommen und zu hoffen das es dann schon nach der dritten Ebene alles abdeckt ;) .

    Da kommt ja meistens dann 4 Wochen später in Kombination bei irgendwas wieder was falsches raus und irgendwann hast dann 5 wie du.

    Aber parameter ist auch gar nix für mich. Ich nutz die fast gar nicht weil vieles auch super ohne geht und teils nur ne andere Schreibweise fürs selbe ist.
    Ob ich nun nen Hintergrund includier und breite und höhe so reinschreib oder als Parameter, macht es für mich nur Unleserlicher.
    In dem Fall seh ichs ein das man die braucht in diesem layout der Widgets.

    Wird Ansichtssache sein bis wann man ein Template verkomplizieren statts für andere Dinge neue zu verwenden wenn möglich.
    Es wurde ja auch schon die Entscheidung getroffen ein Widgetchannellist Einzubauen weil es zu stark von anderen abweicht.
    Das ist ja so eine Kodi krankheit - 90% sind gleich aber dann doch irgendwie immer etwas anders - das kann einen schon Wahnsinnig machen machmal :)

    Grüße

  • Kopier es doch einfach und nenn es anders und verwende das - so ist es wenigstens Bombensicher.

    Als Programmierer rollen sich die Fußnägel, Code zu doppeln, der sich in nur einer Zeile unterscheidet. Wie sualfred schon sagte: Damit ist der Sinn von einem Template zu haben wieder weg. Aber wenns geht?

    Du könntest aber auch ein <include condition="onclick">MyCustomOnClick</include> im template einbaun und einfach per Param "true" übergeben lassen.

    Damit stürzt Kodi in einer Endlosschleife ab.

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960
    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • ? Müsste aber gehen.

    Noch eine cleane Variante:

    <include name="PanelLayoutTemplate">
    <itemlayout/>
    <focusedlayout/>
    </include>

    <include name="Panel1">
    ...
    <include>PanelLayoutTemplate</include>
    </include>

    <include name="Panel2">
    ...
    <include>PanelLayoutTemplate</include>
    <onclick>Blablablball</onclick>
    </include>

    ---

    Bei mir sind generell fast alle Layouts ausgegliedert aus den Containern, da ich die Dinger mehrfach verwende.
    Ist quasi im Ansatz die selbe Variante von Marc nur in "sauber".

    Beispiel:
    https://github.com/sualfred/skin.…9/ViewTypes.xml

    "I don't caretaker"

    SKIN: Embuary - Donate: HIER de Hoibe bestellen, merci :thumbup:

    Devices: Nvidia Shield + Fire TV 4k --- NAS: i3 6100 | 8GB | 15tb | OMV4 | Emby --- TV: Sony 55" XF9005 + LG 47" LM640S | 114x Adalight | Yamaha 683

  • Als Programmierer rollen sich die Fußnägel, Code zu doppeln, der sich in nur einer Zeile unterscheidet. Wie sualfred schon sagte: Damit ist der Sinn von einem Template zu haben wieder weg. Aber wenns geht?

    Da muss man aber durch im Skinengine ;) . Und wenn genau hinsiehst rollen sich auch deine Nägel auf ein Template zu verwenden das dann Sortby, Limit und diverse andere Dinge ins leere laufen läßt weil es das nicht gibt, oder eine Variable Texture zu Overlays mitläuft die soweiso immer Empty ist im Addon. Und ob deine Addon Thumbs (sind die nicht square) mit keep in der texture

    Code
    <width>245</width>
    <height>200</height>

    jetzt so unbedingt gut werden..

    Hand und Fuß hat das halt nur wenn man alles auseinander trennt wie Sualfred es macht. Und selbst da kommst an einen Punkt wo man sich entscheiden muss ab wann man mit den "Fehlern" nicht mehr leben will.
    Nehm ich jetzt ne Textbox und leb damit das Einzeiler eben nicht mittig sind oder ein Label hab aber nur eine Zeile. Im Skinengine ist vieles immer pfusch weil sogut wie alles doch irgendwie nicht gleich ist.
    Egal ob mit oder ohne Template.

    Ich geh eher den Weg das Code nur dort steht wo er auch etwas macht, dann lieber mehr Templates oder mehr Code die eins richtig machen als wenig code (oder Templates) die Codeteile mitlaufen lassen die unnütz sind oder
    nachträglich mit conditions ausgeblendet werden. Global wird mir das sonst zu kompliziert mit include im include im Parametetrierten include im include.. Nur um 80 zeilen code zu sparen.
    Davon mal abgesehen wird Kodi auch nicht schneller wenn man das Übertreibt, als einfach eins mehr mit klarem visible zu verwenden als Mörder komplizierte Templates zu bauen die jedes mal aufgelöst werden müssen.
    Mir kommt es eh so vor als wären Parameter langsamer, aber das weiß sualfred als "Parameter Includierungs Ebenenkönig" sicher besser was er da tut ;) .

    Aber ich hab auch leicht reden weil unser Skin so gut wie nichts macht weil wir Kodi nur als aufgehübschten Player nutzen ohne Widgets, Addons oder sonstiges :) .

    Grüße

  • Ich habe jetzt einfach den Code gedoppelt, dem Widget einen anderen Namen verpasst und eine zusätzliche Zeile <onclick></onclick> eingefügt. Geht.

    Mit der Einführung der String- und Integer-Conditions hätte man gleich Nägel mit Köpfen machen können und nicht nur Infolabels, sondern auch Parameter und Variablen mit- und gegeneinander vergleichen können. Chance verpasst.

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960
    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Mit der Einführung der String- und Integer-Conditions hätte man gleich Nägel mit Köpfen machen können und nicht nur Infolabels, sondern auch Parameter und Variablen mit- und gegeneinander vergleichen können. Chance verpasst.

    Abseits davon mal ne andere Dumme Frage - kann man denn nicht den click schon übergeben im addon damit der content keinen braucht oder regelt das nur der core über das target?
    Deins ist ja sicher nicht das einzige was in der Konsteallation Probleme macht - das Infoding mit der Bundesliga damals war ja genauso betroffen und eigentlich alles das extra clicks brauchte.
    Dann fehlt doch generell was in Kodi das einem Addon die Möglichkeit gibt den click mitzuteilen.

    Grüße

  • Abseits davon mal ne andere Dumme Frage - kann man denn nicht den click schon übergeben im addon damit der content keinen braucht oder regelt das nur der core über das target?

    Meinst Du sowas (im Skin)?


    Code
    <onclick>$INFO[ListItem.Property(action)]</onclick>

    und die ListItem.Property(action) z.B. mit "RunScript(meinAddon,parameter=xyz)" belegen? Zumindest mit Python kann man die ListItems so erzeugen.

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960
    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Meinst Du sowas (im Skin)?

    eher im addon dachte ich.

    Wenn Kodi einen Provider anbietet, in dem ich ja quasi alles irgendwie unterbringen kann, wie tdoe der da Bundesliga Ergebnisse drin hatte, dann braucht doch diese Funktion in Kodi auch etwas
    wo man im Addon sagen kann was beim click passieren soll - hängt das am target wie video und die knobeln das anhand von dem aus ob nun open in videos wenns ne serie ist oder play bei einem Film, dann fehlt
    doch generell schon was in der Providerfunktion oder sie Erlaubt an einem Ende mehr als am anderen (dem click) dann Möglich ist.

    Es bringt ja herzlich wenig Bundesligaergebnisse in einen Content zu packen wenn man schlussendlich extra container dafür braucht um nen click zu bekommen.
    Deswegen die Frage ob das der Core selber macht in anderen Content wie dem library Service Data Provider oder ob da der click direkt vom Addon kommt.

    Ich hab da ja keine Ahnung von, aber als Skinner will man natürlich den content provider einfach als content angeben und geht davon aus der click kommt vom content selbst.

    Aber das ganze ist eh etwas buggy mittlerweile - teilweise gehen auch die clicks mit DB contents nicht mehr wenn die listen im falschen "Fenster" sind.
    Im videofenster oder der Videoinfo z.B. oder einem Custom Window gehen die teilweise nicht mal mehr mit DB content alleine.
    Da fehlt hier mal ein close (wenns Dialoge sind), und da mal die ganze funktion (weil man schon in videos ist)..

    Grüße

  • Man kann in einem Addon, welches ein/mehrere Fenster erzeugt, sämtliche Aktionen des Nutzers abfangen, auswerten und was eigenes daraus machen. Dafür gibt es sogenannte Event-Listener, die Ereignisse überwachen, wie z.B Klick, Links, Rechts, Hoch, runter usw.

    In einem Skript (Addon/Plugin) kann ich nun für jedes Ereignis programmieren, was passieren soll, wenn dieses eintritt, wie quasi "RunScript(bla)", nur eben intern. Dazu brauche ich in der xml keine <onclick>, <onup> usw. Das xml-Window brauche ich natürlich zur Anzeige und zur Interaktion, denn irgendwo muss man ja draufklicken.

    Beim Fritz SmartHome habe ich das so gemacht, da habe ich einfach die Actions für den Slider umprogrammiert. https://github.com/b-jesch/plugin…s/lib/slider.py

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960
    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Und das heißt als content hat man drauf keinen Einfluss und kodi macht das? dann fehlt doch was in dem content provider denkt man zumindest wenn man keine Ahnung davon hat;)..

    Ansich hat dann ja ein "Mischen im Sinn von ein Container und der user wählt den Inhalt, während der Skinner dann im selben Layout verschiedene contents anbietet" außerhalb von Datenbankabfragen
    wo der click geht überhaupt keinen Mehrwert mehr außer das dir die "alten liste" sparst mit item id="1" usw..
    Aber das ist ja eigentlich auch nur einmal schreiben und eine Nummer suchen und ersetzen.

    Das mischen hat ja den sinn das ich im selben Container nun sagen kann der user kann wählen zwischen meinetwegen

    <content target="video">plugin://service.library.data.provider?type=randommovies&reload=$INFO[Window.Property(randommovies)]</content>
    <content target="video">plugin://service.library.data.provider?type=recentmovies&reload=$INFO[Window.Property(recentmovies)]</content>

    und man nur einen Container braucht was die Menge extrem reduziert.

    Selbst ohne Parameter nimmt man mal an ich setz den content als string oder zur Auswahl mit einer variablen 1= randommovies, 2= recent, steh ich vorm selben Problem wenn
    ich nen extra click brauch, das wieder entweder deiner geh oder die anderen.

    Und grade diese Extras lassen dann alles immer ausufern in Widgets und dem Home speziell.
    Aber damit muss man wohl leben - den provider gibts ja nun seit einigen versionen und wenn es bisher keinen störte wird da wohl nix geändert.
    Wird eher schlimmer wenns dumm läuft - ab 18 kannst mehrere contents in eine Liste packen - wer weiß was da dann noch alles schief geht;).

    Grüße

  • Ich sehe mal wieder, dass Programmierer vollkommen anders ticken als Skinner ;) .


    Das mischen hat ja den sinn das ich im selben Container nun sagen kann der user kann wählen zwischen meinetwegen


    <content target="video">plugin://service.library.data.provider?type=randommovies&reload=$INFO[Window.Property(randommovies)]</content>
    <content target="video">plugin://service.library.data.provider?type=recentmovies&reload=$INFO[Window.Property(recentmovies)]</content>

    und man nur einen Container braucht was die Menge extrem reduziert.

    Alles, was im Aufruf nach dem "?" kommt, sind Parameter, mit denen Du ein Addon/whatever steuern kannst.

    <content>plugin://mein.persoenliches.plugin?action=machdies&wasgenau=$INFO[Window.Property(briefkasten)]</content>
    <content>plugin://mein.persoenliches.plugin?action=machjenes&wasgenau=$INFO[Window.Property(briefkasten)]</content>

    Im Addon kann ich jetzt die 'action' auswerten: Je nachdem, ob ich 'machdies' oder 'machjenes' übergeben bekomme, mache ich eben dieses oder jenes. Das steht mir als Programmierer frei. Auch den Inhalt von 'briefkasten' kann ich entsprechend auswerten. Dabei spielt es keine Rolle, ob in 'briefkasten' ein InfoLabel, ListItem, Parameter, Variable etc epp abgelegt wird, ich kann es auslesen...

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960
    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Alles, was im Aufruf nach dem "?" kommt, sind Parameter, mit denen Du ein Addon/whatever steuern kannst.

    eigentlich alles;)..

    Abseits vom menüscript mit Templates läuft das ja so:
    Hat man ein wählbares Widget, setzt man den content in einen string der im skinsetting landet.

    Man baut also settings dafür die den ganzen content in den string schreiben:

    Skin.SetString(Widget1,plugin://service.library.data.provider?type=randommovies&reload=$INFO[Window(Home).Property(randommovies)])
    Das reload kommt vom script und sort denk ich dafür das der Service das aktualisiert.. Die Zeile bekomme ich so vorgegeben vom Addon während der click von selber geht, ohne ein Runscript oder irgendwas drin.

    Oder für einen anderen inhalt dann
    Skin.SetString(Widget1,plugin://mein.persoenliches.plugin?action=machdies&wasgenau=$INFO[Window.Property(briefkasten)])

    Danach dann kann ich dann vereinfacht gesagt den content im Widget 1 mit
    <content>$INFO[Skin.string(Widget1)]</content>
    darstellen und muss nur die die sich im layout unterscheiden mit irgendwas auch immer getrennt im code darstellen - wie im Estuary Poster, Music oder aber ein Addon bei den der click nicht geht.

    Heißt also wäre jetzt Serien oder Filme drin, die beide als Poster dargestellt werden sollen/können, kann ich das in einem include schaffen, was das im Estuary refresh so aussieht:

    Code
    <include content="WidgetListPoster" condition="String.IsEqual(Skin.String(CustomHome1WidgetLayout1),filme) | String.IsEqual(Skin.String(CustomHome1WidgetLayout1),serien)">
    							<param name="content_path" value="$INFO[Skin.String(CustomHome1WidgetPath1)]"/>
    							<param name="widget_header" value="$INFO[Skin.String(CustomHome1WidgetHeader1)]"/>
    							<param name="widget_target" value="videos"/>
    							<param name="list_id" value="6022"/>
    						</include>

    Das wird natürlcih noch komplizierter mit traget, limit und dem ganzen Rest an sortierungen.. Also eigentlich schon schlimm genug;)


    würde jetzt der click gehen in einem Addon das einen content zur verfügung stellt, muss ich nur noch eins der vorhandenen Layouts finden das passt, z.B. episoden das eh schon da ist und das skininterne Widgetlayout erweitern und beim addon gto sagen setz den content in einen string und sag dabei zusätzlich noch widgetlayout = gto

    Code
    <include content="WidgetListEpisodes" condition="String.IsEqual(Skin.String(CustomHome1WidgetLayout1),episoden) | String.IsEqual(Skin.String(CustomHome1WidgetLayout1),gto)">
    							<param name="content_path" value="$INFO[Skin.String(CustomHome1WidgetPath1)]"/>
    							<param name="widget_header" value="$INFO[Skin.String(CustomHome1WidgetHeader1)]"/>
    							<param name="widget_target" value="videos"/>
    							<param name="list_id" value="6020"/>
    						</include>

    Dann sorgt das String.IsEqual(Skin.String(CustomHome1WidgetLayout1),gto) dazu das es angezeigt wird wenn das addon der content wäre, während im Skin.String(CustomHome1WidgetPath1)


    der content Skin.SetString(Widget1,plugin://mein.persoenliches.plugin?action=machdies&wasgenau=$INFO[Window.Property(briefkasten)]) stehen würde.
    Wenn, ja wenn der click gehen würde. da er das nicht tut brauch ich dein extra include in jedem konfigurierbarem menüpunkt.


    Du hast ja jetzt im Estuary als Beispiel einfach in der Widgetgruppe fürs Live-TV dein Addon Hardcoded als Include drin, richtig?

    Jetzt stell dir vor der bumblebee macht das auch, der hat aber meinetwegen 6 Menüpunkte die Live-TV sein können. Er ruft also das include als conditional 6 mal in jeder Gruppe einmal auf.
    Egal ob der user das nun überhaupt wählt oder er Live-TV im menü hat. Jedesmal beim aufrufen der Home werden alle 6 includes aufgelöst von Kodi und entsprechend dargestellt oder nicht.
    Selbst wenn ichs nie verwende wird bei jedem Laden das geprüft.
    Da muss man sich schon gut Überlegen ob man das Addon einbaut, Da kommt man schnell auf 15 Container includes pro Menüpunkt für 3 Widgets bis man alle Möglichkeiten drin hat für jedes
    mögliche Widget. Machst noch Wetter oder sonst was in jedem dazu wird nochmal mehr.

    Deswegen fehlt für mich einfach der "automatische click" ohne was zu tun. Und nicht jeden einzelnen Briefkasten einzeln einzubauen bis ich ein eigenes Postverteilungszentrum bin;)..

    Grüße

  • Selbst wenn ichs nie verwende wird bei jedem Laden das geprüft.

    Dafür sind ja Conditions da. Es gibt Skripte, die prüfen z.B. ob ein bestimmtes Verzeichnis existiert. Wenn nicht, legt das Skript eines an. Bei jedem Start prüft das Skript erneut, ob das Verzeichnis existiert - da es jetzt existent ist, braucht das Skript nichts weiter zu machen. Eigentlich ist die Sequenz jetzt vollkommen überflüssig und wertlos. Streiche ich sie jetzt raus (wird nicht mehr gebraucht), crasht bei der nächsten Installation das Plugin weil - ja weil das Verzeichnis nicht existiert. So ist das eben.

    Stell' Dir eine Programmschleife vor, die z.B. 1000x loopt. Da wird 1000x eine Condition geprüft...
    Includes werden doch wirklich nur inkludiert (und damit der 'Quelltext' vergrößert) , wenn die entsprechende Condition auch greift (wahr ist).

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960
    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Stell' Dir eine Programmschleife vor, die z.B. 1000x loopt. Da wird 1000x eine Condition geprüft...
    Includes werden doch wirklich nur inkludiert (und damit der 'Quelltext' vergrößert) , wenn die entsprechende Condition auch greift (wahr ist).


    Naja, leider eben nicht so ganz - ich bin ja nicht so der Erlärbär, dazu schweife ich immer zu sehr ab, aber ich versuch mal:

    Includes ohne condition, Angezeigt nur durch visibles wie im Estuary mit
    <visible>$PARAM[visible]</visible>
    werden immer geladen nur nicht angezeigt. Das ist ein großer Unterschied.

    Ein

    Code
    <include condition="Bin ich ein Briefkasten">Briefkasteninclude</include>

    wird in der Tat nur geladen wenn sie zutrifft.

    Ein

    Code
    <include>Briefkasteninclude</include>

    mit einem visible im Code <visible>Bin ich ein Briefkasten?</visible> wird immer geladen, nur nie angezeigt wenn es keiner ist.

    Geh ich nun vom Home in Filme, und wieder zurück, ist die Anzeige des Inhaltes nur "so schnell" da weil die ganzen includes im Speicher bleiben.
    Immer der komplette Inhalt des aktuellen Fensters und das PreviouseWindow bleiben in Loader - das ist auch der Grund warum bei komplexen Skins beim ersten öffnen von Filme paar Sekunden warten musst während es danach schneller ist. Erst ab dem "dritten Fenster", würde ich jetzt von Filme zu Einstellungen wechseln fallen die Includes die nur im Home verwendet wurden aus dem Speicher wenn sie nicht auch in Filme eingesetzt wurden.
    Dies Menge an include beeinflussen die Geschwindkeit enorm - würde man in einem MQ mal 80% der Views rauswerfen und beide versionen auf einem Pi testen, würde man nen deutlichen Unterschied merken. Da ist es genau dasselbe - jede view mit ihrem visible mit geladen in der Mynav - nicht nur die gerade aktive..

    Und das ist eben der Knackpunkt:
    Der Estuary "Bügelt" schon mit seinem Aufbau eine "Unzulänglichkeit", oder keine Ahnung wie man sowas nennen soll, aus:

    Ein

    Code
    <include condition="Bin ich ein Briefkasten">Briefkasteninclude</include>

    wird ja nur geladen wenn es beim Laden zutrifft.


    Sprich, die Widgetgruppe Filme, ist ja sichtbar wenn

    Code
    <visible>String.IsEqual(Container(9000).ListItem.Property(id),movies)</visible>

    zutrifft. Die würde mit einem include condition="<visible>String.IsEqual(Container(9000).ListItem.Property(id),movies)</visible>" nur kommen wenn beim laden der Menüpunkt Filme fokussiert ist. Nur dann und auch wirklich nur dann.
    Ist es ein anderer und scrolle ich zu Filme kommt gar nichts außer man würde reloaden und den Focus dabei behalten.


    Würde man jetzt alle Propertys in irgendwelche "Monstermusterwidgets" Anhand des Focus bestimmen, ohne alle Widgets extra zu machen.
    Also Widget1 bleibt stehen und der Inhalt ändert sich durch das Scrollen:
    ListItem.Property(id) macht ja nichts anders - im Menücontent ist ein property ID. Da könnte ich auch den content als Property reinschreiben und denselben Container
    für Movies und Serien nehmen...
    Da Kodi aber nicht schnell genug dafür ist, kannst dann beim Scrollen bis zu einer Minute warten bis der Inhalt wechselt und das Widget aus dem vorherigen Container
    wäre solange noch als Inhalt sichtbar.

    Das gleicht man aus indem man alle Widgets nicht einmal sondern für jeden Menüpunkt extra drin hat und jeweils nur eins Anzeigt das dem Property ID entspricht.

    Über Sinn und Unsinn kann man jetzt streiten, ich find diesen Aufbau für ein Konfigurierbares Menü wiedersinnig:

    • Angenommen ich habe 10 Menüpunkte mit 3 Widgets, die durch verschiedene Inhalte 20 Verschiedene "Aussehen" (includes) haben können (Poster, Episoden, Addons, Wetter, Kategorien, Ein Addon das nen Klick braucht).
    • Ich konfiguriere mir 3 Widgets bei jedem - macht 30 Widgets die ich aktiv nutzen will.
    • Ich lade dann includes mit fertig aussehenden Widgets pro Menüpunkt, macht 600 virtuell mehr oder weniger lauffähige widgets, von denen dann je nach Unterschied, wären alle Sichtbar einige Scheiße aussehen (Poster von Filmen reingequtscht in ein Albumcover) oder gar nicht funktionieren (Ein wetterwidget mit Filminhalt), aber egal..

    Die 30 Widgets lass ich dann Anzeigen mit einem visible "condition irgendwas" was dann true ist. Die anderen 570 schwirren halt irgendwo im Nirvana herum.
    Das kann ja nicht Sinn und Zweck sein, zumindest für mich nicht.


    Aber das war ja eigentlich auch nicht der Grundgedanke, wir sind ja vom eigentlichen Thema abgekommen:

    Dein richtiger Einwand, ein Template das an einer Stelle Abweicht neu zu machen wäre Pfusch, ist ja richtig.

    Deswegen die Suche nach dem Grund:
    Fängt man da bei Null an muss man sich ja nicht als erstes Fragen warum klappt der conditional Click von dir nicht, sondern warum klappen die Kodi internen clicks in anderen contents?

    Egal ob nun videodb:\\movies\titles oder plugin://service.library.data.provider?type=randommovies&reload=$INFO[Window.Property(randommovies)] oder alle videoaddons in einer Liste,
    der click geht von selber, ohne einen selbst im Skincode zu haben. Ob der nun vom Target irgendwie vom Core ermittelt wird, keine Ahnung.

    Darum war die Frage: wenn man nach der Übergabe von plugin://mein.persoenliches.plugin?action=machdies&wasgenau=$INFO[Window.Property(briefkasten)] man keinen Einfluss mehr darauf hat
    und das Kodi danach Regeln muss, das dann doch was fehlt oder?
    Wenn das action=machdies von dir nicht mitgegeben werden kann in Form eines RunScript was du brauchst fehlt ja die Funkion im provider generell...

    Also was in der Art:
    Einen Click angeben oder den internen von Kodi nutzen wenn es einen hat.

    Code
    <content target="video" defaultclick"true">plugin://service.library.data.provider?type=randommovies&reload=$INFO[Window.Property(randommovies)]</content>
    
    
    <content target="video" defaultclick"false" click="machdies">plugin://mein.persoenliches.plugin]</content>

    Denn so kann man die Contentgeschichten ja wirklich nur für Dinge verwenden die Funktionieren.
    Der Vorteil von Infolabels und Artworks Allgemeingültig zu Nutzen um im selben Layout verschiedene Inhalte Abzubilden wird ja ad absurdum geführt wenn ich danach prüfen muss in welchem
    das Ausführen geht und alle bei denen nicht, dann einzeln Einbaue um so eine Funktion des clicks Nachzubilden.

    Aber vielleicht bin ich ja auf dem Holzweg. Ändern kann man ja eh nichts dran.
    Wenigstens klappts jetzt bei dir, das ist ja schon mal was;)..

    Grüße

Jetzt mitmachen!

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