Wie herausfinden das die channels.conf bearbeitet wurde

  • Hi,
    ich würde gerne für mein Plugin Neutrinoepg beim Laden herausfinden ob die channels.conf gegenüber dem vorherigen Laden des Plugins bearbeitet wurde oder nicht.
    Ich habe dazu in der channels.h vom vdr folgende Funktionen gefunden die sich vielversprechend anhören:
    Modified
    BeingEdited


    Leider geben beide Funktionen immer 0 zurück.
    Als Test habe ich mein Plugin geladen, das Plugin wieder geschlossen, im Menü von VDR die Kanalliste aufgerufen und dort einen Kanal gelöscht. Anschließend habe ich wieder mein Plugin geladen. Nun möchte ich irgendwie feststellen das die Kanalliste bearbeitet wurde.
    Hoffe mir kann dazu jemand helfen. Danke!


    Grüße
    Martin

  • Hm, im VDR Main loop (wird ca. jede Sekunde aufgerufen)
    Edit: Doch nicht, nur wenn (!Channels.BeingEdited() && !Timers.BeingEdited()), such mal um die Stelle rum. Und doch jede Sekunde ;)


    Code
    int modified = Channels.Modified();


    in cChannels

    Code
    int Modified(void);
          ///< Returns 0 if no channels have been modified, 1 if an automatic
          ///< modification has been made, and 2 if the user has made a modification.
          ///< Calling this function resets the 'modified' flag to 0.


    Scheint also nur intern für den VDR nutzbar zu sein weil der status jede Sekunde gelöscht wird.



    Edit: "BeingEdited" meint anscheinend das die gerade in Bearbeitung ist (ein Kanal wird gerade jetzt geändert).



    Die einfachste Lösung scheint in cChannels nen Zähler einzubauen, der sich jedesmal um 1 erhöt (also ne Art Versionsnummer) wenn sich die Kanalliste ändert.


    cu

  • die channels.conf wird doch vom VDR laufend verändert:


  • Hmm


    Ich kenne mich nicht aus, aber was wäre wenn du einfach eine md5sume von der channels.conf erstellst und diese vergleichts?

  • Hmm also doch nicht so einfach wie gedacht. Das Modified wahrscheinlich für vdr intern ist habe ich mir schon fast gedacht (wieso sonst immer 0).
    Derzeit geht es mir um das hinzufügen, löschen von Kanälen und die geänderte Reihenfolge aber wer weiß was in Zukunft noch benötigt wird :)
    Das mit der MD5sum habe ich mir auch schon gedacht aber hatte gehofft das es was hauseigenes dafür gibt.
    Ich fände es auch schön wenn es einen Zähler oder vielleicht einen timestamp in Channels geben würde, welchen man dann vergleichen kann.
    Aber gut wenn es noch nichts gibt dann muss ich mir vorerst wohl etwas eigenes überlegen.


    Danke für die Antworten.


    Grüße
    Martin

  • Du musst halt eine MD5-Summe nur über die konkatenierten Unique-IDs der Kanäle bilden und nicht über die kompletten Kanalstrings. Das einzige Konstante an den Kanälen ist die Unique-ID.


    Gruß
    hepi


    Diesen Ansatz werde ich wohl verfolgen. Danke.


    Hallo!


    Wie wär's wenn du dir die mtime der Datei merkst?
    => http://de.wikipedia.org/wiki/Mtime


    Ciao,
    Eike


    Sicherlich eine einfache schnelle Möglichkeit, Danke! Allerdings wollte ich das ganze gerne ohne Dateioperationen und der gleichen lösen, behalte ich aber im Hinterkopf ;)


    Grüße
    Martin

  • Ich frage mich gerade wie xvdr/vnsi das machen? Evtl. lohnt nen Blick dorthinein?


    cu

  • Moin!


    Wozu genau möchtest du denn Änderungen mitbekommen?
    Was ist das Ziel?


    Lars.


    Das habe ich mich auch schon gefragt. Wahrscheinlich werden alle Kanäle gecacht, und es soll geprüft werden, wann dieser Cache aktualisiert werden muss. Ich würde besser nur die Kanäle, die aktuell zur Darstellung benötigt werden, aus der Channels Liste lesen...da ist eigentlich keinerlei Cache nötig, das geht schön schnell.


    Ciao Louis

  • Moin!


    Wozu genau möchtest du denn Änderungen mitbekommen?
    Was ist das Ziel?


    Lars.


    Beim Laden des Plugins muss ich wissen welcher Kanal in welcher Gruppe ist. Diese Zuordnung (hatte) ziemlich lange gedauert. Deswegen wollte ich diese Zuordnung nur machen wenn es eine Änderung gab sonst kann die vorherige Zuordnung genommen werden. Ich habe das Problem mit der Geschwindigkeit weitestgehend gelöst und das Problem besteht nicht mehr akut und ich kann die Zuordnung eigentlich bei jedem Laden des Plugins machen. Trotzdem würde ich es gerne nur bei einer Änderung machen weil es sonst einfach nicht Not tut.


    xvdr/vnsi ist nochmal ein Guter Tip werde ich mir wohl mal bei Gelegenheit anschauen.


    Grüße
    Martin

  • Ich habe mir gerade nochmal epgsearch angeschaut was der so treibt. Und dort gibt es etwas ganz interesantes bezüglich der Timer aber das könnte man equivalent auch mit den Channels machen.
    Folgende Zeile ist aus epgsearch:

    Code
    return  (m_lastUpdate <= LastModifiedTime(AddDirectory(CONFIGDIR, ".epgsearchupdate")) || updateForced>0);


    Es von vdr extra eine Funktion LastModifiedTime. Na wenn es die gibt dann kann ich die auch nutzen und muss mir keine Gedanken machen. Das sieht doch gut aus :)
    Trotzdem danke an alle für die Hilfreichen Tipps :)


    Grüße
    Martin

  • Moin!


    Wenn es mittlerweile schnell genug geht, würde ich mir um sowas wie Caching keine Gedanken machen.
    Code, der nicht vorhanden ist, kann keinen Schaden verursachen. :)


    Lars.


  • Wie wär's wenn du dir die mtime der Datei merkst?
    => http://de.wikipedia.org/wiki/Mtime


    Der VDR hat die Kanalliste ja zweimal zur Verfügung, einmal im RAM und einmal in Dateiform (channels.conf). Nur alle paar Minuten wird die Datei aktualisiert. Das heißt, dass die Kanalliste im RAM sich schon verändert haben kann, dass diese Veränderungen aber nicht sofort in der Datei sichtbar werden, sondern mit mehreren Minuten Verzögerung.


    Gruß
    hepi

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!