Exemplo n.º 1
0
int CPVRChannelGroupInternal::LoadFromDb(bool bCompress /* = false */)
{
  CPVRDatabase *database = g_PVRManager.GetTVDatabase();
  if (!database || !database->Open())
    return -1;

  int iChannelCount = size();

  if (database->GetChannels(this, m_bRadio) > 0)
  {
    if (bCompress)
      database->Compress(true);
  }
  else
  {
    CLog::Log(LOGINFO, "PVRChannelGroupInternal - %s - no channels in the database",
        __FUNCTION__);
  }

  database->Close();

  SortByChannelNumber();

  return size() - iChannelCount;
}
Exemplo n.º 2
0
int CPVRChannelGroupInternal::LoadFromClients(bool bAddToDb /* = true */)
{
  int iCurSize = size();

  /* no channels returned */
  if (GetFromClients() == -1)
    return -1;

  /* sort by client channel number if this is the first time */
  if (iCurSize == 0)
    SortByClientChannelNumber();
  else
    SortByChannelNumber();

  /* remove invalid channels */
  RemoveInvalidChannels();

  /* set channel numbers */
  Renumber();

  /* try to find channel icons */
  SearchAndSetChannelIcons();

  /* persist */
  if (bAddToDb)
    CPVRChannelGroupInternal::Persist();

  return size() - iCurSize;
}
Exemplo n.º 3
0
bool CPVRChannelGroup::MoveChannel(unsigned int iOldChannelNumber, unsigned int iNewChannelNumber, bool bSaveInDb /* = true */)
{
  if (iOldChannelNumber == iNewChannelNumber)
    return true;

  bool bReturn(false);
  CSingleLock lock(m_critSection);

  /* make sure the list is sorted by channel number */
  SortByChannelNumber();

  /* old channel number out of range */
  if (iOldChannelNumber > size())
    return bReturn;

  /* new channel number out of range */
  if (iNewChannelNumber > size())
    iNewChannelNumber = size();

  /* move the channel in the list */
  PVRChannelGroupMember entry = at(iOldChannelNumber - 1);
  erase(begin() + iOldChannelNumber - 1);
  insert(begin() + iNewChannelNumber - 1, entry);

  /* renumber the list */
  Renumber();

  m_bChanged = true;

  if (bSaveInDb)
    bReturn = Persist();
  else
    bReturn = true;

  CLog::Log(LOGNOTICE, "CPVRChannelGroup - %s - %s channel '%s' moved to channel number '%d'",
      __FUNCTION__, (m_bRadio ? "radio" : "tv"), entry.channel->ChannelName().c_str(), iNewChannelNumber);

  return true;
}
Exemplo n.º 4
0
bool CPVRChannelGroup::AddToGroup(CPVRChannel *channel, int iChannelNumber /* = 0 */, bool bSortAndRenumber /* = true */)
{
  CSingleLock lock(m_critSection);

  bool bReturn(false);
  if (!channel)
    return bReturn;

  if (!CPVRChannelGroup::IsGroupMember(channel))
  {
    if (iChannelNumber <= 0 || iChannelNumber > (int) size() + 1)
      iChannelNumber = size() + 1;

    CPVRChannel *realChannel = (IsInternalGroup()) ?
        channel :
        (CPVRChannel *) CPVRManager::GetChannelGroups()->GetGroupAll(m_bRadio)->GetByChannelID(channel->ChannelID());

    if (realChannel)
    {
      PVRChannelGroupMember newMember = { realChannel, iChannelNumber };
      push_back(newMember);
      m_bChanged = true;

      if (bSortAndRenumber)
      {
        SortByChannelNumber();
        Renumber();
      }

      // TODO notify observers
      bReturn = true;
    }
  }

  return bReturn;
}