Das ist sicher auch ein seehr spezielles Problem ...
Danke für Deine Erklärung.
Das ist sicher auch ein seehr spezielles Problem ...
Danke für Deine Erklärung.
Mit folgender Änderung wird Vor- und Nachlaufzeit an die Länge des vorherigen bzw. nachfolgenden Events angepasst.
Damit klappt der konkrete Fall schon mal.
--- timers.c 2021/01/15 13:52:40 5.4
+++ timers.c 2021/01/18 20:48:43
@@ -191,8 +191,22 @@
time_t tstart = (flags & tfVps) ? Event->Vps() : Event->StartTime();
time_t tstop = tstart + Event->Duration();
if (!(HasFlags(tfVps))) {
- tstop += Setup.MarginStop * 60;
- tstart -= Setup.MarginStart * 60;
+ int MarginStart = Setup.MarginStart * 60;
+ int MarginStop = Setup.MarginStop * 60;
+ if (PatternTimer) {
+ // To make sure a spawned timer gets assigned to the correct event, we must
+ // make sure that this is the only event that overlaps 100%:
+ if (const cEvent *e = dynamic_cast<const cEvent *>(Event->Prev())) {
+ int d = e->Duration();
+ MarginStart = max(0, min(MarginStart, d - 60));
+ }
+ if (const cEvent *e = dynamic_cast<const cEvent *>(Event->Next())) {
+ int d = e->Duration();
+ MarginStop = max(0, min(MarginStop, d - 60));
+ }
+ }
+ tstart -= MarginStart;
+ tstop += MarginStop;
}
struct tm tm_r;
struct tm *time = localtime_r(&tstart, &tm_r);
Alles anzeigen
Vielleicht macht es sogar Sinn, das nicht nur auf Pattern-Timer zu beschränken.
Meinungen dazu?.
Macht evtl. Probleme bei Verschiebungen. Solange der Patterntimer keine Verschiebungen mitbekommt, könnte das auch hier zu Problemen führen.
Verschiebungen (ohne VPS) zu erkennen wird nochmal ein anderes Thema.
Das vorliegende Problem lässt sich aber wohl nur auf die angegebene Weise in den Griff bekommen.
Probier es bitte mal aus.
Ich hab den Patch auf meinem Testsystem eingespielt und den Timereintrag vom Prod. System übernommen. Bis jetzt nur ein Timer generiert:
Jan 20 12:11:10 gentoo vdr[7410]: [7410] spawning timer 99 (25 0000-2359 '{Deutschland von oben}TITLE') for event Fr. 22.01.2021 04:45-04:50 (VPS: 22.01. 04:40) 'Deutschland von oben'
Jan 20 12:11:10 gentoo vdr[7410]: [7410] timer 0 (25 0440-0459 'Deutschland von oben') set to event Fr. 22.01.2021 04:45-04:50 (VPS: 22.01. 04:40) 'Deutschland von oben'
Jan 20 12:11:10 gentoo vdr[7410]: [7410] added timer 100 (25 0440-0459 'Deutschland von oben')
Was mir in letzter Zeit häufiger aufgefallen ist:
1:T-8468-38914-769:M-WT---:2000:2359:50:7:{maischberger}TITLE~EPISODE:
generiert:
17:T-8468-38914-769:2021-02-10:2245:0025:50:7:maischberger. die woche~:
hier fehlt die EPISODE, die Aufzeichnung erfolgt ohne Unterordner.
In vdr.c wird der Timercheck auch auf Patterntimers angewendet. Das führt bei zeitlicher Übereinstimmung dazu, dass alle 10 Sekunden versucht wird ein Device für die vermeindlich anstehende Aufnahme umzuschalten. Bei einem Pattern für z.B. 00:00 bis 23:59 Uhr wäre das dann 24 Stunden lang. Hier ein Patch der das vermeidet:
--- a/vdr.c.orig 2020-12-26 15:49:01.000000000 +0100
+++ b/vdr.c 2021-03-23 21:06:32.566874960 +0100
@@ -1136,7 +1136,7 @@ int main(int argc, char *argv[])
if (Now - LastTimerCheck > TIMERCHECKDELTA) { // don't do this too often
InhibitEpgScan = false;
for (cTimer *Timer = Timers->First(); Timer; Timer = Timers->Next(Timer)) {
- if (Timer->Remote())
+ if (Timer->Remote() || Timer->IsPatternTimer())
continue;
bool InVpsMargin = false;
bool NeedsTransponder = false;
Alles anzeigen
Helmut
Im Zusammenhang mit Pattern-Timern möchte ich das Durchschalten durch die Transponder (eitscan.c) sowieso überarbeiten, da werde ich das dann einfließen lassen.
Momentan überarbeite ich gerade die Verarbeitung der EIT-Daten, um besser auf verschobene Events reagieren zu können.
hier fehlt die EPISODE, die Aufzeichnung erfolgt ohne Unterordner.
Ich schätze mal, dass zum Zeitpunkt des Spawnings der Event (noch) keinen ShortText hatte.
Schau ich mir an.
Hallo Klaus, mir ist noch aufgefallen das unter vdr-2.5.1 das Plugin epgsync viele Einträge doppelt erstellt. Unter vdr-2.4.6 funktioniert das Plugin gut.
hier fehlt die EPISODE, die Aufzeichnung erfolgt ohne Unterordner.
Kannst du bitte mal folgendes probieren:
--- timers.c 2021/04/06 08:48:35 5.7
+++ timers.c 2021/04/06 09:37:55
@@ -163,7 +163,8 @@
if (MatchPattern(Pattern, Title, &Before, &Match, &After)) {
char *Result = strdup(File);
Result = strreplace(Result, TIMERMACRO_TITLE, Title);
- Result = strreplace(Result, TIMERMACRO_EPISODE, Episode);
+ if (!isempty(Episode)) // the event might not yet have a "short text", so we leave this to the actual recording
+ Result = strreplace(Result, TIMERMACRO_EPISODE, Episode);
Result = strreplace(Result, TIMERMACRO_BEFORE, Before);
Result = strreplace(Result, TIMERMACRO_MATCH, Match);
Result = strreplace(Result, TIMERMACRO_AFTER, After);
Alles anzeigen
mir ist noch aufgefallen das unter vdr-2.5.1 das Plugin epgsync viele Einträge doppelt erstellt.
Am EPG-Handling hat sich in der Version 2.5.1 aber eigentlich nichts geändert.
Kannst du bitte mal folgendes probieren:
Sieht gut aus, werde ich Testen.
Episodennamen tauchen öfters in mehreren Serien auf, das führt leider dazu, dass betroffene Episoden nicht aufgezeichnet werden, da nur der Episodenname gespeichert wird.
jsffm Für die Beurteilung, ob eine Aufnahme bereits gemacht wurde, wird nur der letzte Teil des Pfadnamens verwendet.
Es empfielt sich daher, im Timer für eine Serie einen Namen der Form
...~Columbo~TITLE - EPISODE
zu verwenden. Dabei ist zu beachten, dass die Macros TITLE und EPISODE nur je *einmal* ersetzt werden.
Sowas
...~TITLE~TITLE - EPISODE
würde daher nicht funktionieren.
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!