mirror of https://github.com/PCSX2/pcsx2.git
Several bugfixes for the new portable install mode.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4212 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
8a1e8958ed
commit
003c40d96a
|
@ -544,7 +544,7 @@ public:
|
||||||
bool TestUserPermissionsRights( const wxDirName& testFolder, wxString& createFailedStr, wxString& accessFailedStr );
|
bool TestUserPermissionsRights( const wxDirName& testFolder, wxString& createFailedStr, wxString& accessFailedStr );
|
||||||
void EstablishAppUserMode();
|
void EstablishAppUserMode();
|
||||||
|
|
||||||
wxConfigBase* ReadUserModeSettings();
|
wxConfigBase* OpenInstallSettingsFile();
|
||||||
wxConfigBase* TestForPortableInstall();
|
wxConfigBase* TestForPortableInstall();
|
||||||
|
|
||||||
bool HasPendingSaves() const;
|
bool HasPendingSaves() const;
|
||||||
|
|
|
@ -90,8 +90,24 @@ namespace PathDefs
|
||||||
// sub folder, in which case the approot will become "..")
|
// sub folder, in which case the approot will become "..")
|
||||||
const wxDirName& AppRoot()
|
const wxDirName& AppRoot()
|
||||||
{
|
{
|
||||||
static const wxDirName retval( L"." );
|
AffinityAssert_AllowFrom_MainUI();
|
||||||
return retval;
|
|
||||||
|
if (UserLocalDataMode == UserLocalFolder_System)
|
||||||
|
{
|
||||||
|
static const wxDirName cwdCache( (wxDirName)Path::Normalize(wxGetCwd()) );
|
||||||
|
return cwdCache;
|
||||||
|
}
|
||||||
|
else if (UserLocalDataMode == UserLocalFolder_Portable)
|
||||||
|
{
|
||||||
|
static const wxDirName appCache( (wxDirName)
|
||||||
|
wxFileName(wxStandardPaths::Get().GetExecutablePath()).GetPath() );
|
||||||
|
return appCache;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pxFail( "Unimplemented user local folder mode encountered." );
|
||||||
|
|
||||||
|
static const wxDirName dotFail(L".");
|
||||||
|
return dotFail;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Specifies the main configuration folder.
|
// Specifies the main configuration folder.
|
||||||
|
@ -415,10 +431,11 @@ void App_LoadSaveInstallSettings( IniInterface& ini )
|
||||||
L"Custom",
|
L"Custom",
|
||||||
};
|
};
|
||||||
|
|
||||||
ini.EnumEntry( L"DocumentsFolderMode", DocsFolderMode, DocsFolderModeNames, DocsFolder_User );
|
ini.EnumEntry( L"DocumentsFolderMode", DocsFolderMode, DocsFolderModeNames, (UserLocalDataMode == UserLocalFolder_System) ? DocsFolder_User : DocsFolder_Custom);
|
||||||
|
|
||||||
|
ini.Entry( L"CustomDocumentsFolder", CustomDocumentsFolder, PathDefs::AppRoot() );
|
||||||
|
|
||||||
ini.Entry( L"UseDefaultSettingsFolder", UseDefaultSettingsFolder, true );
|
ini.Entry( L"UseDefaultSettingsFolder", UseDefaultSettingsFolder, true );
|
||||||
ini.Entry( L"CustomDocumentsFolder", CustomDocumentsFolder, (wxDirName)Path::Normalize(wxGetCwd()) );
|
|
||||||
ini.Entry( L"SettingsFolder", SettingsFolder, PathDefs::GetSettings() );
|
ini.Entry( L"SettingsFolder", SettingsFolder, PathDefs::GetSettings() );
|
||||||
|
|
||||||
// "Install_Dir" conforms to the NSIS standard install directory key name.
|
// "Install_Dir" conforms to the NSIS standard install directory key name.
|
||||||
|
|
|
@ -67,6 +67,22 @@ extern wxString GetVmSettingsFilename();
|
||||||
extern wxString GetUiSettingsFilename();
|
extern wxString GetUiSettingsFilename();
|
||||||
extern wxDirName GetLogFolder();
|
extern wxDirName GetLogFolder();
|
||||||
|
|
||||||
|
enum UserLocalDataType
|
||||||
|
{
|
||||||
|
// Use the system defined user local data folder (typically an area outside the user's
|
||||||
|
// documents folder, but within user read/write permissions zoning; such that it does not
|
||||||
|
// clutter user document space).
|
||||||
|
UserLocalFolder_System,
|
||||||
|
|
||||||
|
// Uses the directory containing PCSX2.exe, or the current working directory (if the PCSX2
|
||||||
|
// directory could not be determined). This is considered 'portable' mode, and is typically
|
||||||
|
// detected by PCSX2 on application startup, by looking for a pcsx2_portable.ini file in
|
||||||
|
// said locations.
|
||||||
|
UserLocalFolder_Portable,
|
||||||
|
};
|
||||||
|
|
||||||
|
extern UserLocalDataType UserLocalDataMode;
|
||||||
|
|
||||||
enum AspectRatioType
|
enum AspectRatioType
|
||||||
{
|
{
|
||||||
AspectRatio_Stretch,
|
AspectRatio_Stretch,
|
||||||
|
|
|
@ -40,25 +40,11 @@ wxDirName InstallFolder;
|
||||||
wxDirName PluginsFolder;
|
wxDirName PluginsFolder;
|
||||||
wxDirName ThemesFolder;
|
wxDirName ThemesFolder;
|
||||||
|
|
||||||
enum UserLocalDataType
|
|
||||||
{
|
|
||||||
// Use the system defined user local data folder (typically an area outside the user's
|
|
||||||
// documents folder, but within user read/write permissions zoning; such that it does not
|
|
||||||
// clutter user document space).
|
|
||||||
UserLocalFolder_System,
|
|
||||||
|
|
||||||
// Uses the directory containing PCSX2.exe, or the current working directory (if the PCSX2
|
|
||||||
// directory could not be determined). This is considered 'portable' mode, and is typically
|
|
||||||
// detected by PCSX2 on application startup, by looking for a pcsx2_portable.ini file in
|
|
||||||
// said locations.
|
|
||||||
UserLocalFolder_Portable,
|
|
||||||
};
|
|
||||||
|
|
||||||
// The UserLocalData folder can be redefined depending on whether or not PCSX2 is in
|
// The UserLocalData folder can be redefined depending on whether or not PCSX2 is in
|
||||||
// "portable install" mode or not. when PCSX2 has been configured for portable install, the
|
// "portable install" mode or not. when PCSX2 has been configured for portable install, the
|
||||||
// UserLocalData folder is the current working directory.
|
// UserLocalData folder is the current working directory.
|
||||||
//
|
//
|
||||||
static UserLocalDataType UserLocalDataMode;
|
UserLocalDataType UserLocalDataMode;
|
||||||
|
|
||||||
static wxFileName GetPortableIniPath()
|
static wxFileName GetPortableIniPath()
|
||||||
{
|
{
|
||||||
|
@ -197,10 +183,12 @@ wxConfigBase* Pcsx2App::TestForPortableInstall()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Success -- all user-based folders have write access. PCSX2 should be
|
// Success -- all user-based folders have write access. PCSX2 should be able to run error-free!
|
||||||
// able to run error-free!
|
// Force-set the custom documents mode, and set the
|
||||||
|
|
||||||
UserLocalDataMode = UserLocalFolder_Portable;
|
UserLocalDataMode = UserLocalFolder_Portable;
|
||||||
|
DocsFolderMode = DocsFolder_Custom;
|
||||||
|
CustomDocumentsFolder = portableDocsFolder;
|
||||||
return conf_portable.DetachPtr();
|
return conf_portable.DetachPtr();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,28 +211,12 @@ void Pcsx2App::WipeUserModeSettings()
|
||||||
wxRemoveFile(portableIniFile.GetFullPath());
|
wxRemoveFile(portableIniFile.GetFullPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove the user-local ini entry conforming to this instance of PCSX2.
|
// Remove the app-local / registry entry conforming to this instance of PCSX2.
|
||||||
// Remove this regardless if PCSX2 is in portable mode, since otherwise these settings
|
// Remove this regardless if PCSX2 is in portable mode, since otherwise these settings
|
||||||
// would be used when the user restarts PCSX2, and that might be undesirable.
|
// would be used when the user restarts PCSX2, and that might be undesirable.
|
||||||
|
|
||||||
wxDirName usrlocaldir = PathDefs::GetUserLocalDataDir();
|
ScopedPtr<wxConfigBase> conf_install( OpenInstallSettingsFile() );
|
||||||
if( !usrlocaldir.Exists() ) return;
|
conf_install->DeleteEntry(L"RunWizard");
|
||||||
|
|
||||||
wxString cwd( Path::Normalize( wxGetCwd() ) );
|
|
||||||
#ifdef __WXMSW__
|
|
||||||
cwd.MakeLower();
|
|
||||||
#endif
|
|
||||||
u32 hashres = HashTools::Hash( (char*)cwd.c_str(), cwd.Length()*sizeof(wxChar) );
|
|
||||||
|
|
||||||
wxFileName usermodefile( FilenameDefs::GetUsermodeConfig() );
|
|
||||||
usermodefile.SetPath( usrlocaldir.ToString() );
|
|
||||||
ScopedPtr<wxFileConfig> conf_usermode( OpenFileConfig( usermodefile.GetFullPath() ) );
|
|
||||||
|
|
||||||
FastFormatUnicode groupname;
|
|
||||||
groupname.Write( L"CWD.%08x", hashres );
|
|
||||||
Console.WriteLn( "(UserMode) Removing entry:" );
|
|
||||||
Console.Indent().WriteLn( L"Path: %s\nHash:%s", cwd.c_str(), groupname.c_str() );
|
|
||||||
conf_usermode->DeleteGroup( groupname );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DoFirstTimeWizard()
|
static void DoFirstTimeWizard()
|
||||||
|
@ -264,7 +236,7 @@ static void DoFirstTimeWizard()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wxConfigBase* Pcsx2App::ReadUserModeSettings()
|
wxConfigBase* Pcsx2App::OpenInstallSettingsFile()
|
||||||
{
|
{
|
||||||
// Implementation Notes:
|
// Implementation Notes:
|
||||||
//
|
//
|
||||||
|
@ -304,7 +276,7 @@ void Pcsx2App::EstablishAppUserMode()
|
||||||
|
|
||||||
conf_install = TestForPortableInstall();
|
conf_install = TestForPortableInstall();
|
||||||
if (!conf_install)
|
if (!conf_install)
|
||||||
conf_install = ReadUserModeSettings();
|
conf_install = OpenInstallSettingsFile();
|
||||||
|
|
||||||
conf_install->SetRecordDefaults(false);
|
conf_install->SetRecordDefaults(false);
|
||||||
|
|
||||||
|
|
|
@ -95,6 +95,8 @@ static void WipeSettings()
|
||||||
wxGetApp().GetRecentIsoManager().Clear();
|
wxGetApp().GetRecentIsoManager().Clear();
|
||||||
g_Conf = new AppConfig();
|
g_Conf = new AppConfig();
|
||||||
sMainFrame.RemoveCdvdMenu();
|
sMainFrame.RemoveCdvdMenu();
|
||||||
|
|
||||||
|
sApp.WipeUserModeSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainEmuFrame::RemoveCdvdMenu()
|
void MainEmuFrame::RemoveCdvdMenu()
|
||||||
|
|
Loading…
Reference in New Issue