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::updatePlaylistRevsTable(CSession const * const session, int minrev, int maxrev ) { if(minrev == -1) minrev = session->getMinPlaylistRevision(); if(maxrev == -1) maxrev = session->getPlaylistRevision(); for(int rev = minrev; rev <= maxrev; rev++) { CCollection<CPlaylistItem>* playlist = session->getPlaylist(rev); for(int i = 0; i < playlist->size(); i++) { CPlaylistItem* item = playlist->getItem(i); updatePlaylistItem(i, item, rev, 0); } } }
void CStateDB::updateCollectionTable( CSession const * const session, int minrev, int maxrev ) { beginTansaction(); if(minrev == -1) minrev = session->getMinCollectionRevision(); if(maxrev == -1) maxrev = session->getCollectionRevision(); for(int rev = minrev; rev <= maxrev; rev++) { CCollection<CCollectionItem>* collection = session->getCollection(rev); for(int i = 0; i < collection->size(); i++) { CCollectionItem* item = collection->getItem(i); updateCollectionItem(item); updateCollectionRevItem(i, item->getHash(), rev ); } } endTransaction(); }
void CDataBaseTest::prepareSession() { vector<string> types; types.push_back(".mp3"); types.push_back(".ogg"); CCollection<CCollectionItem>* collection = 0; m_colUpdater->setFileTypes(types); collection = m_colUpdater->walkTree("/home/martin"); m_testHashPos = collection->size() / 2; m_testHash = collection->getItem(m_testHashPos)->getHash(); m_session = new CSession; m_session->addCollectionRev(collection); m_session->addCollectionRev(collection); preparePlaylist(); prepareNextlist(); }
void CDataBaseTest::restoreSession() { saveSession(); bool ok = true; CSession* restoredSession; m_stateDB->open(); try { restoredSession = new CSession(); m_stateDB->restoreSession(restoredSession); } catch(...) { ok = false; } int reMinColRev = restoredSession->getMinCollectionRevision(); int minColRev = m_session->getMinCollectionRevision(); if(reMinColRev != minColRev) { ok = false; cout << "restored min Collection Revision does not match original one." << endl; } int reMaxColRev = restoredSession->getCollectionRevision(); int maxColRev = m_session->getCollectionRevision(); if(reMaxColRev != maxColRev) { ok = false; cout << "restored max Collection Revision does not match original one." << endl; } int reMinPlRev = restoredSession->getMinPlaylistRevision(); int minPlRev = m_session->getMinPlaylistRevision(); if(reMinPlRev != minPlRev) { ok = false; cout << "restored min Playlist Revision does not match original one." << endl; } int reMaxPlRev = restoredSession->getPlaylistRevision(); int maxPlRev = m_session->getPlaylistRevision(); if(reMaxPlRev != maxPlRev) { ok = false; cout << "restored max Playlist Revision does not match original one." << endl; } int reMinNlRev = restoredSession->getMinNextlistRevision(); int minNlRev = m_session->getMinNextlistRevision(); if(reMinNlRev != minNlRev) { ok = false; cout << "restored min Nextlist Revision does not match original one." << endl; } int reMaxNlRev = restoredSession->getNextlistRevision(); int maxNlRev = m_session->getNextlistRevision(); if(reMaxNlRev != maxNlRev) { ok = false; cout << "restored max Nextlist Revision does not match original one." << endl; } for(int colRev = minColRev; colRev <= maxColRev; colRev++ ) { CCollection<CCollectionItem>* col = m_session->getCollection(colRev); CCollection<CCollectionItem>* reCol = restoredSession->getCollection(colRev); CPPUNIT_ASSERT( reCol != 0 ); if(col->size() != reCol->size() ) ok = false; // CPPUNIT_ASSERT( reCol->size() > 0 ); for(int i=0; i < col->size(); i++) { CCollectionItem* item = col->getItem(i); CCollectionItem* reItem = reCol->getItem(i); if(item->getAlbum().compare(reItem->getAlbum()) != 0 ) { ok = false; cout << "restored collection[" << i << "] Album does not match original one." << endl; } if(item->getArtist().compare(reItem->getArtist()) != 0 ) { ok = false; cout << "restored collection[" << i << "] Artist does not match original one." << endl; } if(item->getTitle().compare(reItem->getTitle()) != 0 ) { ok = false; cout << "restored collection[" << i << "] Title does not match original one." << endl; } if(item->getFilename().compare(reItem->getFilename()) != 0 ) { ok = false; cout << "restored collection[" << i << "] filename does not match original one." << endl; } if(item->getDuration() != reItem->getDuration() ) { ok = false; cout << "restored collection[" << i << "] Duration does not match original one." << endl; } if(item->getYear() != reItem->getYear() ) { ok = false; cout << "restored collection[" << i << "] Year does not match original one." << endl; } } } for(int plRev = minPlRev; plRev < maxPlRev; plRev++ ) { CCollection<CPlaylistItem>* pl = m_session->getPlaylist(plRev); CCollection<CPlaylistItem>* rePl = restoredSession->getPlaylist(plRev); if(pl->size() != rePl->size() ) ok = false; for(int i=0; i < pl->size(); i++) { CPlaylistItem* item = pl->getItem(i); CPlaylistItem* reItem = rePl->getItem(i); if(item->getCollectionHash() != reItem->getCollectionHash() ) { ok = false; cout << "restored playlist[" << i << "] collectionHash does not match original one." << endl; } } } m_stateDB->close(); CPPUNIT_ASSERT( ok == true ); }