Hi!
Ich bin dabei, ein Recmenu Plugin mit Archiv-HDD Funktion zu schreiben.
Wenn eine archivierte Aufzeichnung abgespielt werden soll, dann wird
zuerst die HDD gemountet und dann die Symlinks auf die eigentlichen
Videodateien erstellt. Von cMyReplayControl hab ich abgeleitet, da ich
nach dem Abspielen die Symlinks wieder löschen und die HDD unmounten
muss. Und genau da ist mein Problem. Ich dachte, ich mach das alles
im Destructor von cMyReplayControl. Das Entfernen der Links funktioniert
noch. Aber das Unmounten nicht. Das liegt daran, dass der VDR die
Aufzeichnung auf der gemounteten Platte noch in Beschlag hat.
Mich wundert ausserdem, dass die Videodatei auf dieser Platte in
Benutzung ist, da VDR ja auf den Symlink zugegriffen hat.
cMyReplayControl::cMyReplayControl(cMyMenuRecordingItem *Ri)
: ri(Ri)
{
}
cMyReplayControl::~cMyReplayControl()
{
if (ri->IsLinked())
ri->UnlinkArchive();
if (ri->IsMounted())
ri->UnmountArchive();
}
Display More
Könnte es vielleicht auch an meiner FindUniqueFolder Funktion liegen?
Sie sucht nach dem Ordner auf der Archivplatte, in dem sich die Videodateien
befinden, und schreibt den Pfad in archivePath. Das wird zum Anlegen
der Symlinks benötigt. Kann es sein, dass nach Verlassen der Funktion,
das von cReadDir geöffnete Verzeichnis nicht geschlossen wurde?
bool cMyMenuRecordingItem::FindUniqueFolder(const char *Parent)
{
cReadDir dir(Parent);
struct dirent *e;
while (e = dir.Next()) {
if (!e->d_type == DT_DIR || e->d_type == DT_LNK)
continue;
cString child = AddDirectory(Parent, e->d_name);
if (!strcmp(e->d_name, uniqueFolder)) {
archivePath = child;
return true;
}
else if (FindUniqueFolder(child))
return true;
}
return false;
}
Display More