diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 1026e13f5a..f136f2d90f 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -215,6 +215,8 @@ void GameState::EndGame() pPlayerProfile->m_iNumSongsPlayedByMeter[ss.iMeter[p]]++; } } + + MEMCARDMAN->FlushAllDisks(); } BOOKKEEPER->WriteToDisk(); diff --git a/stepmania/src/MemoryCardManager.cpp b/stepmania/src/MemoryCardManager.cpp index 5f012d9fac..eeb18db10b 100644 --- a/stepmania/src/MemoryCardManager.cpp +++ b/stepmania/src/MemoryCardManager.cpp @@ -206,4 +206,16 @@ match: m_soundReady.Play(); } } -} \ No newline at end of file +} + +void MemoryCardManager::FlushAllDisks() +{ + for( int p=0; pFlush(&m_Device[p]); + } +} diff --git a/stepmania/src/MemoryCardManager.h b/stepmania/src/MemoryCardManager.h index 35746ee682..c644350af6 100644 --- a/stepmania/src/MemoryCardManager.h +++ b/stepmania/src/MemoryCardManager.h @@ -28,6 +28,8 @@ public: CString GetOsMountDir( PlayerNumber pn ); // only valid when ready void LockCards( bool bLock ); // prevent removing or changing of memory cards + + void FlushAllDisks(); // force all files to be written to mounted memory cards protected: void AssignUnassignedCards(); // do our best to assign a Device to each player diff --git a/stepmania/src/ModeChoice.cpp b/stepmania/src/ModeChoice.cpp index 3dc8e73ada..17ec31d7e9 100644 --- a/stepmania/src/ModeChoice.cpp +++ b/stepmania/src/ModeChoice.cpp @@ -288,8 +288,8 @@ void ModeChoice::Apply( PlayerNumber pn ) const // if( m_style != STYLE_INVALID ) { - PROFILEMAN->LoadFirstAvailableProfile( pn ); MEMCARDMAN->LockCards( true ); + PROFILEMAN->LoadFirstAvailableProfile( pn ); } } diff --git a/stepmania/src/ProfileManager.cpp b/stepmania/src/ProfileManager.cpp index 6a089eb289..8afe4c5972 100644 --- a/stepmania/src/ProfileManager.cpp +++ b/stepmania/src/ProfileManager.cpp @@ -30,6 +30,7 @@ #include "ThemeManager.h" #include "Bookkeeper.h" #include +#include "MemoryCardManager.h" ProfileManager* PROFILEMAN = NULL; // global and accessable from anywhere in our program @@ -56,7 +57,7 @@ const int COURSE_SCORES_VERSION = 8; #define STATS_TITLE THEME->GetMetric("ProfileManager","StatsTitle") -static const char *MemCardDirs[NUM_PLAYERS] = +static const char *MEM_CARD_DIR[NUM_PLAYERS] = { /* @ is important; see RageFileManager LoadedDriver::GetPath */ "@mc1/", @@ -68,9 +69,6 @@ ProfileManager::ProfileManager() for( int p=0; pm_sMemoryCardDir[p] != "" ) - FILEMAN->Mount( "dir", PREFSMAN->m_sMemoryCardDir[p], MemCardDirs[p] ); } InitMachineScoresFromDisk(); @@ -161,14 +159,9 @@ bool ProfileManager::LoadDefaultProfileFromMachine( PlayerNumber pn ) return LoadProfile( pn, sDir, false ); } -bool ProfileManager::IsMemoryCardInserted( PlayerNumber pn ) -{ - return FILEMAN->MountpointIsReady( MemCardDirs[pn] ); -} - bool ProfileManager::LoadProfileFromMemoryCard( PlayerNumber pn ) { - CString sDir = MemCardDirs[pn]; + CString sDir = MEM_CARD_DIR[pn]; if( !FILEMAN->IsMounted(sDir) ) return false; @@ -182,15 +175,14 @@ bool ProfileManager::LoadFirstAvailableProfile( PlayerNumber pn ) { #ifndef _XBOX // mount card -// if( !PREFSMAN->m_sMemoryCardMountCommand[pn].empty() ) -// system( PREFSMAN->m_sMemoryCardMountCommand[pn] ); - - if( IsMemoryCardInserted(pn) ) + if( MEMCARDMAN->GetCardState(pn) == MEMORY_CARD_STATE_READY ) { + FILEMAN->Mount( "dir", MEMCARDMAN->GetOsMountDir(pn), MEM_CARD_DIR[pn] ); + if( LoadProfileFromMemoryCard(pn) ) return true; - CString sDir = MemCardDirs[pn]; + CString sDir = MEM_CARD_DIR[pn]; CreateProfile( sDir, NEW_MEM_CARD_NAME ); if( LoadProfileFromMemoryCard(pn) ) return true; diff --git a/stepmania/src/ProfileManager.h b/stepmania/src/ProfileManager.h index ec02e63884..48d2b6e1d8 100644 --- a/stepmania/src/ProfileManager.h +++ b/stepmania/src/ProfileManager.h @@ -68,13 +68,10 @@ public: bool RenameLocalProfile( CString sProfileID, CString sNewName ); bool DeleteLocalProfile( CString sProfileID ); - bool CreateMemoryCardProfile( CString sName ); - void GetLocalProfileIDs( vector &asProfileIDsOut ); void GetLocalProfileNames( vector &asNamesOut ); bool LoadFirstAvailableProfile( PlayerNumber pn ); - bool IsMemoryCardInserted( PlayerNumber pn ); bool SaveProfile( PlayerNumber pn ); void UnloadProfile( PlayerNumber pn ); diff --git a/stepmania/src/ScreenManager.cpp b/stepmania/src/ScreenManager.cpp index 98f18dd10a..d2fe3a6bb3 100644 --- a/stepmania/src/ScreenManager.cpp +++ b/stepmania/src/ScreenManager.cpp @@ -210,7 +210,7 @@ void ScreenSystemLayer::RefreshCreditsMessages() } else if( GAMESTATE->m_bIsOnSystemMenu ) // no mem card sPlayerInfo = ""; - else if( PREFSMAN->m_sMemoryCardDir[p]!="" ) + else { if( GAMESTATE->PlayersCanJoin() ) sPlayerInfo = PLAYER_INFO_INSERT_CARD; diff --git a/stepmania/src/arch/MemoryCard/MemoryCardDriver.h b/stepmania/src/arch/MemoryCard/MemoryCardDriver.h index b85a575907..500350c618 100644 --- a/stepmania/src/arch/MemoryCard/MemoryCardDriver.h +++ b/stepmania/src/arch/MemoryCard/MemoryCardDriver.h @@ -45,7 +45,7 @@ public: virtual bool StorageDevicesChanged() = 0; virtual void GetStorageDevices( vector& vStorageDevicesOut ) = 0; virtual bool MountAndTestWrite( UsbStorageDevice* pDevice ) = 0; // return false if mount or write fails - virtual void Unmount( UsbStorageDevice* pDevice ) = 0; + virtual void Flush( UsbStorageDevice* pDevice ) = 0; }; #endif diff --git a/stepmania/src/arch/MemoryCard/MemoryCardDriver_Windows.cpp b/stepmania/src/arch/MemoryCard/MemoryCardDriver_Windows.cpp index 6fa3a396a0..830abfac58 100644 --- a/stepmania/src/arch/MemoryCard/MemoryCardDriver_Windows.cpp +++ b/stepmania/src/arch/MemoryCard/MemoryCardDriver_Windows.cpp @@ -84,10 +84,11 @@ bool MemoryCardDriver_Windows::MountAndTestWrite( UsbStorageDevice* pDevice ) return true; } -void MemoryCardDriver_Windows::Unmount( UsbStorageDevice* pDevice ) +void MemoryCardDriver_Windows::Flush( UsbStorageDevice* pDevice ) { // Do we need anything here? I don't lose data if ejecting - // soon after a write... -Chris + // soon after a write. From the activity LED, it looks like + // Windows flushes automatically every ~2 seconds. -Chris } /* diff --git a/stepmania/src/arch/MemoryCard/MemoryCardDriver_Windows.h b/stepmania/src/arch/MemoryCard/MemoryCardDriver_Windows.h index 17c017611f..776ae09e45 100644 --- a/stepmania/src/arch/MemoryCard/MemoryCardDriver_Windows.h +++ b/stepmania/src/arch/MemoryCard/MemoryCardDriver_Windows.h @@ -12,7 +12,7 @@ public: virtual bool StorageDevicesChanged(); virtual void GetStorageDevices( vector& vStorageDevicesOut ); virtual bool MountAndTestWrite( UsbStorageDevice* pDevice ); - virtual void Unmount( UsbStorageDevice* pDevice ); + virtual void Flush( UsbStorageDevice* pDevice ); protected: DWORD m_dwLastLogicalDrives; };