Hallo!
In meinem hddarchive Plugin biete ich eine Service Schnittstelle an, um Aufnahmen über das
Plugin abspielen zu lassen. Das ist vor allem, damit es sich besser ins originale Aufzeichnungs-
menü integrieren kann. Dabei verwende ich die Methode SetCurrent, da mein Plugin mit
cMyMenuRecordingItem arbeitet, das originale Menü aber cMenuRecordingItem liefert.
Der Player fragt ja vorher Get(Current() ab.
struct Hddarchive_archiveid_v1_0
{
const cRecording *recording;
bool isarchive;
const char *archiveid;
};
struct Hddarchive_play_v1_0
{
cMenuRecordingItem *item;
};
bool cPluginHddarchive::Service(const char *Id, void *Data)
{
if (!strcmp(Id, "Hddarchive-archiveid_v1.0")) {
if (Data == NULL)
return true;
Hddarchive_archiveid_v1_0 *archive = (Hddarchive_archiveid_v1_0 *)Data;
archive->archiveid = cArchive::GetArchiveId(archive->recording);
archive->isarchive = strcmp(archive->archiveid, "") ? true : false;
return true;
}
if (!strcmp(Id, "Hddarchive-play_v1.0")) {
if (Data == NULL)
return false;
Hddarchive_play_v1_0 *play = (Hddarchive_play_v1_0 *)Data;
cMyMenuRecordings player(NULL, 0, false, false);
player.SetCurrent((cOsdItem *)play->item, false);
player.ProcessKey(kRed);
return true;
}
return false;
}
Alles anzeigen
Die SetCurrent Methode sieht so aus:
void cMyMenuRecordings::SetCurrent(cOsdItem *Item, bool IsPluginReplay)
{
cOsdMenu::SetCurrent(Item);
isPluginReplay = IsPluginReplay;
}
cMenuRecordings::Play sieht gepatcht so aus:
eOSState cMenuRecordings::Play(void)
{
cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
if (ri) {
if (ri->IsDirectory())
Open();
else {
cPlugin *hddarchivePlugin = cPluginManager::GetPlugin("hddarchive");
Hddarchive_play_v1_0 data;
data.item = ri;
if (hddarchivePlugin) {
hddarchivePlugin->Service("Hddarchive-play_v1.0", &data);
return osEnd;
}
cReplayControl::SetRecording(ri->Recording()->FileName());
return osReplay;
}
}
return osContinue;
}
Alles anzeigen
Das funktioniert jedoch nur, wenn die Aufnahme im Root des Videoverzeichnisses
ist, aber nicht, wenn sie in einem Unterordner ist.
cRecordingMenuItem::Name ist dann plötzlich der des ersten Unterordners.
Auch durch debuggen konnte ich das Problem noch nicht lösen. Ich vermute, es liegt
am setzen des CurrentItem.
Hat jemand eine Idee, wo mein Fehler liegt?
Der ganze Code liegt im vdr-developer git.