Jump to content

Erweitertes Beenden v2 / Extended Exit v2


nuts

Recommended Posts

@Lars

Kommt man denn garnicht an die anderen Einträge in der language Datei ran, das macht doch keinen Sinn es auf die OSD Einträge zu beschränken?

Ist sicher für die Skinns gedacht.

So wie in der GetSetupValue function wäre das echt praktischer. Kannst du da was machen?

Link to comment
  • Replies 139
  • Created
  • Last Reply

Top Posters In This Topic

  • nuts

    70

  • Tüftler

    47

  • honeyxx

    7

  • Lars_MQ

    6

Top Posters In This Topic

Posted Images

Nein, man kommt da nicht dran. Das ganze ist eine einfache Key->Value Zuordnung.

Die Einträge werden nach Sektionen [blahblah] gegliedert. Das liesse sich nicht einfach verwalten, da es zu überschneidungen bei den Key-Werten kommen würde.

Link to comment

Naja okay. Macht auch nichts.

 

Ich hab in Post 1 eine neue Version (inkl. source, includes, readme.txt, example.ini) hochgeladen.

Es gibt jetzt einen neuen Eintrag "Language" in der config.ini (0=englisch und 1=deutsch).

So sehen die Texte jetzt aus:

$a_lang[0][0]="Stop Timeshift?"
$a_lang[0][1]="Timeshift beenden?"
$a_lang[1][0]="Stop Recording?"
$a_lang[1][1]="Aktive Aufnahme(n) beenden?"

 

Bessere Formulierungen werden ich gerne übernehmen. Auch andere Sprachen sind möglich.

Link to comment

Also bei Keys sind in der [OSD] Sektion vorhanden. Was ist das problem die zu nutzen?

 

Nachtrag

Ah ok ich sehs, die genauen "phrasen" sind im [Dialogs] bereich.

Link to comment

Genau und jetzt da wieder selbst was hinzubasteln klappt auch höchstens zufällig.

Bei 2 Einträgen und 2 Sprachen ist aber auch noch relativ überschaubar.

Link to comment

Es ist machbar das als GetTranslationEx(const Section, Key, Default : Widestring):String umzusetzen.

 

Es ist dann aber zwingend der Default (in englisch) notwending, da der Key nicht aussage kräftig ist...

Link to comment

Würde mir weiterhelfen. :thumbsup:

Innerhalb einer definierten Sektion müsste der Key aber doch aussagekräftig sein?

Edited by nuts
Link to comment

Super - danke Lars.

Eilt jetzt erstmal nicht. Die Lösung tuts jetzt mal und später kann ich das Array für die englischen Basiseinträge soweiso brauchen. :)

 

@Tüftler: wenn es Probleme mit der neuen Version gibt, bitte gleich melden.

Ich exportieren gerade die Hautpfunktionen um das Update von den anderen Skripten (Sleeptimer, ProzesstaskEX, MyActions) leichter zu machen.

Könnte sein das da was schief gegangen ist.

Edited by nuts
Link to comment

Wie deaktivierst du eigentlich die Meldung des DVBViewers oder des RS wenn noch eine Aufnahme ansteht?

Läuft noch ein Recording und man drückt bei deinem Hinweisfenster zum Beenden auf Ja meldet sich anschließend

der DVBViewer oder der RS, kurz bevor der Standby ausgelöst wird.

 

Eigentlich sollte man nicht in den Versuch kommen Ja auszuwählen, aber es geht halt (ob der dann in den Away-Modus geht?).

Ich habe es jedenfalls nicht geschafft die Meldungen vom DVBViewer oder des RS zu verbannen.

Link to comment

Das Problem betrifft nur die Sofortaufnahmen oder?

Ich befürchte die Meldung lässt sich nicht abschalten.

 

Anders gefragt: Wie soll der Ablauf genau sein?

Link to comment

Ich probier später mal ob ich über den Eventhandler auf die Meldung reagieren kann.

JA => weiter im Skript

Nein=> Skript beenden

 

Dann könnte man meine eigenen Funktionen auch weglassen. Oder übersehe ich da was?

Link to comment

Ähm muss ich untersuchen, ich habe aber immer mit der Sofortaufnahme getestet.

Ich könnte mir vorstellen bei einer Ja-Auswahl die Aufnahme stoppen zu lassen und dann Standby/Beenden/Was_auch_immer auszuführen.

