bool CPVRChannelGroupsContainer::GetDirectory(const CStdString& strPath, CFileItemList &results) { CStdString strBase(strPath); /* get the filename from curl */ CURL url(strPath); CStdString fileName = url.GetFileName(); URIUtils::RemoveSlashAtEnd(fileName); if (fileName == "channels") { CFileItemPtr item; /* all tv channels */ item.reset(new CFileItem(strBase + "/tv/", true)); item->SetLabel(g_localizeStrings.Get(19020)); item->SetLabelPreformated(true); results.Add(item); /* all radio channels */ item.reset(new CFileItem(strBase + "/radio/", true)); item->SetLabel(g_localizeStrings.Get(19021)); item->SetLabelPreformated(true); results.Add(item); return true; } else if (fileName == "channels/tv") { return GetGroupsDirectory(&results, false); } else if (fileName == "channels/radio") { return GetGroupsDirectory(&results, true); } else if (fileName.Left(12) == "channels/tv/") { CStdString strGroupName(fileName.substr(12)); URIUtils::RemoveSlashAtEnd(strGroupName); CPVRChannelGroupPtr group = GetTV()->GetByName(strGroupName); if (!group) group = GetGroupAllTV(); if (group) group->GetMembers(results, !fileName.Right(7).Equals(".hidden")); return true; } else if (fileName.Left(15) == "channels/radio/") { CStdString strGroupName(fileName.substr(15)); URIUtils::RemoveSlashAtEnd(strGroupName); CPVRChannelGroupPtr group = GetRadio()->GetByName(strGroupName); if (!group) group = GetGroupAllRadio(); if (group) group->GetMembers(results, !fileName.Right(7).Equals(".hidden")); return true; } return false; }
void CGUIDialogPVRGuideSearch::UpdateChannelSpin(void) { int iChannelGroup = GetSpinValue(CONTROL_SPIN_GROUPS); std::vector< std::pair<std::string, int> > labels; labels.push_back(std::make_pair(g_localizeStrings.Get(19217), EPG_SEARCH_UNSET)); CPVRChannelGroupPtr group; if (iChannelGroup == EPG_SEARCH_UNSET) group = g_PVRChannelGroups->GetGroupAll(m_searchFilter->m_bIsRadio); else group = g_PVRChannelGroups->GetByIdFromAll(iChannelGroup); if (!group) group = g_PVRChannelGroups->GetGroupAll(m_searchFilter->m_bIsRadio); std::vector<PVRChannelGroupMember> groupMembers(group->GetMembers()); for (std::vector<PVRChannelGroupMember>::const_iterator it = groupMembers.begin(); it != groupMembers.end(); ++it) { if ((*it).channel) labels.push_back(std::make_pair((*it).channel->ChannelName(), (*it).iChannelNumber)); } SET_CONTROL_LABELS(CONTROL_SPIN_CHANNELS, m_searchFilter->m_iChannelNumber, &labels); }
JSONRPC_STATUS CPVROperations::GetChannels(const std::string &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result) { if (!g_PVRManager.IsStarted()) return FailedToExecute; CPVRChannelGroupsContainer *channelGroupContainer = g_PVRChannelGroups; if (channelGroupContainer == NULL) return FailedToExecute; CPVRChannelGroupPtr channelGroup; CVariant id = parameterObject["channelgroupid"]; if (id.isInteger()) channelGroup = channelGroupContainer->GetByIdFromAll((int)id.asInteger()); else if (id.isString()) channelGroup = channelGroupContainer->GetGroupAll(id.asString() == "allradio"); if (channelGroup == NULL) return InvalidParams; CFileItemList channels; if (channelGroup->GetMembers(channels) < 0) return InvalidParams; HandleFileItemList("channelid", false, "channels", channels, parameterObject, result, true); return OK; }
void CGUIDialogPVRChannelsOSD::Update() { // lock our display, as this window is rendered from the player thread g_graphicsContext.Lock(); if (!IsObserving(g_infoManager)) g_infoManager.RegisterObserver(this); if (!IsObserving(g_EpgContainer)) g_EpgContainer.RegisterObserver(this); m_viewControl.SetCurrentView(DEFAULT_VIEW_LIST); // empty the list ready for population Clear(); CPVRChannelPtr channel(g_PVRManager.GetCurrentChannel()); if (channel) { CPVRChannelGroupPtr group = g_PVRManager.GetPlayingGroup(channel->IsRadio()); if (group) { group->GetMembers(*m_vecItems); m_viewControl.SetItems(*m_vecItems); if (!m_group) { m_group = group; m_viewControl.SetSelectedItem(CGUIWindowPVRBase::GetSelectedItemPath(channel->IsRadio())); SaveSelectedItemPath(group->GroupID()); } } } g_graphicsContext.Unlock(); }
void CGUIDialogPVRChannelsOSD::Update(bool selectPlayingChannel) { // lock our display, as this window is rendered from the player thread g_graphicsContext.Lock(); if (!IsObserving(g_infoManager)) g_infoManager.RegisterObserver(this); m_viewControl.SetCurrentView(DEFAULT_VIEW_LIST); // empty the list ready for population Clear(); CPVRChannelPtr channel; g_PVRManager.GetCurrentChannel(channel); CPVRChannelGroupPtr group = g_PVRManager.GetPlayingGroup(channel->IsRadio()); if (group) { group->GetMembers(*m_vecItems); m_viewControl.SetItems(*m_vecItems); m_viewControl.SetSelectedItem(selectPlayingChannel ? group->GetIndex(*channel) : GetLastSelectedItem(group->GroupID())); } g_graphicsContext.Unlock(); }
void CGUIDialogPVRChannelsOSD::Update() { g_infoManager.RegisterObserver(this); CServiceBroker::GetPVRManager().EpgContainer().RegisterObserver(this); m_viewControl.SetCurrentView(DEFAULT_VIEW_LIST); // empty the list ready for population Clear(); CPVRChannelPtr channel(CServiceBroker::GetPVRManager().GetPlayingChannel()); if (channel) { CPVRChannelGroupPtr group = CServiceBroker::GetPVRManager().GetPlayingGroup(channel->IsRadio()); if (group) { group->GetMembers(*m_vecItems); m_viewControl.SetItems(*m_vecItems); if (!m_group) { m_group = group; m_viewControl.SetSelectedItem(CServiceBroker::GetPVRManager().GUIActions()->GetSelectedItemPath(channel->IsRadio())); SaveSelectedItemPath(group->GroupID()); } } } }
void CPVROperations::FillChannelGroupDetails(const CPVRChannelGroupPtr &channelGroup, const CVariant ¶meterObject, CVariant &result, bool append /* = false */) { if (channelGroup == NULL) return; CVariant object(CVariant::VariantTypeObject); object["channelgroupid"] = channelGroup->GroupID(); object["channeltype"] = channelGroup->IsRadio() ? "radio" : "tv"; object["label"] = channelGroup->GroupName(); if (append) result.append(object); else { CFileItemList channels; channelGroup->GetMembers(channels); object["channels"] = CVariant(CVariant::VariantTypeArray); HandleFileItemList("channelid", false, "channels", channels, parameterObject["channels"], object, false); result = object; } }
void CGUIDialogPVRChannelManager::Update() { // lock our display, as this window is rendered from the player thread g_graphicsContext.Lock(); m_viewControl.SetCurrentView(CONTROL_LIST_CHANNELS); // empty the lists ready for population Clear(); CPVRChannelGroupPtr channels = g_PVRChannelGroups->GetGroupAll(m_bIsRadio); // No channels available, nothing to do. if(!channels) return; std::vector<PVRChannelGroupMember> groupMembers(channels->GetMembers()); CFileItemPtr channelFile; for (std::vector<PVRChannelGroupMember>::const_iterator it = groupMembers.begin(); it != groupMembers.end(); ++it) { channelFile = CFileItemPtr(new CFileItem((*it).channel)); if (!channelFile || !channelFile->HasPVRChannelInfoTag()) continue; const CPVRChannelPtr channel(channelFile->GetPVRChannelInfoTag()); channelFile->SetProperty("ActiveChannel", !channel->IsHidden()); channelFile->SetProperty("Name", channel->ChannelName()); channelFile->SetProperty("UseEPG", channel->EPGEnabled()); channelFile->SetProperty("Icon", channel->IconPath()); channelFile->SetProperty("EPGSource", (int)0); channelFile->SetProperty("ParentalLocked", channel->IsLocked()); channelFile->SetProperty("Number", StringUtils::Format("%i", channel->ChannelNumber())); std::string clientName; g_PVRClients->GetClientName(channel->ClientID(), clientName); channelFile->SetProperty("ClientName", clientName); channelFile->SetProperty("SupportsSettings", g_PVRClients->SupportsChannelSettings(channel->ClientID())); m_channelItems->Add(channelFile); } { std::vector< std::pair<std::string, int> > labels; labels.push_back(std::make_pair(g_localizeStrings.Get(19210), 0)); /// TODO: Add Labels for EPG scrapers here SET_CONTROL_LABELS(SPIN_EPGSOURCE_SELECTION, 0, &labels); } m_clientsWithSettingsList = g_PVRClients->GetClientsSupportingChannelSettings(m_bIsRadio); if (!m_clientsWithSettingsList.empty()) m_bAllowNewChannel = true; if (m_bAllowNewChannel) SET_CONTROL_VISIBLE(BUTTON_NEW_CHANNEL); else SET_CONTROL_HIDDEN(BUTTON_NEW_CHANNEL); Renumber(); m_viewControl.SetItems(*m_channelItems); m_viewControl.SetSelectedItem(m_iSelected); g_graphicsContext.Unlock(); }
bool CPVRChannelGroupsContainer::GetDirectory(const std::string& strPath, CFileItemList &results) const { std::string strBase(strPath); URIUtils::RemoveSlashAtEnd(strBase); /* get the filename from curl */ CURL url(strPath); std::string fileName = url.GetFileName(); URIUtils::RemoveSlashAtEnd(fileName); if (fileName == "channels") { CFileItemPtr item; /* all tv channels */ item.reset(new CFileItem(strBase + "/tv/", true)); item->SetLabel(g_localizeStrings.Get(19020)); item->SetLabelPreformatted(true); results.Add(item); /* all radio channels */ item.reset(new CFileItem(strBase + "/radio/", true)); item->SetLabel(g_localizeStrings.Get(19021)); item->SetLabelPreformatted(true); results.Add(item); return true; } else if (fileName == "channels/tv") { return GetGroupsDirectory(&results, false); } else if (fileName == "channels/radio") { return GetGroupsDirectory(&results, true); } else if (StringUtils::StartsWith(fileName, "channels/tv/")) { std::string strGroupName(fileName.substr(12)); URIUtils::RemoveSlashAtEnd(strGroupName); CPVRChannelGroupPtr group; if (strGroupName == "*") // all channels group = GetGroupAllTV(); else group = GetTV()->GetByName(strGroupName); if (group) { group->GetMembers(results, !StringUtils::EndsWithNoCase(fileName, ".hidden")); } else { CLog::Log(LOGERROR, "CPVRChannelGroupsContainer - %s - unable to obtain members of channel group '%s'", __FUNCTION__, strGroupName.c_str()); return false; } FilterDirectory(url, results); return true; } else if (StringUtils::StartsWith(fileName, "channels/radio/")) { std::string strGroupName(fileName.substr(15)); URIUtils::RemoveSlashAtEnd(strGroupName); CPVRChannelGroupPtr group; if (strGroupName == "*") // all channels group = GetGroupAllRadio(); else group = GetRadio()->GetByName(strGroupName); if (group) { group->GetMembers(results, !StringUtils::EndsWithNoCase(fileName, ".hidden")); } else { CLog::Log(LOGERROR, "CPVRChannelGroupsContainer - %s - unable to obtain members of channel group '%s'", __FUNCTION__, strGroupName.c_str()); return false; } FilterDirectory(url, results); return true; } return false; }
bool CPVRManager::StartPlayback(PlaybackType type /* = PlaybackTypeAny */) { bool bIsRadio(false); bool bReturn(false); bool bIsPlaying(false); CFileItemPtr channel; // check if the desired PlaybackType is already playing, // and if not, try to grab the last played channel of this type switch (type) { case PlaybackTypeRadio: if (IsPlayingRadio()) bIsPlaying = true; else channel = m_channelGroups->GetGroupAllRadio()->GetLastPlayedChannel(); bIsRadio = true; break; case PlaybackTypeTv: if (IsPlayingTV()) bIsPlaying = true; else channel = m_channelGroups->GetGroupAllTV()->GetLastPlayedChannel(); break; default: if (IsPlaying()) bIsPlaying = true; else channel = m_channelGroups->GetLastPlayedChannel(); } // we're already playing? Then nothing to do if (bIsPlaying) return true; // if we have a last played channel, start playback if (channel && channel->HasPVRChannelInfoTag()) { bReturn = StartPlayback(channel->GetPVRChannelInfoTag(), false); } else { // if we don't, find the active channel group of the demanded type and play it's first channel CPVRChannelGroupPtr channelGroup = GetPlayingGroup(bIsRadio); if (channelGroup) { // try to start playback of first channel in this group std::vector<PVRChannelGroupMember> groupMembers(channelGroup->GetMembers()); if (!groupMembers.empty()) bReturn = StartPlayback((*groupMembers.begin()).channel, false); } } if (!bReturn) { CLog::Log(LOGNOTICE, "PVRManager - %s - could not determine %s channel to start playback with. No last played channel found, and first channel of active group could also not be determined.", __FUNCTION__, bIsRadio ? "radio": "tv"); std::string msg = StringUtils::Format(g_localizeStrings.Get(19035).c_str(), g_localizeStrings.Get(bIsRadio ? 19021 : 19020).c_str()); // RADIO/TV could not be played. Check the log for details. CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, g_localizeStrings.Get(19166), // PVR information msg); } return bReturn; }