void CGUIDialogPVRTimerSettings::InitializeChannelsList()
{
  m_channelEntries.clear();

  int index = 0;

  // Add special "any channel" entries - one for every client (used for epg-based timer rules).
  CPVRClientMap clients;
  CServiceBroker::GetPVRManager().Clients()->GetCreatedClients(clients);
  for (const auto& client : clients)
  {
    m_channelEntries.insert({index, ChannelDescriptor(PVR_CHANNEL_INVALID_UID,
                                                      client.second->GetID(),
                                                      g_localizeStrings.Get(809))}); // "Any channel"
    ++index;
  }

  // Add regular channels
  CFileItemList channelsList;
  CServiceBroker::GetPVRManager().ChannelGroups()->GetGroupAll(m_bIsRadio)->GetMembers(channelsList);
  for (const auto& channelsEntry : channelsList)
  {
    const std::shared_ptr<CPVRChannel> channel = channelsEntry->GetPVRChannelInfoTag();
    const std::string channelDescription
      = StringUtils::Format("%s %s", channel->ChannelNumber().FormattedChannelNumber().c_str(), channel->ChannelName().c_str());
    m_channelEntries.insert({index, ChannelDescriptor(channel->UniqueID(), channel->ClientID(), channelDescription)});
    ++index;
  }
}