mirror of https://github.com/PCSX2/pcsx2.git
Add option to enable/disable the filtering of the FolderMemoryCard.
This commit is contained in:
parent
72dcb9b94c
commit
f40b679653
|
@ -441,6 +441,7 @@ struct Pcsx2Config
|
||||||
BackupSavestate :1,
|
BackupSavestate :1,
|
||||||
// enables simulated ejection of memory cards when loading savestates
|
// enables simulated ejection of memory cards when loading savestates
|
||||||
McdEnableEjection :1,
|
McdEnableEjection :1,
|
||||||
|
McdFolderAutoManage :1,
|
||||||
|
|
||||||
MultitapPort0_Enabled:1,
|
MultitapPort0_Enabled:1,
|
||||||
MultitapPort1_Enabled:1,
|
MultitapPort1_Enabled:1,
|
||||||
|
|
|
@ -398,6 +398,7 @@ Pcsx2Config::Pcsx2Config()
|
||||||
bitset = 0;
|
bitset = 0;
|
||||||
// Set defaults for fresh installs / reset settings
|
// Set defaults for fresh installs / reset settings
|
||||||
McdEnableEjection = true;
|
McdEnableEjection = true;
|
||||||
|
McdFolderAutoManage = true;
|
||||||
EnablePatches = true;
|
EnablePatches = true;
|
||||||
BackupSavestate = true;
|
BackupSavestate = true;
|
||||||
}
|
}
|
||||||
|
@ -417,6 +418,7 @@ void Pcsx2Config::LoadSave( IniInterface& ini )
|
||||||
|
|
||||||
IniBitBool( BackupSavestate );
|
IniBitBool( BackupSavestate );
|
||||||
IniBitBool( McdEnableEjection );
|
IniBitBool( McdEnableEjection );
|
||||||
|
IniBitBool( McdFolderAutoManage );
|
||||||
IniBitBool( MultitapPort0_Enabled );
|
IniBitBool( MultitapPort0_Enabled );
|
||||||
IniBitBool( MultitapPort1_Enabled );
|
IniBitBool( MultitapPort1_Enabled );
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,12 @@ Panels::McdConfigPanel_Toggles::McdConfigPanel_Toggles(wxWindow *parent)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
m_folderAutoIndex = new pxCheckBox( this,
|
||||||
|
_( "Automatically manage saves based on running game" ),
|
||||||
|
pxE( L"(Folder type only) Re-index memory card content every time the running software changes. This prevents the memory card from running out of space for saves."
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
//m_check_SavestateBackup = new pxCheckBox( this, pxsFmt(_("Backup existing Savestate when creating a new one")) );
|
//m_check_SavestateBackup = new pxCheckBox( this, pxsFmt(_("Backup existing Savestate when creating a new one")) );
|
||||||
/*
|
/*
|
||||||
for( uint i=0; i<2; ++i )
|
for( uint i=0; i<2; ++i )
|
||||||
|
@ -64,6 +70,7 @@ Panels::McdConfigPanel_Toggles::McdConfigPanel_Toggles(wxWindow *parent)
|
||||||
*this += new wxStaticLine( this ) | StdExpand();
|
*this += new wxStaticLine( this ) | StdExpand();
|
||||||
|
|
||||||
*this += m_check_Ejection;
|
*this += m_check_Ejection;
|
||||||
|
*this += m_folderAutoIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Panels::McdConfigPanel_Toggles::Apply()
|
void Panels::McdConfigPanel_Toggles::Apply()
|
||||||
|
@ -73,6 +80,7 @@ void Panels::McdConfigPanel_Toggles::Apply()
|
||||||
|
|
||||||
//g_Conf->EmuOptions.BackupSavestate = m_check_SavestateBackup->GetValue();
|
//g_Conf->EmuOptions.BackupSavestate = m_check_SavestateBackup->GetValue();
|
||||||
g_Conf->EmuOptions.McdEnableEjection = m_check_Ejection->GetValue();
|
g_Conf->EmuOptions.McdEnableEjection = m_check_Ejection->GetValue();
|
||||||
|
g_Conf->EmuOptions.McdFolderAutoManage = m_folderAutoIndex->GetValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Panels::McdConfigPanel_Toggles::AppStatusEvent_OnSettingsApplied()
|
void Panels::McdConfigPanel_Toggles::AppStatusEvent_OnSettingsApplied()
|
||||||
|
@ -82,6 +90,7 @@ void Panels::McdConfigPanel_Toggles::AppStatusEvent_OnSettingsApplied()
|
||||||
|
|
||||||
//m_check_SavestateBackup ->SetValue( g_Conf->EmuOptions.BackupSavestate );
|
//m_check_SavestateBackup ->SetValue( g_Conf->EmuOptions.BackupSavestate );
|
||||||
m_check_Ejection ->SetValue( g_Conf->EmuOptions.McdEnableEjection );
|
m_check_Ejection ->SetValue( g_Conf->EmuOptions.McdEnableEjection );
|
||||||
|
m_folderAutoIndex ->SetValue( g_Conf->EmuOptions.McdFolderAutoManage );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -436,6 +436,7 @@ uint FileMcd_ConvertToSlot( uint port, uint slot )
|
||||||
static void PS2E_CALLBACK FileMcd_EmuOpen( PS2E_THISPTR thisptr, const PS2E_SessionInfo *session )
|
static void PS2E_CALLBACK FileMcd_EmuOpen( PS2E_THISPTR thisptr, const PS2E_SessionInfo *session )
|
||||||
{
|
{
|
||||||
thisptr->impl.Open();
|
thisptr->impl.Open();
|
||||||
|
thisptr->implFolder.SetFiltering( g_Conf->EmuOptions.McdFolderAutoManage );
|
||||||
thisptr->implFolder.Open();
|
thisptr->implFolder.Open();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -559,7 +560,7 @@ static void PS2E_CALLBACK FileMcd_ReIndex( PS2E_THISPTR thisptr, uint port, uint
|
||||||
// thisptr->impl.ReIndex( combinedSlot, filter );
|
// thisptr->impl.ReIndex( combinedSlot, filter );
|
||||||
// break;
|
// break;
|
||||||
case MemoryCardType::MemoryCard_Folder:
|
case MemoryCardType::MemoryCard_Folder:
|
||||||
thisptr->implFolder.ReIndex( combinedSlot, filter );
|
thisptr->implFolder.ReIndex( combinedSlot, g_Conf->EmuOptions.McdFolderAutoManage, filter );
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -46,11 +46,7 @@ bool FolderMemoryCard::IsFormatted() {
|
||||||
return m_superBlock.raw[0x16] == 0x6F;
|
return m_superBlock.raw[0x16] == 0x6F;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FolderMemoryCard::Open() {
|
void FolderMemoryCard::Open( const bool enableFiltering, const wxString& filter ) {
|
||||||
Open( L"" );
|
|
||||||
}
|
|
||||||
|
|
||||||
void FolderMemoryCard::Open( const wxString& filter ) {
|
|
||||||
InitializeInternalData();
|
InitializeInternalData();
|
||||||
|
|
||||||
wxFileName configuredFileName( g_Conf->FullpathToMcd( m_slot ) );
|
wxFileName configuredFileName( g_Conf->FullpathToMcd( m_slot ) );
|
||||||
|
@ -84,7 +80,7 @@ void FolderMemoryCard::Open( const wxString& filter ) {
|
||||||
if ( disabled ) return;
|
if ( disabled ) return;
|
||||||
|
|
||||||
m_isEnabled = true;
|
m_isEnabled = true;
|
||||||
LoadMemoryCardData( filter );
|
LoadMemoryCardData( enableFiltering, filter );
|
||||||
|
|
||||||
SetTimeLastWrittenToNow();
|
SetTimeLastWrittenToNow();
|
||||||
m_framesUntilFlush = 0;
|
m_framesUntilFlush = 0;
|
||||||
|
@ -102,7 +98,7 @@ void FolderMemoryCard::Close() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FolderMemoryCard::LoadMemoryCardData( const wxString& filter ) {
|
void FolderMemoryCard::LoadMemoryCardData( const bool enableFiltering, const wxString& filter ) {
|
||||||
bool formatted = false;
|
bool formatted = false;
|
||||||
|
|
||||||
// read superblock if it exists
|
// read superblock if it exists
|
||||||
|
@ -116,10 +112,16 @@ void FolderMemoryCard::LoadMemoryCardData( const wxString& filter ) {
|
||||||
|
|
||||||
// if superblock was valid, load folders and files
|
// if superblock was valid, load folders and files
|
||||||
if ( formatted ) {
|
if ( formatted ) {
|
||||||
|
if ( enableFiltering ) {
|
||||||
|
Console.WriteLn( Color_Green, L"(FolderMcd) Indexing slot %u with filter \"%s\".", m_slot, WX_STR( filter ) );
|
||||||
|
} else {
|
||||||
|
Console.WriteLn( Color_Green, L"(FolderMcd) Indexing slot %u without filter.", m_slot );
|
||||||
|
}
|
||||||
|
|
||||||
CreateFat();
|
CreateFat();
|
||||||
CreateRootDir();
|
CreateRootDir();
|
||||||
MemoryCardFileEntry* const rootDirEntry = &m_fileEntryDict[m_superBlock.data.rootdir_cluster].entries[0];
|
MemoryCardFileEntry* const rootDirEntry = &m_fileEntryDict[m_superBlock.data.rootdir_cluster].entries[0];
|
||||||
AddFolder( rootDirEntry, folderName.GetPath(), filter );
|
AddFolder( rootDirEntry, folderName.GetPath(), enableFiltering, filter );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,7 +286,7 @@ bool FilterMatches( const wxString& fileName, const wxString& filter ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FolderMemoryCard::AddFolder( MemoryCardFileEntry* const dirEntry, const wxString& dirPath, const wxString& filter ) {
|
bool FolderMemoryCard::AddFolder( MemoryCardFileEntry* const dirEntry, const wxString& dirPath, const bool enableFiltering, const wxString& filter ) {
|
||||||
wxDir dir( dirPath );
|
wxDir dir( dirPath );
|
||||||
if ( dir.IsOpened() ) {
|
if ( dir.IsOpened() ) {
|
||||||
Console.WriteLn( L"(FolderMcd) Adding folder: %s", WX_STR( dirPath ) );
|
Console.WriteLn( L"(FolderMcd) Adding folder: %s", WX_STR( dirPath ) );
|
||||||
|
@ -295,11 +297,13 @@ bool FolderMemoryCard::AddFolder( MemoryCardFileEntry* const dirEntry, const wxS
|
||||||
bool hasNext;
|
bool hasNext;
|
||||||
|
|
||||||
wxString localFilter;
|
wxString localFilter;
|
||||||
bool hasFilter = !filter.IsEmpty();
|
if ( enableFiltering ) {
|
||||||
if ( hasFilter ) {
|
bool hasFilter = !filter.IsEmpty();
|
||||||
localFilter = L"DATA-SYSTEM/" + filter;
|
if ( hasFilter ) {
|
||||||
} else {
|
localFilter = L"DATA-SYSTEM/" + filter;
|
||||||
localFilter = L"DATA-SYSTEM";
|
} else {
|
||||||
|
localFilter = L"DATA-SYSTEM";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int entryNumber = 2; // include . and ..
|
int entryNumber = 2; // include . and ..
|
||||||
|
@ -321,7 +325,7 @@ bool FolderMemoryCard::AddFolder( MemoryCardFileEntry* const dirEntry, const wxS
|
||||||
// if possible filter added directories by game serial
|
// if possible filter added directories by game serial
|
||||||
// this has the effective result of only files relevant to the current game being loaded into the memory card
|
// this has the effective result of only files relevant to the current game being loaded into the memory card
|
||||||
// which means every game essentially sees the memory card as if no other files exist
|
// which means every game essentially sees the memory card as if no other files exist
|
||||||
if ( !FilterMatches( fileName, localFilter ) ) {
|
if ( enableFiltering && !FilterMatches( fileName, localFilter ) ) {
|
||||||
hasNext = dir.GetNext( &fileName );
|
hasNext = dir.GetNext( &fileName );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -1027,7 +1031,7 @@ FolderMemoryCardAggregator::FolderMemoryCardAggregator() {
|
||||||
|
|
||||||
void FolderMemoryCardAggregator::Open() {
|
void FolderMemoryCardAggregator::Open() {
|
||||||
for ( int i = 0; i < totalCardSlots; ++i ) {
|
for ( int i = 0; i < totalCardSlots; ++i ) {
|
||||||
m_cards[i].Open( m_lastKnownFilter );
|
m_cards[i].Open( m_enableFiltering, m_lastKnownFilter );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1037,6 +1041,10 @@ void FolderMemoryCardAggregator::Close() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FolderMemoryCardAggregator::SetFiltering( const bool enableFiltering ) {
|
||||||
|
m_enableFiltering = enableFiltering;
|
||||||
|
}
|
||||||
|
|
||||||
s32 FolderMemoryCardAggregator::IsPresent( uint slot ) {
|
s32 FolderMemoryCardAggregator::IsPresent( uint slot ) {
|
||||||
return m_cards[slot].IsPresent();
|
return m_cards[slot].IsPresent();
|
||||||
}
|
}
|
||||||
|
@ -1069,10 +1077,11 @@ void FolderMemoryCardAggregator::NextFrame( uint slot ) {
|
||||||
m_cards[slot].NextFrame();
|
m_cards[slot].NextFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FolderMemoryCardAggregator::ReIndex( uint slot, const wxString& filter ) {
|
void FolderMemoryCardAggregator::ReIndex( uint slot, const bool enableFiltering, const wxString& filter ) {
|
||||||
m_cards[slot].Close();
|
m_cards[slot].Close();
|
||||||
Console.WriteLn( Color_Green, L"(FolderMcd) Re-Indexing slot %u with filter \"%s\"", slot, WX_STR( filter ) );
|
m_cards[slot].Open( enableFiltering, filter );
|
||||||
m_cards[slot].Open( filter );
|
|
||||||
|
SetFiltering( enableFiltering );
|
||||||
m_lastKnownFilter = filter;
|
m_lastKnownFilter = filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -168,8 +168,7 @@ public:
|
||||||
void Lock();
|
void Lock();
|
||||||
void Unlock();
|
void Unlock();
|
||||||
|
|
||||||
void Open();
|
void Open( const bool enableFiltering, const wxString& filter );
|
||||||
void Open( const wxString& filter );
|
|
||||||
void Close();
|
void Close();
|
||||||
|
|
||||||
s32 IsPresent();
|
s32 IsPresent();
|
||||||
|
@ -220,7 +219,9 @@ protected:
|
||||||
|
|
||||||
|
|
||||||
// loads files and folders from the host file system if a superblock exists in the root directory
|
// loads files and folders from the host file system if a superblock exists in the root directory
|
||||||
void LoadMemoryCardData( const wxString& filter );
|
// if enableFiltering is set to true, only folders whose name contain the filter string are loaded
|
||||||
|
// filter string can include multiple filters by separating them with "/"
|
||||||
|
void LoadMemoryCardData( const bool enableFiltering, const wxString& filter );
|
||||||
|
|
||||||
// creates the FAT and indirect FAT
|
// creates the FAT and indirect FAT
|
||||||
void CreateFat();
|
void CreateFat();
|
||||||
|
@ -253,7 +254,8 @@ protected:
|
||||||
// adds a folder in the host file system to the memory card, including all files and subdirectories
|
// adds a folder in the host file system to the memory card, including all files and subdirectories
|
||||||
// - dirEntry: the entry of the directory in the parent directory, or the root "." entry
|
// - dirEntry: the entry of the directory in the parent directory, or the root "." entry
|
||||||
// - dirPath: the full path to the directory in the host file system
|
// - dirPath: the full path to the directory in the host file system
|
||||||
bool AddFolder( MemoryCardFileEntry* const dirEntry, const wxString& dirPath, const wxString& filter = L"" );
|
// - enableFiltering and filter: filter loaded contents, see LoadMemoryCardData()
|
||||||
|
bool AddFolder( MemoryCardFileEntry* const dirEntry, const wxString& dirPath, const bool enableFiltering = false, const wxString& filter = L"" );
|
||||||
|
|
||||||
// adds a file in the host file sytem to the memory card
|
// adds a file in the host file sytem to the memory card
|
||||||
// - dirEntry: the entry of the directory in the parent directory, or the root "." entry
|
// - dirEntry: the entry of the directory in the parent directory, or the root "." entry
|
||||||
|
@ -298,6 +300,7 @@ class FolderMemoryCardAggregator {
|
||||||
protected:
|
protected:
|
||||||
static const int totalCardSlots = 8;
|
static const int totalCardSlots = 8;
|
||||||
FolderMemoryCard m_cards[totalCardSlots];
|
FolderMemoryCard m_cards[totalCardSlots];
|
||||||
|
bool m_enableFiltering = true;
|
||||||
wxString m_lastKnownFilter = L"";
|
wxString m_lastKnownFilter = L"";
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -307,6 +310,8 @@ public:
|
||||||
void Open();
|
void Open();
|
||||||
void Close();
|
void Close();
|
||||||
|
|
||||||
|
void SetFiltering( const bool enableFiltering );
|
||||||
|
|
||||||
s32 IsPresent( uint slot );
|
s32 IsPresent( uint slot );
|
||||||
void GetSizeInfo( uint slot, PS2E_McdSizeInfo& outways );
|
void GetSizeInfo( uint slot, PS2E_McdSizeInfo& outways );
|
||||||
bool IsPSX( uint slot );
|
bool IsPSX( uint slot );
|
||||||
|
@ -315,5 +320,5 @@ public:
|
||||||
s32 EraseBlock( uint slot, u32 adr );
|
s32 EraseBlock( uint slot, u32 adr );
|
||||||
u64 GetCRC( uint slot );
|
u64 GetCRC( uint slot );
|
||||||
void NextFrame( uint slot );
|
void NextFrame( uint slot );
|
||||||
void ReIndex( uint slot, const wxString& filter );
|
void ReIndex( uint slot, const bool enableFiltering, const wxString& filter );
|
||||||
};
|
};
|
||||||
|
|
|
@ -285,6 +285,7 @@ namespace Panels
|
||||||
protected:
|
protected:
|
||||||
//pxCheckBox* m_check_Multitap[2];
|
//pxCheckBox* m_check_Multitap[2];
|
||||||
pxCheckBox* m_check_Ejection;
|
pxCheckBox* m_check_Ejection;
|
||||||
|
pxCheckBox* m_folderAutoIndex;
|
||||||
|
|
||||||
//moved to the system menu, just below "Save State"
|
//moved to the system menu, just below "Save State"
|
||||||
//pxCheckBox* m_check_SavestateBackup;
|
//pxCheckBox* m_check_SavestateBackup;
|
||||||
|
|
Loading…
Reference in New Issue