cache m_sSongFileName
This commit is contained in:
@@ -147,7 +147,7 @@ bool SMLoader::LoadFromSMFile( CString sPath, Song &out )
|
|||||||
{
|
{
|
||||||
int iNumParams = msd.GetNumParams(i);
|
int iNumParams = msd.GetNumParams(i);
|
||||||
const MsdFile::value_t &sParams = msd.GetValue(i);
|
const MsdFile::value_t &sParams = msd.GetValue(i);
|
||||||
const CString sValueName = sParams[0];
|
const CString &sValueName = sParams[0];
|
||||||
|
|
||||||
// handle the data
|
// handle the data
|
||||||
if( 0==stricmp(sValueName,"TITLE") )
|
if( 0==stricmp(sValueName,"TITLE") )
|
||||||
@@ -214,6 +214,15 @@ bool SMLoader::LoadFromSMFile( CString sPath, Song &out )
|
|||||||
}
|
}
|
||||||
out.m_fLastBeat = (float)atof( sParams[1] );
|
out.m_fLastBeat = (float)atof( sParams[1] );
|
||||||
}
|
}
|
||||||
|
else if( 0==stricmp(sValueName,"SONGFILENAME") )
|
||||||
|
{
|
||||||
|
if(!FromCache)
|
||||||
|
{
|
||||||
|
LOG->Trace("Ignored #SONGFILENAME (cache only)");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
out.m_sSongFileName = sParams[1];
|
||||||
|
}
|
||||||
|
|
||||||
else if( 0==stricmp(sValueName,"SAMPLESTART") )
|
else if( 0==stricmp(sValueName,"SAMPLESTART") )
|
||||||
out.m_fMusicSampleStartSeconds = TimeToSeconds( sParams[1] );
|
out.m_fMusicSampleStartSeconds = TimeToSeconds( sParams[1] );
|
||||||
|
|||||||
@@ -171,6 +171,7 @@ bool NotesWriterSM::Write(CString sPath, const Song &out, bool bSavingCache)
|
|||||||
{
|
{
|
||||||
f.PutLine( ssprintf( "#FIRSTBEAT:%.3f;\n", out.m_fFirstBeat ) );
|
f.PutLine( ssprintf( "#FIRSTBEAT:%.3f;\n", out.m_fFirstBeat ) );
|
||||||
f.PutLine( ssprintf( "#LASTBEAT:%.3f;\n", out.m_fLastBeat ) );
|
f.PutLine( ssprintf( "#LASTBEAT:%.3f;\n", out.m_fLastBeat ) );
|
||||||
|
f.PutLine( ssprintf( "#SONGFILENAME:%s;\n", out.m_sSongFileName.c_str() ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
+40
-40
@@ -50,7 +50,7 @@
|
|||||||
|
|
||||||
#define CACHE_DIR "Cache/"
|
#define CACHE_DIR "Cache/"
|
||||||
|
|
||||||
const int FILE_CACHE_VERSION = 131; // increment this when Song or Steps changes to invalidate cache
|
const int FILE_CACHE_VERSION = 132; // increment this when Song or Steps changes to invalidate cache
|
||||||
|
|
||||||
const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f;
|
const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f;
|
||||||
|
|
||||||
@@ -249,45 +249,6 @@ bool Song::LoadFromSongDir( CString sDir, bool bAllowCache )
|
|||||||
if( HasBanner() )
|
if( HasBanner() )
|
||||||
BANNERCACHE->LoadBanner( GetBannerPath() );
|
BANNERCACHE->LoadBanner( GetBannerPath() );
|
||||||
|
|
||||||
{
|
|
||||||
/* Generated filename; this doesn't always point to a loadable file,
|
|
||||||
* but instead points to the file we should write changed files to,
|
|
||||||
* and will always be an .SM.
|
|
||||||
*
|
|
||||||
* This is a little tricky. We can't always use the song title directly,
|
|
||||||
* since it might contain characters we can't store in filenames. Two
|
|
||||||
* easy options: we could manually filter out invalid characters, or we
|
|
||||||
* could use the name of the directory, which is always a valid filename
|
|
||||||
* and should always be the same as the song. The former might not catch
|
|
||||||
* everything--filename restrictions are platform-specific; we might even
|
|
||||||
* be on an 8.3 filesystem, so let's do the latter.
|
|
||||||
*
|
|
||||||
* We can't rely on searching for other data filenames; it works for DWIs,
|
|
||||||
* but not KSFs and BMSs.
|
|
||||||
*
|
|
||||||
* So, let's do this (by priority):
|
|
||||||
* 1. If there's an .SM file, use that filename. No reason to use anything
|
|
||||||
* else; it's the filename in use.
|
|
||||||
* 2. If there's a .DWI, use it with a changed extension.
|
|
||||||
* 3. Otherwise, use the name of the directory, since it's definitely a valid
|
|
||||||
* filename, and should always be the title of the song (unlike KSFs).
|
|
||||||
*/
|
|
||||||
m_sSongFileName = m_sSongDir;
|
|
||||||
CStringArray asFileNames;
|
|
||||||
GetDirListing( m_sSongDir+"*.sm", asFileNames );
|
|
||||||
if( !asFileNames.empty() )
|
|
||||||
m_sSongFileName += asFileNames[0];
|
|
||||||
else {
|
|
||||||
GetDirListing( m_sSongDir+"*.dwi", asFileNames );
|
|
||||||
if( !asFileNames.empty() ) {
|
|
||||||
m_sSongFileName += SetExtension( asFileNames[0], "sm" );
|
|
||||||
} else {
|
|
||||||
m_sSongFileName += sDirectoryParts[sDirectoryParts.size()-2]; // last item
|
|
||||||
m_sSongFileName += ".sm";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add AutoGen pointers. (These aren't cached.) */
|
/* Add AutoGen pointers. (These aren't cached.) */
|
||||||
AddAutoGenNotes();
|
AddAutoGenNotes();
|
||||||
|
|
||||||
@@ -764,6 +725,45 @@ void Song::TidyUpData()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
/* Generated filename; this doesn't always point to a loadable file,
|
||||||
|
* but instead points to the file we should write changed files to,
|
||||||
|
* and will always be an .SM.
|
||||||
|
*
|
||||||
|
* This is a little tricky. We can't always use the song title directly,
|
||||||
|
* since it might contain characters we can't store in filenames. Two
|
||||||
|
* easy options: we could manually filter out invalid characters, or we
|
||||||
|
* could use the name of the directory, which is always a valid filename
|
||||||
|
* and should always be the same as the song. The former might not catch
|
||||||
|
* everything--filename restrictions are platform-specific; we might even
|
||||||
|
* be on an 8.3 filesystem, so let's do the latter.
|
||||||
|
*
|
||||||
|
* We can't rely on searching for other data filenames; it works for DWIs,
|
||||||
|
* but not KSFs and BMSs.
|
||||||
|
*
|
||||||
|
* So, let's do this (by priority):
|
||||||
|
* 1. If there's an .SM file, use that filename. No reason to use anything
|
||||||
|
* else; it's the filename in use.
|
||||||
|
* 2. If there's a .DWI, use it with a changed extension.
|
||||||
|
* 3. Otherwise, use the name of the directory, since it's definitely a valid
|
||||||
|
* filename, and should always be the title of the song (unlike KSFs).
|
||||||
|
*/
|
||||||
|
m_sSongFileName = m_sSongDir;
|
||||||
|
CStringArray asFileNames;
|
||||||
|
GetDirListing( m_sSongDir+"*.sm", asFileNames );
|
||||||
|
if( !asFileNames.empty() )
|
||||||
|
m_sSongFileName += asFileNames[0];
|
||||||
|
else {
|
||||||
|
GetDirListing( m_sSongDir+"*.dwi", asFileNames );
|
||||||
|
if( !asFileNames.empty() ) {
|
||||||
|
m_sSongFileName += SetExtension( asFileNames[0], "sm" );
|
||||||
|
} else {
|
||||||
|
m_sSongFileName += Basename(m_sSongDir);
|
||||||
|
m_sSongFileName += ".sm";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Compress all Steps
|
// Compress all Steps
|
||||||
for( i=0; i<m_apNotes.size(); i++ )
|
for( i=0; i<m_apNotes.size(); i++ )
|
||||||
|
|||||||
Reference in New Issue
Block a user