예제 #1
0
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);
}
예제 #2
0
/**
 *   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;
	}

}
예제 #3
0
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);
		}
	}
}
예제 #4
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();
}
예제 #5
0
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();
}
예제 #6
0
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 );
}