Update title manager when clearing MLC path in settings (#319)

This commit is contained in:
goeiecool9999 2022-10-20 13:18:44 +02:00 committed by GitHub
parent 9df1325d14
commit dd1cb1cccf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 34 additions and 18 deletions

View File

@ -376,6 +376,24 @@ void CemuApp::CreateDefaultFiles(bool first_start)
}
bool CemuApp::TrySelectMLCPath(std::wstring path)
{
if (path.empty())
path = ActiveSettings::GetDefaultMLCPath().wstring();
if (!TestWriteAccess(fs::path{ path }))
return false;
GetConfig().SetMLCPath(path);
CemuApp::CreateDefaultFiles();
// update TitleList and SaveList scanner with new MLC path
CafeTitleList::SetMLCPath(path);
CafeTitleList::Refresh();
CafeSaveList::SetMLCPath(path);
CafeSaveList::Refresh();
return true;
}
bool CemuApp::SelectMLCPath(wxWindow* parent)
{
@ -394,21 +412,15 @@ bool CemuApp::SelectMLCPath(wxWindow* parent)
const auto path = path_dialog.GetPath().ToStdWstring();
if (!TestWriteAccess(fs::path{ path }))
if (!TrySelectMLCPath(path))
{
const auto result = wxMessageBox(_("Cemu can't write to the selected mlc path!\nDo you want to select another path?"), _("Error"), wxYES_NO | wxCENTRE | wxICON_ERROR);
if (result == wxYES)
continue;
break;
}
config.SetMLCPath(path);
// update TitleList and SaveList scanner with new MLC path
CafeTitleList::SetMLCPath(path);
CafeTitleList::Refresh();
CafeSaveList::SetMLCPath(path);
CafeSaveList::Refresh();
return true;
}

View File

@ -17,6 +17,7 @@ public:
static std::vector<const wxLanguageInfo*> GetAvailableLanguages();
static void CreateDefaultFiles(bool first_start = false);
static bool TrySelectMLCPath(std::wstring path);
static bool SelectMLCPath(wxWindow* parent = nullptr);
static wxString GetConfigPath();

View File

@ -1751,7 +1751,6 @@ void GeneralSettings2::OnMLCPathSelect(wxCommandEvent& event)
m_mlc_path->SetValue(ActiveSettings::GetMlcPath().generic_string());
m_reload_gamelist = true;
m_mlc_modified = true;
CemuApp::CreateDefaultFiles();
}
void GeneralSettings2::OnMLCPathChar(wxKeyEvent& event)
@ -1761,14 +1760,18 @@ void GeneralSettings2::OnMLCPathChar(wxKeyEvent& event)
if(event.GetKeyCode() == WXK_DELETE || event.GetKeyCode() == WXK_BACK)
{
m_mlc_path->SetValue(wxEmptyString);
std::wstring newPath = L"";
if(!CemuApp::TrySelectMLCPath(newPath))
{
const auto res = wxMessageBox(_("The default MLC path is inaccessible.\nDo you want to select a different path?"), _("Error"), wxYES_NO | wxCENTRE | wxICON_ERROR);
if (res == wxYES && CemuApp::SelectMLCPath(this))
newPath = ActiveSettings::GetMlcPath().wstring();
else
return;
}
m_mlc_path->SetValue(newPath);
m_reload_gamelist = true;
GetConfig().mlc_path = L"";
g_config.Save();
m_mlc_modified = true;
CemuApp::CreateDefaultFiles();
}
}

View File

@ -280,15 +280,16 @@ uint32_t GetPhysicalCoreCount()
bool TestWriteAccess(const fs::path& p)
{
std::error_code ec;
// must be path and must exist
if (!fs::exists(p) || !fs::is_directory(p))
if (!fs::exists(p, ec) || !fs::is_directory(p, ec))
return false;
// retry 3 times
for (int i = 0; i < 3; ++i)
{
const auto filename = p / fmt::format("_{}.tmp", GenerateRandomString(8));
if (fs::exists(filename))
if (fs::exists(filename, ec))
continue;
std::ofstream file(filename);
@ -297,7 +298,6 @@ bool TestWriteAccess(const fs::path& p)
file.close();
std::error_code ec;
fs::remove(filename, ec);
return true;
}