erweiterte Funktionen im PermanentTimeshift-Plugin

  • Der Code ist ja nicht von mir :winking_face:


    Der "geklaute" Standby-Screen ruft ggf. eine ChoiceBox auf, was mit der laufenden PTS-Aufnahme passieren soll.
    Wenn man im Setup aber eine Standardfunktion festgelegt hat, wird glaub ich gar keine ChoiceBox angezeigt.


    Problem ist offensichtlich, dass der "geklaute" StandbyScreen nicht geschlossen wird und dadurch den echten Standby-Aufruf blockiert.


    Mit meinem zusätzlichen self.close() funktioniert es ja. :winking_face:


    Die Frage war jetzt nur, warum der Code mit dem self.onHide.append(self.close) nicht mehr funktioniert???
    Denn ursprünglich muss es ja mal funktioniert haben.

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • Da steht ja
    # Workaround: Show Dummy Popup for a second to prevent StandBy Bug


    Und hier wird der standby ausgelöst:

    elif self.save_timeshift_postaction == "standby":


    Notifications.AddNotification(Screens_Standby_Standby)



    Ich würde die MessageBox so öffnen:
    self.msg = self.session.open(...)
    Und in der obigen Bedingung:
    if self.msg.shown:
    self.msg.hide()


    Irgendwie sowas

    Gruss
    Dre


    Boxen (im Einsatz): DM920, DM900, DMOne
    Developer Project Merlin - we are OpenSource

  • Nein, die ChoiceBox wird doch nach Auswahl der Option sauber beendet.
    Bei bestimmten Einstellungen kommt auch die von dir genannte Messagebox.
    Aber auch die wird sauber beendet.


    Nur der geklaute Standby-Screen, der die ChoiceBox/MessageBox indirekt aufruft, ist noch geöffnet., weil das self.onHide.append(self.close) nicht funktioniert.


    Normalerweise sollte ja beim Einblenden eines anderen Screens (ChoiceBox/Messagebox) ein .hide() ausgelöst werden, was dann wiederum die Funktion aus onHide aufruft.
    Aber genau das passiert hier nicht.


    Die ChoiceBox/MessageBox selbt ist da nicht das Problem.
    Wie gesagt, mit dem zusätzlichen self.close() im "geklauten" StandbyScreen funktioniert es ja jetzt.


    Mir ging es ja nur noch um eine Erklärung für das merkwürdige Verhalten.
    Eine Lösung habe ich ja bereits :winking_face:

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

    Einmal editiert, zuletzt von Sven H ()

    • Offizieller Beitrag

    Du hast schon richtig vermutet, in (First)ExecBegin ist hide wirklungslos.
    Warum sagt uns im Kern schon eine Stelle in der mytest.py
    Kleine Anmerkung: Die lokale Variable "c" ist die instanz des Screens.


    Python
    321         def execBegin(self, first=True, do_show=True):
    .
    .
    .
     339                 c.execBegin() # << direkt nach diesem Aufruf wird "on(First)ExecBegin" im Screen abgearbeitet
     340 
     341                 # when execBegin opened a new dialog, don't bother showing the old one.
     342                 if c == self.current_dialog and do_show:
     343                         c.show()


    Schaun wir uns jetzt mal Screen an wird klar, dass ein hide in "(First)ExecBegin" schlicht nichts tun wird ;).


    Python
    204         def hide(self):
     205                 if not self.instance or not (self.shown and self.instance.isVisible()):
     206                         self.__onHideFinished()
     207                         return


    Zusammengefasst für einige der Callbacks:


    • onFirstExecBegin - Screen wird in kürze zum ersten mal ausgeführt => nicht sichtbar
    • onExecBegin - Screen wird in kürze ausgeführt => nicht sichtbar
    • onShown - Ist etwas mißverständlich und müsste eigtl eher "onAboutToShow" heißen - Der Screen wird "jetzt dann gleich" sichtbar
    • onShow - Der Screen ist sichtbar
    • onHide - Screen offen aber nicht sichtbar
    • onExecEnd - Screen wird jetzt gleich beendet
    • onHideFinished - Screen wurde bereits versteckt, die Hide-Animation ist durch
    • onClose - Screen wird geschlossen
  • @Reichi
    Danke für die tolle Erläuterung der Stufen :winking_face:


    Ich frage mich aber trotzdem, warum der Code im PTS mit self.onHide.append(self.close) den Screen beim Aufruf der ChoiceBox/MessageBox nicht mehr beendet.


    Der Code muss ja mal so funktioniert haben oder ist der Code tatsächlich von Anfang an fehlerhaft gewesen?


    Ist dann ein händisches self.close() nach Aufruf der Funktion für die ChoiceBox/MessageBox die richtige Lösung oder gäbe es da noch was besseres ?

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • @Sven H


    vielen Dank für deine schnelle Lösung.
    Schon beschämend...aber leider bin ich auf der Box nur ein Anfänger und ich finde auch nach längerem suchen nicht mal den Ordner Permanenttimeshift um deine Datei dort reinzulegen... :loudly_crying_face:

  • Kein Problem :winking_face:


    Der Ordner befindet sich hier:
    „/usr/lib/enigma2/python/Plugins/Extensions/PermanentTimeshift“


    Da einfach die neue plugin.py aus der obigen Zip reinkopieren und falls die Frage kommt, die vorhandene Datei dabei ersetzen.


    Dann noch einen GUI-Neustart und nochmal testen :winking_face:

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • Dann hast du wohl das aktuelle PTS 2.1 vorher nicht installiert.
    Du hattest vorher wohl „nur“ die alte Version 1.5.


    Deinstalliere mal das PTS und installiere es dann über die Softwareverwaltung neu.


    Danach dann die plugin.py ersetzen.


    Welche Version du nach der Neuinstallation hast, siehst du im Setup vom PTS.

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

    • Offizieller Beitrag

    Ich frage mich aber trotzdem, warum der Code im PTS mit self.onHide.append(self.close) den Screen beim Aufruf der ChoiceBox/MessageBox nicht mehr beendet.

    Du würdest dich wundern wie oft man Bugs fixt von denen man weiß, dass sie schon seit Ewigkeit da sein müssen.
    Oftmals werden aber Fehler erst durch Änderungen an anderer Stelle überhaupt sichtbar, das nachzuvollziehen ist manchmal wirklich schwierig.


    Im letzten Update wurden Fehler behoben die vmtl seit 10 Jahren schon da waren (einer davon ist nur aufgrund anderer Umstände nie sichtbar gewesen).