mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-11-08 10:31:01 +01:00
fix(app): a scenario failing as it loads goes back to the launcher too, the files of other cases looked for only off Windows
A scenario failing past its opening popped the loader mode and went on to pop it again and push the driver mode with the scenery half loaded; it goes back to the launcher as one that can't be opened. FileCased() goes through the folder only where the file system tells the case apart: on Windows a missing file was looked for in its whole folder for nothing, and a name outside the code page threw from the parser. The Discord thread sleeps a quarter of a second outside the driver mode, not to hold the closing up.
This commit is contained in:
@@ -272,7 +272,7 @@ void eu07_application::DiscordRPCService()
|
|||||||
if (currentMode != mode::driver)
|
if (currentMode != mode::driver)
|
||||||
{
|
{
|
||||||
// the editor and the other modes: nothing to tell, without spinning a core on it
|
// the editor and the other modes: nothing to tell, without spinning a core on it
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
|
std::this_thread::sleep_for(std::chrono::milliseconds(250));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -67,8 +67,13 @@ bool scenarioloader_mode::update() {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch (invalid_scenery_exception &e) {
|
catch (invalid_scenery_exception &e) {
|
||||||
|
// back to the launcher as when the scenario can't be opened, not on to the driver mode with the scenery half loaded
|
||||||
ErrorLog( "Bad init: scenario loading failed" );
|
ErrorLog( "Bad init: scenario loading failed" );
|
||||||
|
state.reset();
|
||||||
|
Global.SceneryFile.clear();
|
||||||
Application.pop_mode();
|
Application.pop_mode();
|
||||||
|
Application.push_mode(eu07_application::mode::launcher);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
// the loading state holds the scenario file open, which on some systems keeps the file from being replaced
|
// the loading state holds the scenario file open, which on some systems keeps the file from being replaced
|
||||||
// when the scenery is saved in the editor. it'd also get in the way of another load
|
// when the scenery is saved in the editor. it'd also get in the way of another load
|
||||||
|
|||||||
@@ -598,7 +598,7 @@ void ui_layer::render_hierarchy(){
|
|||||||
|
|
||||||
if (ImGui::IsItemHovered())
|
if (ImGui::IsItemHovered())
|
||||||
{
|
{
|
||||||
ImGui::SetTooltip(STR_C("UUID: %s\nNode type: %s"),uuid.c_str(), typeid(*node).name());
|
ImGui::SetTooltip(STR_C("UUID: %s\nNode type: %s"), uuid.c_str(), typeid(*node).name());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -476,6 +476,12 @@ std::string FileCased(std::string const &Filename)
|
|||||||
std::error_code error;
|
std::error_code error;
|
||||||
if (std::filesystem::exists(Filename, error))
|
if (std::filesystem::exists(Filename, error))
|
||||||
return Filename;
|
return Filename;
|
||||||
|
#ifdef _WIN32
|
||||||
|
// the names there are found in any case already: no folder to go through for every file missing, nor names outside of the
|
||||||
|
// code page to throw on
|
||||||
|
return {};
|
||||||
|
#else
|
||||||
|
// only the name of the file itself, a folder named in another case isn't found
|
||||||
std::filesystem::path const path{Filename};
|
std::filesystem::path const path{Filename};
|
||||||
auto const directory{path.has_parent_path() ? path.parent_path() : std::filesystem::path{"."}};
|
auto const directory{path.has_parent_path() ? path.parent_path() : std::filesystem::path{"."}};
|
||||||
auto const wanted{ToLower(path.filename().string())};
|
auto const wanted{ToLower(path.filename().string())};
|
||||||
@@ -483,6 +489,7 @@ std::string FileCased(std::string const &Filename)
|
|||||||
if (ToLower(entry->path().filename().string()) == wanted)
|
if (ToLower(entry->path().filename().string()) == wanted)
|
||||||
return path.has_parent_path() ? (directory / entry->path().filename()).string() : entry->path().filename().string();
|
return path.has_parent_path() ? (directory / entry->path().filename()).string() : entry->path().filename().string();
|
||||||
return {};
|
return {};
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<std::string, std::string> FileExists(std::vector<std::string> const &Names, std::vector<std::string> const &Extensions)
|
std::pair<std::string, std::string> FileExists(std::vector<std::string> const &Names, std::vector<std::string> const &Extensions)
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ template <> bool extract_value(bool &Variable, std::string const &Key, std::stri
|
|||||||
|
|
||||||
bool FileExists(std::string const &Filename);
|
bool FileExists(std::string const &Filename);
|
||||||
// the file as it's named on the disk when only the case of its name differs, as in the sceneries made on Windows; empty when
|
// the file as it's named on the disk when only the case of its name differs, as in the sceneries made on Windows; empty when
|
||||||
// there's none
|
// there's none. the folders have to be named in their case; on Windows, finding the names in any case itself, the file given or none
|
||||||
std::string FileCased(std::string const &Filename);
|
std::string FileCased(std::string const &Filename);
|
||||||
|
|
||||||
std::pair<std::string, std::string> FileExists(std::vector<std::string> const &Names, std::vector<std::string> const &Extensions);
|
std::pair<std::string, std::string> FileExists(std::vector<std::string> const &Names, std::vector<std::string> const &Extensions);
|
||||||
|
|||||||
Reference in New Issue
Block a user