void SongManager::InitSongsFromDisk( LoadingWindow *ld )\r
{\r
RageTimer tm;\r
- \r
+\r
/* this loads the songs into m_pMachineSongs */\r
LoadStepManiaSongDir( SONGS_DIR, ld );\r
\r
sDir += "/";\r
\r
// Find all group directories in "Songs" folder\r
- CStringArray arrayGroupDirs;\r
+ vector<CString> arrayGroupDirs;\r
GetDirListing( sDir+"*", arrayGroupDirs, true );\r
SortCStringArray( arrayGroupDirs );\r
\r
- for( unsigned i=0; i< arrayGroupDirs.size(); i++ ) // for each dir in /Songs/\r
+ /* Build a list of song directories to read through */\r
+ if( ld )\r
+ ld->SetText( "Building Songs directory..." );\r
+\r
+ unsigned iNumSongsLoaded = 0, iNumSongsToLoad = 0;\r
+ vector< vector<CString> > arrayGroupSongDirs( arrayGroupDirs.size(), vector<CString>() );\r
+\r
+ for( unsigned i=0; i< arrayGroupDirs.size(); ++i ) // for each dir in /Songs/\r
{\r
- CString sGroupDirName = arrayGroupDirs[i];\r
+ const CString &sGroupDirName = arrayGroupDirs[i];\r
+ const CString sGroupDirPath = sDir + sGroupDirName;\r
\r
- SanityCheckGroupDir(sDir+sGroupDirName);\r
+ SanityCheckGroupDir( sGroupDirPath );\r
\r
// Find all Song folders in this group directory\r
- CStringArray arraySongDirs;\r
- GetDirListing( sDir+sGroupDirName + "/*", arraySongDirs, true, true );\r
+ vector<CString> &arraySongDirs = arrayGroupSongDirs[i];\r
+ GetDirListing( sGroupDirPath + "/*" /**/, arraySongDirs, true, true );\r
SortCStringArray( arraySongDirs );\r
\r
- LOG->Trace("Attempting to load %i songs from \"%s\"", int(arraySongDirs.size()),\r
- (sDir+sGroupDirName).c_str() );\r
- int loaded = 0;\r
+ iNumSongsToLoad += arraySongDirs.size();\r
+ LOG->Trace( "Found %d song folders in \"%s\"", arraySongDirs.size(), sGroupDirPath.c_str() );\r
+ }\r
+\r
+ ASSERT( arrayGroupDirs.size() == arrayGroupSongDirs.size() );\r
+\r
+ for( unsigned i = 0; i < arrayGroupSongDirs.size(); ++i )\r
+ {\r
+ vector<CString> &arraySongDirs = arrayGroupSongDirs[i];\r
+ const CString &sGroupDirName = arrayGroupDirs[i];\r
+\r
+ unsigned iLoadedFromThisDir = 0;\r
\r
- for( unsigned j=0; j< arraySongDirs.size(); ++j ) // for each song dir\r
+ for( unsigned j = 0; j < arraySongDirs.size(); ++j )\r
{\r
- CString sSongDirName = arraySongDirs[j];\r
+ const CString &sSongDirName = arraySongDirs[j];\r
+ ++iNumSongsLoaded;\r
\r
- // this is a song directory. Load a new song!\r
if( ld )\r
{\r
- ld->SetText( ssprintf("Loading songs...\n%s\n%s",\r
- Basename(sGroupDirName).c_str(),\r
- Basename(sSongDirName).c_str()));\r
+ ld->SetProgress( iNumSongsLoaded, iNumSongsToLoad );\r
+\r
+ ld->SetText(\r
+ ssprintf("Loading songs (%d of %d)...\n%s\n%s",\r
+ iNumSongsLoaded, iNumSongsToLoad,\r
+ Basename(sGroupDirName).c_str(),\r
+ Basename(sSongDirName).c_str()\r
+ )\r
+ );\r
+\r
ld->Paint();\r
}\r
+\r
Song* pNewSong = new Song;\r
if( !pNewSong->LoadFromSongDir( sSongDirName ) )\r
{\r
delete pNewSong;\r
continue;\r
}\r
- \r
+\r
m_pMachineSongs.push_back( pNewSong );\r
- loaded++;\r
+ ++iLoadedFromThisDir;\r
}\r
\r
- LOG->Trace("Loaded %i songs from \"%s\"", loaded, (sDir+sGroupDirName).c_str() );\r
+ LOG->Trace("Loaded %i songs from \"%s\"", iLoadedFromThisDir, (sDir+sGroupDirName).c_str() );\r
\r
/* Don't add the group name if we didn't load any songs in this group. */\r
- if(!loaded) continue;\r
+ if( iLoadedFromThisDir == 0 )\r
+ continue;\r
\r
/* Add this group to the group array. */\r
AddGroup(sDir, sGroupDirName);\r
\r
/* Cache and load the group banner. */\r
BANNERCACHE->CacheBanner( GetGroupBannerPath(sGroupDirName) );\r
- \r
+\r
/* Load the group sym links (if any)*/\r
LoadGroupSymLinks(sDir, sGroupDirName);\r
}\r