EPGRefresh 0.1.0

  • Ich hab mir mal eben Deine Sachen angeschaut, die Du da comittet hattest.


    EPGRefresh sollte eigentlich nur das machen, was es vom Namen hergibt: die EPG-Daten aktualisieren.


    Könntest Du bitte für die EPGBackup Sachen ein extra Plugin schreiben und diese Funktionalität komplett wieder aus dem EPGRefresh entfernen? :)

  • Hi,


    zumal das Plugin nun Hacks enthält um Dinge wiederherzustellen, die im enigma2 core mit absicht so gehandled wurden.


    In e2 wurde mit Absicht die epg.dat direkt nach dem öffnen der Datei gelöscht, damit wenn es beim parsen crasht, es keine endlose crash loop gibt. Von daher ist das total doof sowas nun in irgendwelchen Plugins zu umgehen. Und ich muss auch Dr. Best recht geben. Das Plugin heisst EPGRefresh. Und mehr soll es auch nicht tun.


    Also raus mit allem, was da nicht rein gehört.


    cu!

  • Mir ist klar dass Patchen von System-Komponenten nicht die schönste Lösung ist.


    Der Patch ist zum sichern des EPG-Files und wird auch nur dann durchgeführt (/etc/rc3.d/S20EPGBackup.sh), wenn die Funktionalität "installiert" ist (siehe Hilfe).


    Der pre-start-Hook wird auch verwendet, aber eben zum restoren des Backup-Files. Zu diesem Zeitpunkt ist das EPG-File nicht mehr vorhanden, sonst würde man ja das ganze Backup nicht benötigen.


    Quote

    Original von nokia2
    zumal das Plugin nun Hacks enthält um Dinge wiederherzustellen, die im enigma2 core mit absicht so gehandled wurden.


    In e2 wurde mit Absicht die epg.dat direkt nach dem öffnen der Datei gelöscht, damit wenn es beim parsen crasht, es keine endlose crash loop gibt. Von daher ist das total doof sowas nun in irgendwelchen Plugins zu umgehen.


    Dazu gibt es hier im Board auch schon genug Diskussionen. Ich habe noch nie einen Crash wegen einem kaputten EPG-Eintrag gehabt, und falls doch einmal, wird nur 3 mal versucht das Backup-File zurückzuspielen (einstellbar, siehe Hilfe). Aber es ist ja niemand gezwungen das Backup zu verwenden. Es wird auch beim "neu" installieren des Plugins nicht aktiviert.


    Quote

    Und ich muss auch Dr. Best recht geben. Das Plugin heisst EPGRefresh. Und mehr soll es auch nicht tun.


    Das ist eine Philosophie-Frage: Ich habe gerne Funktionen die zum gleichen Thema gehören an einer Stelle.


    Ursprünglich wollte ich das auch in ein eigenes Plugin packen, aber dann kam mir die Idee das Backupfile direkt nach der Aktualisierung zu schreiben. Dieser Plan ging aber leider nicht auf, da ich keine Möglichkeit gefunden habe, dem core zu sagen, dass er den cache auf die platte flushed. Dann wäre auch der patch im enigma2.sh nicht notwendig gewesen. Wenn es diese Möglichkeit gibt, bin ich auch dafür das in ein eigenes Plugin zu packen, dass dann eben von epgrefresh nach der Aktualisierung aufgerufen wird.


    Aber ich habe auch nichts dagegen wenn eine Umfrage gestartet wird, wie die anderen Leute das sehen. Wenn diese ergeben sollte, dass es ein eigenes Plugin sein sollte, ist dies relativ einfach zu lösen, da die Hauptfunktionalitäten in einer eigenen Klasse liegen.

  • Quote

    Original von Schnello
    Hallo.



    Ja definitiv. Ich nutze die Funktion auch per Script und gerne auch mal ab und an von der Arbeit aus.


    Bei mir funktioniert das eigentlich noch.
    Worin liegt der Fehler? Hast du eine Fehlermeldung im enigma-log oder einen GreenScreen, oder ...?

  • Quote

    Original von joe128
    Der Patch ist zum sichern des EPG-Files und wird auch nur dann durchgeführt (/etc/rc3.d/S20EPGBackup.sh), wenn die Funktionalität "installiert" ist (siehe Hilfe).


    Habe gerade bemerkt, dass es da einen Fehler gegeben hat, und hab ihn im git korrigiert:
    bug in backup-installer --> /etc/rc3.d/S20EPGBackup.sh now calling script with autoinstall instead of install

  • Quote

    Original von joe128
    Ursprünglich wollte ich das auch in ein eigenes Plugin packen, aber dann kam mir die Idee das Backupfile direkt nach der Aktualisierung zu schreiben. Dieser Plan ging aber leider nicht auf, da ich keine Möglichkeit gefunden habe, dem core zu sagen, dass er den cache auf die platte flushed. Dann wäre auch der patch im enigma2.sh nicht notwendig gewesen. Wenn es diese Möglichkeit gibt, bin ich auch dafür das in ein eigenes Plugin zu packen, dass dann eben von epgrefresh nach der Aktualisierung aufgerufen wird.


    Die Möglichkeit gibt es aber: eEPGCache.getInstance().save()


    Ich verstehe das auch noch nicht so ganz, was Du meinst: "Backupfile direkt nach Aktualisierung zu schreiben"? Machst Du dann nach dem EPGRefresh ein Neustart und sicherst dann mit Deinem Script die epg-dat?


    Wird die enigma2.sh nur gepatcht, wenn man diese Backup-Funktion aktiviert? Also das passiert nicht direkt nach der Installation?


    Wie dem auch sei: für Plugins auf Schwerkraft solltest Du ein paar Normen einhalten: und eine der wichtigsten sind, dass KEINE Dateien gepatcht werden. :) Wenn man da nicht anders weiter weiß kann man sich ja mal mit anderen abstimmen, ob die eventuell eine Idee haben. Aber gepatcht wird nix :D


    Und übrigens: selbst wenn save() nicht Public wäre würde es noch Optionen für das Implementieren geben, ohne dass die Backup-Funktionalität zwingend in epgrefresh vorhanden sein muss. Das wäre so oder so als Extra Plugin kein Problem gewesen.


    Aber wie gesagt: die save() Methode von epgcache ist public, ich gehe also nun davon aus, dass Du die Backup-Funktionalität in ein extra Plugin wuchtelst :)

    4 8 15 16 23 42

    Edited 3 times, last by Dr.Best ().

  • Hi,
    jetzt muss ich mal eine Lanze für joe128 brechen.


    Ich finde es toll, dass ich nun direkt im EPGRefresh meine EPG sichern kann und diese bei einem Crash (tritt bei mir leider sehr oft auf) wieder zurück spielen kann.
    Wer das nicht möchte kann doch die Funktion abschalten.


    Bitte nehmt das jetzt, wo das "neue" EPG endlich nicht bei jedem Update überschrieben wird, diese Funktion wieder raus.

    Viele Grüße vom verrückten Hund


    Sat-Receiver: DM800HD PVR (Merlin3 OE2.0 + Rambo + Gemini 3.2)
    TV: LG 42LW4500
    StreamingClient: PopcornHour A-200

  • Auch meinerseits völlig an der richtigen Stelle Plaziert. Man muss nicht für alles ein einzelnes Plugin schreiben.
    Die Sicherung des EPG ist dort sinnvoll aufgehoben, da es absolut das gleiche Thema ist. Und dass das Thema EPG-Sicherung längst gefehlt hat ist anhand zahlreicher Nachfragen in verschiedenen Boards leicht zu erkennen.

    Image NewNigma²
    PlugInns:Autotimer, AMS, Epgrefresh, Moviecut, EPGGuide&Center, Mediaportal, SeriesPlugin

  • Quote

    Original von joe128


    Bei mir funktioniert das eigentlich noch.
    Worin liegt der Fehler? Hast du eine Fehlermeldung im enigma-log oder einen GreenScreen, oder ...?


    Fakt. Gerade getestet und es funktioniert. Könnte es sein das eine Aufnahme geplant war und der Request (auch wenn das WEB bestätigt das ein Refresh gestartet wird) einfach nicht gestartet wurde (wegen der Aufnahme die geplant war?


    Aber was anderes:
    Gerade im WEBIF gesehen das es einen Crash gegeben hat da das EPG leer ist.
    Das Log sagt folgendes:

    -->
    openwrt + minicom + screen = 24/7 Bootlog

  • Quote

    Original von joe128
    Aber es ist ja niemand gezwungen das Backup zu verwenden. Es wird auch beim "neu" installieren des Plugins nicht aktiviert.


    Die Plugin.py sagt aber was anderes:
    config.plugins.epgrefresh.backup_enabled = ConfigYesNo(default = True)


    Ich sehe das übrigends wie Dr. Best. Ich bin zwar auch ein Freund von Frickel Lösungen und solange ich das für mich selbst benutze ist das auch OK. Aber wenn man sowas in ein öffentliches GIT eincheckt sollte man sich da schon an gewisse Vorgaben halten. Immerhin war das Schwerkraft GIT ja auch zwei Tage nicht baubar nach dem einchecken der neuen Version bis Dr. Best das Makefile gefixt hat.
    Sicher kann sowas mal passieren, kein Thema. Aber man sollte sich schon bewusst sein wieviele User das alles benutzen und welche Verantwortung man übernimmt wenn man ein Plugin übernimmt.

  • Quote

    Original von Dr.Best


    Die Möglichkeit gibt es aber: eEPGCache.getInstance().save()


    Und dann wird das File auf die Platte geschrieben? ansonsten würde es nichts bringen. es gibt ja auch eine flush-methode, habe es mir aber noch nicht angesehen, ob man sie aufrufen kann.

    Quote


    Ich verstehe das auch noch nicht so ganz, was Du meinst: "Backupfile direkt nach Aktualisierung zu schreiben"? Machst Du dann nach dem EPGRefresh ein Neustart und sicherst dann mit Deinem Script die epg-dat?


    Dann bräuchte man ja keinen Neustart mehr, wenn wir den aktuellen Memory-Inhalt vom EPG-Cache schreiben könnten. dann wird das file einfach umbenannt (mit Datum) und beim nächsten Start wäre es verfügbar.

    Quote


    Wird die enigma2.sh nur gepatcht, wenn man diese Backup-Funktion aktiviert? Also das passiert nicht direkt nach der Installation?


    so war zu mindestens der Plan :-)

    Quote


    Und übrigens: selbst wenn save() nicht Public wäre würde es noch Optionen für das Implementieren geben, ohne dass die Backup-Funktionalität zwingend in epgrefresh vorhanden sein muss. Das wäre so oder so als Extra Plugin kein Problem gewesen.


    Aber wie gesagt: die save() Methode von epgcache ist public, ich gehe also nun davon aus, dass Du die Backup-Funktionalität in ein extra Plugin wuchtelst :)


    Wie gesagt, da würde ich gerne eine Umfrage machen. Und "Verbinden" müsste/sollte man die beiden Plugins dann ohnehin, weshalb es eigentlich fehleranfälliger wäre wenn sie getrennt gewartet werden müssen.


    Quote

    Original von Loomes


    Die Plugin.py sagt aber was anderes:
    config.plugins.epgrefresh.backup_enabled = ConfigYesNo(default = True)


    Ich sehe das übrigends wie Dr. Best. Ich bin zwar auch ein Freund von Frickel Lösungen und solange ich das für mich selbst benutze ist das auch OK. Aber wenn man sowas in ein öffentliches GIT eincheckt sollte man sich da schon an gewisse Vorgaben halten. Immerhin war das Schwerkraft GIT ja auch zwei Tage nicht baubar nach dem einchecken der neuen Version bis Dr. Best das Makefile gefixt hat.
    Sicher kann sowas mal passieren, kein Thema. Aber man sollte sich schon bewusst sein wieviele User das alles benutzen und welche Verantwortung man übernimmt wenn man ein Plugin übernimmt.


    Muss ich mir nochmal anschauen, ob dieses Config-Element fürs "installieren" zuständig ist.


    Und ohne hier eine riesen Diskussion auszulösen: in den richtlinien fürs plugin erstellen steht zwar dass patches vermieden werden sollen, aber nicht dass sie verboten sind.
    Dass Plugin hosten eine gewisse Verantwortung mit sich bringt, steht auch außer Frage, weshalb ich auch geschätzte 2 Monate mit dem einchecken gewartet habe, damit die Änderungen gut getestet werden. Das makefile konnte natürlich nicht getestet werden und der Teufel schläft nie :-)
    bdw: Dass das makefile nicht funktioniert hat, hat mit dem patch nichts zu tun.

  • Quote

    Original von joe128


    Muss ich mir nochmal anschauen, ob dieses Config-Element fürs "installieren" zuständig ist.


    Ich denke das default=True war nur für die Testphase. Ursprünglich hatte ich es schon so geplant, dass die Funktionalität bewusst aufgedreht werden muss was auch die Zeilen in der Hilfe belegen:
    ... Wenn Sie das Backup aktivieren wird die Datei enigma2.sh gepatched. Dies geschieht sobald Sie das Backup zum Ersten mal aktivieren ...


    Ich werde den default-wert noch ändern.

  • Quote

    Original von Schnello


    Fakt. Gerade getestet und es funktioniert. Könnte es sein das eine Aufnahme geplant war und der Request (auch wenn das WEB bestätigt das ein Refresh gestartet wird) einfach nicht gestartet wurde (wegen der Aufnahme die geplant war?


    Je nach Konfiguration und Hardware-Ausstattung würden dann keine EPG-Daten geholt werden können.


    Der Fehler ist nur dann aufgetreten, während die Aufnahme gelaufen ist?
    Die genaue Ursache kann ich hier nicht wirklich rauslesen, aber ich kann die callbacks vom thread-handling (autotimer) splitten, wodurch zu mindestens kein Folgefehler auftreten sollte (exceptions.AttributeError: Failure instance has no attribute '__getitem__').

  • Das gleiche hatte ich heut morgen auch und bei mir ist keine Aufnahme gelaufen. Box war auch im Standby.

    Files

    • crash.log

      (16.44 kB, downloaded 2 times, last: )

    Realität ist eine Illusion die durch Biermangel hervorgerufen wird

  • Also ich will noch mal sagen, dass ich das auf jeden Fall sehr, sehr begrüße und es gut finde, wenn jemand Plugins implementiert. Gibt es viel zu wenige von... :)


    Quote

    Original von joe128
    Und ohne hier eine riesen Diskussion auszulösen: in den richtlinien fürs plugin erstellen steht zwar dass patches vermieden werden sollen, aber nicht dass sie verboten sind.


    Ich will hier auch keine Diskussion starten. Und ich will auch nicht, dass Du das in den falschen Hals bekommst, was ich jetzt schreibe: Aber wenn Du das nicht änderst, dann schmeiße ich den Part aus dem Plugin auf Schwerkraft raus.


    Ich will mich hier auch nicht aufspielen, ganz im Gegenteil, ich würde viel lieber helfen, falls es Fragen gibt, wie man das lösen kann.
    Also verstehe das nicht falsch, geschrieben kommt sowas immer ein bisschen ungünstig rüber als wenn man direkt reden würde...:) Du kannst jederzeit gerne z.B. mal in den IRC kommen, so dass Du Dich mal austauschen kannst, Ideen sammeln für ne Lösung etc. etc...Aber bei einem Plugin wie EPGRefresh, was auf 99,9% aller Boxen installiert ist (auch auf meinen :) ), da wird nix gepatcht. Egal, ob man das erst aktivieren muss oder nicht...insbesondere, wenn das gar nicht notwendig ist.


    Patchen ist eigentlich nie notwendig...also ich musste das bisher noch nirgens machen...


    Warum Du nicht ein extra Plugin EPGBackup machen willst (obwohl Du geschrieben hattest, dass Du das machst, wenn ein save() geht ;) (und ja, es wird dann das File geschrieben, ansonsten hätte ich Dir das nicht vorgeschlagen ;) )) verstehe ich auch nicht...es ist was anderes, ein Plugin um Funktionalität zu erweitern, oder eine vollständig neue Sache einzubauen. Was Backup mit Refresh zu tun hat, also dass das zusammengehört, ist mir ein Rätsel. :)


    Übrigens ist epgcache->save() nicht thread save. Wenn dabei gerade noch eine Cleanup oder sonst was im epgcache läuft könnte das auch crashen...

  • Keine Sorge, ich bin schon länger Entwickler, also kritik gewohnt und nicht so schnell eingeschnappt :-)


    Ich bin auch dafür, dass der Patch wieder rausfliegt, da es ja eine bessere Lösung gibt. Chrashes wegen der thread-unsicherheit müsste man ja abfangen können.


    Aber für die Überlegung ob es ein eigens Plugin sein soll oder nicht, habe ich mich anscheinend missverständlich ausgedrückt:
    Ursprünglich wollte ich ein eigens machen. dann dachte ich mir, dass ein backup erstellen am sinnvollsten nach einer aktualisierung ist. somit war es für mich logischer es direkt ins epgrefresh zu implementieren.


    Eine andere Lösung wäre, ein eigenes Plugin vom epgrefresh aufrufen zu lassen (geschieht ja derzeit schon mit dem autotimer).
    Prinzipiell ist mir das egal, aber da es eben schon mal integriert ist, würde ich eben gerne die Mehrheit entscheiden lassen.


    Gibt es hier im Board die Möglichkeit eine Umfrage zu starten? Auf die Schnelle habe ich nichts gefunden.

  • Quote

    Original von joe128


    Der Fehler ist nur dann aufgetreten, während die Aufnahme gelaufen ist?
    Die genaue Ursache kann ich hier nicht wirklich rauslesen, aber ich kann die callbacks vom thread-handling (autotimer) splitten, wodurch zu mindestens kein Folgefehler auftreten sollte (exceptions.AttributeError: Failure instance has no attribute '__getitem__').


    Nein keine Aufnahme. Die nächste war erst um 9:49


    Grüße

    -->
    openwrt + minicom + screen = 24/7 Bootlog

  • umfragen können die admins/moderatoren für dich anlegen

  • Ich hatte für Merlin2 damals, als der Core noch offen war, auch eine epgbackup routine geschrieben gehabt. Allerdings direkt in der epgcache, da konnte ich extrem viel abfangen, wenn was schief lief. Damals hatte ich viele Optionen drinnen, wann und wo das Backup laufen soll. Also direkt nach dem Start, immer zu einer gewissen Uhrzeit etc... daran musste ich halt denken, als ich gesehen hatte, dass Du sowas implementiert hast. Und deswegen denke ich halt als noch, dass ein eigenständiges Plugin sinnvoller wäre. :) Du musst aber deswegen keine Umfrage starten, wenn Du auf Teufel komm raus denkst, dass das im EPGRefresh besser aufgehoben ist. Rein vom Programmierersicht ist das aber unnötig, du könntest einfach ein Callback bei EPGRefresh Finish schreiben, wo sich Dein Plugin einklinken könnte. Aber egal, deswegen musste keine Umfrage starten...
    Hauptsache, der Patch fliegt raus und der Backup-Kram ist defaultmäßig disabled :)