summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY4
-rw-r--r--HISTORY.DE4
-rw-r--r--doc-src/de/epgsearch.1.txt9
-rw-r--r--doc-src/en/epgsearch.1.txt11
-rw-r--r--epgsearch.c3
-rw-r--r--epgsearchcfg.c3
-rw-r--r--epgsearchcfg.h3
-rw-r--r--epgsearchsetup.c7
-rw-r--r--po/de_DE.po27
-rw-r--r--recdone_thread.c24
10 files changed, 81 insertions, 14 deletions
diff --git a/HISTORY b/HISTORY
index 3edad7f..ea4e41f 100644
--- a/HISTORY
+++ b/HISTORY
@@ -1,8 +1,10 @@
VDR Plugin 'epgsearch' Revision History
---------------------------------------
-2022-01-30
+2022-02-01
new:
+- Evaluate vdr's Errorcount (vdr > 2.5.x)
+ New config "Allowed Errors"
- Allow missing timer-Object in Recording-Done-Processing
(vdr > 2.5.x compatibility)
diff --git a/HISTORY.DE b/HISTORY.DE
index 8704979..2ccaf99 100644
--- a/HISTORY.DE
+++ b/HISTORY.DE
@@ -1,8 +1,10 @@
VDR Plugin 'epgsearch' Revision History
---------------------------------------
-2022-01-30
+2022-02-01
neu:
+- Evaluate vdr's Errorcount (vdr > 2.5.x)
+ New config "Allowed Errors (Erlaubte Fehler)"
- Allow missing timer-Object in Recording-Done-Processing
(vdr > 2.5.x compatibility)
diff --git a/doc-src/de/epgsearch.1.txt b/doc-src/de/epgsearch.1.txt
index ed078dd..304308c 100644
--- a/doc-src/de/epgsearch.1.txt
+++ b/doc-src/de/epgsearch.1.txt
@@ -650,6 +650,11 @@ Der Start des Suchtimer-Updatethreads und des folgenden Konflikt-Checks kann um
Voreinstellungen
+=item - B<Erlaubte Fehler:>
+
+Erlaubte Aufnahmefehler, bevor eine Aufnahme als unvollständig gekennzeichnet
+wird (nicht verfügbar in vdr 2.4)
+
=item - B<Keine Ankündigung bei Wiedergabe:>
zum Unterdrücken von Sendungs-Ankündigungen während einer aktiven Wiedergabe.
@@ -975,7 +980,9 @@ aufgenommen, die bezüglich der Timerangaben korrekt begonnen und auch
beendet wurden. D.h. dass teilweise unvollständige Aufnahmen nicht
registriert werden und somit beim nächsten Suchtimer-Update
automatisch ein neuer Timer für diese Sendung erzeugt wird, falls
-gefunden.
+gefunden. Seit vdr 2.5.x werden auch Aufnahmen mit Fehlern nicht
+registriert. Möchte man eine bestimmte Anzahl von Aufnahmefehlern
+zulassen, kann der Wert für "Erlaubte Fehler" hochgesetzt werden.
B<Wie verwenden?>
diff --git a/doc-src/en/epgsearch.1.txt b/doc-src/en/epgsearch.1.txt
index 702cfce..d0786c5 100644
--- a/doc-src/en/epgsearch.1.txt
+++ b/doc-src/en/epgsearch.1.txt
@@ -135,7 +135,7 @@ item. There are 8 built-in commands:
Search the recordings for a broadcast with the same name
- Mark as 'already recorded':
- This puts the selected event in the file epgsearchdone.data and instructs
+ This puts the selected event into the file epgsearchdone.data and instructs
epgsearch to avoid recording this event if an according search timer is set
to "avoid repeats". An already created timer will be automatically removed
with the next search timer update.
@@ -632,6 +632,11 @@ Default lifetime of generated timers.
Default margins of generated timers.
+=item - B<Allowed Errors:>
+
+Allowed errors before a recording is marked as incomplete.
+(not available in vdr 2.4)
+
=item - B<No announcements when replaying:>
suppress event announcements while any replay is active.
@@ -931,7 +936,9 @@ calling 'show recordings done' in the 'actions' of the searches menu.
This file only stores info about recordings that are complete,
i.e. that started and stopped just in time. So a broken recording will
not be stored in this file and epgsearch will automatically try to
-record the next repeat, if there is any.
+record the next repeat, if there is any. Starting with vdr 2.5.x also
+recordings with errors are not stored. If you would like to allow a
+certain amount of errors, you can raise the value of "Allowd Errors".
B<How to use it?>
diff --git a/epgsearch.c b/epgsearch.c
index e80dfd6..cb3cf45 100644
--- a/epgsearch.c
+++ b/epgsearch.c
@@ -668,6 +668,9 @@ bool cPluginEpgsearch::SetupParse(const char *Name, const char *Value)
if (!strcasecmp(Name, "DefLifetime")) EPGSearchConfig.DefLifetime = atoi(Value);
if (!strcasecmp(Name, "DefMarginStart")) EPGSearchConfig.DefMarginStart = atoi(Value);
if (!strcasecmp(Name, "DefMarginStop")) EPGSearchConfig.DefMarginStop = atoi(Value);
+#if defined(APIVERSNUM) && APIVERSNUM > 20503
+ if (!strcasecmp(Name, "AllowedErrors")) EPGSearchConfig.AllowedErrors = atoi(Value);
+#endif
if (!strcasecmp(Name, "IgnorePayTV")) EPGSearchConfig.ignorePayTV = atoi(Value);
diff --git a/epgsearchcfg.c b/epgsearchcfg.c
index 126302f..597fc42 100644
--- a/epgsearchcfg.c
+++ b/epgsearchcfg.c
@@ -94,6 +94,9 @@ cEPGSearchConfig::cEPGSearchConfig(void)
sendMailOnSearchtimers = 0;
sendMailOnConflicts = 0;
RemoteConflictCheck = 0;
+#if defined(APIVERSNUM) && APIVERSNUM > 20503
+ AllowedErrors = 0;
+#endif
}
cShowMode& cShowMode::operator= (const cShowMode &ShowMode)
diff --git a/epgsearchcfg.h b/epgsearchcfg.h
index 46d0970..e871b2e 100644
--- a/epgsearchcfg.h
+++ b/epgsearchcfg.h
@@ -113,6 +113,9 @@ public:
int DefLifetime;
int DefMarginStart;
int DefMarginStop;
+#if defined(APIVERSNUM) && APIVERSNUM > 20503
+ int AllowedErrors;
+#endif
int checkTimerConflictsAfterUpdate;
int checkMinPriority;
int checkMinDuration;
diff --git a/epgsearchsetup.c b/epgsearchsetup.c
index cb68cc6..6e60606 100644
--- a/epgsearchsetup.c
+++ b/epgsearchsetup.c
@@ -229,6 +229,9 @@ void cMenuEPGSearchSetup::Store(void)
SetupStore("NoAnnounceWhileReplay", EPGSearchConfig.noAnnounceWhileReplay);
SetupStore("TimerProgRepeat", EPGSearchConfig.TimerProgRepeat);
+#if defined(APIVERSNUM) && APIVERSNUM > 20503
+ SetupStore("AllowedErrors", EPGSearchConfig.AllowedErrors);
+#endif
SetupStore("TimeIntervallFRFF", EPGSearchConfig.timeShiftValue);
SetupStore("ToggleGreenYellow", EPGSearchConfig.toggleGreenYellow);
@@ -653,6 +656,10 @@ void cMenuSetupSearchtimers::Set()
AddHelp(tr("Help$Specify here the default start recording margin of timers/recordings created with this plugin. This value can also be adjusted for each search itself."));
Add(new cMenuEditIntItem(IndentMenuItem(trVDR("Setup.Recording$Margin at stop (min)")), &data->DefMarginStop));
AddHelp(tr("Help$Specify here the default stop recording margin of timers/recordings created with this plugin. This value can also be adjusted for each search itself."));
+#if defined(APIVERSNUM) && APIVERSNUM > 20503
+ Add(new cMenuEditIntItem(IndentMenuItem(tr("AllowedErrors")), &data->AllowedErrors));
+ AddHelp(tr("Specify here the allowed reception errors before a recording is marked incomplete"));
+#endif
Add(new cMenuEditBoolItem(IndentMenuItem(tr("No announcements when replaying")), &data->noAnnounceWhileReplay, trVDR("no"), trVDR("yes")));
AddHelp(tr("Help$Set this to 'yes' if you don't like to get any announcements of broadcasts if you currently replay anything."));
Add(new cMenuEditBoolItem(IndentMenuItem(tr("Recreate timers after deletion")), &data->TimerProgRepeat, trVDR("no"), trVDR("yes")));
diff --git a/po/de_DE.po b/po/de_DE.po
index 9f16b65..beb349f 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2021-04-12 13:50+0200\n"
+"POT-Creation-Date: 2022-01-31 14:45+0100\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Klaus Schmidinger <kls@cadsoft.de>\n"
"Language-Team: German <vdr@linuxtv.org>\n"
@@ -392,6 +392,12 @@ msgstr "Hier wird die Standard-Vorlaufzeit für Timer angegeben, die von diesem
msgid "Help$Specify here the default stop recording margin of timers/recordings created with this plugin. This value can also be adjusted for each search itself."
msgstr "Hier wird die Standard-Nachlaufzeit für Timer angegeben, die von diesem Plugin erzeugt werden. Dieser Wert kann aber auch bei jeder Suche einzeln gesetzt werden."
+msgid "AllowedErrors"
+msgstr "Erlaubte Fehler"
+
+msgid "Specify here the allowed reception errors before a recording is marked incomplete"
+msgstr "Erlaubte Aufnahmefehler bevor eine Aufnahme als unvollständig betrachtet wird"
+
msgid "No announcements when replaying"
msgstr "Keine Ankündigungen bei Wiedergabe"
@@ -622,10 +628,10 @@ msgid "No new events to announce."
msgstr "Keine neuen Sendungen anzukündigen."
msgid "This version of EPGSearch does not support this service!"
-msgstr ""
+msgstr "Diese Version unterstützt diesen service nicht!"
msgid "EPGSearch does not exist!"
-msgstr ""
+msgstr "EPGSearch nicht vorhanden"
#, c-format
msgid "%d new broadcast"
@@ -761,7 +767,7 @@ msgid "Button$Templates"
msgstr "Vorlagen"
msgid "*** Invalid Channel ***"
-msgstr ""
+msgstr "*** Ungültiger Kanal ***"
msgid "Please check channel criteria!"
msgstr "Bitte Senderkriterien prüfen!"
@@ -842,7 +848,7 @@ msgid "Button$Level"
msgstr "Ebene"
msgid "Event"
-msgstr ""
+msgstr "Ereignis"
msgid "Favorites"
msgstr "Favoriten"
@@ -857,7 +863,7 @@ msgid "Directory"
msgstr "Verzeichnis"
msgid "Channel"
-msgstr ""
+msgstr "Kanal"
msgid "Childlock"
msgstr "Kindersicherung"
@@ -905,7 +911,7 @@ msgid "Button$Delete all"
msgstr "Alle löschen"
msgid "Recordings"
-msgstr ""
+msgstr "Aufnahmen"
msgid "Edit$Delete entry?"
msgstr "Eintrag löschen?"
@@ -1230,7 +1236,7 @@ msgid "found recordings"
msgstr "gefundene Aufnahmen"
msgid "Error while accessing recording!"
-msgstr ""
+msgstr "Fehler beim Zugriff auf Aufnahme!"
msgid "Button$Default"
msgstr "Standard"
@@ -1263,7 +1269,7 @@ msgid "Edit template"
msgstr "Vorlage editieren"
msgid "Timers"
-msgstr ""
+msgstr "Timer"
msgid ">>> no info! <<<"
msgstr ">>> keine Info! <<<"
@@ -1304,6 +1310,9 @@ msgstr "Umschalten zu (%d) '%s'?"
msgid "Programming timer failed!"
msgstr "Timer-Programmierung fehlschlagen!"
+#~ msgid "Help$Specify here the allowed reception errors before a recording is marked incomplete"
+#~ msgstr "Erlaubte Aufnahmefehler bevor eine Aufnahme als unvollständig betrachtet wird"
+
#~ msgid "if present"
#~ msgstr "wenn vorhanden"
diff --git a/recdone_thread.c b/recdone_thread.c
index 97f0991..4f816de 100644
--- a/recdone_thread.c
+++ b/recdone_thread.c
@@ -24,6 +24,7 @@ Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#endif
#include "recdone_thread.h"
#include "recdone.h"
+#include "epgsearchcfg.h"
#include <vdr/tools.h>
#include <vdr/plugin.h>
@@ -114,6 +115,9 @@ void cRecdoneThread::Action(void)
bool complete = true;
cSearchExt* search = SearchExts.GetSearchFromID(tiR->recDone->searchID);
int recFraction = 100;
+#if defined(APIVERSNUM) && APIVERSNUM > 20503
+ int recordingErrors = 0;
+#endif
time_t stopTime = found ? tiR->timer->StopTime() : tiR->recDone->timerStop;
if (tiR->lastBreak == -1 || !search) { // started too late or missing searchID
@@ -132,13 +136,33 @@ void cRecdoneThread::Action(void)
recLen = RecLengthInSecs(pRecording);
recFraction = double(recLen) * 100 / timerLengthSecs;
}
+#if defined(APIVERSNUM) && APIVERSNUM > 20503
+ if (pRecording) {
+ const cRecordingInfo *Info = pRecording->Info();
+ recordingErrors = Info->Errors();
+ if (recordingErrors)
+ LogFile.Log(2, "Recording had %d errors", recordingErrors);
+ }
+#endif
}
bool vpsUsed = found ? tiR->timer->HasFlags(tfVps) && tiR->timer->Event() && tiR->timer->Event()->Vps():tiR->recDone->vpsused;
if ((!vpsUsed && now < stopTime) || recFraction < (vpsUsed ? 90 : 98)) { // assure timer has reached its end or at least 98% were recorded
complete = false;
+#if defined(APIVERSNUM) && APIVERSNUM > 20503
+ LogFile.Log(1, "finished: '%s' (not complete! - recorded only %d%% %d errors); search timer: '%s'; VPS used: %s", found?tiR->timer->File():m_filename, recFraction, recordingErrors, search->search, vpsUsed ? "Yes" : "No");
+ dsyslog("epgsearch: finished: '%s' (not complete! - recorded only %d%% %d errors); search timer: '%s'; VPS used: %s", found?tiR->timer->File():m_filename, recFraction, recordingErrors, search->search, vpsUsed ? "Yes" : "No");
+#else
LogFile.Log(1, "finished: '%s' (not complete! - recorded only %d%%); search timer: '%s'; VPS used: %s", found?tiR->timer->File():m_filename, recFraction, search->search, vpsUsed ? "Yes" : "No");
dsyslog("epgsearch: finished: '%s' (not complete! - recorded only %d%%); search timer: '%s'; VPS used: %s", found?tiR->timer->File():m_filename, recFraction, search->search, vpsUsed ? "Yes" : "No");
+#endif
+#if defined(APIVERSNUM) && APIVERSNUM > 20503
+ } else if (recordingErrors > EPGSearchConfig.AllowedErrors) {
+ complete = false; // reception errors
+ LogFile.Log(1, "finished: '%s' but %d errors); search timer: '%s'; VPS used: %s", found?tiR->timer->File():m_filename, recordingErrors, search->search, vpsUsed ? "Yes" : "No");
+ dsyslog("epgsearch: finished: '%s' but %d errors); search timer: '%s'; VPS used: %s", found?tiR->timer->File():m_filename, recordingErrors, search->search, vpsUsed ? "Yes" : "No");
+#endif
} else {
+ // recording complete
LogFile.Log(1, "finished: '%s' (complete); search timer: '%s'; VPS used: %s", found?tiR->timer->File():m_filename, search->search, vpsUsed ? "Yes" : "No");
if (recFraction < 100) {
LogFile.Log(2, "recorded %d%%'", recFraction);