Klar, mach ich. Wenn ich auf meinen Terminplan schaue, weiß nur nicht, ob ich es gleich heute oder morgen schaffe.
[epgsearch] Kleinigkeiten, die aufgefallen sind
-
-
Der Tests von value == 0 wurde ja an beiden Stellen dazu "missbraucht", zu erkennen, ob überhaupt ein numerischer Wert vorlag und andernfalls den Default-Wert 0 von atoi() als "ignore missing" zu behandeln.
In MatchesExtEPGInfo() führt deine zweite Zeile dazu, dass man in epgsearchcats.conf den Wert 0 nicht als numerischen Vergleichswert heranziehen kann:
Codeif (value && SearchExtCat->searchmode >= 10 && atol(value) == 0) // numerical value != 0 ? value = NULL;… weil ein Vergleichswert von 0 zu NULL führt und die Prüfung damit übersprungen wird. Gelangt man zur Prüfung, passiert in MatchesSearchMode() das gleiche für die EPG-Daten:
… und führt dazu, dass Abfragen, die den Wert 0 nicht als Erfolg werten möchten, dennoch positiv beschieden werden.
Beide Fälle behandelt der neue Code in MatchesSearchMode() korrekt und liefert false, wenn einer der beiden Werte fehlt oder die Werte die Vergleichsbedingung nicht erfüllen:
Codechar* end = NULL; long testvalue = strtol(szTest, &end, 10); if (!end || end == szTest) // no or invalid number return false; end = NULL; long value = strtol(searchText, &end, 10); if (!end || end == searchText) // no or invalid number return false; ... // condition checks not shownDer Pull-Request behebt diese Fehlinterpretationen. Deshalb lieber nochmals die Nachfrage: Wollen wir das wirklich zurücknehmen?
PS: Soll ich deine "Direktausstiege" in MatchesSearchMode() beibehalten oder auch zurücknehmen?
PPS: Ich finde, dass lange Codeabschnitte bzw.. tr-Aufrufe nicht in Header-Dateien gehören. Ich habe deshalb die fragliche Funktion von uservars.h nach uservars.c verschoben.
-
Ich wollte die Behandlung der 0 lassen, wie sie ist - und später dann richtig lösen. Im Augenblick wird beim Neuanlegen eines Suchtimers für einen Kagerorienwert, der ein %02i oder so enthält, für diese Kategorie ein Wert 0 eingetragen, der im Editierungsmenü nicht sichtbar ist. "5|Staffel,%02i|Staffel||14" führt zu einem Eintrag "|5#0|". Ich kann die Kategorie im OSD nicht auf "ohne Wert" setzen, dh. die Variable Staffel muss wirklich den Wert 0 haben. Das war bisher nicht so, weil auf 0 nicht geprüft wurde, deshalb ist deine Lösung nicht kompatibel.
Meine Direktausstiege würde ich auch nochmal überdenken. Bei "ignore missing" weiter zu prüfen ist so ein Zwischending zwischen dem alten Verhalten und deinem "ein Wert muss stimmen".
Ich möchte den Pull request loswerden, weil andere Probleme aufgelaufen sind und ich da nicht rebasieren möchte. uservars muss ich mir ansehen, da wäre svdrpclient.h ein nützlicherer Kandidat.
-
Danke fürs Einordnen. Den Pull-Request habe ich dem entsprechend aktualisiert.
Den zugehörigen Patch für Live hatte ich ja schon weiter oben geposted:
Damit sollte alles beisammen sein.

