Frage zu svdrpsend lstr & movr im Bezug auf den --hide-first-recording-level Patch

  • Hallo Community.


    bei meinem aktuellen VDR Projekt VDR 2.4.1 bin ich aktuell dabei das Script zu schreiben, das per Cronjob bei 85% Festplattenfüllung die alten Aufnahmen ins Archiv schiebt, solange bis 70% HDD noch belegt ist.


    Dies wollte ich mit svdrpsend lstr (ermitteln der ältesten Aufnahme)

    -> ich filtere nach dem Datum suche mir das älteste Aufnahme heraus, die Funktion ist soweit fertig.


    Nun habe ich bemerkt, dass mir die Ausgabe von svdrpsend lstr garnicht anzeigt ob die Aufnahme im Ordner "local" oder im Ordner "archive" ist ...


    1. Wie soll ich nun identifizieren welche Aufnahme schon im Archiv ist, und welche noch nicht?

    2. Wie kann ich denn mit svdrpsend movr NR Name angeben, dass die Aufnahme vom Ordner "local" in den Ordner "archive" verschoben werden soll?


    Habe ich etwas zu patchen vergessen?

    Ich habe den vdr-2.3.9-hide-first-recording-level-v2.patch angewandt, dieser lief auch erfolgreich durch, meine Aufnahmen laufen in den Ordner /video/local - /video ist mein VDR Video Verzeichnis (kompiliert mit ONEDIR=1)


    Bei meinem alten VDR-Server 2.20 hatte ich soweit ich mich erinnern kann bei dem lstr die Angabe local~ bzw archive~ vor dem Namen der Aufnahme.

    Also Beispiel: 250-12 19.07.2019 local~Tagesschau

    bzw. 250-18 19.02.2019 archive~Tagesschau


    Beispiel der Ausgabe svdrpsend lstr:

    Code
    1. 250-55 17.12.17 20:13 3:42* The Voice of Germany~Musikalische Castingshow. Wer wird 'The
    2. 250-56 15.09.19 20:13 3:57* The Voice of Germany~In den Blind Auditions versuchen die Kan
    3. 250-57 22.09.19 20:13 3:57* The Voice of Germany~In den Blind Auditions versuchen die Kan
    4. 250-58 19.09.19 20:13 3:47* The Voice of Germany~In den Blind Auditions versuchen die Kan
    5. 250-59 26.09.19 20:13 3:47* The Voice of Germany~In den Blind Auditions versuchen die Kan
    6. 250-60 29.09.19 20:13 3:28* The Voice of Germany~In den Blind Auditions versuchen die Kan


    Beispiel der Ausgabe svdrpsend lstr 55


    Danke für Tips und Anregungen.


    Viele Grüße


    Kitsab

  • 1. Wie soll ich nun identifizieren welche Aufnahme schon im Archiv ist, und welche noch nicht?

    Eine Möglichkeit wäre das dbus2vdr-Plugin zu nutzen - mit https://github.com/seahawk1986/python-pydbus2vdr (gibt es in https://launchpad.net/~yavdr/+…shed&field.series_filter= als fertiges Paket, benötigt pydbus, das in vielen Distributionen wie z.B. Ubuntu/Debian/Arch Linux in den Paketquellen vorhanden ist) ginge das z.B. recht bequem:

    Python: /usr/local/bin/list_local_recordings
    1. #!/usr/bin/env python3
    2. import os
    3. from pydbus2vdr import DBus2VDR
    4. local_dir = "/video/local/"
    5. vdr = DBus2VDR()
    6. recordings = (vdr.Recording(r) for r in vdr.Recordings.List())
    7. for rec in filter(lambda x: x.Path.startswith(local_dir), recordings):
    8. print(rec.id, rec.Name.replace('/', '~'))

    2. Wie kann ich denn mit svdrpsend movr NR Name angeben, dass die Aufnahme vom Ordner "local" in den Ordner "archive" verschoben werden soll?

    Eigentlich muss man nur ein archive~ vor den Pfad hängen - wenn man die Ausgabe des obigen Python-Skripts weiterverarbeiten wollte:

    Shell-Script: /usr/local/bin/move_local_recordings_to_archive
    1. #!/bin/bash
    2. while read -r id path; do
    3. svdrpsend movr "$id" "archive~${path%~*.rec}"
    4. done < <(list_local_recordings)

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hallo,


    Edit:

    Irgendwie erscheint es mir gerade leichter die Funktionen mit linux find und mv durchzuführen, und am ende ein svdrpsend updr um den VDR zum neuen einlesen der DB zu bewegen.

    Edit Ende:


    danke schonmal für die Tips, ich habe für Arch Linux das Package PyDBus installiert. PyDbus2VDR habe ich mir über GIT clone besorgt, und die setup.py und pydbus2vdr.py in das Verzeichnis /usr/lib/python3.7/site-packages kopiert.


    Das vorgeschlagene Script habe ich auf Python 3.7 angepasse in der ersten Zeile "#!/usr/bin/env python3.7"

    das Script bringt allerdings bei der Ausführung den Fehler: AttributeError: 'DBus2VDR' object has no attribute 'Recordings'

    Ich habe versucht die Zeile anzupassen indem ich vdr.Recordings.List() in Recording.List() geängert habe. Allerdings scheint es das Attribut nicht zu geben.

    recordings = (vdr.Recording(r) for r in vdr.Recordings.List())


    Python Modul Funktionsabfrage:


    help('pydbus2vdr.dbus2vdr.Recording')



    Außerdem habe ich die Funktion svdrpsend movr ausprobiert, diese verschiebt nicht mehr sondern kopiert.

    Das habe ich dann nochmals im svdrpsend Eintrag im VDR Wiki nachgelesen: Wiki svdrpsend


    Nach dem Ausführen eines svdrpsend movr 86 archive~heute

    hatte ich /video/local/heute und /local/archive/heute

    das svdrpsend lstr zeigte mir aber immernoch eine Sendung mit "heute" mit der ID 86

    Allerdings, wird im local Verzeichnis die Datei mit Auzeichnugsdatum.del angezeigt, ein svdrpsend updr löscht diese allerdings nicht wann wir ein
    .del File gelöscht?


    Danke und viele Grüße


    Kitsab

  • Ich habe versucht die Zeile anzupassen indem ich vdr.Recordings.List() in Recording.List() geängert habe. Allerdings scheint es das Attribut nicht zu geben.

    Das Objekt vdr.Recordings wird dynamisch angelegt, wenn das DBus2VDR Plugin erkannt wurde und ein Zugriff auf seine API erfolgreich war. Wenn man wie in dem Fall aus dem Skript ohne Mainloop arbeitet, die es einem erlaubt im Hintergrund auf Status-Änderungen des VDR zu reagieren, muss der VDR die Initialisierung schon hinter sich haben, wenn das Skript aufgerufen wird.


    Der VDR behält die Rec-ID (zur Laufzeit) bei, wenn man movr benutzt - das ist gleichzeitig auch der Vorteil gegenüber dem externen kopieren, dass man danach nicht nach einer neuen ID suchen muss. Mit .del markierte Verzeichnisse werden gelöscht, wenn der VDR sein Housekeeping macht - laut https://projects.vdr-developer…/vdr.git/tree/vdr.c#n1556 passiert das, wenn der Nutzer lang genug inaktiv war.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hallo,


    sehr spät aber endlich kapiert :)


    das ist nicht nur das Plugin, das ich für Python installieren muss, es handelt sich um ein Python Plugin und ein VDR Plugin das ebenfalls unter /vdr{version}/PLUGINS/src/

    eingefügt und mit kompiliert werden muss :).


    Werd ich dann ma machen.


    Danke nochmals und viele Grüße


    Kitsab