bool CPVRGUIInfo::GetListItemAndPlayerBool(const CFileItem *item, const CGUIInfo &info, bool &bValue) const { switch (info.m_info) { case LISTITEM_ISRECORDING: if (item->IsPVRChannel()) { bValue = item->GetPVRChannelInfoTag()->IsRecording(); return true; } else if (item->IsEPG() || item->IsPVRTimer()) { const CPVRTimerInfoTagPtr timer = CPVRItem(item).GetTimerInfoTag(); if (timer) bValue = timer->IsRecording(); return true; } else if (item->IsPVRRecording()) { bValue = item->GetPVRRecordingInfoTag()->IsInProgress(); return true; } break; case LISTITEM_INPROGRESS: if (item->IsPVRChannel() || item->IsEPG()) { const CPVREpgInfoTagPtr epgTag = CPVRItem(item).GetEpgInfoTag(); if (epgTag) bValue = epgTag->IsActive(); return true; } break; case LISTITEM_HASTIMER: if (item->IsPVRChannel() || item->IsEPG()) { const CPVREpgInfoTagPtr epgTag = CPVRItem(item).GetEpgInfoTag(); if (epgTag) bValue = epgTag->HasTimer(); return true; } break; case LISTITEM_HASTIMERSCHEDULE: if (item->IsPVRChannel() || item->IsEPG() || item->IsPVRTimer()) { const CPVRTimerInfoTagPtr timer = CPVRItem(item).GetTimerInfoTag(); if (timer) bValue = timer->GetTimerRuleId() != PVR_TIMER_NO_PARENT; return true; } break; case LISTITEM_TIMERISACTIVE: if (item->IsPVRChannel() || item->IsEPG()) { const CPVRTimerInfoTagPtr timer = CPVRItem(item).GetTimerInfoTag(); if (timer) bValue = timer->IsActive(); break; } break; case LISTITEM_TIMERHASCONFLICT: if (item->IsPVRChannel() || item->IsEPG()) { const CPVRTimerInfoTagPtr timer = CPVRItem(item).GetTimerInfoTag(); if (timer) bValue = timer->HasConflict(); return true; } break; case LISTITEM_TIMERHASERROR: if (item->IsPVRChannel() || item->IsEPG()) { const CPVRTimerInfoTagPtr timer = CPVRItem(item).GetTimerInfoTag(); if (timer) bValue = (timer->IsBroken() && !timer->HasConflict()); return true; } break; case LISTITEM_HASRECORDING: if (item->IsPVRChannel() || item->IsEPG()) { const CPVREpgInfoTagPtr epgTag = CPVRItem(item).GetEpgInfoTag(); if (epgTag) bValue = epgTag->HasRecording(); return true; } break; case LISTITEM_HAS_EPG: if (item->IsPVRChannel() || item->IsEPG() || item->IsPVRTimer()) { const CPVREpgInfoTagPtr epgTag = CPVRItem(item).GetEpgInfoTag(); bValue = (epgTag != nullptr); return true; } break; case LISTITEM_ISENCRYPTED: if (item->IsPVRChannel() || item->IsEPG()) { const CPVRChannelPtr channel = CPVRItem(item).GetChannel(); if (channel) bValue = channel->IsEncrypted(); return true; } break; case MUSICPLAYER_CONTENT: case VIDEOPLAYER_CONTENT: if (item->IsPVRChannel()) { bValue = StringUtils::EqualsNoCase(info.GetData3(), "livetv"); return bValue; // if no match for this provider, other providers shall be asked. } break; case VIDEOPLAYER_HAS_INFO: if (item->IsPVRChannel()) { bValue = !item->GetPVRChannelInfoTag()->IsEmpty(); return true; } break; case VIDEOPLAYER_HAS_EPG: if (item->IsPVRChannel()) { bValue = (item->GetPVRChannelInfoTag()->GetEPGNow() != nullptr); return true; } break; case VIDEOPLAYER_CAN_RESUME_LIVE_TV: if (item->IsPVRRecording()) { const CPVRRecordingPtr recording = item->GetPVRRecordingInfoTag(); const CPVREpgInfoTagPtr epgTag = CServiceBroker::GetPVRManager().EpgContainer().GetTagById(recording->Channel(), recording->BroadcastUid()); bValue = (epgTag && epgTag->IsActive() && epgTag->Channel()); return true; } break; case PLAYER_IS_CHANNEL_PREVIEW_ACTIVE: if (item->IsPVRChannel()) { if (CServiceBroker::GetPVRManager().GUIActions()->GetChannelNavigator().IsPreviewAndShowInfo()) { bValue = true; } else { bValue = !m_videoInfo.valid; if (bValue && item->GetPVRChannelInfoTag()->IsRadio()) bValue = !m_audioInfo.valid; } return true; } break; } return false; }