Dann sollte auch keine Meldung mehr kommen.

Link to comment

Ich könnte mir vorstellen bei einer Ja-Auswahl die Aufnahme stoppen zu lassen und dann Standby/Beenden/Was_auch_immer auszuführen.

Das Problem ist ich kann keine komplette Skriptsprache abstrahieren und komplizierte "Wenn ... Dann" Verknüpfungen einbauen.

Können schon, aber dann ist die Konfiguration irgendwann so kompliziert wie das Skript selbst zu schreiben.

 

Ich durchdenke das nochmal. Bei mir läuft wie gesagt ein 24/7 TV-Server und daher habe ich mit Aufnahmen am lokalen Client wenig zu tun.

Edited by nuts
Link to comment

Ich habe das Topic jetzt nicht komplett verfolgt und bin mir nicht sich ob die Idee jetzt zu viel des guten ist. (Selber brauch ich den Script nicht)

Aber bei der Behandlung ist es wahrscheinlich sinnvoll zwischen Sofortaufnahme und Aufnahmen aus den Timeshiftpuffer zu unterscheiden.

 

Da Aufnahmen aus den Timeshiftpuffer auch bei der Verwendung vom RS im DVBViewer laufen. Bei Sofortaufnahmen muss man beim beenden vom DVBViewer nur einen Endzeit Setzen. Dann laufen die wie jede andere Aufnahme einfach im RS weiter.

Link to comment

2 Sachen könnte ich machen.

 

Einen neuen Befehl "DVBClose=1" einführen.

Dort könnte ich im Skript alle möglichen Dinge zusammenfassen (Endzeit setzen usw.).

 

Und optional für jeden "Escape" Fall (checkrecording, checktimetime, checkproceslist usw.) eine Escape Sektion aufrufen.

 

Standby-Sektion => Aufnahme erkannt => Dialog Ja => Sektion Standby weiter abarbeiten

Dialog Nein => Sektion "EscapeStandby" (falls vorhanden) abarbeiten

 

Das wird dann aber schon recht wirr. :shocked:

Edited by nuts
Link to comment

Ähm jetzt verstehe ich das erst richtig.

Der DVBViewer frag nur danach ob die Sofortaufnahme beendet werden soll.

Da muss man aber sehr viel beachten.

 

@Tüftler: An welche Behandlung für die Sofortaufnahmen hattest du gedacht?

Edited by nuts
Link to comment

Super wäre eine nach-Aufnahme-Änderung der laufenden Timer auf die hinterlegte Beenden-Aktion (Standby) etc.

 

Ein Sofortaufnahme Timer könnte entweder direkt gestoppt werden oder aber auch das Menü mit "Aufnahme nach 10min" etc. stoppen aufrufen. Da bin ich mir aber nicht sicher ob man das machen kann. Mir würde direkt stoppen(killen) genügen.

 

Also:

  1. Prüfen auf laufende Aufnahme
  2. Prüfen ob da ein Instant Recording dabei ist
  3. Instant Recording killen oder aber Menü aufrufen
  4. Laufende Aufnahmen mit der entsprechenden nach-Aufnahme-Aktion versehen
  5. evtl. Close Graph hinterher schicken

o:)

Edited by Tüftler
Link to comment

könnte so aussehen

i = 1
Timernumber = 0
do while (i < 4 and Timernumber < TimerManager.Count)
if TimerManager.Item(Timernumber).Instant then 'prüfen ob Instant Timer
TimerManager.Remove(Timernumber) 'Timer direkt entfernen (oder aber Fenstermenü aufrufen)
Else
If Timermanager.Item(Timernumber).Recording Then
If TimerManager.Item(Timernumber).Executable Then 'prüfen ob Timerkollision vorliegt

 

'->>>> Das geht wohl anders <<<<<<-
TimerManager.Item(Timernumber).DVBVShutdown = 2 'Standby oder ander Endaktion zuweisen

'->>>>??????????????????<<<<<<-


End If
End If
i = i + 1
end if
Timernumber = Timernumber + 1
loop

Edited by Tüftler
Link to comment

Ok ich schau mal was sich da machen lässt. :)

Die laufenden Sofortaufnahmen möchte ich eigentlich nicht ungefragt killen.

 

Mal sehn was morgen dabei rauskommt.

Link to comment

Mit

 

TimerManager.Item(Timernumber).EndTime 
 

 

