Beiträge von Sven H

    Ich hab jetzt herausgefunden, dass das mit dem ständigen Abfragen der Converter nur nach dem GUI-Neustart passiert. Da ist ja nur der normale TV-Modus und der Timeshiftstate-Screen ist ausgeblendet, dennoch fragen die Converter aus diesem ständig ab.
    Sobald ich aber das aktive Timeshift starte und dann wieder stoppe, hört das ständige Abfragen der Converter sofort auf :thinking_face:


    Hab da jetzt keine spezielle Funktion gefunden, die das dann wirklich stoppt.
    Hatte nach dem InfoBarTimeshiftState__init__ direkt mal ein self.pvrStateDialog.hide() ausgeführt, das hat leider auch nicht geholfen.


    Wenn ich aber direkt nach dem InfoBarTimeshiftState.__init__ erst ein self.pvrStateDialog.show() und dann direkt ein self.pvrStateDialog.hide() mache, dann gibt es auch direkt nach dem GUI-Neustart kein ständiges Abfragen der Converter mehr :winking_face:


    Komische Sache.
    Fehlt da evtl. was im Code beim Initialisieren des TimeshiftState-Screens?
    erweiterte Funktionen im PermanentTimeshift-Plugin

    Oh, Danke. Könntest du mir da mal etwas auf die Sprünge helfen?
    Das sagt mir gar nichts. Hab auch nichts derartiges finden können.


    self.pvrStateDialog.disconnect() klappt leider nicht.
    "Attribute disconnect nicht vorhanden"


    Hast du dazu irgendeinen Link oder ein Beispiel, wo man sieht, wo das hingehört?

    Ich hab da noch ne Verständnisfrage.


    Die neuen Screens (TimeshiftStateScreen und/oder DisplayScreen) greifen ständig über die Converter auf die Funktionen für get...Position() und getLength() zu, also auch, wenn die Screens gar nicht sichtbar sind (also wenn sie mit .hide() ausgeblendet sind).


    Ist das richtig so?
    Hab jetzt noch gar nicht geprüft, ob die normale InfoBar das auch so macht.


    Muss man da noch irgendwas deaktivieren, damit ein ausgeblendeter Screen nicht ständig die Daten über den/die Converter abfragt?


    Da das jetzt keine komplexen Funktionen sind, sollte das die Box jetzt nicht wirklich unnötig belasten, aber interessant wäre es doch schon mal :winking_face:

    So, dann hier noch die neue Version 1.5e :winking_face:


    Änderungen in 1.5e:

    • neu: die PTS Infobar zeigt jetzt einen echten Zeitbalken an (inkl. Zeit vor dem PTS, abgespielter PTS-Bereich, fortgeschrittener Live-Bereich und Zukunft)
    • fix: manchmal gab es einen Crash wenn man in der Filmliste ein Video abgespielt hat und dann zum Live-TV zurückkehrte
    • fix: ignoriere die Keys "2", "5", "8", "0", "<" und ">" während des Timeshiftens (bisher wurde dann ein Kanalwechsel gestartet)
    • fix: Optimierung der PTS InfoBar im Zusammenspiel mit der normalen InfoBar (insbesondere beim Ein-/Ausblenden)
    • fix: bei STOP-Taste wird die PTS-InfoBar jetzt für 1 Sekunde mit dem STOP-Status als bessere optische Rückmeldung eingeblendet

    Info:Die Files aus der zip gelten dabei als Ergänzung zum bereits installierten PTS 1.5Die neuen Plugin-Files sowie die neue Source und die drei neuen Converter aus der zip müssen dabei ebenfalls auf die Box kopiert werden.
    Der Ausgangspfad auf der Box befindet dafür auf "/usr/lib/enigma2/python".
    (die neue Ordnerstruktur in der zip ist dabei dann selbsterklärend)
    Nach dem Kopieren der Files muss nur noch ein GUI-Neustart erfolgen.

    Ich bin schon ein Stück weitergekommen :winking_face:


    Jetzt wird die komplette Sendung als PTS Zeitbalken angezeigt - inklusive der bereits vergangenen Sendungszeit vor dem Aufzeichnen durch das PTS (z.B. wenn man den Sender wechselt und die Sendung bereits 30min lief).
    Der nicht durch das PTS erfasste Bereich wird jetzt in "grau" dargestellt.
    "blau" ist der im PTS bereits abgespielte Zeitraum
    "gelb" ist der Sendungsfortschritt der weiterlaufenden Live-Sendung, den man im PTS bereits abspielen kann


    Dadurch gibt es jetzt auch keinen Sprung des Zeitbalkens im Display mehr, wenn man vom Live-TV in den PTS Timeshiftmodus wechselt.
    (da ändern sich ggf. nur die Farben des Balkens, die Länge sollte identisch sein)


    Jetzt ist hoffentlich nur noch etwas Feintuning und Testen angesagt.



    Frage an alle:


    Man sieht ja jetzt in der neuen PTS-InfoBar und im Display die echte Restlaufzeit inklusive des Live-TV-Fortschritts (gelb) während des Timeshiftens (blau).
    Es gibt da nur einen optischen Bruch bei der Sendungslänge, wenn man Timeshift startet, aber nicht seit Sendungsbeginn im Hintergrund vom PTS aufgezeichnet wurde (z.B. bei Senderwechsel und die Sendung lief schon 30min).


    Sollte man hier evtl. den Fortschrittsbalken um eine 3. Farbe ergänzen (z.B. rot, man könnte es aber auch mit gelb machen), so dass am Anfang der vergangene Sendungsteil - den man per Timeshift nicht aufgenommen hat - zusätzlich angezeigt wird ?


    Dann würde es beim Wechsel vom Live-TV zum Timeshift keinen optischen Bruch des Sendungsfortschrittbalkens im Display geben :winking_face:
    Und man würde sehen, welcher Anteil vom Anfang nicht im Timeshift enthalten ist.

    @dre
    Danke nochmal für den Denkanstoß zum InfoBarTimeshiftState im class InfoBar(InfoBarOrg, InfoBarTimeshiftState): :thumbs_up:


    Nach zig Tests mit allen möglichen Varianten sieht man irgendwann den Wald vor lauter Bäumen nicht.
    Ich war der Meinung, dass ich auch diese Variante schon mehrfach probiert hatte.
    Aber wer weiß, was da an anderer Stelle nicht gestimmt hat :winking_face:


    Ich denke, so ist die Lösung etwas sauberer, als wen man das Ein-/Ausblenden im Code händisch nachkorrigieren muss :winking_face:
    Konnte somit schon einige Code-Passagen wieder entfernen :winking_face:

    es knallt ja nicht in der __delPvrState im PTS-Code, sondern in der InfoBarGenerics.
    Aber da kann ich ja schlecht den Code ändern :winking_face:


    Hab jetzt einfach mal die Zeile self.onClose.append(self.__delPvrState) in der InfoBarPVRState Class im PTS deaktiviert.
    Dann passt es. Dann wird der Dialog wohl sauber über die InfoBarGenerics gelöscht :winking_face:

    Du meinst in der PTS InfoBar Class bevor ich InfoBarTimeshiftState.__init__(self, self) aufrufe ??
    Das klappt irgendwie nicht. Da kann ich keine Taste mehr drücken. Die InfoBar scheint irgendwie blockiert.
    Da kommt immer das Symbol für eine unzulässige Taste



    Python
    class InfoBar(InfoBarOrg, InfoBarTimeshiftState):
    	def __init__(self, session):
    		print "=== pts InfoBar__init__"
    		InfoBarOrg.__init__(self, session)
    		InfoBarOrg.instance = self
    		if self.pvrStateDialog is not None:
    			self.session.deleteDialog(self.pvrStateDialog)
    			self.pvrStateDialog = None
    		InfoBarTimeshiftState.__init__(self, self)

    Ginge es, den delete-Befehl von self.onClose.append(self.__delPvrState) wieder zu entfernen?
    self.pvrStateDialog.onClose.remove(self.pvrStateDialog.__delPvrState)


    Mit der Zeile geht es jedenfalls nicht :winking_face:

    In der originalen Class InfoBarPVRState gibt es ja noch diese Zeile:
    self.onClose.append(self.__delPvrState)



    Wenn wir nun diese Class intern neu aufrufen, wird der pvrStateDialog ja schon beim Schließen vom PTS gelöscht.
    Dann versucht wohl die originale Class nochmal diesen Dialog zu löschen, was dann nicht klappt.


    Kann man diese originale Instance des InfoBarPVRState bzw. des originalen InfoBarTimeshiftState löschen.
    Bzw. nach dem neuen InfoBarTimeshifState.__init__ in der PTS-Infobar dieses self.onClose.append(self.__delPvrState) für die originale Class löschen/zurücksetzen?

    Das ganze scheint jetzt zu funktionieren :winking_face:


    Wenn ich allerdings die interne PTS-InfoBar aktiviere (im Setup) und später wieder deaktiviere, wird der TimeshiftScreen wieder mit instantiateDialog neu gesetzt und dann hab ich wieder das gleiche Problem mit der Entkopplung. :winking_face:
    Aber ok, so oft wechselt man die InfoBar ja nicht und nach einem Neustart, passt es ja wieder.
    Und wer sollte diese interne PTS Infobar jetzt noch nutzen, wenn die neue Standard PTS Infobar besser ist :winking_face:


    Vielleicht entferne ich die Option im Setup ganz, dann hat man gar keine Probleme.


    Beim GUI-Neustart kommt aber noch folgender Fehler:

    Wüsste jetzt nicht, was man da irgendwo noch setzen muss ???

    Ok, ich glaub, jetzt sind wir schon einen Schritt weiter :winking_face:


    Dann kommt aber dieser Fehler:


    Also scheint das instantiateDialog nicht geklappt zu haben:

    Python
    class InfoBarPVRState:
    	def __init__(self, screen=PVRState, force_show = False, parent = None):
    		print "=== InfoBarPVRState_init"
    		self.onPlayStateChanged.append(self.__playStateChanged)
    		self.pvrStateDialog = self.session.instantiateDialog(screen, parent)
    		self.pvrStateDialog.neverAnimate()


    Ok, ich versuche es mal einfach zu gestalten :winking_face:
    Ich weiß, dass der Code sehr kompliziert ist und auch eine ganze Weile gebraucht habe, um da halbwegs durchzusehen :winking_face:


    Hiermit wird der originale TimeshiftState-Screen in self.pvrStateDialog per instantiateDialog im InfoBarPVRState festgelegt:
    Der Aufruf erfolgt in der InfoBar.py mit InfoBarTimeshiftState.__init__(self)
    http://git.opendreambox.org/?p…3586c061fa5abb305a7d6#l70


    Im PTS ersetzte ich dann den self.pvrStateDialog mit folgender Zeile und übergebe dabei meinen neuen TimeshiftState-Screen:
    self.pvrStateDialog = self.session.instantiateDialog(PTSStandardTimeshiftState, self)


    Screen-Code:


    Das funktioniert soweit, nur dass dabei irgendwie die Kopplung mit der normalen Infobar verloren geht und dabei insbesondere das Ausblenden der PTS-Infobar händisch im PTS-Code nachkorrigiert werden muss.
    Nun dachte ich, man kann diese obigen Classes anpassen und in der PTS-Infobar-Class neu mit __init__ staren und dabei einfach meinen angepassten TimeshiftState-Screen übergeben.

    Python: plugin.py (PTS)
    class InfoBar(InfoBarOrg):
    	def __init__(self, session):
    		print "=== pts InfoBar__init__"
    		InfoBarOrg.__init__(self, session)
    		InfoBarOrg.instance = self
    		InfoBarTimeshiftState.__init__(self, self)

    Die beiden obigen Classes hab ich dann versucht anzupassen, damit das mit dem parent klappt:




    Bei InfoBarTimeshiftState.__init__(self, self) erhalte ich dann immer diesen Fehler "AttributeError: class InfoBarTimeshiftState has no attribute '_InfoBar__init'".
    Der Fehler kommt aber auch, wenn ich die originale InfoBarTimeshiftState-Class mit InfoBarTimeshiftState.__init__(self) aufrufen will.
    Also scheint der (Denk)Fehler nicht nur im angepassten Code zu liegen.

    Diese beiden Classes (InfoBarTimeshiftState und InfoBarPVRState) müsste man wohl mit reinnehmen, etwas anpassen (wegen parent) und dann mit dem neuen TimeshiftState-Screen (im aktuellen Code der 1.5c noch PTSStandardTimeshiftState) aufrufen.
    git.opendreambox.org/?p=enigma…86c061fa5abb305a7d6#l1313


    Versuche in der PTS-InfoBar-Class dann ein InfoBarTimeshiftState.__init__(…) auszuführen, endeten immer mit AttributeError: class InfoBarTimeshiftState has no attribute '_InfoBar__init' ???

    Danke für dein Interesse an meinem Problem :winking_face:


    Nein, die Class InfoBarTimeshiftState spielt im PTS noch keine Rolle.
    Ich lasse die Class InfoBarTimeshiftState ganz normal von der originalen Infobar verarbeiten, wo auch der self.pvrStateDialog erzeugt wird.


    Im PTS ersetze ich später im bereits erzeugten self.pvrStateDialog nur den neuen Screen (mit instantiateDialog).
    Dabei scheint dann allerdings die Kopplung des Screens mit der normalen Infobar verloren zu gehen, da in manchen Situationen die PTS InfoBar z.B. stehenblieb, obwohl die normale Infobar sich schon ausblendete.


    Ich hab schon einiges versucht, um dies über die Class InfoBarTimeShiftstate (indirekt ja über die InfoBarPVRState) zu lösen, bin aber bisher gescheitert.
    Das Problem ist wohl auch, dass im neuen Screen „TimeshiftState“ noch das „parent“ zu übergeben ist.


    Das ganze ist schon ziemlich komplex.
    Da braucht man wohl auch ne Weile, ehe man sich in den Code eingelesen hat :winking_face:

    Danke :winking_face:


    Ja, wenn es dann insgesamt passt, könnte ich dann direkt über github einen PullRequest machen.
    Intern arbeite ich schon an Version 1.5e :winking_face:


    Im Moment gibt es noch kleine Probleme mit dem Ein-/Ausblenden der neuen PTS-Infobar (self.pvrStateDialog).
    Diese schaltet durch die Anpassung nicht mehr generell automatisch parallel zur normalen Infobar.


    Ich hab da im Code zwar schon einige Stellen anpassen können, so dass es eigentlich auch so funktioniert. Aber lieber wäre es mir, wenn ich die originale Class InfobarTimeshiftState einfach mit dem neuen Screen verbinden könnte.
    Dann würde die PTS-Infobar vermutlich auch weiterhin automatisch an die normale Infobar gekoppelt sein.
    Dann müsste ich das Ein-/Ausblenden der neuen PTS-Infobar nicht händisch nachkorrigieren.


    Leider habe ich dafür noch keine Lösung gefunden :winking_face:
    (Dachte da an ein zusätzliches InfoBarStateTimeshift.__init(...), wo ich dann den neuen Screen übergebe. Leider hab ich das bisher nicht ohne GS hinbekommen)


    Falls mir da jemand weiterhelfen könnte, wäre ich dankbar.
    Vielleicht liege ich da aber auch völlig falsch mit meiner Vermutung bezüglich der automatischen Kopplung mit der normalen InfoBar.

    Auch wenn das Thema sonst keinen wirklich zu interessieren scheint, hab ich mich mal versucht :winking_face:


    Änderungen in Version 1.5d:

    • neu: Anzeige der echten Restlaufzeit beim Timeshiften der aktuellen Live-TV-Sendung (kann über Option in Setup deaktiviert werden)
      dabei wird per Progressbar sowohl der aktuelle Timeshiftstatus (blau) als auch der fortgeschrittene Live-TV-Status (gelb) angezeigt
    • gefixt: unter bestimmten Umständen wurde in der 1.5c manchmal der falsche Display-Screen angezeigt

    Info:
    Die Files aus der zip gelten dabei als Ergänzung zum bereits installierten PTS 1.5
    Die neue Source und die beiden neuen Converter aus der zip müssen dabei natürlich auch auf die Box kopiert werden.
    (die neue Ordnerstruktur in der zip ist dabei dann selbsterklärend)

    Man könnte noch integrieren, dass die Restlaufzeit (aktueller Zeitversatz im Timeshiftfile) noch mit der Restlaufzeit der aktuellen Live-Sendung aus dem EPG verrechnet wird (sofern beide Events identisch sind).
    Dann hätte man die echte Restlaufzeit und könnte so wie im EMC zwei Progressbars anzeigen.
    Eine blaue für die aktuelle Abspielposition und eine gelbe für die aktuelle Live-TV-Position. :winking_face:


    Dazu müsste man dann allerdings wie im EMC eigene Converter und eine eigene Source bereitstellen.


    Was meint ihr, macht das Sinn, lohnt sich der Aufwand?