betonme / e2openplugin-EnhancedMovieCenter

EMC is an enhanced movielist replacement for Linux based receivers.
36 stars 61 forks source link

Feature Request: Handling von wiederholenden Timern beim Löschen von laufenden Timer-Aufnahmen #221

Closed dream-alpha closed 6 years ago

dream-alpha commented 6 years ago

Beim Löschen von laufenden Timeraufnahmen werden momentan reguläre Timer mitgelöscht. Es wäre toll, wenn beim Löschen von wiederholenden Timer-Aufnahmen der dazugehörige Timer deaktiviert und wieder aktiviert würde. Momentan muss man das manuell machen, was die Sache umständlich macht. Bitte um wohlwollende Behandlung ;-) Danke.

Swiss-MAD commented 6 years ago

Noch besser wäre es aus meiner Sicht wenn die reguläre E2 abfrage kommt, was mit zukünftigen Ereignissen geschehen soll.

dream-alpha commented 6 years ago

oder so ;-)

dhwz commented 6 years ago

Muss erstmal den Code verstehn, kommt da überhaupt noch die Meldung "Not stopping any repeating timers. Modify them with the timer editor."?

Swiss-MAD commented 6 years ago

Früher kam die Meldung sicher. Aber schon lange nicht mehr probiert, weil ich gleich ins Timer menu ging. ;)

dhwz commented 6 years ago

Hm ok muss mir mal anschauen was der Timereditor da genau macht und ob man das so einfach übernehmen kann.

dhwz commented 6 years ago

@Swiss-MAD Das ist die Abfrage die du dann immer siehst oder? "Repeating event currently recording... What do you want to do?" (("Stop current event but not coming events"), "stoponlycurrent"), (("Stop current event and disable coming events"), "stopall"), (_("Don't stop current event but disable coming events"), "stoponlycoming")

Also über den E2 TimerEditor.

Swiss-MAD commented 6 years ago

Ja genau. Der Wunsch wäre also wenn man in EMC einen noch laufenden wiederholenden Timer löschen will, erst diese Abfrage vom E2 Timer Editor erscheint. Danach kann man dann die Aufnahme bei Bedarf löschen.

dream-alpha commented 6 years ago

eigentlich waere der wunsch so: wenn man in der movielist mit der roten taste den film loeschen will, kommt diese abfrage und nach beantwortung wird die timeraktion durchgefuehrt und der film geloescht. alles in einem rutsch. oder: falls es mit der abfrage zu umständlich/schwierig ist: einfach den timer disablen und wieder enablen... damit bleibt der timer fuer zukuenftige events aktiv und den film loeschen.

Swiss-MAD commented 6 years ago

Nein bitte nicht in einem Rutsch! Genau so wie bei einem einzelnem Timer, einfach mit der Abfrage dazwischen. Weil sonst wird einem die Möglichkeit genommen, einen laufenden Timer in EMC einfach zu beenden, und nach Wunsch erst danach zu löschen. Das Nutze ich noch ab und zu bei einzel Timern, wenn ich sehe das die Nachlaufzeit nicht nötig ist. Das ist je nach dem ob man die Löschabfrage drin hat oder nicht einen oder 2 Tasten mehr. Das müsste drin liegen. ;) Notfalls im Setup einstellbar, ob danach sofort auch gelöscht wird, oder nicht. Sollte dann für einzel und wiederholenden Timern gleichzeitig gelten.

svenh0 commented 6 years ago

Und wenn beim Löschen im EMC anstatt der bisherigen Frage "Laufende Aufnahme beenden? ....ja/nein" eine ChoiceBox kommt? Es handelt sich um eine laufende Aufnahme. Was wollen sie machen ?

Wenn es ein wiederkehrender Timer ist, könnte danach ja dann die Frage von E2 kommen: Wiederholender Timer ist zur Zeit aktiv... Was wollen Sie machen?

Oder es wird nach der 1. Frage code-intern automatisch die Variante 1 für den wiederkehrenden Timer gesetzt (laufendes Ereignis abbrechen, aber kommende ausführen), also ganz ohne 2. Frage. Das wäre meiner Meinung nach dann ja die sinnvollste Variante aus dem EMC heraus.

dream-alpha commented 6 years ago

ja, genau so wie svenh0 es beschreibt, meine ich es auch.

svenh0 commented 6 years ago

das dürfte der passende Code-Teil vom TimerEditor sein. Variante 1 = stoponlycurrent bei "if t.repeated:" https://github.com/libo/Enigma2/blob/master/lib/python/Screens/TimerEdit.py#L91

