gibt es eigentlich die moeglichkeit, eine funktion eines selbst gebasteltes plugins aufrufen zu lassen, wenn/bevor die box runterfaehrt?
danke.
Plugin Cleanup Function Aufruf bei Shutdown
-
-
Ja, klar geht das.
siehe z.B. im EPGRefresh:
Python
Alles anzeigendef autostart(reason, **kwargs): if reason == 0 and "session" in kwargs: session = kwargs["session"] epgrefresh.session = session if config.plugins.epgrefresh.enabled.value: # check if box was woken up by a timer, if so, check if epgrefresh set this timer if session.nav.wasTimerWakeup() and config.misc.prev_wakeup_time.value == config.plugins.epgrefresh.wakeup_time.value: # if box is not in idle mode, do that from Screens.Standby import Standby, inStandby if not inStandby: from Tools import Notifications Notifications.AddNotificationWithID("Standby", Standby) timeCallback(isCallback=False) elif reason == 1: epgrefresh.myEpgCacheInstance = None epgrefresh.stop()
-
zu erwaehnen waere noch, dass man den PluginDescriptor.WHERE_AUTOSTART braucht.
hatte anfangs nur WHERE_SESSIONSTART. -
Meine Erwartungshaltung ist schon, dass man das dann kurz selbst nachschauen kann.
-
habe ich ja. wollte es nur erwaehnen, falls jemand vor derselben frage steht.
-
so weit, so gut..
jetzt habe ich versucht, den enigma2 shut "zu unterbrechen" bis ein thread im hintergrund fertig ist, aber irgendwie scheint e2 den thread einfach zu stoppen und den shutdown fortzusetzen.
fuer einen tipp waere ich dankbar.
-
Entweder die TryQuitMainloop in deinen Code umbiegen und nach deiner Prüfung dann wieder an die originale TryQuitMainloop weiterleiten.
Wobei, wenn man sich den Code der TryQuitMainloop anschaut, gibt es da eine job-Verwaltung, wo geprüft wird, ob noch offene Jobs vorhanden sind.
jobs = len(job_manager.getPendingJobs())
Codeif jobs: if jobs == 1: job = job_manager.getPendingJobs()[0] reason += "%s: %s (%d%%)\n" % (job.getStatustext(), job.name, int(100*job.progress/float(job.end))) else: reason += (_("%d jobs are running in the background!") % jobs) + '\n'
Vielleicht kannst du ja den Thread beim Start im Job-Manager hinterlegen und beim Ende wieder rausnehmen.
Dann geht das mit der Meldung zu dem Thread vermutlich automatisch.
-
danke fuer den tipp. denke, es macht sogar sinn, dass ich statt einen extra thread zu implementieren, den job_manager direkt nutze. im browser gibt es einen downloadmanager, der den job_manager verwendet und iin etwa so funktioniert wie das, was ich eigentlich mit dem thread implementieren wollte.
-
-
damit das ganze auch mit gleichzeitig laufenden jobs und timern funktioniert, musste ich die Standby.py etwas aufbohren. ausserdem wird der completion status dynamisch angezeigt.
-
das funktioniert prima. allerdings habe ich jetzt die originale ../Screens/Standby.py geaendert... und das ist ja nicht update sicher. d.h. nach jedem update muss ich die datei wieder ueberschreiben.
kann ich eigentlich die class TryQuitMainloop irgendwie im plugin überschreiben, sodass das ganze upgrades ueberlebt? danke.
-
Hab es nur mal auf die Schnelle probiert
Die geänderte Standby.py als myStandby.py in deinen Plugin-Ordner legen.
Den nachfolgenden Code irgendwo in die plugin.py deines Plugins (ganz links ohne Einrückung).
Python#replace Standby.TryQuitMainloop ======================== from Screens import Standby import myStandby Standby.TryQuitMainloop = myStandby.TryQuitMainloop #========================================================
Nutzung auf eigene Gefahr (für den privaten Gebrauch bestimmt nutzbar)
Das Überschreiben von Klassen/Methoden kann auch nach hinten losgehen, wenn mehrere Plugins das gleiche vorhaben.
Dann gewinnt meist ein Plugin und das andere geht leer aus.
Falls es bessere Lösungen gibt, bin ich daran natürlich auch interessiert
-
klasse, das scheint zu funktionieren.