From 299e1f7d68152568847b30a155d4fe26c05084e9 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sun, 27 Nov 2005 01:50:10 +0000 Subject: [PATCH] add memcard blacklist by OsMountDir and UI to disable specific drives --- stepmania/src/MemoryCardManager.cpp | 63 ++++++++----------- stepmania/src/MemoryCardManager.h | 8 ++- stepmania/src/OptionRow.h | 6 +- stepmania/src/PrefsManager.cpp | 2 +- .../src/arch/MemoryCard/MemoryCardDriver.h | 2 + .../MemoryCardDriverThreaded_Windows.cpp | 10 ++- 6 files changed, 45 insertions(+), 46 deletions(-) diff --git a/stepmania/src/MemoryCardManager.cpp b/stepmania/src/MemoryCardManager.cpp index 89d0f20bdb..362ecbafd6 100644 --- a/stepmania/src/MemoryCardManager.cpp +++ b/stepmania/src/MemoryCardManager.cpp @@ -49,6 +49,9 @@ Preference1D MemoryCardManager::m_iMemoryCardUsbBus( MemoryCardUsbBusInit, Preference1D MemoryCardManager::m_iMemoryCardUsbPort( MemoryCardUsbPortInit, NUM_PLAYERS ); Preference1D MemoryCardManager::m_iMemoryCardUsbLevel( MemoryCardUsbLevelInit, NUM_PLAYERS ); +Preference MemoryCardManager::m_sMemoryCardOsMountPointBlacklist( "MemoryCardOsMountPointBlacklist", "" ); + + const CString MEM_CARD_MOUNT_POINT[NUM_PLAYERS] = { /* @ is importast; see RageFileManager LoadedDriver::GetPath */ @@ -324,50 +327,33 @@ MemoryCardManager::~MemoryCardManager() } } -void MemoryCardManager::Update( float fDelta ) +bool MemoryCardManager::IsBlacklisted( const UsbStorageDevice &dev ) const { - const vector vOld = m_vStorageDevices; // copy - if( !g_pWorker->StorageDevicesChanged( m_vStorageDevices ) ) - return; -/* const vector &vNew = m_vStorageDevices; + vector vsMemoryCardOsMountPointBlacklist; + split( m_sMemoryCardOsMountPointBlacklist, ",", vsMemoryCardOsMountPointBlacklist ); - vector vConnects; // fill these in below - vector vDisconnects; // fill these in below + bool bBlacklisted = find( vsMemoryCardOsMountPointBlacklist.begin(), vsMemoryCardOsMountPointBlacklist.end(), dev.sOsMountDir ) != vsMemoryCardOsMountPointBlacklist.end(); + return bBlacklisted; +} + +void MemoryCardManager::Update( float fDelta, bool bForceUpdate ) +{ + vector vOld; - // check for disconnects - FOREACH_CONST( UsbStorageDevice, vOld, old ) + if( bForceUpdate ) { - vector::const_iterator iter = find( vNew.begin(), vNew.end(), *old ); - if( iter == vNew.end() ) // card no longer present - { - LOG->Trace( "Disconnected bus %d port %d device %d path %s", old->iBus, old->iPort, old->iLevel, old->sOsMountDir.c_str() ); - vDisconnects.push_back( *old ); - } + // force a redetect on the next update + FOREACH_PlayerNumber( p ) + m_Device[p].MakeBlank(); + // leave vOld empty } - - // check for connects - FOREACH_CONST( UsbStorageDevice, vNew, newd ) + else { - vector::const_iterator iter = find( vOld.begin(), vOld.end(), *newd ); - if( iter == vOld.end() ) // card wasn't present last update - { - LOG->Trace( "Connected bus %d port %d device %d path %s", newd->iBus, newd->iPort, newd->iLevel, newd->sOsMountDir.c_str() ); - vConnects.push_back( *newd ); - } + vOld = m_vStorageDevices; // copy + if( !g_pWorker->StorageDevicesChanged( m_vStorageDevices ) ) + return; } - - // unassign cards that were disconnected - FOREACH_PlayerNumber( p ) - { - UsbStorageDevice &assigned_device = m_Device[p]; - if( assigned_device.IsBlank() ) // not assigned a card - continue; - - vector::iterator iter = find( vDisconnects.begin(), vDisconnects.end(), assigned_device ); - if( iter != vDisconnects.end() ) - assigned_device.MakeBlank(); - } -*/ + // make a list of unassigned vector vUnassignedDevices = m_vStorageDevices; // copy @@ -421,6 +407,9 @@ void MemoryCardManager::Update( float fDelta ) d->sOsMountDir.CompareNoCase(m_sMemoryCardOsMountPoint[p].Get()) ) continue; // not a match + if( IsBlacklisted(*d) ) + continue; + // search for USB bus match if( m_iMemoryCardUsbBus[p] != -1 && m_iMemoryCardUsbBus[p] != d->iBus ) diff --git a/stepmania/src/MemoryCardManager.h b/stepmania/src/MemoryCardManager.h index 86ad71b9cd..7ec49e52fb 100644 --- a/stepmania/src/MemoryCardManager.h +++ b/stepmania/src/MemoryCardManager.h @@ -16,7 +16,7 @@ public: MemoryCardManager(); ~MemoryCardManager(); - void Update( float fDelta ); + void Update( float fDelta, bool bForceUpdate = false ); MemoryCardState GetCardState( PlayerNumber pn ) const { return m_State[pn]; } CString GetCardError( PlayerNumber pn ) const { return m_sError[pn]; } @@ -39,17 +39,21 @@ public: bool IsNameAvailable( PlayerNumber pn ) const; CString GetName( PlayerNumber pn ) const; + const vector &GetStorageDevices() { return m_vStorageDevices; } + static Preference1D m_sMemoryCardOsMountPoint; static Preference1D m_iMemoryCardUsbBus; static Preference1D m_iMemoryCardUsbPort; static Preference1D m_iMemoryCardUsbLevel; + static Preference m_sMemoryCardOsMountPointBlacklist; + bool IsBlacklisted( const UsbStorageDevice &dev ) const; + protected: void CheckStateChanges(); vector m_vStorageDevices; // all currently connected - bool m_bCardsLocked; bool m_bMounted[NUM_PLAYERS]; // card is currently mounted diff --git a/stepmania/src/OptionRow.h b/stepmania/src/OptionRow.h index ba3b3dcf91..3e10af98a3 100644 --- a/stepmania/src/OptionRow.h +++ b/stepmania/src/OptionRow.h @@ -43,9 +43,9 @@ struct OptionRowDefinition vector m_vsChoices; set m_vEnabledForPlayers; // only players in this set may change focus to this row bool m_bExportOnChange; - bool m_bAllowThemeItems; // if false, ignores ScreenOptions::THEME_ITEMS - bool m_bAllowThemeTitles; // if false, ignores ScreenOptions::THEME_TITLES - bool m_bAllowExplanation; // if false, ignores ScreenOptions::SHOW_EXPLANATIONS + bool m_bAllowThemeItems; // if false, ignores ScreenOptions::THEME_ITEMS. Should be true for dynamic strings. + bool m_bAllowThemeTitles; // if false, ignores ScreenOptions::THEME_TITLES. Should be true for dynamic strings. + bool m_bAllowExplanation; // if false, ignores ScreenOptions::SHOW_EXPLANATIONS. Should be true for dynamic strings. bool m_bShowChoicesListOnSelect; bool IsEnabledForPlayer( PlayerNumber pn ) const diff --git a/stepmania/src/PrefsManager.cpp b/stepmania/src/PrefsManager.cpp index 66489e15e6..fb19e14ceb 100644 --- a/stepmania/src/PrefsManager.cpp +++ b/stepmania/src/PrefsManager.cpp @@ -327,7 +327,7 @@ PrefsManager::PrefsManager() : m_sLanguage ( "Language", "" ), // ThemeManager will deal with this invalid language m_sMemoryCardProfileSubdir ( "MemoryCardProfileSubdir", PRODUCT_NAME ), m_iProductID ( "ProductID", 1 ), - m_bMemoryCards ( "MemoryCards", false ), + m_bMemoryCards ( "MemoryCards", true ), m_iCenterImageTranslateX ( "CenterImageTranslateX", 0 ), m_iCenterImageTranslateY ( "CenterImageTranslateY", 0 ), m_fCenterImageAddWidth ( "CenterImageAddWidth", 0 ), diff --git a/stepmania/src/arch/MemoryCard/MemoryCardDriver.h b/stepmania/src/arch/MemoryCard/MemoryCardDriver.h index 58aa8029d3..be0bce1b66 100644 --- a/stepmania/src/arch/MemoryCard/MemoryCardDriver.h +++ b/stepmania/src/arch/MemoryCard/MemoryCardDriver.h @@ -21,6 +21,7 @@ struct UsbStorageDevice idProduct = 0; sVendor = ""; sProduct = ""; + sVolumeLabel = ""; }; int iBus; int iPort; @@ -58,6 +59,7 @@ struct UsbStorageDevice int idProduct; CString sVendor; CString sProduct; + CString sVolumeLabel; bool IsBlank() const { return m_State == STATE_NONE; } void SetOsMountDir( const CString &s ); diff --git a/stepmania/src/arch/MemoryCard/MemoryCardDriverThreaded_Windows.cpp b/stepmania/src/arch/MemoryCard/MemoryCardDriverThreaded_Windows.cpp index 5bbcd5a7d1..1424dbf0a9 100644 --- a/stepmania/src/arch/MemoryCard/MemoryCardDriverThreaded_Windows.cpp +++ b/stepmania/src/arch/MemoryCard/MemoryCardDriverThreaded_Windows.cpp @@ -19,7 +19,7 @@ MemoryCardDriverThreaded_Windows::~MemoryCardDriverThreaded_Windows() { } -static bool TestReady( const CString &sDrive ) +static bool TestReady( const CString &sDrive, CString &sVolumeLabelOut ) { TCHAR szVolumeNameBuffer[MAX_PATH]; DWORD dwVolumeSerialNumber; @@ -27,7 +27,7 @@ static bool TestReady( const CString &sDrive ) DWORD lpFileSystemFlags; TCHAR szFileSystemNameBuffer[MAX_PATH]; - return !!GetVolumeInformation( + bool bRet = !!GetVolumeInformation( sDrive, szVolumeNameBuffer, sizeof(szVolumeNameBuffer), @@ -36,6 +36,8 @@ static bool TestReady( const CString &sDrive ) &lpFileSystemFlags, szFileSystemNameBuffer, sizeof(szFileSystemNameBuffer) ); + sVolumeLabelOut = szVolumeNameBuffer; + return bRet; } static bool TestWrite( const CString &sDrive ) @@ -87,11 +89,13 @@ bool MemoryCardDriverThreaded_Windows::DoOneUpdate( bool bMount, vector