kriegst du zumindest die Endzeit raus und mit

 

TimerManager.Item(Timernumber).done
 

kann man prüfen ob er wirklich fertig ist. Dann könnte man auch die Endaktion (Standby etc.) durch dein Programm automatisch einleiten.

Link to comment

Tja aber wie kommen wir an die Endzeitänderung einer Sofortaufnahme ran?

 

WindowManager.ShowWindow(28)

wird bei einer Sofortaufnahme nicht gefüllt und bringt das OSD komplett zum erliegen.

 

Und ein

SendCommand(34)

 

führt ins leere wenn bei einer Sofortaufnahme "Schließe Graph" gemacht wurde.

 

Dann müsste man erst die ChannelID der Sofortaufnahme ermitteln, tunen und dann die Action senden.

 

-> OK, Letzter Sender würde gehen.

Edited by Tüftler
Link to comment

Sobald die Endzeit bei jeder Sofortaufnahme gesetzt wird ist man mit den Aufnahmen im DVBViewer (mit aktivierter RS unterstützung) fertig.

Dann dürften auch keine Meldungen vom DVBViewer selbst mehr kommen?

Mit aktivierter RS Unterstützung werden vom DVBViewer selbst sowieso nur Sofortaufnahmen (ohne geänderte Endzeit) angezeigt?

 

Abfragen ob der Recodringservice abgewürgt werden darf kommt dann im nächsten Schritt.

 

Folgende Änderung hab ich mir ausgedacht:

; checkrecording=0 => disable | 1 => skript bei treffer beenden | custom string => ruft eine benutzerdefinierte Sektion in der config.ini
; checktimeshift=0 => disable | 1 => skript bei treffer beenden | custom string => ruft eine benutzerdefinierte Sektion in der config.ini
; checkrecordingRS=0 => disable | 1 => skript bei treffer beenden | custom string => ruft eine benutzerdefinierte Sektion in der config.ini


z.B. checkrecording=isrecording


Dann noch die Endzeit setzen um die Sofortaufnahmen loszuwerden und eine Funktion um das Skript zu pausieren bis alle Aufnahmen beendet sind?

Link to comment

Ganz so einfach ist das doch nicht ^^

 

Muss heute mal Flussdiagramme malen.

Die Sofortaufnahmen muss ich auf jeden Fall loswerden. Das stört sogar meine Konfig. mit 24/7 Server.

 

und eine Funktion um das Skript zu pausieren bis alle Aufnahmen beendet sind?

Da habe ich mich auch erstmal dagegen entschieden.

Ich befürchte da muss man ne ganze Menge Benutzeraktionen abfangen (manueller standby usw.) um das Skirpt nicht in einer endlosschleife festzusetzen.

Eigene Skripte lassen sich ja problemlos einbinden. Dort können dann solche Spezialsachen geregelt werden.

Link to comment

Hm ich hänge leider fest.

 

