Hallo Ich habe heute versucht einen eigenen IPTV Client für Kodi zu programmieren. Mir kam dann folgende Idee: Es gebe eine Liste mit Kanälen. Links ein Bild z.B von ZDF rechts vom Bild steht ZDF und es exestiert ein Skript namens "zdf.py" und wenn man drauf klickt wird das Skript gestartet. "zdf.py" spielt beim ausführen Live ZDF ab. Nun leider konnte ich wegen schlechten Kodi Kentnissen sowas leider nicht umsetzen weswegen ich wissen möchte ob mir jemand dabei helfen kann. Zumindestens eine Beispiel Kodi-Addon-ZIP-Datei. Vielen dank im vorraus!
Wie kann man eine Menüliste machen
-
Leocat -
9. Juli 2020 um 20:43 -
Erledigt
-
-
Du brauchst keine schlechten Kodi-Kenntnisse, sondern eher gute Python-Kenntnisse. Wie sieht es denn damit aus? Schon mal was in Python programmiert?
-
-
Joa relativ oft. Aber die Kodi-Apis sind mir neu. Die Grundlagen stehen ja schon. Ich kann problemlos die m3u8 streams von ZDF etc. abspielen. Nur diese Listen machen mir Probleme.
-
Warum benutzt nicht das PVR IPTV Simple oder nen Playlist Loader?
Was soll dein Wunschprojekt denn für ein Vorteil gegenüber den bestehenden Möglichkeiten haben?
Gibt doch schon alles, was du brauchst. -
-
Dann gebe ich Dir jetzt eine Liste, deren Listitems Wörterbucheinträge sind. Ich möchte, dass Du diese Liste iterativ durchläufst und per Print-Anweisung zum channel das icon und den title ausgibst. Letztendlich ist das ein Einzeiler. Hier die Liste:
-
@Publish3r: Manche wollen auch in die Kodi-Programmierung einsteigen. Aller Anfang ist schwer und noch glaube ich an das Gute.
-
-
Ich mache das auch um Kodi ein bisschen näher kennen zulernen. Der Vorteil ist somit: Der Lern effekt
Apropo wenn ich schon schreibe... ich habe folgendes entdeckt: https://kodi.wiki/view/List_Container nun das scheint eigentlich ok zu sein aber die Dokumentation ist blöd. Kann mir jemand erklären wie genau man solch eine Liste erstellt falls überhaupt das richtige ist? https://ibb.co/939Wh4p hier ist ein Bild wie ich es machen möchte um es genauer zu beschreiben
EDIT: Oops da habe ich was verpasst! Ich probiere alles mal aus danke!
-
Der List_Container beschreibt das Layout einer Liste, nicht die Liste selbst. Das ist was für Skinner. Bitte mal Post #5 lösen, dann sehen wir weiter.
-
-
-
Super! Da es schon spät ist, machen wir morgen weiter. Bis dahin kann ich Dir etwas Lesestoff geben.
Die Einträge in einer Liste nennt man Listitems. Aus diesen Listitems wird später die Liste aufgebaut. Für die Dartsellung der Listitems ist das Modul xbmcgui zuständig. Das musst Du in deinem Projekt importieren. Dem xbmcgui.ListItem kann man ein Icon, einen Text (Label1) sowie einen weiteren Text (Label2, etwas kleiner), wie in Deiner Abbildung zuweisen:
-
-
OK vielen Dank!
-
Ok ich habe versucht jetzt alleine weiter zu machen:
Code
Alles anzeigenfor a in channellist: listitem = xbmcgui.ListItem() listitem.setLabel((channellist[a]['title']).decode('utf-8')) listitem.setLabel2((channellist[a]['title']).decode('utf-8')) listitem.setArt({'icon': channellist[a]['icon']}) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys.argv[0], listitem=listitem)
scheint aber nicht zu funktionieren. Zuerst bekam ich einen Fehler weswegen ich in addon.xml xbmc.python.script zu xbmc.python.pluginsource änderte. Aber es blinkt in Kodi nur kurz auf und dann endet es. Könnte mir jemand helfen?
-
-
Erstmal bist Du prinzipiell auf dem richtigen Weg. Ein paar Hinweise:
- Belasse es erstmal bei xbmc.python.script, ein Plugin funktioniert anders.
- das .decode('utf-8') würde ich erstmal weglassen, solange keine Umlaute verwendet werden, gibts da auch keine Probleme. Eine Fehlerquelle weniger.
- Du baust zwar deine Liste, allerdings musst Du sie auch anzeigen
- jedem xbmcgui.ListItem kann man auch extra Properties mitgeben z.B. den Kanalnamen oder einen Scriptpfad.
Code
Alles anzeigen# menu nimmt die Listitems auf und stellt sie später dar menu = list() for a in channellist: listitem = xbmcgui.ListItem() listitem.setLabel((channellist[a]['title']).decode('utf-8')) listitem.setLabel2((channellist[a]['title']).decode('utf-8')) listitem.setArt({'icon': channellist[a]['icon']}) # extra Properties listitem.setProperty('channel', a) # 'path' muss natürlich in der channellist definiert werden listitem.setProperty('script', channellist[a]['path']) menu.append(listitem) # Liste anzeigen entry = xbmcgui.Dialog().select("Senderliste", menu) # in entry stheht die Nr. des ausgewählten Eintrages (0 -> erster, n-1 ->letzter, -1 -> Abbruch))
Mit dem Wert entry kannst Du jetzt die Listitems auslesen und weiterverarbeiten, wie in jeder anderen Liste auch:Codetext = menu[entry].getLabel() selected_channel = menu[entry].getProperty('channel') script_path = menu[entry].getProperty('script') # usw.
Das ist jetzt alles aus dem Kopf, bei Fehlern bitte die Fehlermeldung mitposten.
-
Oh vielen Dank es hat funktioniert!
-
-
Mir ist gerade aufgefallen dass die Icons nicht richtig funktionieren... muss man sie einfach in den addon ordner tuhen oder woanders hin? Mit Addon-Ordner meine ich den Ordner in dem auch z.B addon.xml ist usw
-
Icons können entweder lokal irgendwo liegen (günstigerweise im Addonverzeichnis selbst) oder auch aus dem Netz kommen. Dann haben sie als Pfad eine URL.
Wenn Du sie lokal halten willst, legt man sowas unter <addon-verzeichnis>/resources/media/ ab --> https://kodi.wiki/view/Add-on_structure. Um den Pfad im Skript zu ermitteln und zu setzen, gibt es:Codeimport xbmcaddon import os iconfolder = os.path.join(xbmc.translatePath(xbmcaddon.Addon().getAddonInfo('path')), 'resources', 'media')
Auf die Icons kannst Du dann per
zugreifen. Das kann man auch gleich so in der channellist eintragen, also 'icon': os.path.join(iconfolder, 'zdf.icon')
-
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!