Nur eben den Code aus dem CallBack direkt anstelle der ChoiceBox für den wiederkehrenden Timer verwenden.

Das müsste dann hier rein - anstelle von "return False" https://github.com/betonme/e2openplugin-EnhancedMovieCenter/blob/master/src/RecordingsControl.py#L189

svenh0 commented 6 years ago

die geänderte Funktion "stopRecording" in der RecordingsControl.py funktioniert bei mir schon mal auch für das Beenden von wiederkehrenden Timern. Fehlt nur noch vorneweg die ChoiceBox, ob man nur den Timer beenden möchte oder auch gleich die Aufnahme löschen möchte ;)

    def stopRecording(self, filename):
        try:
            if filename[0] == "/":          filename = os.path.basename(filename)
            if not isDreamOS:
                if filename.lower().endswith(".ts"):    filename = filename[:-3]
            if filename in self.recDict:
                for timer in NavigationInstance.instance.RecordTimer.timer_list:
                    if timer.isRunning() and not timer.justplay and timer.Filename.find(filename)>=0:
                        if timer.repeated:
                            #return False
                            timer.enable()
                            timer_afterEvent = timer.afterEvent
                            timer.afterEvent = AFTEREVENT.NONE
                            timer.processRepeated(findRunningEvent = False)
                            NavigationInstance.instance.RecordTimer.doActivate(timer)
                            timer.afterEvent = timer_afterEvent
                            NavigationInstance.instance.RecordTimer.timeChanged(timer)
                        else:
                            timer.afterEvent = AFTEREVENT.NONE
                            NavigationInstance.instance.RecordTimer.removeEntry(timer)
                        emcDebugOut("[emcRC] REC STOP for: " + filename)
                        return True
            else:
                emcDebugOut("[emcRC] OOPS stop REC for nonexistent: " + filename)
        except Exception, e:
            emcDebugOut("[emcRC] stopRecording exception:\n" + str(e))
        return False
dream-alpha commented 6 years ago

das sieht doch schon mal nicht schlecht aus.... und wuerde meinen usecase bereits abdecken, weil in 90% der cases will man ja den wiederholenden timer nicht loeschen sondern nur das aktuelle event beenden aber den timer fuer zukuenftige events weiterlaufen lassen. und wenn man dann doch mal den kompletten wiederholenden timer loeschen will, dann kann man ins timer menue gehen.

dhwz commented 6 years ago

Sorry aber das macht für mich keinen Sinn, der Button heißt löschen also sollte er auch löschen und nicht nur den Timer stoppen, Der Button heißt nicht Timer stoppen und Aufnahme beibehalten, dafür kann man auch wie schon zuvor das Timermenü direkt aufrufen.

svenh0 commented 6 years ago

Da muss ich aber widersprechen. Die Frage im EMC lautet: „soll die laufende Aufnahme beendet werden?“

Da steht nichts von Timer löschen.

dream-alpha commented 6 years ago

@dhwz: ja genau... das war vielleicht nicht klar... wenn man auf die rote taste "loeschen" drueckt, dann wird der film auf jeden fall geloescht. das timer-handling ist zusaetzlich. wenn man den film nicht loeschen will, dann geht man halt ins timer-menue und haelt den timer an.

dhwz commented 6 years ago

@svenh0 Ich sprech nicht vom Timer, sondern von der Aufnahme. Weil Swiss-MAD geschrieben hatte die Aufnahme solle beibehalten werden, das würde den Button ad absurdum führen.

dream-alpha commented 6 years ago

genau, das file soll auf jeden fall geloescht werden. und mit der timerabfrage soll man die wahl bekomme ob AUCH der dazugehoerende aktuelle wiederholende timer "angehalten" wird oder ob der wiederholende timer komplett geloescht wird.

svenh0 commented 6 years ago

Wir haben hier ja 2 Baustellen.

  1. Timerhandling Mit dem obigen Code können jetzt auch wiederkehrende Timer berücksichtigt werden.

  2. Löschen von Aufnahmen (auch wenn die Aufnahme gerade läuft) Genau das geht im Moment nicht. Es wird nur die Aufnahme beendet. Löschen muss ich die Aufnahme dann mit nochmaliger roter Taste. Deshalb war ja der Kompromiss mit der Choicebox als Multilösung.

Swiss-MAD commented 6 years ago

Dennoch macht es Sinn zuerst zu fragen ob der noch laufenden Timer wirklich beendet werden soll. Ob dann gleich auch die Aufnahme dazu gelöscht werden soll sollte danach aber nochmal angefragt werden.

dhwz commented 6 years ago

