bool CPVRGUIActions::HideChannel(const CFileItemPtr &item) const { const CPVRChannelPtr channel(item->GetPVRChannelInfoTag()); /* check if the channel tag is valid */ if (!channel || channel->ChannelNumber() <= 0) return false; if (!CGUIDialogYesNo::ShowAndGetInput(CVariant{19054}, // "Hide channel" CVariant{19039}, // "Are you sure you want to hide this channel?" CVariant{""}, CVariant{channel->ChannelName()})) return false; if (!g_PVRChannelGroups->GetGroupAll(channel->IsRadio())->RemoveFromGroup(channel)) return false; CGUIWindowPVRBase *pvrWindow = dynamic_cast<CGUIWindowPVRBase *>(g_windowManager.GetWindow(g_windowManager.GetActiveWindow())); if (pvrWindow) pvrWindow->DoRefresh(); else CLog::Log(LOGERROR, "CPVRGUIActions - %s - called on non-pvr window. no refresh possible.", __FUNCTION__); return true; }
bool CPVRManager::Load(bool bShowProgress) { if (!bShowProgress) HideProgressDialog(); /* load at least one client */ while (IsInitialising() && m_addons && !m_addons->HasCreatedClients()) Sleep(50); if (!IsInitialising() || !m_addons->HasCreatedClients()) return false; CLog::Log(LOGDEBUG, "PVRManager - %s - active clients found. continue to start", __FUNCTION__); /* reset observer for pvr windows */ for (std::size_t i = 0; i != ARRAY_SIZE(m_pvrWindowIds); i++) { CSingleExit exit(m_critSection); CGUIWindowPVRBase *pWindow = (CGUIWindowPVRBase *) g_windowManager.GetWindow(m_pvrWindowIds[i]); if (pWindow) pWindow->ResetObservers(); } /* load all channels and groups */ if (bShowProgress) ShowProgressDialog(g_localizeStrings.Get(19236), 0); // Loading channels from clients if (!m_channelGroups->Load() || !IsInitialising()) return false; /* get timers from the backends */ if (bShowProgress) ShowProgressDialog(g_localizeStrings.Get(19237), 50); // Loading timers from clients m_timers->Load(); /* get recordings from the backend */ if (bShowProgress) ShowProgressDialog(g_localizeStrings.Get(19238), 75); // Loading recordings from clients m_recordings->Load(); if (!IsInitialising()) return false; /* start the other pvr related update threads */ if (bShowProgress) ShowProgressDialog(g_localizeStrings.Get(19239), 85); // Starting background threads m_guiInfo->Start(); /* close the progess dialog */ if (bShowProgress) HideProgressDialog(); return true; }
bool CPVRGUIActions::MarkUnwatched(const CFileItemPtr &item) const { if (!g_PVRRecordings->SetRecordingsPlayCount(item, 0)) return false; CGUIWindowPVRBase *pvrWindow = dynamic_cast<CGUIWindowPVRBase *>(g_windowManager.GetWindow(g_windowManager.GetActiveWindow())); if (pvrWindow) pvrWindow->DoRefresh(); else CLog::Log(LOGERROR, "CPVRGUIActions - %s - called on non-pvr window. no refresh possible.", __FUNCTION__); return true; }
bool CGUIWindowPVRBase::OnContextButton(int itemNumber, CONTEXT_BUTTON button) { bool bReturn = false; switch(button) { case CONTEXT_BUTTON_MENU_HOOKS: if (itemNumber >= 0 && itemNumber < m_vecItems->Size()) { CFileItemPtr item = m_vecItems->Get(itemNumber); if (item->IsEPG() && item->GetEPGInfoTag()->HasPVRChannel()) g_PVRClients->ProcessMenuHooks(item->GetEPGInfoTag()->ChannelTag()->ClientID(), PVR_MENUHOOK_EPG, item.get()); else if (item->IsPVRChannel()) g_PVRClients->ProcessMenuHooks(item->GetPVRChannelInfoTag()->ClientID(), PVR_MENUHOOK_CHANNEL, item.get()); else if (item->IsDeletedPVRRecording()) g_PVRClients->ProcessMenuHooks(item->GetPVRRecordingInfoTag()->m_iClientId, PVR_MENUHOOK_DELETED_RECORDING, item.get()); else if (item->IsUsablePVRRecording()) g_PVRClients->ProcessMenuHooks(item->GetPVRRecordingInfoTag()->m_iClientId, PVR_MENUHOOK_RECORDING, item.get()); else if (item->IsPVRTimer()) g_PVRClients->ProcessMenuHooks(item->GetPVRTimerInfoTag()->m_iClientId, PVR_MENUHOOK_TIMER, item.get()); bReturn = true; } break; case CONTEXT_BUTTON_FIND: { int windowSearchId = m_bRadio ? WINDOW_RADIO_SEARCH : WINDOW_TV_SEARCH; CGUIWindowPVRBase *windowSearch = (CGUIWindowPVRBase*) g_windowManager.GetWindow(windowSearchId); if (windowSearch && itemNumber >= 0 && itemNumber < m_vecItems->Size()) { CFileItemPtr item = m_vecItems->Get(itemNumber); g_windowManager.ActivateWindow(windowSearchId); bReturn = windowSearch->OnContextButton(*item.get(), button); } break; } default: bReturn = false; } return bReturn || CGUIMediaWindow::OnContextButton(itemNumber, button); }
bool CGUIDialogPVRGuideInfo::OnClickButtonFind(CGUIMessage &message) { bool bReturn = false; if (message.GetSenderId() == CONTROL_BTN_FIND) { const CEpgInfoTagPtr tag(m_progItem->GetEPGInfoTag()); if (tag && tag->HasPVRChannel()) { int windowSearchId = tag->ChannelTag()->IsRadio() ? WINDOW_RADIO_SEARCH : WINDOW_TV_SEARCH; CGUIWindowPVRBase *windowSearch = (CGUIWindowPVRBase*) g_windowManager.GetWindow(windowSearchId); if (windowSearch) { Close(); g_windowManager.ActivateWindow(windowSearchId); bReturn = windowSearch->OnContextButton(*m_progItem.get(), CONTEXT_BUTTON_FIND); } } } return bReturn; }
bool CPVRGUIActions::RenameTimer(const CFileItemPtr &item) const { if (!item->HasPVRTimerInfoTag()) return false; const CPVRTimerInfoTagPtr timer(item->GetPVRTimerInfoTag()); std::string strNewName(timer->m_strTitle); if (CGUIKeyboardFactory::ShowAndGetInput(strNewName, CVariant{g_localizeStrings.Get(19042)}, // "Are you sure you want to rename this timer?" false)) { if (!g_PVRTimers->RenameTimer(*item, strNewName)) return false; } CGUIWindowPVRBase *pvrWindow = dynamic_cast<CGUIWindowPVRBase *>(g_windowManager.GetWindow(g_windowManager.GetActiveWindow())); if (pvrWindow) pvrWindow->DoRefresh(); else CLog::Log(LOGERROR, "CPVRGUIActions - %s - called on non-pvr window. no refresh possible.", __FUNCTION__); return true; }