bool CPVRTimers::DeleteTimersOnChannel(const CPVRChannel &channel, bool bDeleteRepeating /* = true */, bool bCurrentlyActiveOnly /* = false */) { bool bReturn = false; CSingleLock lock(m_critSection); for (map<CDateTime, vector<CPVRTimerInfoTagPtr>* >::reverse_iterator it = m_tags.rbegin(); it != m_tags.rend(); it++) { for (vector<CPVRTimerInfoTagPtr>::iterator timerIt = it->second->begin(); timerIt != it->second->end(); timerIt++) { CPVRTimerInfoTagPtr timer = (*timerIt); if (bCurrentlyActiveOnly && (CDateTime::GetCurrentDateTime() < timer->StartAsLocalTime() || CDateTime::GetCurrentDateTime() > timer->EndAsLocalTime())) continue; if (!bDeleteRepeating && timer->m_bIsRepeating) continue; if (timer->ChannelNumber() == channel.ChannelNumber() && timer->m_bIsRadio == channel.IsRadio()) { bReturn = timer->DeleteFromClient(true) || bReturn; it->second->erase(timerIt); } } } return bReturn; }