Werde die Sofortaufnahmen nicht los. :(

Einfach die gewünschte Endzeit setzen reicht nicht um den Timer endgültig dem Recordingservice zu übergeben.

 

@Lars: Wie muss ich vorgehen um eine Sofortaufnahme in eine richtige Aufnahme umzuwandeln?

Edited by nuts
Link to comment

Anbei mal eine neue Testversion. edit\ Testversion gelöscht! Neuste Version im Startpost!

Neuer Befehl um die Sofortaufnahmen loszuwerden:

 

; instantrec (0= disable | 1=create timer from instantrec - endtime from epg | else=custom endtimer )

Die Endzeit aus den EPG Einträgen auszulesen habe ich noch nicht eingebaut, d.h. man muss den Endtimer selbst vorgeben (Systemzeit + X Minuten)

 

Außerdem kann man die "Check" Funktionen auf Wunsch in eine weitere Sektion umbiegen.

 

Bsp:

 

[standby]
instantrec=120 => alle Sofortaufnahmen werden (mit aktivierter RS Unterstützung) in richtige Timer umgewandel (Endzeit = Systemzeot +120 Minuten)

checktimeshift=1 => überpürft ob timeshift aktiv ist
checkrecording=1 => überprüft ob im DVBV Aufnahmen laufen (dürfte mit aktivierter RS unterstützung jetzt nicht mehr vorkommen)
checkrecordingRS=StandbyRS => überprüft ob im RS Aufnahmen laufen und ruft bei gefundenen Aufnahmen die Sektion "StandbyRS" in der config.ini auf (muss vorher natürlich angelegt werden).
Sendcommand=12326 => sollten keine Aufnahmen im RS laufen geht es normal hier weiter
shutdown=32
Resume=1

Edited by nuts
Link to comment

Hallo nuts,

 

meine Ostersuche brachte ein Script zum Handling der Sofortaufnahmen zu Tage. :book::radscorpion:

 

Beschreibung:

Es prüft alle Sofortaufnahmetimer und ruft das InstantRecordingfenster auf. Dort kann/sollte der Nutzer die Endzeit setzen.

Anhand der gesetzten Endzeit wird dann eine Wartezeit ermittelt die zurückgegeben werden kann oder im Script direkt gehandelt werden könnte.

 

Jetzt die Frage, was soll passieren wenn keine Zeit gesetzt wurde?

  1. Script und extended-exit automatisch beenden -> entspricht dann Abbruch durch Nutzer
  2. Abfrage ob das Standbyhandling abgebrochen werden soll weil keine Endzeit gesetzt

Dann noch die Frage was wir damit anfangen wollen.

  1. Wie kann ich das Script am Besten einbinden, also welchen Befehl nutze ich zum Aufruf dafür?
  2. Übergebe ich die ermittelte Wartezeit an deine Routine und kann diese das Pausieren übernehmen, geht das?
  3. Wenn mein Script auch das Warten regelt kann man dann auf eine Rückmeldung des Scriptes warten und dann das Handling fortsetzen oder sollte man extended-exit beenden und nach Abarbeitung extended-exit anschließend erneut mit Standby/Ruhezustand aufrufen?

Gruß Tüftler

Link to comment

Du kannst folgende Befehle verwenden um Skripte einzubinden:

; run (runs an external program)
; runwait (runs an external program and wait until its finished)
; shellexecute
; shellexecutewait
; runbybatch (creates a batchfile that runs an external program and delets the batchfile afterwards)

 

runwait und shellexecutewait pausiert mein Skript bis das eingebundene Skript beendet wurde.

Danach wird die Sektion weiter abgearbeitet.

 

Ich stelle mir das ca. so vor:

1. extended-exit aufrufen und solange keine Konflikte auftreten ganz durchlaufen.

2. Bei timeshift Yes/No Dialog

3. Bei Sofortaufnahmen Timer an den RS schicken (bzw. dein Skript verwenden)

4. Bei RS Aufnahmen eine eigene Sektion aufrufen (ohne Standby, aber z.B. DVBViewer schließen + AVR +TV ausschalten schließen oder ähnliches)

5. alles weitere dem Recordingservice überlassen (dafür hab ich z.B. auch ein Skript http://www.DVBViewer.tv/forum/topic/51926-processtasksex/ )

Edited by nuts
Link to comment

Du kannst folgende Befehle verwenden um Skripte einzubinden:

 

runwait und shellexecutewait pausiert mein Skript bis das eingebundene Skript beendet wurde.

Danach wird die Sektion weiter abgearbeitet.

 

Ich stelle mir das ca. so vor:

1. extended-exit aufrufen und solange keine Konflikte auftreten ganz durchlaufen.

2. Bei timeshift Yes/No Dialog

3. Bei Sofortaufnahmen Timer an den RS schicken (bzw. dein Skript verwenden)

4. Bei RS Aufnahmen eine eigene Sektion aufrufen (ohne Standby, aber z.B. DVBViewer schließen + AVR +TV ausschalten schließen oder ähnliches)

5. alles weitere dem Recordingservice überlassen (dafür hab ich z.B. auch ein Skript http://www.DVBViewer.tv/forum/topic/51926-processtasksex/ )

Zu 3.) wie hänge ich das jetzt wo rein, also in welche Sektion?

Bleibt Checkrecording=1 aktiv und wo springt der hin das ich mein Script aufrufen kann?

der Aufruf sollte ungefähr so aussehen können:

 

; shellexecute

DVBVPath & /Scripts/instantrecording.vbs /Standby /Extended Exit_v2

 

der erste Parameter gibt die Ende Aktion nach Beendigung aller Sofortaufnahmen an

der zweite Parameter den Pfad zur Extende Exit.exe

 

 

; shellexecutewait scheint Flach zu fallen da ein Abbrechen schlicht nicht vorgesehen ist, oder?

Also Script wird aufgerufen und durch Nutzer abgebrochen -> Rückkehr zur Extended Exit Sektion und dort wird stur fortgefahren, oder kann man auch Rückgabewerte des Scripts verarbeiten, sprich einen Abbruch verarbeiten?

Link to comment

[standby]

checktimeshift=1

shellexecutewait=&\deinscript => wird die Sofortaufnahmen los oder eben nicht

checkrecording=standbyaufnahme => sollten alle Sofortaufnahmen beim RS gelandet sein geht es weiter in der Sektion, ansonsten wird Sektion "standbyaufnahme" aufgerufen

checkrecordingRS=standbyrecordingservice => keine Aufnahmen im RS und es geht weiter in der Sektion, ansonsten wird Sektion "standbyrecordingservice" aufgerufen

sendcommand=12326 => schließe DVBViewer / close DVBViewer

sleep=1 => warte 1 Sekunde

resume=1 => warte auf die PBT_APMRESUMESUSPEND Nachricht und weiter geht mit der Sektion "Resume" (Extended Exit_config.ini)

shutdown=32 => Standby durch das Skript selbst auslösen

 

 

 

So?

 

Shellexecutewait sollte schon verwendet werden, damit mein Skript auch pausiert bis dein Skript fertig ist.

Ganz hilfreich wäre mal eine Schritt für Schritt Beschreibung was passieren soll.

Edited by nuts
Link to comment
  1. Nutzer drückt Standby = Extended Exit
  2. Prüfung auf laufende Sofortaufnahmen, wenn ja Script starten
  3. das Script geht alle Sofortaufnahmen durch (Sender tunen und InstantRecording Fenster aufrufen) und der Nutzer kann eine Auswahl für die Aufnahmelänge bestimmen -> sollte er ohne Auswahl abbrechen erscheint ein Dialog mit Script beenden (und damit auch Standby) oder erneut Aufnahmelänge bestimmen (kann ja sein der Nutzer hat ausversehen abgebrochen)
  4. das Script pausiert 1 min länger als die längste eingestellte Sofortaufnahmedauer und könnte dann wieder an Extended-Exit übergeben
  5. ... um weiter abzuarbeiten
  6. ...

so wäre mein Plan.

 

Wenn Extended-Exit auf das Script wartet brauche ich keine Endeaktion und keinen Pfad übergeben. Nur habe ich keinen Plan wie man dann eine gewollte Abbruchbedingung bei dir abfängt? Ich hoffe das war verständlich genug.

Link to comment

Also warten geht ja z.B. über Shellexecutewait

Wenn du dein Skript postest übernehme ich das auch gern direkt in mein Skript. Wird dann der Tüftler-Spezialbefehl. :D

Je nach Ergebnis lässt sich darauf dann bestimmt auch reagieren.

 

Skript zu Skript Kommunikation wollte ich eigentlich nicht einbauen.

Dazu bräuchte ich eine Art Mini TCP-Server oder sowas.

Das wird dann schon relativ kompliziert.

 

Das Skript während laufenden Aufnahmen zu pausieren halte ich nach wie vor für keine gute Idee!

Mit meinem Exit Skript soll man eigentlich nur auf bestehende "Zustände" reagieren können und ansonsten die Liste abarbeiten.

Während der laufenden Aufnahme kann viel passieren (Benutzer kehrt zurück und will weiter TV schauen, Benutzer drückt Power-Knopf am Gehäuse, ..., die Liste ist endlos).

Und am Ende hat man die gleiche Standby Problematik wie im DVBViewer oder zahlreichen anderen Programmen.

 

Willst du nicht eher eine Standardaufgabe im Recordingservice hinterlegen? Mit dem verlinkten Skript (funktioniert quasi genauso wie Extended-Exit) kannst du nach jeder Aufnahme den Standby auslösen (die escape Sachen sind dort auch drin).

Edited by nuts
Link to comment

Na klar poste ich es dann.

Im Prinzip kann ich das Script-pausieren auch weglassen, da der RS die Aufnahmen ja bekommt. Muss ich halt darauf bestehen das der Nutzer eine Endzeit setzt.

Alles weitere wird dann im Extended-exit geregelt

Ich probiere morgen noch ein bissl und schlafe mal drüber, dann schmeiß ich das hier rein.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...