diff --git a/stepmania/src/MemoryCardManager.cpp b/stepmania/src/MemoryCardManager.cpp index e3fe73e8f9..e4a123ee8a 100644 --- a/stepmania/src/MemoryCardManager.cpp +++ b/stepmania/src/MemoryCardManager.cpp @@ -217,13 +217,23 @@ void MemoryCardManager::LockCards( bool bLock ) } } - if( !bWasLocked && bLock ) m_pDriver->SetMountThreadState( MemoryCardDriver::detect_and_dont_mount ); else m_pDriver->SetMountThreadState( MemoryCardDriver::detect_and_mount ); } +void MemoryCardManager::MountAllCards() +{ + FOREACH_PlayerNumber( p ) + { + if( m_Device[p].IsBlank() ) // they don't have an assigned card + continue; + + m_pDriver->MountAndTestWrite(&m_Device[p], MEM_CARD_MOUNT_POINT[p]); + } +} + void MemoryCardManager::FlushAndReset() { FOREACH_PlayerNumber( p ) diff --git a/stepmania/src/MemoryCardManager.h b/stepmania/src/MemoryCardManager.h index 0fd92289cb..ca98bb77c5 100644 --- a/stepmania/src/MemoryCardManager.h +++ b/stepmania/src/MemoryCardManager.h @@ -27,6 +27,7 @@ public: // CString GetOsMountDir( PlayerNumber pn ); // only valid when state = ready void LockCards( bool bLock ); // prevent removing or changing of memory cards + void MountAllCards(); void PauseMountingThread(); // call this before reading or writing to memory card void UnPauseMountingThread(); // call this when done reading or writing to memory card diff --git a/stepmania/src/Profile.cpp b/stepmania/src/Profile.cpp index 502cd653de..1516e25101 100644 --- a/stepmania/src/Profile.cpp +++ b/stepmania/src/Profile.cpp @@ -653,41 +653,39 @@ bool Profile::SaveAllToDir( CString sDir, bool bSignData ) const SaveEditableDataToDir( sDir ); // Save stats.xml + CString fn = sDir + STATS_XML; + + XNode xml; + xml.name = "Stats"; + xml.AppendChild( SaveGeneralDataCreateNode() ); + xml.AppendChild( SaveSongScoresCreateNode() ); + xml.AppendChild( SaveCourseScoresCreateNode() ); + xml.AppendChild( SaveCategoryScoresCreateNode() ); + xml.AppendChild( SaveScreenshotDataCreateNode() ); + xml.AppendChild( SaveCalorieDataCreateNode() ); + xml.AppendChild( SaveRecentSongScoresCreateNode() ); + xml.AppendChild( SaveRecentCourseScoresCreateNode() ); + if( IsMachine() ) + xml.AppendChild( SaveCoinDataCreateNode() ); + + DISP_OPT opts = optDefault; + opts.stylesheet = STATS_XSL; + bool bSaved = xml.SaveToFile(fn, &opts); + + // Update file cache, or else IsAFile in CryptManager won't see this new file. + FILEMAN->FlushDirCache( sDir ); + + if( bSaved && bSignData ) { - CString fn = sDir + STATS_XML; + CString sStatsXmlSigFile = fn+SIGNATURE_APPEND; + CryptManager::SignFileToFile(fn, sStatsXmlSigFile); - XNode xml; - xml.name = "Stats"; - xml.AppendChild( SaveGeneralDataCreateNode() ); - xml.AppendChild( SaveSongScoresCreateNode() ); - xml.AppendChild( SaveCourseScoresCreateNode() ); - xml.AppendChild( SaveCategoryScoresCreateNode() ); - xml.AppendChild( SaveScreenshotDataCreateNode() ); - xml.AppendChild( SaveCalorieDataCreateNode() ); - xml.AppendChild( SaveRecentSongScoresCreateNode() ); - xml.AppendChild( SaveRecentCourseScoresCreateNode() ); - if( IsMachine() ) - xml.AppendChild( SaveCoinDataCreateNode() ); - - DISP_OPT opts = optDefault; - opts.stylesheet = STATS_XSL; - bool bSaved = xml.SaveToFile(fn, &opts); - - // Update file cache, or else IsAFile in CryptManager won't see this new file. + // Update file cache, or else IsAFile in CryptManager won't see sStatsXmlSigFile. FILEMAN->FlushDirCache( sDir ); - - if( bSaved && bSignData ) - { - CString sStatsXmlSigFile = fn+SIGNATURE_APPEND; - CryptManager::SignFileToFile(fn, sStatsXmlSigFile); - // Update file cache, or else IsAFile in CryptManager won't see sStatsXmlSigFile. - FILEMAN->FlushDirCache( sDir ); - - // Save the "don't share" file - CString sDontShareFile = sDir + DONT_SHARE_SIG; - CryptManager::SignFileToFile(sStatsXmlSigFile, sDontShareFile); - } + // Save the "don't share" file + CString sDontShareFile = sDir + DONT_SHARE_SIG; + CryptManager::SignFileToFile(sStatsXmlSigFile, sDontShareFile); } SaveStatsWebPageToDir( sDir ); @@ -696,7 +694,7 @@ bool Profile::SaveAllToDir( CString sDir, bool bSignData ) const FILEMAN->CreateDir( sDir + EDITS_SUBDIR ); FILEMAN->CreateDir( sDir + SCREENSHOTS_SUBDIR ); - return true; + return bSaved; } void Profile::SaveEditableDataToDir( CString sDir ) const diff --git a/stepmania/src/ScreenDownloadMachineStats.cpp b/stepmania/src/ScreenDownloadMachineStats.cpp index 506a7fe4ba..a9c6354441 100644 --- a/stepmania/src/ScreenDownloadMachineStats.cpp +++ b/stepmania/src/ScreenDownloadMachineStats.cpp @@ -10,6 +10,8 @@ static void SaveMachineStatsToFirstMemCard() { + MEMCARDMAN->MountAllCards(); + FOREACH_PlayerNumber( pn ) { if( MEMCARDMAN->GetCardState(pn) != MEMORY_CARD_STATE_READY ) @@ -19,9 +21,11 @@ static void SaveMachineStatsToFirstMemCard() sDir += "MachineProfile/"; - PROFILEMAN->GetMachineProfile()->SaveAllToDir( sDir, PREFSMAN->m_bSignProfileData ); - - SCREENMAN->SystemMessage( ssprintf("Machine stats saved to P%d card.",pn+1) ); + bool bSaved = PROFILEMAN->GetMachineProfile()->SaveAllToDir( sDir, PREFSMAN->m_bSignProfileData ); + if( bSaved ) + SCREENMAN->SystemMessage( ssprintf("Machine stats saved to P%d card.",pn+1) ); + else + SCREENMAN->SystemMessage( ssprintf("Error saving stats to P%d card.",pn+1) ); return; }