void CGUIWindowPVRGuide::GetContextButtons(int itemNumber, CContextButtons &buttons) { if (itemNumber < 0 || itemNumber >= m_vecItems->Size()) return; CFileItemPtr pItem = m_vecItems->Get(itemNumber); buttons.Add(CONTEXT_BUTTON_PLAY_ITEM, 19000); /* Switch channel */ buttons.Add(CONTEXT_BUTTON_INFO, 19047); /* Programme information */ buttons.Add(CONTEXT_BUTTON_FIND, 19003); /* Find similar */ CEpgInfoTagPtr epg(pItem->GetEPGInfoTag()); if (epg) { CPVRTimerInfoTagPtr timer(epg->Timer()); if (timer) { if (timer->GetTimerRuleId() != PVR_TIMER_NO_PARENT) buttons.Add(CONTEXT_BUTTON_EDIT_TIMER_RULE, 19243); /* Edit timer rule */ const CPVRTimerTypePtr timerType(timer->GetTimerType()); if (timerType && !timerType->IsReadOnly()) buttons.Add(CONTEXT_BUTTON_EDIT_TIMER, 19242); /* Edit timer */ if (timer->IsRecording()) buttons.Add(CONTEXT_BUTTON_STOP_RECORD, 19059); /* Stop recording */ else { if (timerType && !timerType->IsReadOnly()) buttons.Add(CONTEXT_BUTTON_DELETE_TIMER, 19060); /* Delete timer */ } } else if (g_PVRClients->SupportsTimers()) { if (epg->EndAsLocalTime() > CDateTime::GetCurrentDateTime()) buttons.Add(CONTEXT_BUTTON_START_RECORD, 264); /* Record */ buttons.Add(CONTEXT_BUTTON_ADD_TIMER, 19061); /* Add timer */ } if (epg->HasRecording()) buttons.Add(CONTEXT_BUTTON_PLAY_OTHER, 19687); /* Play recording */ } if (m_viewControl.GetCurrentControl() == GUIDE_VIEW_TIMELINE) { buttons.Add(CONTEXT_BUTTON_BEGIN, 19063); /* Go to begin */ buttons.Add(CONTEXT_BUTTON_NOW, 19070); /* Go to now */ buttons.Add(CONTEXT_BUTTON_END, 19064); /* Go to end */ } if (epg) { CPVRChannelPtr channel(epg->ChannelTag()); if (channel && g_PVRClients->HasMenuHooks(channel->ClientID(), PVR_MENUHOOK_EPG)) buttons.Add(CONTEXT_BUTTON_MENU_HOOKS, 19195); /* PVR client specific action */ } CGUIWindowPVRBase::GetContextButtons(itemNumber, buttons); CContextMenuManager::GetInstance().AddVisibleItems(pItem, buttons); }
void CGUIWindowPVRSearch::GetContextButtons(int itemNumber, CContextButtons &buttons) { if (itemNumber < 0 || itemNumber >= m_vecItems->Size()) return; CFileItemPtr pItem = m_vecItems->Get(itemNumber); buttons.Add(CONTEXT_BUTTON_CLEAR, 19232); /* Clear search results */ CEpgInfoTagPtr epg(pItem->GetEPGInfoTag()); if (epg) { buttons.Add(CONTEXT_BUTTON_INFO, 19047); /* Programme information */ CPVRTimerInfoTagPtr timer(epg->Timer()); if (timer) { if (timer->GetTimerRuleId() != PVR_TIMER_NO_PARENT) buttons.Add(CONTEXT_BUTTON_EDIT_TIMER_RULE, 19243); /* Edit timer rule */ const CPVRTimerTypePtr timerType(timer->GetTimerType()); if (timerType && !timerType->IsReadOnly()) buttons.Add(CONTEXT_BUTTON_EDIT_TIMER, 19242); /* Edit timer */ if (timer->IsRecording()) buttons.Add(CONTEXT_BUTTON_STOP_RECORD, 19059); /* Stop recording */ else { if (timerType && !timerType->IsReadOnly()) buttons.Add(CONTEXT_BUTTON_DELETE_TIMER, 19060); /* Delete timer */ } } else if (g_PVRClients->SupportsTimers()) { if (epg->EndAsLocalTime() > CDateTime::GetCurrentDateTime()) buttons.Add(CONTEXT_BUTTON_START_RECORD, 264); /* Record */ buttons.Add(CONTEXT_BUTTON_ADD_TIMER, 19061); /* Add timer */ } if (epg->HasRecording()) buttons.Add(CONTEXT_BUTTON_PLAY_ITEM, 19687); /* Play recording */ CPVRChannelPtr channel(epg->ChannelTag()); if (channel && g_PVRClients->HasMenuHooks(channel->ClientID(), PVR_MENUHOOK_EPG)) buttons.Add(CONTEXT_BUTTON_MENU_HOOKS, 19195); /* PVR client specific action */ } CGUIWindowPVRBase::GetContextButtons(itemNumber, buttons); }
CPVRTimerInfoTagPtr CPVRTimerInfoTag::CreateFromEpg(const CEpgInfoTagPtr &tag, bool bCreateRule /* = false */) { /* create a new timer */ CPVRTimerInfoTagPtr newTag(new CPVRTimerInfoTag()); /* check if a valid channel is set */ CPVRChannelPtr channel = tag->ChannelTag(); if (!channel) { CLog::Log(LOGERROR, "%s - no channel set", __FUNCTION__); return CPVRTimerInfoTagPtr(); } /* check if the epg end date is in the future */ if (tag->EndAsLocalTime() < CDateTime::GetCurrentDateTime() && !bCreateRule) { CLog::Log(LOGERROR, "%s - end time is in the past", __FUNCTION__); return CPVRTimerInfoTagPtr(); } /* set the timer data */ CDateTime newStart = tag->StartAsUTC(); CDateTime newEnd = tag->EndAsUTC(); newTag->m_iClientIndex = PVR_TIMER_NO_CLIENT_INDEX; newTag->m_iParentClientIndex = PVR_TIMER_NO_PARENT; newTag->m_strTitle = tag->Title().empty() ? channel->ChannelName() : tag->Title(); newTag->m_iChannelNumber = channel->ChannelNumber(); newTag->m_iClientChannelUid = channel->UniqueID(); newTag->m_iClientId = channel->ClientID(); newTag->m_bIsRadio = channel->IsRadio(); newTag->m_channel = channel; newTag->m_iEpgUid = tag->UniqueBroadcastID(); newTag->SetStartFromUTC(newStart); newTag->SetEndFromUTC(newEnd); CPVRTimerTypePtr timerType; if (bCreateRule) { // create epg-based timer rule timerType = CPVRTimerType::CreateFromAttributes( PVR_TIMER_TYPE_IS_REPEATING, PVR_TIMER_TYPE_IS_MANUAL | PVR_TIMER_TYPE_FORBIDS_NEW_INSTANCES, channel->ClientID()); if (timerType) { if (timerType->SupportsEpgTitleMatch()) newTag->m_strEpgSearchString = newTag->m_strTitle; if (timerType->SupportsWeekdays()) newTag->m_iWeekdays = PVR_WEEKDAY_ALLDAYS; if (timerType->SupportsStartAnyTime()) newTag->m_bStartAnyTime = true; if (timerType->SupportsEndAnyTime()) newTag->m_bEndAnyTime = true; } } else { // create one-shot epg-based timer timerType = CPVRTimerType::CreateFromAttributes( PVR_TIMER_TYPE_ATTRIBUTE_NONE, PVR_TIMER_TYPE_IS_REPEATING | PVR_TIMER_TYPE_IS_MANUAL | PVR_TIMER_TYPE_FORBIDS_NEW_INSTANCES, channel->ClientID()); } if (!timerType) { CLog::Log(LOGERROR, "%s - unable to create any epg-based timer type", __FUNCTION__); return CPVRTimerInfoTagPtr(); } newTag->SetTimerType(timerType); newTag->UpdateSummary(); newTag->UpdateEpgInfoTag(); /* unused only for reference */ newTag->m_strFileNameAndPath = CPVRTimersPath::PATH_NEW; return newTag; }