So, ich hab jetzt folgendes versucht:
Per Knopdruck habe ich einen SwitchTimer aktiviert, der Time + 2 Min aktiviert wird (Eintrag in der Timerliste ist vorhanden. Dann zappe ich auf einen anderen Kanal, und 2 Minuten später wird auf den ursprungskanal zurückgesprungen (klaro!). Der Code für Timeranlegen funktioniert also.
EITEvent *evt = new EITEvent();
evt->start_time = time(0)+eDVB::getInstance()->time_difference + 120;
evt->duration = 180;
evt->event_id = -1;
evt->free_CA_mode = -1;
evt->running_status = -1;
eServiceReference ref =eServiceInterface::getInstance()->service;
ref.descr = "Hallo test";
eTimerManager::getInstance()->addEventToTimerList( this,
&ref, evt,
ePlaylistEntry::stateWaiting|
ePlaylistEntry::SwitchTimerEntry|
ePlaylistEntry::doFinishOnly);
delete evt;
Alles anzeigen
Wie ich allerdings schon gesagt habe (und floh auch!), KANN MAN WÄHREND EINEM SWITCHTIMER NICHT ZAPPEN!!!!
Abhilfe könntestest Du Dir schaffen, wenn Du in der Methode eZapMain::handleState(int justask) den CodeBlock einfachst entfernst (setzt natürlich voraus, dass Du nie mit einem VideoRecorder aufnimmst, sonndern nur auf HDD!) und diesen dann ersetzt --> die Sache ist natürlich ungetestet von mir, hab nur mal schnell drübergeschaut!
if ( state & stateInTimerMode )
{
text=_("A timer event is currently in progress!\n"
"This stops the timer event!");
}
else // not timer event or recording in progress
return true;
ersetzen durch
if ( state & stateInTimerMode )
return true;
--> ganze Methode sollte dann aussehen:
bool eZapMain::handleState(int justask)
{
eString text, caption;
bool b=false;
int profimode=0;
eConfig::getInstance()->getKey("/elitedvb/extra/profimode", profimode);
#ifndef DISABLE_FILE
if ( state & stateRecording )
{
if ( state & stateInTimerMode )
{
if (state & recDVR )
text=_("A timer based recording is currently in progress!\n"
"This stops the timer, and recording!");
else
return true; // we wouldn't destroy the VCR Recording *g*
/* text=_("Currently an timer based VCR recording is in progress!\n"
"This stops the timer, and the VCR recording!");*/
}
else
{
if (state & recDVR )
text=_("A recording is currently in progress!\n"
"This stops the recording!");
else
return true; // we wouldn't destroy the VCR Recording *g*
/* text=_("Currently an VCR recording is in progress!\n"
"This stops the VCR recording!");*/
}
}
else
#endif //DISABLE_FILE
if ( state & stateInTimerMode )
return true; // SwitchTimer? Und raus hier :-)
if (!profimode)
{
eMessageBox box(text, _("Really do this?"), eMessageBox::iconQuestion|eMessageBox::btYes|eMessageBox::btNo, eMessageBox::btNo );
box.show();
b = (box.exec() == eMessageBox::btYes);
box.hide();
}
else
b=true;
if (b && !justask)
{
if (state & stateInTimerMode)
{
eTimerManager::getInstance()->abortEvent( ePlaylistEntry::errorUserAborted );
}
#ifndef DISABLE_FILE
else if (state & stateRecording)
{
if (state & recDVR)
recordDVR(0,0);
else
; // here send LIRC VCR Stop
}
#endif
}
return b;
}
Alles anzeigen
Das ganze ist natürlich mehr als dirty! Und ob es funktioniert und ich die richtige Stelle erwischt habe weiss ich nicht, da ich es nicht getestet habe!
Eine saubere Lösung wäre, in ePlaylistEntry einen eZapTimerEntry zu definieren, der nicht den State stateInTimerMode besitzt.