Also ich würde bevorzugen den Timer gar nicht anzupacken, dass der Timer geöscht wird macht ja bei Single-Events auch Sinn. Bei wiederholenden Timer, will man ja die laufende Aufnahme dann löschen, folglich sollte der Timer selbst auch nicht verändert/gelöscht werden. EMC ist kein Timer-Editor!

dhwz commented 6 years ago

@Swiss-MAD Das passiert doch jetzt auch nicht bei einem Single-Event?

svenh0 commented 6 years ago

Ich finde die jetzige Lösung inkonsequent. Warum sollte man nicht auch wiederkehrende Timer beenden können.

Es kommt ja vorher auch die Frage, ob man die Aufnahme beenden will.

Da finde ich den Hinweis auf den TimerEditor eher primitiv, zumal es EMC mit obigen Code selber machen könnte.

Ich merke aber, dass das offensichtlich trotz Wunsch in #221 nicht gewollt ist.

dhwz commented 6 years ago

Also es sollte IMHO identisch behandelt werden nur dass der Timer eben nicht gelöscht sondern nur gestoppt wird.

Swiss-MAD commented 6 years ago

Doch jetzt wird erst gefragt ob der Timer beendet werden soll, (weil sonst die Aufnahme nach dem löschen wieder fortgesetzt wird....war zumindest früher im OE2.0 so. Auf OE2.5 habe ich das nicht ausprobiert) danach konnte man erst löschen.

EMC soll auch kein Timer Editor werden, aber die Möglichkeit den noch laufenden Timer in EMC schnell zu stoppen ohne auch gleich die Aufnahme zu löschen finde ich schon sehr praktisch.

dhwz commented 6 years ago

@Swiss-MAD Du missverstehst mich, exakt das macht doch die Änderung von Sven. Es ging um die Timer! Die Abfrage die du meinst kommt doch sowieso beim drücken der roten Taste, wenn der Timer nicht mehr läuft. Da brauchen wir doch keine zusätzliche Abfrage mehr.

Swiss-MAD commented 6 years ago

Ja die Lösung von Sven gefällt mir. Danach noch die Frage ob der Film auch gleich gelöscht werden soll, und dann finde ich das eine Runde Sache. ;)

Ja wiederholende Timer sollen nicht einfach so gelöscht werden. Entweder stoppen, oder choice box vom Timer Editor. Oder meinst du noch was anderes? ....muss mal Kaffee machen. ;)

Swiss-MAD commented 6 years ago

Ja wenn der Timer nicht mehr läuft, muss natürlich auch nichts am Timer gedreht werden.

svenh0 commented 6 years ago

Ja, genauso behandeln wie jetzt nur den wiederkehrenden eben nur stoppen. Es geht ja eigentlich nur noch um das Löschen der Aufnahme. Dazwischen kommt ja nur das Timerhandling.

Er möchte ja das Beenden eines Timers und Löschen der Aufnahme in einem Rutsch mit einer ChoiceBox. Weil jetzt muss man mit rot erst die Aufnahme beenden und dann, wenn man möchte, nochmal mit rot die Aufnahme löschen. Mit der ChoiceBox bei der Timer-Beenden-Frage könnte man das Löschen direkt ausführen sofern gewünscht. Die Option nur den Timer zu beenden würde ich dabei lassen, weil das jetzt bestimmt auch einige in EMC so nutzen.

Swiss-MAD commented 6 years ago

Ja, ungefähr so hätte ich mir das vorgestellt. :D

dhwz commented 6 years ago

Okay, naja das mit der Abfrage ist ja auch kein Problem, allerdings brauchen wir da keine ChoiceBox sondern einen normale MessageBox mit Ja/Nein reicht da dann völlig und bei Ja rufen wir einfach noch das self.deleteMovieQ auf nachdem self.stopRecordQ aufgerufen wurde, dann gilt das nämlich auch für alles Single-Events und Multi-Events.

Also Möchten sie laufenden Timer stoppen ja/nein -> ja -> Möchten sie die Aufnahme löschen ja/nein -> ja -> löschen

Swiss-MAD commented 6 years ago

Ja, das hört sich gut an. ;)

dream-alpha commented 6 years ago

@dhwz: genau das war eigentlich mein urspruenglicher request... habe mich vielleicht ein bisschen umstaendlich ausgedrueckt :-)

svenh0 commented 6 years ago

Also nur bei einer laufenden Aufnahme folgende ChoiceBox: Es handelt sich um eine laufende Aufnahme. Was wollen sie machen ?

Punkt 1 funktioniert ja schon - bisherige Variante in EMC (mit obigen Code jetzt auch für wiederkehrende Timer) Punkt 2 müsste irgendwie noch integriert werden. Also nach Löscheb/Beenden der Timer auch das File löschen, sofern eben Punkt 2 gewählt wurde.

