diff options
-rw-r--r-- | HISTORY | 4 | ||||
-rw-r--r-- | HISTORY.DE | 4 | ||||
-rw-r--r-- | doc-src/de/epgsearch.1.txt | 9 | ||||
-rw-r--r-- | doc-src/en/epgsearch.1.txt | 11 | ||||
-rw-r--r-- | epgsearch.c | 3 | ||||
-rw-r--r-- | epgsearchcfg.c | 3 | ||||
-rw-r--r-- | epgsearchcfg.h | 3 | ||||
-rw-r--r-- | epgsearchsetup.c | 7 | ||||
-rw-r--r-- | po/de_DE.po | 27 | ||||
-rw-r--r-- | recdone_thread.c | 24 |
10 files changed, 81 insertions, 14 deletions
@@ -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) @@ -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); |