kodi beim Start programmieren

  • @HarmUb

    die "library"-funktionen scheinen mit dem 2ten Parameter True synchron abzulaufen, aber RunAddon ignoriert das und wird weiterhin asynchron gestartet.
    Vlt. könnte man auf das was RunAddon machen soll eine while schleife legen und prüfen ob dies fertig ist bevor der nächste Schritt ausgeführt wird.
    Was macht der RunAddon(script.artwork.downloader) ?

    Hier mein Test

    Bezgl. Menü, ja, wenn Du das z.B. in ein Script-Addon packst wird dies unter Addons->Programm addons angezeigt und kann ausgeführt werden.
    Per KeyMapping auch über die Fernbedienung.

    Cheers
    Claudia

  • RunAddon(script.artwork.downloader) führt den Artworkdownloader aus mit dem was in den Einstellungen alles Ausgewählt wurde (Poster, Fanarts, Logo usw.)
    und schreibt es in die passende DB. Die schwierigkeit beim Skinning zumindest ist immer das das Teil den DialogConfirm.xml öfters Aufruft.
    Keine Ahnung ob das relevant ist beim "Programmieren".

    Man könnte das auch zugegeben etwas Kompliziert mit Custom Windows versuchen innerhalb eines Skins und den jeweiligen Dialogen die dadurch aktiv sind.
    Unsichtbar dürfte aber mit keiner Variante gehen - man triggert ja nur Befehle:

    DB Update -> DialogExtendedprogressbar.xml - Navigation möglich
    DB Cleanup -> DialogConfirm.xml - keine Navigation möglich weil es ein Abbrechen gibt
    DB Export -> DialogConfirm.xml - keine Navigation möglich weil es ein Abbrechen gibt

    AD Download -> DialogConfirm.xml - keine Navigation möglich weil es ein Abbrechen gibt

    Als Beispiel:
    Ein Cutom Window das beim Start sichtbar ist - schließt sich wenn startup nicht mehr vorhanden ist und macht ein DB Update

    XML
    <?xml version="1.0" encoding="UTF-8"?>
    <window type="dialog" id="1110">
    <visible>Window.IsVisible(startup)</visible>
    <onunload>UpdateLibrary(video)</onunload>
    <controls>
    </controls>
    </window>

    Ein zweites leeres Window müsste jetzt offen sein wenn ein DB Update läuft und beim schließen das von selber passiert den cleanup auslösen

    XML
    <?xml version="1.0" encoding="UTF-8"?>
    <window type="dialog" id="1111">
    <visible>Library.IsScanningVideo</visible>
    <onunload>SetProperty(RunningStartupcycle,Artworks,home)</onunload>
    <onunload>CleanLibrary(video)</onunload>
    <controls>
    </controls>
    </window>


    Dabei wird das Property RunnigstartupCycle gesetzt auf Artworks mit dem man dann in Kombination mit den Kodi Dialogen und/oder leeren Dialogen den Rest irgendwie hinbekommen kann.
    Ist nicht schön aber machbar mit genug Knobelei... Aber sicher nicht das was er will weil es doch schnell hakt irgendwo;).

    Grüße

  • @Marc0810 Ich habe kein bisschen von dem verstanden was du mir sagen möchtest. Tut mir leid :-S so bewandert mit Kodi programmierung bin ich leider nicht. Was sind Custom Windows?

    @ClaudiaF Danke für deine Mühen ! :)

    Zu

    Was macht der RunAddon(script.artwork.downloader) ?

    Marc0810 hat die Antwort bereits geliefert...

    RunAddon(script.artwork.downloader) führt den Artworkdownloader aus mit dem was in den Einstellungen alles Ausgewählt wurde (Poster, Fanarts, Logo usw.)
    und schreibt es in die passende DB.


    Zu

    Bezgl. Menü, ja, wenn Du das z.B. in ein Script-Addon packst wird dies unter Addons->Programm addons angezeigt und kann ausgeführt werden.
    Per KeyMapping auch über die Fernbedienung.

    Kannst du mir bitte erklären wie das geht?

    Noch eine frohe Weihnacht zusammen!

    Grüße HarmUb

    RasPi 3, LibreElec 8.2.5, Kodi 17.6

  • @HarmUb - auch Dir und allen KODIanern etc... noch herzlichste Weihnachtswünsche.

    Zu empfehlen ist natürlich dies hier.
    Was ich getan habe ist folgendes

    1) unter ~/.kodi/addons ein Verzeichnis erstellt das die addon-id des noch zu erstellenden Addons wiederspiegelt (in meinem Fall heißt das Verzeichnis script.long.running)

    2) in dieses Verzeichnis wechseln und zwei Dateien, addon.xml und default.py anlegen, sowie eine Bilddatei namens icon.png kopieren (dies wird dann im Menü angezeigt)

    3) die Datei addon.xml editieren


    XML
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <addon id="script.long.running"
          name="Long Running"
          version="0.0.1"
          provider-name="me">
      <extension point="xbmc.python.script"
                 library="default.py" />
    </addon>


    hier, eine minimalst Version, siehst Du das die addon id gleich deinem Verzeichnisname sein soll.
    Wichtig, dass was hinter library steht wird gesucht und ausgeführt und muß deswegen mit dem zu erstellenden python script übereinstimmen
    Speichern, schließen.

    4) die Datei default.py editieren


    Python
    import xbmc
    xbmc.executebuiltin('CleanLibrary(video)', True)
    xbmc.executebuiltin('UpdateLibrary(video)', True)
    xbmc.executebuiltin('RunAddon(script.long.running)', True)
    xbmc.executebuiltin('exportlibrary(video,true,thumbs=true,overwrite=false,actorthumbs=false)', True)

    speichern, schließen.
    Kodi neustarten bzw. starten.
    Wenn alles richtig gemacht wurde, im Hauptmenu auf Add-ons->My Addons->Program add-ons und dein Script addon enablen -> jetzt solltest Du im
    Hauptmenu unter Add-ons dein neues Addon sehen.
    Hoffe ich habe nichts vergessen.

    Nur um klarzustellen, dass wird das asynchrone ablaufen nicht verhindern, dass ist klar, oder?

    Bezgl. deinem Problem frage ich mich gerade ob Kodi-DB Trigger kennt, dann könnte man ja Clean- und UpdateLibrary aufrufen, dann RunAddon und per trigger exportLibrary...hmm... !??
    Mal sehen.

    @Marc0810 - vielen Dank für die Info.
    Weißt Du ob das Addon ausser in die DB schreiben noch ggf. Dateien anlegt und pflegt. Evtl. Status über Laufzeit protokolliert?

    Cheers
    Claudia

    2 Mal editiert, zuletzt von ClaudiaF (26. Dezember 2017 um 22:51) aus folgendem Grund: import xbmc vergessen

  • Hey,

    Weißt Du ob das Addon ausser in die DB schreiben noch ggf. Dateien anlegt und pflegt. Evtl. Status über Laufzeit protokolliert

    Soweit ich weiß legt er nur ein protokoll an über den download. Dort stünde nur drin was es lief und was nicht gefunden wurde.
    ..Kodi\userdata\addon_data\script.artwork.downloader\downloadreport.txt

    Weiteres weiß ich auch nicht, ein Tempverzeichnis ist aber dort vorhanden falls die das was bringt.

    Custom Windows sind eigene Fenster in einem Skin. Die sichtbarkeit dieser Fenster wenn sie Dialoge sind haben die auch keine Navigation wenn man will, kann man als Trick dazu nutzen um mehrere Befehle abzusetzen. Z.B. nutzen Skins die bei Musik automatisch in die Visualisierung springen sowas:
    Man blendet ein leere Fenster ein wenn Musik nicht läuft, das schließt sich wenn eine läuft und öffnet beim schließen die Visualisierung.

    Mit diesem Trick kann ich auch sagen blende ein Fenster ein wenn ein DB Update läuft, das schließt sich danach von selbst und führt dabei den zweiten Befehl aus.

    Aber als Script ist es sicher einfach bei Vier oder Fünf Befehlen. Ich wollte es nur Erwähnen falls Ihr das "warten" nicht in den Griff bekommt;).

    Grüße

  • @HarmUb

    Du könntest Dir folgendes in die autoexec.py kopieren.


    Das Skript würde dann folgendes tun

    1. prüfen ob eine alte downloadreport.txt Datei vorhanden ist, wenn ja - löschen
    2. CleanLibrary und UpdateLibrary nacheinander abarbeiten
    3. RunAddon starten
    4. Nun wird solange geprüft ob die Datei downloadreport.txt wieder angelegt oder die maximale Wartezeit erreicht wurde
    a. wenn eines der beiden wahr ist mit Punkt 5 weitermachen
    b. wenn nicht, für X Sekunden schlafen
    c. und auf die maximale Wartezeit addieren
    d. wenn maximale Wartezeit erreicht ist, das Wartezeit-Flag auf wahr setzen, damit die Schleife unterbrochen wird
    5. prüfen ob das maximale Wartezeite-Flag wahr ist, wenn nein, download vorher fertig, exportlibrary abarbeiten

    Die Werte kannst Du Dir in der Settings-area anpassen (weiß nicht ob der Download innerhalb 30 Sekunden im Normalfall abgeschloßen ist)

    Natürlich kannst Du das ganze auch als Script-Addon lösen.

    Die Annahme, die dieser Lösung zu Grunde liegt ist die, dass das ArtworkDownloader Addon erst die ...report.txt schreibt wenn es fertig ist.
    Sollte dies nicht der Fall sein, kann es sein das der exportlibrary Aufruf vorher abgearbeitet wird.

    Cheers
    Claudia

  • @ClaudiaF

    tl;dr

    hat der User mittlerweile "wait for network" aktiviert? Ansonsten würde ich bzgl des Library Cleans vorher nochmal auf die Netzwerkanbindung bzw. auf die Antwort eines NAS checken.

    NAS aus + Clean Library = empty Library

    oder verstehe ich was falsch?

    Die IP zum NAS könnte man ggf aus der sources.xml lesen.

  • Hi @DaVu - kann ich nicht sagen, kann nur HarmUb beantworten.
    Dein Einwand ist natürlich korrekt, aber das Skript sollte das machen was er anfragte, ob dass das ist was er wirklich will ... ???
    Wenn er den Weg gehen will, dann kann er ja vlt. nochmal genau definieren unter welchen Umständen was genau gemacht werden soll.
    Vieles ist machbar, aber ehrlich gesagt bin ich da zu faul zum testen, dass überlasse ich dann dem Fragesteller da dieser ja eine Vorstellung
    hat, was er realisiert haben möchte. Hoffe ich zumindestens ;)

    Cheers
    Claudia

  • aber das Skript sollte das machen was er anfragte, ob dass das ist was er wirklich will ... ???

    Jaja, sicher. Kein Einwand ;)

    Ich bin halt nur so nen Typ, der noch 20 checks in ein Script einbaut. Frei nach Murphy's Law...shit happens ;)

  • Ich bin halt nur so nen Typ, der noch 20 checks in ein Script einbaut. Frei nach Murphy's Law...shit happens

    :) nicht der schlechteste Ansatz wenn es um Programmierung geht :)

    im Sinne von shit happens würde ich sagen

    try
    BackupLibrary
    CleanLibrary
    UpdateLibrary
    RunAddon
    ...
    except Backupfehler
    Abbruch und Meldung

    except ansonst
    Abbruch,Meldung und Backup wieder einspielen


    das muß aber so auch von der API unterstützt sein, sprich das Skript muß auch die Möglichkeit haben die
    Infos ob erfolgreich oder Fehler abzugreifen, ggf. bei Datenbankaktionen auch auf Transaktion setzen
    und diese im Fehlerfall zurückrollen.
    Aber ich gebe zu, ich habe mich in die internas von KODI noch nicht wirklich eingearbeitet.

    Cheers
    Claudia

  • Moin Moin,

    sorry das ich mich nicht schneller melde! Bin momentan im Stress vom Studium her, da bleibt das Hobby etwas liegen.

    Habe noch eine doofe Frage zu:

    1) unter ~/.kodi/addons ein Verzeichnis erstellt das die addon-id des noch zu erstellenden Addons wiederspiegelt (in meinem Fall heißt das Verzeichnis script.long.running)

    Wie komme ich dahin? Wenn ich ganz normal in Windows über das Netzwerk auf mein Kodi gehe finde ich diesen Ordner nicht. Ich habe höchstens "\\LIBREELEC\Userdata" aber da aus meiner Anschauung herraus nur die von mir getätigten einstellungen des jeweiligen Addons drin.

    Zu:

    von @ClaudiaF. Also die Schleife tut was es soll! Danke schonmal für deine Mühe. Habe es getestet und mir ist aufgefallen, dass die Befehle aus Zeile 18 und Z19 zeitgleich ausgeführt werden. Das liegt wahrscheinlich daran, dass der Befehl aus Z18 nicht im Vordergrund mit einem Window ausgeführt wird sondern im Hintergrund... Z17 wird im Vordergrund mit Window ausgeführt. Nach Abschluss beginnt dann der Befehl aus Z18 und Z19 mehr oder weniger zeitgleich.
    Z9 habe ich mal auf 10min = 10*60=600s eingestellt. bei großen datenbanken sollte das ausreichen.
    Aber ansonsten klappt es einwandfrei *Daumen hoch*


    Zu

    Hi @DaVu - kann ich nicht sagen, kann nur HarmUb beantworten.
    Dein Einwand ist natürlich korrekt, aber das Skript sollte das machen was er anfragte, ob dass das ist was er wirklich will ... ???
    Wenn er den Weg gehen will, dann kann er ja vlt. nochmal genau definieren unter welchen Umständen was genau gemacht werden soll.
    Vieles ist machbar, aber ehrlich gesagt bin ich da zu faul zum testen, dass überlasse ich dann dem Fragesteller da dieser ja eine Vorstellung
    hat, was er realisiert haben möchte. Hoffe ich zumindestens

    also ich habe meine Filmdateien etc. noch auf einer Festplatte die direkt an meinen RaspPi mit LibreElec hängt. Iwann steht der Umstieg auf eine NAS auch an.
    Demnach bin ich momentan zufrieden! Danke!
    Für die Zukunft wäre das aber vllt nochmal ein Thema...

    Also ich würde das ganze eigentlich als ein "Aktualisiere, bereinige etc. mir meine DB in Kodi und schreibe mir die entsprechenden Artworks und .nfo-Datei in die Ordner wo auch die Filmdateien liegen"-Befehl ansehen. Sozusagen ein All.in.One-Befehl zum gesamtheitlichen Aktualisieren der DB und des Ablageortes...
    Anderen Benutzer hier im Forum möchte ich dies natürlich auch zukommen lassen. Sprich wenn es dann iwann auch mal mit dem Skript aufrufen über das Menü klappt, würde ich das Fertige hier mal einstellen wollen sodass auch jeder was davon hat. Da wäre es mit dem Abwarten ob die DB auch da ist natürlich hilfreich!


    Insgesamt vielen Dank erstmal für eure Mühen.

    Grüße und guten Rutsch ins Jahr 2018
    HarmUb

    RasPi 3, LibreElec 8.2.5, Kodi 17.6

  • Absolut richtig - Konzentration aufs Studium. :thumbup:

    per ssh auf den RPi einloggen und dann mit
    cd .kodi/addons
    ins Verzeichnis wechseln und mit
    mkdir NAME_DEINES_SCRIPTS_ADDONS
    erstellen.

    Hmm ... seltsam, bei mir öffnete sich ein Fenster wenn auch nur ganz kurz, habe dass auf die nicht vorhandenen FIlme etc... geschoben.
    Mein Kodi macht nur SkyGO und Netflix keine gespeicherten Filme.
    Da ich auch keine habe ... mp3s habe ich einige ~2 GB ...

    Weiß jemand was UpdateLibrary macht bzw. wo dies dokumentiert ist (ausser im SourceCode)?

    Cheers
    Claudia

  • Weiß jemand was UpdateLibrary macht bzw. wo dies dokumentiert ist (ausser im SourceCode)?

    sollte eigentlich die quellen durchsuchen und abgleichen mit der DB. Wenn es einträge gibt die nicht in der DB vorhanden sind dann übernehmen...


    Habe das mit dem Script ausprobiert. SSH Verbindung habe ich filezilla hinbekommen. Klappt echt gut! Danke!

    RasPi 3, LibreElec 8.2.5, Kodi 17.6

  • @HarmUb

    hab, denke, einen Weg gefunden die Clean- und Update-Funktionen zu steuern und die Info zu bekommen wann die fertig sind.
    https://codedocs.xyz/xbmc/xbmc/clas…_1_monitor.html

    Allerdings hab ich noch nicht ganz verstanden wie das gelöst werden soll.

    Vermutung war ich baue eine Klasse monitor die von xbmc.Monitor erbt und überschreibe die benötigten Funktionen.
    Dann erstelle ich einfach eine Instanz und würde die jeweiligen Funktionen aufgerufen bekommen. Leider ist dem so nicht.
    Ich kann nur auf die Callbacks zurückgreifen wenn ich waitForAbort benutze ... das blockt aber das Skript ... hmmm (vielleicht ein Kodi 18 Problem??)

    Spiele noch ein bisschen - wenn aber jemand die Lösung weiß und die verraten will bin ich auch nicht böse :D

    Cheers
    Claudia

  • @HarmUb

    hab keinen anderen Weg gefunden als die Benutzung über waitForAbort - dieser Code sollte das einzeln abarbeiten - noch nicht 100% schön aber tut.


    Bitte deine Werte in Zeile 50 (_monitor = _MONITOR(30,5)) einsetzen.

    Ich schaue mal ob ich das nicht nächstes Jahr ein bisschen schöner gestalten kann.

    Cheers
    Claudia

  • Muss echt mal ein Lob aussprechen wie Angargiert hier versucht wird zu helfen. Großes Lob an euch beide wie Ihr euch da reinhängt für "vermeitlich fremde Probleme".
    Mit richtigen Lösungsansätzen bei denen man wirklich merkt das mehr drüber Nachgedacht wurde als nur schnell mal die Richtung anzuzeigen wie es gehen könnte.

    Grüße

  • Bin das Thema Batchverarbeitung noch einmal angegangen und habe es etwas geändert.
    Ich hoffe die Kommentare und der Code sind ausreichend.


    Cheers
    Claudia

Jetzt mitmachen!

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