dhwz commented 6 years ago

Ok, dann mach ich das später so oder Sven wenn er lustig ist, aber da muss auch bissl aufgeräumt werden dann ;) @svenh0 ich würde vermeiden unnötig die alten Abfragen kaputt zu machen weil sonst die ganzen Übersetzungen futsch sind, daher lieber eine 2. Abfrage ja/nein die macht nichts kaputt.

svenh0 commented 6 years ago

Ok, 2 nacheinanderfolgende Fragen ja/nein ginge auch. Die ChoiceBox wäre dann luxus ;)

dream-alpha commented 6 years ago

in der zweiten checkbox bitte den default sinngemaess auf "der wiederholende timer soll nicht komplett geloescht werden, sondern nur angehalten werden" setzen, weil das imho der hauptanwendungsfall ist.

dhwz commented 6 years ago

Wie gesagt am Timer wird ja nichts gemacht die Abfrage sollte sich auf die AUFNAHME beziehen. Die Abfrage heißt ja auch jetzt schon ob man die laufenden Aufnahme stoppen möchte, von Timer löschen steht da ja nirgendwo etwas.

svenh0 commented 6 years ago

Wie gesagt, mit den 2 Fragen könnte ich auch leben. Auf jeden Fall ein Fortschritt zum jetzigen Stand ;)

Die #221 könnte man ja mit obigen Code schon erledigen. Zum direkten Löschen der Aufnahme nach Beenden des Timers könnte man ja einen neuen Punkt aufmachen.

Oder soll das hier alles komplett fertig gemacht werden?

dhwz commented 6 years ago

Ich würd das hier fertig machen, ist ja nicht mehr viel, ggf. kannst ja auch den Titel oben ergänzen.

svenh0 commented 6 years ago

Ok ;)

Ich glaube mit dem Aufruf von self.deleteMovieQ direkt nach dem self.stopRecordQ würde dann auch eine Mischauswahl (laufende und fertige Aufnahmen) bei Mehrfachauswahl berücksichtigen. Jetzt werden glaub ich nur die Timer beendet. Die mitgewählten fertigen Aufnahmen werden bisher ignoriert, wenn man auch laufende Aunahmen ausgewählt hat.

Also gleich mehrere Fliegen mit einer Klappe ;)

Ich teste das Nachmittag mal. Ist ja nur eine zusätzliche Codezeile ;) Die Variante mit der ChoiceBox wäre da nicht so einfach.

Swiss-MAD commented 6 years ago

2 Abfragen hintereinander passt doch. Da würde ich keine Zeit in eine ChoiceBox investieren. Und wie dhwz schrieb macht man damit bei der Übersetzung auch nichts kaputt.

dream-alpha commented 6 years ago

@svenh: wenn du magst, kannst du mir das auch zum testen geben.

svenh0 commented 6 years ago

Ok. Kann ich machen. Schick mir doch im Dreambox-Board mal ne PN (Konversation).

Oder soll ich die beiden geänderten Files hier hochladen? Ich glaub, hier kann man auch Files mit reinhängen, oder?

dream-alpha commented 6 years ago

ja, hier anhaengen waere das einfachste... denke ich.

svenh0 commented 6 years ago

Edit: der alte Text hier hat sich inzwischen erledigt, daher entfernt

Die funktionierende RecordingsControl.py zum Beenden von wiederkehrenden Timern hänge ich hier schon mal an.

RecordingsControl.zip

svenh0 commented 6 years ago

Hab es hinbekommen ;) Hier nun noch die geänderte MovieSelection.py: MovieSelection.zip

Jetzt kommt erst die Frage nach dem Timer beenden und wenn alle Timer erfolgreich gestoppt werden konnten, dann kommt die Frage, ob die Aufnahmen gelöscht werden sollen?

Wenn jetzt allerdings Timer nicht beendet werden können (warum auch immer), kommt jetzt immer noch der Hinweis zu den wiederkehrenden Timern und dem TimerEditor ?!? Sollte man da vielleicht eine Meldung ausgeben, dass das Beenden der Timer nicht vollständig ausgeführt werden konnte ? https://github.com/betonme/e2openplugin-EnhancedMovieCenter/blob/master/src/MovieSelection.py#L2264

dhwz commented 6 years ago

Hm, ich hatte mir das anders gedacht ich muss mal mal hier ausprobieren.

svenh0 commented 6 years ago

Die Funktionsweise ist jetzt aber genauso wie zuvor ausgemacht ;)