-
MarkusE: Ich habe den Patch nochmals überarbeitet:
… damit für die Vermeidung von Wiederholungen die Auswahl der zu prüfenden EPG-Kategorien etwas kompakter dargestellt wird:
-
-
Siehe Man-Pages:
QuoteDisplay More55 – Übereinstimmung von Inhaltskategorien
Enumeration mit den folgenden Werten:
0 = alle gewählten Kennungen
1 = eine der gewählten Kennungen
2 = eine gewählte Kennung je Gruppe
Die Optionen 0 und 1 prüfen über alle Kategoriengruppen hinweg, verwenden aber dennoch die Einstellung aus Feld 56 zur Überprüfung der besonderen Merkmale. Daher können Kombinationen wie 'UND' für die Kategoriengruppen und 'ODER' innerhalb der besonderen Merkmale auftreten und umgekehrt.
Option 2 hingegen verwendet einen zweistufigen Ansatz: Zunächst werden die Kategoriengruppen mit ausgewählten Inhaltskennungen geprüft (Gruppen ohne ausgewählte Inhaltskennungen entfallen). Eine Kategoriengruppe stimmt überein, wenn eine Sendung mindestens eine der für die Gruppe gewählten Inhaltskennungen enthält ('eine gewählte', ODER), mit Ausnahme der Gruppe der besonderen Merkmale, die stets die Einstellung aus Feld 56 verwendet. Abschließend müssen alle geprüften Kategoriengruppen übereinstimmen ('je Gruppe', UND).
-
Code
+msgid "Not including all categories can cause very many timers. So please always first test this search before using it as search timer!""very many timers" hört sich schlecht an. Lieber "a lot of timers", oder einen Muttersprachler fragen.
"So please always first test this search before using it as search timer!" -> ich würde da first weglassen, also "So please always test this search before using it as search timer!". Es steht ja schon "before" drin.
-
Gerne. Magst du das gleich direkt ändern oder soll ich das machen?
-
Code
Option 2 hingegen verwendet einen zweistufigen Ansatz: Zunächst werden die Kategoriengruppen mit ausgewählten Inhaltskennungen geprüft (Gruppen ohne ausgewählte Inhaltskennungen entfallen). Eine Kategoriengruppe stimmt überein, wenn eine Sendung mindestens eine der für die Gruppe gewählten Inhaltskennungen enthält ('eine gewählte', ODER), mit Ausnahme der Gruppe der besonderen Merkmale, die stets die Einstellung aus Feld 56 verwendet. Abschließend müssen alle geprüften Kategoriengruppen übereinstimmen ('je Gruppe', UND).Etwas off-topic: Irgendwie ist mir epgsearch zu kompliziert
.Was ist Feld 56? Na ja, die Leser der Man-Page werden das schon wissen ...Ich hab versucht, es zu verstehen, und verstehe "mindestens eine gewählte Kennung je Gruppe". Dann sollten die Texte:
Code+msgid "at least one selected descriptor per group" +msgstr "mindestens eine gewählte Kennung je Gruppe"lauten. Korrekt?
Wenn dem Leser aus dem Kontext klar ist, dass hier "mindestens eine" gemeint ist, können wir auch
schreiben. Das "some" hat mich irritiert, und ist hier unpassend.
-
Und dann noch etwas: Wie rückwärts-kompatibel ist der Patch?
Wenn also ein Anwender noch das "alte" epgsearch, also ohne den hier diskutierten pull request hat. Aber schon das neue live, mit diesem Patch. Wird das dann funktionieren?
-
Etwas off-topic: Irgendwie ist mir epgsearch zu kompliziert
.Was ist Feld 56? Na ja, die Leser der Man-Page werden das schon wissen ...Es war schon immer so, dass die Felder in einem EPGsearch-Datensatz ab 1 gezählt werden. Wenn du das mit dem Parser in Live korrelierst, ist Feld 56 (also das dem 55. Doppelpunkt folgende) nach cSplit parts(m_data, ':') das Feld parts[55]. Weil Array-Indizes in fast allen (Skript-)Sprachen bei 0 starten, hatte ich vor einiger Zeit vorgeschlagen, die Zählung bei 0 zu beginnen; das fand aber leider keine Zustimmung. Abgesehen davon, wäre mir ein Interface mit Datentyp-Spezifikation (Boolean, Integer mit Wertebereichen, Strings mit Längenangaben, Enums) und Feldnamen auch lieber…
Wenn also ein Anwender noch das "alte" epgsearch, also ohne den hier diskutierten pull request hat. Aber schon das neue live, mit diesem Patch. Wird das dann funktionieren?
Das wird funktionieren, da EPGsearch "überzählige" Felder, die es nicht kennt, verwirft. Den Wert für Feld 50 (Übereinstimmung von erweiterten EPG-Kategorien) prüft es nur auf null bzw. nicht null. Je nach CSS-Einstellungen wirft Live eine Warnung aus, dass man EPGsearch aktualisieren soll.
-
Dann kann der Anwender in live also Daten im UI eingeben, die epgsearch dann ignoriert. Irgendwie unschön.
Besser wäre es, die Version von epgsearch abzufragen und, falls die Version zu klein ist, solche Felder nicht anzuzeigen.
-
Stimmt schon. Dazu ist die Versionierung erstens nicht kleinteilig genug. Zudem kann man meines Wissens die Versionsnummer derzeit programmatisch nicht abfragen.
Aber letztlich ist das nur ein kurzfristig transienter Zustand. Den hatten wir übrigens auch, weil Live über längere Zeit nicht alle Features von EPGsearch unterstützt hatte…
-
> Dazu ist die Versionierung erstens nicht kleinteilig genug.
Bei solchen Änderungen (z.B. neue Felder) solltet ihr auch die Versionsnummer hoch zählen, zumindest an der letzten Stelle. Kostet ja nichts ...
> Zudem kann man meines Wissens die Versionsnummer derzeit programmatisch nicht abfragen.
Geht schon. In live mit:
CodeFeatures< features::epgsearch >& epgsearch = LiveFeatures< features::epgsearch >(); epgsearch.Version()s. livefeatures.h
Es gibt da auch eine Mindestversion für epgsearch ...
-
Bzgl. den erweiterte EPG-Infos bin ich auch noch auf etwas gestossen. Falls man sich entschließt, die Kategorien aus der epgsearchcats.conf wieder zu entfernen, erscheint in den Listen der Ausdruck (null). Vermutlich von einem Pointer.
Hier ein Beispiel: So sieht es aus, wenn eine Kategorie (hier die 10#) definiert wurde (gekürzt):
Gibt es keine Kategorien mehr sieht der Eintrag so aus:
live scheint das nicht zu stören. Wäre es nicht sinnvoller, hier den Eintrag zu nicht zu schreiben?
-
-
Geht schon. In live mit…
Genau das ist mir gestern Abend auch noch eingefallen. Ich hatte nur die SVDRP-Kommandos zu Rate gezogen, wo es so etwas wie "INFO" nicht gibt (zumindest wird nirgendwo in epgsearchsvdrp .c die Versionsnummer referenziert); das könnte man noch ergänzen, damit bspw. auch VDRadmin die Versionsnummer abfragen kann. An das Service-Interface hatte ich nicht gleich gedacht…
TomJoad: Die Versionsnummern für die "kleinen" Plugins stehen immer noch auf "0.0.1". Ich finde, sie sollten der der Versionsnummer des Haupt-Plugins entsprechen.
Besser wäre es, die Version von epgsearch abzufragen und, falls die Version zu klein ist, solche Felder nicht anzuzeigen.
Wenn schon ein adaptives Verhalten benötigt wird, war und wäre mein Ansatz weiterhin, die Zahl der von EPGsearch gelieferten und im Live-Parser detektierten Felder heranzuziehen. Denn deren Konstellation ist unabhängig von der Versionsnummer (bis auf wenige Ausnahmen) aussagekräftig genug.
Ein kleinteiliges adaptives Verhalten macht den Code aber auf jeden Fall komplex und unübersichtlich. Deshalb habe ich auf Basis der detektierten Felder in Live stattdessen Warnungen über fehlende bzw. unbekannte Felder eingefügt, wenn man eine erweiterte Suche oder einen Suchtimer zum bearbeiten aufruft. Das sollte genügen, um zum Upgrade auf eine kompatible Version von EPGsearch bzw. Live zu animieren.
-
Participate now!
Don’t have an account yet? Register yourself now and be a part of our community!