[gelöst] Beenden des Timeshift mit Stop-Taste öffnet zusätzlich das pipzap-Fenster

  • Hallo


    Ich wollte hier nochmal auf ein bei mir bestehendes Problem bei pipzap eingehen.


    Wenn ich Timeshift aktiviert habe (zeitversetzte Sendung) und dann die "Stop"-Taste drücke (was ja beim Timeshift zum Wechsel zum Live-TV gedacht ist - also zum Beenden des aktiven Timeshift), dann beendet sich zwar das aktive Timeshift, es öffnet sich dann aber oft noch das pipzap-Fenster (komischerweise nicht immer).
    Das ist ziemlich nervig :winking_face:


    Im Pipzap wird eigentlich für die dortige "Stop"-Taste (als Aktivierungstaste für pipzap) an folgender Stelle abgefragt, ob man ein aktives Thimeshift laufen hat:
    https://github.com/opendreambo…pipzap/src/plugin.py#L301


    Wenn da ein aktives Timeshift läuft (self.isSeekable() == True), dann wird das pipzap nicht aktiviert (return 0), da die Stop-Taste in diesem Fall ja zum Beenden des Timeshifts gedacht war.


    Nun ist es aber wohl so, dass die Stop-Taste nicht parallel, sondern nacheinander gefeuert wird.
    Zuerst wird das Timeshift beendet und erst danach wird obige Toggle-Funktion vom pipzap aufgerufen.
    An der Stelle ist self.isSeekable() dann mittlerweile False, da das Timeshift ja direkt zuvor beendet wurde.


    Möglicherweise wird das Timeshift aber auch manchmal langsamer beendet, als die toggle-Funktion im pipzap gestartet wird.
    In diesen eher seltenen Fällen funktioniert der Code im pipzap und das Pipzap-Fenster wird bei Stop-Taste nicht aktiviert.


    Hat jemand eine Idee, wie man das sauber trennen kann ?
    Also self.showPiP() bei "Stop"-Taste nur ausführen, wenn die Stop-Taste nicht zuvor zum Beenden des Timeshift genutzt wurde.


    Könnte man beim Beenden des Timeshift per Stop-Taste im dortigen Code irgendwie die Stop-Taste für das pipzap abwürgen ?
    Oder könnte man das Beenden des Timeshift wenige Millisekunden verzögern, so dass die toggle-Funktion des pipzap vorher das self.isSeekable() prüfen kann ?

    Gruß Sven (aka Dreamy)


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

  • Hab hier noch 2 log-Auszüge.


    Hier der Fall, wo der Code im pipzap funktioniert:
    Nach "timeshiftStop" ist "self.isSeekable()" == True


    Code
    Mar 12 19:56:27 dm920 enigma2[2372]: action ->  InfobarTimeshiftActions timeshiftStop
    Mar 12 19:56:27 dm920 enigma2[2372]: I/  [InfoBar.ptsSetNextPlaybackFile] :: [PTS-Plugin] setNextPlaybackFile()
    Mar 12 19:56:27 dm920 enigma2[2372]: eDVBServicePlay::seekTo: jump 7776000000
    Mar 12 19:56:27 dm920 enigma2[2372]: action ->  pipzapActions switchPiP
    Mar 12 19:56:27 dm920 enigma2[2372]: PiPzap instance InfoBarTimeshift: True
    Mar 12 19:56:27 dm920 enigma2[2372]: PiPzap instance InfoBarSeek: True
    Mar 12 19:56:27 dm920 enigma2[2372]: PiPzap self.timeshift_enabled: 1
    Mar 12 19:56:27 dm920 enigma2[2372]: PiPzap self.isSeekable(): True


    und hier der Fall, wo es nicht funktioniert, was aber fast der Regelfall ist:

    Gruß Sven (aka Dreamy)


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

  • Hier nochmal die Zusammenfassung des Problems und eine scheinbar passende Lösung :smiling_face:


    Situation:
    - Permanent Timeshift installiert und aktiviert
    - pipzap installiert (im Setup die Stop-Taste als Hotkey aktiviert)


    Problem:
    - bei aktivem Timeshift (die aktuelle TV-Sendung zeitversetzt anschauen)
    - Stop-Taste zum Beenden des aktiven Timeshift drücken (Wechsel zum Live-TV)
    - dabei öffnet sich unsinnigerweise immer das pipzap-Fenster


    Es scheint tatsächlich ein Timing-Problem auf der 920 zu sein.
    Das aktive Timeshift wird hier schneller beendet als die Stop-Taste (Hotkey) im pipzap das Timeshift in Zeile 300 noch erkennen kann.


    Lösung:
    Wenn ich im PTS in stopTimeshift() die doSeek-Funktion etwas verzögere, öffnet sich das pipzap-Fenster beim Beenden des TimeShift mit der Stop-Taste nicht mehr.


    bisheriger Aufruf von dooSeek im PTS: https://github.com/opendreambo…master/src/plugin.py#L442

    Code
    self.doSeek(3600 * 24 * 90000)

    neuer funktionierender Aufruf mit Verzögerung von 100ms:

    Python
    from threading import Timer
    t = Timer(0.1, self.doSeek, args=((3600 * 24 * 90000),))
    t.start()

    Es wäre schön, wenn das nach einem Test ins github übernommen werden könnte, so dass ich das nach einem Update nicht jedesmal neu patchen muss :winking_face:
    Vielleicht gibt es ja auch noch eine bessere Lösung.

    Gruß Sven (aka Dreamy)


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

  • Ich hab grad keinen besseren Vorschlag, aber einen Timer dafür einzusetzen finde ich nicht gut.

    Gruss
    Dre


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

  • @Ghost
    Perfekt, damit funktioniert es auch :thumbs_up:


    Hab es jetzt mehrfach probiert, auch zur Gegenprobe mal wieder das "b" verwendet.


    Gefällt mir (und 'dre' bestimmt auch) viel besser.
    Ohne Timer und vor allem ganz ohne Fremdeingriff :winking_face:
    Schon krass, dass die Zeit zwischen "Taste drücken" und "Taste loslassen" da schon ausreicht, um solche Probleme zu machen.


    Dann wäre es schön, wenn ihr das hier anpassen könntet :smiling_face:


    Noch schöner wäre es, wenn ihr noch das hier übernehmen könntet (Anzeige des Sendernamens bei Verwendung des pipzap)
    Wenn es gewünscht ist, könnte ich dazu ein PullRequest im git machen.

    Gruß Sven (aka Dreamy)


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

    • Offizieller Beitrag

    Naja... ="b" heisst dass die Action auf "break" auslöst.... also loslassen der Taste.


    Wogegen die Timeshift Stop Action auf ="m" stand... also Make. Sprich sie reagiert schon auf das drücken der Taste.


    Deshalb war es halt reine Glückssache dass es manchmal ging und manchmal nicht. Je nachdem wie schnell der PVR Thread sich beendet hat.


    Aber ja.. check es ein, und mache einen Pull Request.


    cu

  • ...Aber ja.. check es ein, und mache einen Pull Request.

    Hab ich gemacht :winking_face:
    https://github.com/opendreambox/enigma2-plugins/pulls


    Und dabei auch gleich die Sache mit dem Show channelname übernommen.


    pipzap (OE2.5): fix stop-key and show channelname
    - fix stop-key-problem on stop timeshift
    - add exit-key to open/close pip (activate in setup)
    - add show channelname under pipzap (actvate in Setup)

    Gruß Sven (aka Dreamy)


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