void CDataBaseTest::preparePlaylist() { CCollection<CPlaylistItem>* playlist = 0; playlist = new CCollection<CPlaylistItem>(); CCollection<CCollectionItem>* collection = m_session->getCollection(0); for(int i=0; i < collection->size(); i += 2) { CPlaylistItem* item = new CPlaylistItem(collection->getItem(i)->getHash()); playlist->insert( item, -1); } m_session->addPlaylistRev(playlist); playlist = new CCollection<CPlaylistItem>(); for(int i=0; i < collection->size(); i++) { CPlaylistItem* item = new CPlaylistItem(collection->getItem(i)->getHash()); playlist->insert( item, -1); } m_session->addPlaylistRev(playlist); playlist = new CCollection<CPlaylistItem>(); for( int i=1; i < collection->size(); i += 2 ) { CPlaylistItem* item = new CPlaylistItem(collection->getItem(i)->getHash()); playlist->insert( item, -1); } m_session->addPlaylistRev(playlist); }
/** * check for playlist entries not in collection. If any, remove them and create new playlist revision. */ void CStateDB::repairSession(CSession* session) { CCollection<CCollectionItem>* collection = session->getCollection(); CCollection<CPlaylistItem>* playlist = session->getPlaylist(); CCollection<CPlaylistItem>* newPlaylist = new CCollection<CPlaylistItem>(); bool unknownItemInPlaylist = false; for(int i=0; i < playlist->size(); i++) { CPlaylistItem* plItem = new CPlaylistItem( *playlist->getItem(i) ); unsigned hash = plItem->getCollectionHash(); CCollectionItem* item = collection->getByHash(hash); if( item == 0 ) { unknownItemInPlaylist = true; } else { newPlaylist->insert(plItem); } } if( unknownItemInPlaylist ) { session->addPlaylistRev( newPlaylist ); updatePlaylistRevsTable(session, session->getPlaylistRevision(), session->getPlaylistRevision()); } else { delete newPlaylist; } }
void CStateDB::restoreNextlists(CSession * const session) { if(m_db == 0) throw(CApiMisuseException("Calling restoreNextlists(), but DB not opened.")); bool found; int minRev = getIntValue("NextlistRevMin", found); assert(found); int maxRev = getIntValue("NextlistRevMax", found); assert(found); session->setMinNextlistRevision( minRev ); for(int rev = minRev; rev < maxRev; rev++) { CCollection<CPlaylistItem>* nextlist = new CCollection<CPlaylistItem>(rev); CPlaylistItem* item; int pos = 0; do { item = getNextlistItemByPos(pos, rev); pos++; if(item) { nextlist->insert(item); } } while(item != 0); session->addNextlistRev(nextlist); } }
void CStateDB::restoreCollection(CSession * const session) { if(m_db == 0) throw(CApiMisuseException("Calling restoreCollection(), but DB not opened.")); bool found; int minRev = getIntValue("CollectionRevMin", found); assert(found); int maxRev = getIntValue("CollectionRevMax", found); assert(found); session->setMinCollectionRevision( minRev ); for(int rev = minRev; rev <= maxRev; rev++) { CCollection<CCollectionItem>* collection = new CCollection<CCollectionItem>(rev); CCollectionItem* item; int pos = 0; do { item = getCollectionItemByPos(pos, rev); pos++; if(item) { collection->insert(item); } } while(item != 0); session->addCollectionRev(collection); } }
CCollection<CCollectionItem>* CStateDB::getCollectionRev(int rev) { CCollection<CCollectionItem>* collection = new CCollection<CCollectionItem>(); CCollectionItem* item; int pos = 0; do { item = getCollectionItemByPos(pos, rev); pos++; if(item) { collection->insert(item); } } while(item != 0); return collection; }