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; }
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; }
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; }
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; }