Esempio n. 1
0
void Controller::CreateRandomSongList()
{
	vecRandomSongList.clear();

	for(int i = 0; i < pArchiveFile->GetChildFileCount(); i++)
	{
		// 曲の長さがある場合のみランダム再生用のリストに追加する
		File* pFile = pArchiveFile->GetChildFile(i);
		if(pFile && pFile->GetPlayLength() != 0)
		{
			vecRandomSongList.push_back(i);
		}
	}
}
Esempio n. 2
0
void Controller::UpdateFileInfo( const string& s)
{
	strFilePath = s ;

	// pArchiveFile の更新
	if( pArchiveFile)
	{
		pMainWnd->ClearList() ;
		delete pArchiveFile ;
	}
	pArchiveFile = new ArchiveFile(strFilePath) ;
	pArchiveFile->ReadHeader() ;

	// zip ファイルなら
	switch( pArchiveFile->GetStatus())
	{
		case ArchiveFile::Status::OPEN_ERROR :
			pMainWnd->AddList( "ファイルを開けませんでした") ;
			break ;

		case ArchiveFile::Status::NO_HEADER:
			pMainWnd->AddList( "ヘッダ情報を読み取れませんでした") ;
			pMainWnd->SetCurSong( 0, 0) ;
			break ;

		case ArchiveFile::Status::INVALID_HEADER :
			pMainWnd->AddList( "ヘッダ情報の読みとりに失敗しました。") ;
			pMainWnd->SetCurSong( 0, 0) ;
			break ;

		case ArchiveFile::Status::UNCOMPRESSED :
		case ArchiveFile::Status::COMPRESSED :
		{
			// ランダム再生用のリスト計算
			CreateRandomSongList();

			// コンピレーションアルバムかどうかの判断
			BOOL blnCompi = FALSE ;
			if( Profile::blnListCompilation)
			{
				string strArtist = "" ;
				for( int i = 0; i < pArchiveFile->GetChildFileCount(); i++)
				{
					File* pFile = pArchiveFile->GetChildFile( i) ;
					if( !pFile->HasID3Tag())
					{
						continue ;
					}

					string s = pFile->GetID3Tag().strArtistName ;
					if( strArtist == "")
					{
						strArtist = s ;
					}
					else if( strArtist != s)
					{
						blnCompi = TRUE ;
						break ;
					}
				}
			}

			// リストに追加していく
			for( int i = 0; i < pArchiveFile->GetChildFileCount(); i++)
			{
				File* pFile = pArchiveFile->GetChildFile( i) ;
				
				if( blnCompi && pFile->HasID3Tag())
				{
					pMainWnd->AddList( pFile->GetDisplayStr( Profile::strListCompilation), pFile->GetPlayLength()) ;
				}
				else if( Profile::blnListID3 && pFile->HasID3Tag())
				{
					pMainWnd->AddList( pFile->GetDisplayStr( Profile::strListID3), pFile->GetPlayLength()) ;
				}
				else
				{
					pMainWnd->AddList( pFile->GetFileName(), pFile->GetPlayLength()) ;
				}
			}
			pMainWnd->SetCurSong( 0, i > 0 ? pArchiveFile->GetChildFile( 0)->GetPlayLength() : 0) ;
			break ;
		}
	}

	// ファイル情報ウインドウを更新
	if(pInfoWnd)	pInfoWnd->SetArchiveFile(pArchiveFile);
}