restfulapi Plugin, recordings/update

  • Hallo,


    ich beschäftige mich gerade mit der Aufnahmeliste und dem restfulapi Plugin. Die Idee des sync-Files finde ich gut, allerdings verstehe ich das beobachtete Verhalten in keinster Weise.


    Ich rufe immer wieder recordings/update mit einer SyncId auf:
    curl "http://192.168.1.1:8002/recordings/updates.json?syncId=68CE1D58-BF0E-446F-BCE7-4B1F21EFFEEFA-27"


    Die Log-Ausgabe des Plugins ist allerdings nicht-deterministisch. Trotz intensiver Suche kann ich einfach nicht erkennen, was im Plugin nicht funktioniert. Nach jedem - identischem - Aufruf habe ich eine Leerzeile eingefügt:



    Die doppelten Einträge
    restfulapi: FileExtension: requested path /vdr/cache/vdr1/plugins/restfulapi/sync
    restfulapi: FileExtension: realpath /vdr/cache/vdr1/plugins/restfulapi/sync
    scheinen beim laden und speichern der syncMap erzeugt zu werden.


    Aber warum scheint der Filename eher zufällig richtig zu sein?


    Code
    1. const char* fileName = (cacheDir + "/" + this->id).c_str();
    2. FILE* fp = fopen(fileName, write ? "w" : "r");
    3. if ( fp == NULL ) {
    4. esyslog("restfulapi: could not open sync map file %s for %s!", fileName, write ? "writing" : "reading");
    5. }



    Zabrimus

  • Mach mal aus dem const char* ein std::string und lass das .c_str() weg. Das packst du in das fopen hinter das fileName.
    Sieht nach einem kaputten Pointer aus.


    Lars

  • Perfekt :]


    Code
    1. std::string fileName = (cacheDir + "/" + this->id);
    2. FILE* fp = fopen(fileName.c_str(), write ? "w" : "r");
    3. if ( fp == NULL ) {
    4. esyslog("restfulapi: could not open sync map file %s for %s!", fileName.c_str(), write ? "writing" : "reading");
    5. }


    Löst das Problem!


    Allerdings nutze ich die Umbenennung nicht so, wie in der Doku beschrieben:
    In der Doku steht: target=relative/path/to/renamed%20recording
    Damit wird die Aufnahme zwar umbenannt, allerdings in "relative~path~to~renamed%20recording" im Video-Verzeichnis. Und damit meine ich keine Unterverzeichnisse.
    Nutze ich allerdings "target=relative~path~to~renamed%20recording" habe ich genau das Gewünschte "<videodir>/relative/path/to/renamed recording".


    Das Ursprungsverzeichnis wird leider nicht gelöscht, sondern ein neues erzeugt. Aber ich hoffe, daß VDR die leeren Verzeichnisse irgendwann einfach löscht.



    Aber jetzt kann ich weiter machen. Danke :)


    Edit: Pull request für https://github.com/yavdr/vdr-plugin-restfulapi/tree/upstream erstellt.


    Zabrimus