void CGUIDialogPVRTimerSettings::InitializeTypesList() { m_typeEntries.clear(); // If timer is read-only or was created by a timer rule, only add current type, for information. Type can't be changed. if (m_timerType->IsReadOnly() || m_timerInfoTag->GetTimerRuleId() != PVR_TIMER_NO_PARENT) { m_typeEntries.insert(std::make_pair(0, m_timerType)); return; } int idx = 0; const std::vector<CPVRTimerTypePtr> types(CPVRTimerType::GetAllTypes()); for (const auto &type : types) { // Type definition prohibits created of new instances. // But the dialog can act as a viewer for these types. if (type->ForbidsNewInstances()) continue; // Read-only timers cannot be created using this dialog. // But the dialog can act as a viewer for read-only types. if (type->IsReadOnly()) continue; // Drop TimerTypes that require EPGInfo, if none is populated if (type->RequiresEpgTagOnCreate() && !m_timerInfoTag->GetEpgInfoTag()) continue; // Drop TimerTypes without 'Series' EPG attributes if none are set if (type->RequiresEpgSeriesOnCreate()) { const EPG::CEpgInfoTagPtr epgTag(m_timerInfoTag->GetEpgInfoTag()); if (epgTag && !epgTag->IsSeries()) continue; } // Drop TimerTypes that forbid EPGInfo, if it is populated if (type->ForbidsEpgTagOnCreate() && m_timerInfoTag->GetEpgInfoTag()) continue; // Drop TimerTypes that aren't rules if end time is in the past if (!type->IsTimerRule() && m_timerInfoTag->EndAsLocalTime() < CDateTime::GetCurrentDateTime()) continue; m_typeEntries.insert(std::make_pair(idx++, type)); } }