Instant EPG Timer Plugin for DreamOS

  • Ich hab noch einen Fehler mit GS gefunden.


    Wenn man z.B. in der Standard-Kanalliste mit "Info" die EventView" öffnet, dort mit "rot" die Similar-List öffnet und

    dort mit der Rec-Taste eine Aufnahme startet oder plant, dann klappt das noch.


    Will man dann aber dort den Timer wieder mit der Rec-Taste beenden, dann kommt ein GS.


  • Ich habs jetzt mal OHNE InstantEPGTimer probiert den Timer mit Grün anzulegen und mit Grün zzu löschen, das crashed genauso, müsste also eigentlich DP fixen ?


    Wen wer lust hat kann er ja bei DP einen Fehlerreport im Board schreiben, die freuen sich sicher ;)


    Oder sollen wir es nur Q&D lösen indem wir in der EPGList.py das rebuild mit sowas überschreiben.:


    Code
    1. def rebuild(self):
    2. try:
    3. self.l.setList(self.list)
    4. except:
    5. self.l.setList(None)

    Dann ist nach dem Löschen die Liste halt leer, aber es crashed nicht mehr.

  • OK so gehts halbwegs sauber, man merkt sich in der EpgList.py in der fillSimilarList die Liste noch ein zweites mal auf einer self.orilist

    Code
    1. .............
    2. self.l.setList(l)
    3. self.orilist=l
    4. self.selectionChanged()
    5. print time() - t

    Und dann im rebuild:

    Code
    1. def rebuild(self):
    2. try:
    3. self.l.setList(self.list)
    4. except:
    5. self.l.setList(self.orilist)


    Aber sowas in der Art müsste in die Standard EpgList.py ich mag das eigentlich nicht überschreiben damit der bug weg ist.


    Dan geht es auch mit Grün und wenn der InstantEPG Timer installiert ist gehts dann eben auch mit Record ohne das wir im Code was ändern müssen.


    Ich werfe das mal bei DP ein :(

  • Super 👍🏼


    Hatte auch schon fast den Verdacht, da es ja in der _ori passiert.

    Aber ich dachte noch, dass da bei den ganzen Verbiegungen vielleicht was schief läuft ;)


    Aber wenn es ohne IET auch knallt, dann ist wohl DP schuld 8o

    Da bin ich mal gespannt.


    Und stimmt, irgendwas überschreiben zur Bugbehebung macht keinen Sinn.

    Das muss DP dann schon direkt machen.

  • Ich habe einen Thread dort eröffnet und in meiner vorherigen Reply verlinked, falls du dort schauen willst ob sich was tut. Normal sind sie bei solchen offensichtlichen Sachen ja recht schnell, insbesondere wenn Ihnen meine hässlichen workarounds nicht gefallen ;) 

  • Cool, Danke.

    Dann kann man das dort ja verfolgen ;)


    Ich denke auch, dass ihnen try and except vielleicht nicht gefallen wird :P

    Aber schauen wir mal.


    Nur komisch, dass das vorher noch nicht aufgefallen ist :/

  • Das sind einfach plaetze wo kaum wer timer anlegt. Durch den AutoTimer ist das nicht sehr beliebt über ähnliche Timer zu gehen, und die meisten leute löschen in der timerliste und nicht sofort wieder wo sie angelegt haben.

  • Ich glaube, ein einfaches self.list = l im fillsimilarlist tut es auch.

    Da wäre dann ein try, except im rebuild gar nicht mehr nötig ;)


    Es funktioniert bei mir zumindest, allerdings weiß ich nicht, ob man da was durcheinanderbringt, wenn man da die self.list einfach neu setzt, wobei das in jeder anderen fill-methode auch gemacht wird. Nur eben nicht bei fillsimilarlist ;)

    Vielleicht wurde es da nur bei einem Umbau vergessen.

    Gruß Dreamy (aka Sven H)

    Dieser Beitrag wurde bereits 2 Mal editiert, zuletzt von Dreamy ()

  • du brauchst nur einen passenden sender wo staendig gleiche sendungen kommen. Shoppingsender oder VH1 sind da ideal zum testen.


    und ja kann sein das es in der fillSimilar einfach vergessen wurde :)


    kannst es ja im DP board dazu schreiben;)

  • hauptsache ein problem weniger.


    Wenn der Refresh der liste dann funktioniert könnten wir sie aber noch optimieren, rot ist dann ja frei


    wie waere es wenn man wenn man nochmals rot drücken die liste nach gleichem sender gefiltert kriegt, mit dem naechsten termin on top. Das ließe sich mit mehrmals rot auch zu einer art filterliste ausbauen. Ich muss das mal probieren :)

  • Ok, das wäre eine nette Erweiterung.

    Hab gerade mal bei bei DP den Wunsch geäußert, die Treffer auf das aktuelle Bouquet zu filtern ;)


    Hab dabei auch gerade festgestellt, dass bei Verwendung von IET der blaue Button für die EPG-Suche nicht mitkommt.

    Ohne IET funktioniert das.


    Im EPGSearch wird das nochmal umgebogen.

    Evtl. müsste man da noch was zusätzlich importieren.

    https://github.com/opendreambo…arch/src/EPGSearch.py#L57

  • Beitrag von Dreamy ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: hat sich erledigt, in #345 neu ().
  • So geht's jetzt doch ;)

    Ist nur die Frage, ob es die feine Art ist ;)

    Da weiter unten ja immer noch die originale EPGSelection.__init__ verbogen wird.

    Sollte man da dann auch unterscheiden und wenn EPGSearch vorhanden, dann diese __init__ umbiegen?

    Code
    1. # remember original
    2. if os_path.exists("/usr/lib/enigma2/python/Plugins/Extensions/EPGSearch"):
    3. import Plugins.Extensions.EPGSearch.EPGSearch as EPGSearch
    4. EPGSelection_ori__init__= EPGSearch.EPGSelection__init__
    5. else:
    6. EPGSelection_ori__init__=Screens.EpgSelection.EPGSelection.__init__
    7. EPGSelection_ori_removeTimer=Screens.EpgSelection.EPGSelection.removeTimer
  • das geht schon so, manchmal muss man halt Kompromisse machen. Dadurch das wir jetzt in der Autostart renamen oder das original saven sind wir ja die letzten und können es uns aussuchen wen wir gewinnen lassen.

  • Hier mal meine 0.48a, wo das EPGSearch jetzt integriert ist. ;)

    - die blaue Taste (Searchtaste) im SingleEPG

    - die Rec-Taste im SearchEPG-Plugin


    Allerdings musste ich eine globale Variable für die searchargs anlegen (Übergabe an das SearchEPG-Plugin) und in der EPGSelection_instantRecord() in Zeile 132 wieder setzen, da es sonst einen GS gibt.


    Evtl. hast du da ja eine bessere Idee :/


    Edit: veralteten Anhang gelöscht - Code ist bereits im aktuellen Download im Post#1 enthalten

    Gruß Dreamy (aka Sven H)

    Dieser Beitrag wurde bereits 2 Mal editiert, zuletzt von Dreamy ()

  • Ich habe mal draus eine 0.49 gemacht.


    Bezüglich der globalen searcharch variable - manchmal ist das halt der einfachste Weg, du kannst auch classen oder methoden statisch machen, womit dann self.* variablen auch überleben, aber das hat dann oft auch andere unangenehme Effekte, vor allem musst du sicherstellen das im __init__ dann wirklich alles zurückgesetzt wird, damit du keine geister werte hast.


    Und da wir ja mit dem arbeiten müssen was da ist ,müsste man dafür eher noch mehr verbiegen was noch weniger sinnvoll ist.


    Evt. würde sich eine config Variable anbieten, dann würde die letzte suche sogar einen restart überleben, aber dafür muss man dann oft die sachen auf eine passende config umhämmern und auch da ist die Frage ob das Sinn macht.

  • Danke :thumbup:

    Habe gerade festgestellt, dass die Sache mit der globalen Variable doch nicht zu 100% funktioniert.

    Die Variable wird ja nur beim Öffnen des EPGSearch-Screens im init gesetzt.

    Wenn man nun bei geöffneten EPGSearch eine andere Suche ausführt (manuell oder aus Verlauf), bekommt das IET die neuen searchargs gar nicht mit.

    Folge ist dann, dass beim Timersetzen nach einer neuen Suche innerhalb des EPGSearch sich plötzlich die alte Suche öffnet ;)

    Der Timer wurde aber gesetzt.


    Kann man auch eine Variablen-Überwachung einrichten?

    Also wenn sich das self.searchargs des EPGSearch ändert, dass dann das IET das mitbekommt und die globale Variable anpasst?

    Sonst müsste man alle relevanten Funktionen des EPGSearch auch noch importieren, um das self.searchargs jedesmal abzufangen und dabei in die globale Variable zu schreiben ;)

  • du kannst auch mit rename arbeiten, du musst nur das self vom self.searchargs durch den vollen classen pfad ersetzen. Ich mach das ja z.B um die instantz ausserhalb auch zu haben:


    # remember for direct usage from extensions menu ...

    Screens.InfoBarGenerics.InfoBarInstantRecord.instance=self


    das geht eben auch mit variablen wenn ich mich recht erinnere, vor allem kann man so auch Dinge in andere Classen rüber bringen, wenn die dann überleben (InfoBarGenerics ist so ein Beispiel) hat man dadurch was pseudo 'statisches/globales'

  • Also meinst du, man sollte sich das self der EPGSearch-Class im init in die globale Variable speichern und dann später damit auf das self wieder zurückgreifen, um die aktuelle Variable für self.searchargs daraus abzurufen?

  • na ja nur wenn du sie immer aus der gleichen stelle holst wird sie auch gleich sein :)


    Sonst müsstest du ständig checken ob die lokale und die globale gleich sind ... das ist halt das Problem das python keine pointer auf variablen macht, so wie in den gutem alten Programmiersprachen ;)

  • Hmm, irgendwie bekomm ich das nicht hin. :/


    Mit welcher Codezeile hole ich mir denn den aktuellen Wert self.searchargs des EPGSearch-Screens ?


    Mit Import klappt das wohl nicht.

    Da sagt E2, dass es das Modul EPGSearch.searchargs nicht gibt.

    Code
    1. def EPGSelection_instantRecord(self):
    2. print "[InstantEpgTimer] EPGSelection.instantRecord"
    3. global EPGSearch_searchargs
    4. #self.searchargs = EPGSearch_searchargs
    5. import Plugins.Extensions.EPGSearch.EPGSearch.EPGSearch.searchargs as searchargs
    6. self.searchargs= searchargs
    7. cur = self["list"].getCurrent()
  • Puhh, das ist mir irgendwie zu hoch ;)


    So klappt es jedenfalls nicht

    EPGSearch hat kein attribute getsearchargs

    Code
    1. import Plugins.Extensions.EPGSearch.EPGSearch as EPGSearch
    2. searchargs = EPGSearch.EPGSearch.getsearchargs()
    3. self.searchargs= searchargs

    es geht um diese Variable:

    https://github.com/opendreambo…rch/src/EPGSearch.py#L133

    Gruß Dreamy (aka Sven H)

    Dieser Beitrag wurde bereits 2 Mal editiert, zuletzt von Dreamy ()