Merge remote-tracking branch 'myk002/myk_orders_splat' into develop

develop
lethosor 2021-06-30 22:33:13 -04:00
commit 71cfa744f9
No known key found for this signature in database
GPG Key ID: 76A269552F4F58C1
3 changed files with 58 additions and 44 deletions

@ -38,6 +38,7 @@ changelog.txt uses a syntax similar to RST, with a few special sequences:
- `buildingplan`: fixed an issue preventing other plugins like `automaterial` from planning constructions if the "enable all" buildingplan setting was turned on
- `command-prompt`: fixed issues where overlays created by running certain commands (e.g. `gui/liquids`, `gui/teleport`) would not update the parent screen correctly
- `dwarfvet`: fixed a crash that could occur with hospitals overlapping with other buildings in certain ways
- `orders`: don't crash when importing orders with malformed IDs
- ``quickfortress.csv`` blueprint: fixed refuse stockpile config and prevented stockpiles from covering stairways
- `stonesense`: fixed a crash that could occur when ctrl+scrolling or closing the Stonesense window

@ -419,50 +419,8 @@ static command_result orders_export_command(color_ostream & out, const std::stri
return file.good() ? CR_OK : CR_FAILURE;
}
static command_result orders_import_command(color_ostream & out, const std::string & name)
static command_result orders_import(color_ostream &out, Json::Value &orders)
{
if (!is_safe_filename(out, name))
{
return CR_WRONG_USAGE;
}
const std::string filename("dfhack-config/orders/" + name + ".json");
Json::Value orders;
{
std::ifstream file(filename);
if (!file.good())
{
out << COLOR_LIGHTRED << "Cannot find orders file: " << filename << std::endl;
return CR_FAILURE;
}
try
{
file >> orders;
}
catch (const std::exception & e)
{
out << COLOR_LIGHTRED << "Error reading orders file: " << filename << ": " << e.what() << std::endl;
return CR_FAILURE;
}
if (!file.good())
{
out << COLOR_LIGHTRED << "Error reading orders file: " << filename << std::endl;
return CR_FAILURE;
}
}
if (orders.type() != Json::arrayValue)
{
out << COLOR_LIGHTRED << "Invalid orders file: " << filename << ": expected array" << std::endl;
return CR_FAILURE;
}
CoreSuspender suspend;
std::map<int32_t, int32_t> id_mapping;
for (auto it : orders)
{
@ -793,6 +751,61 @@ static command_result orders_import_command(color_ostream & out, const std::stri
return CR_OK;
}
static command_result orders_import_command(color_ostream & out, const std::string & name)
{
if (!is_safe_filename(out, name))
{
return CR_WRONG_USAGE;
}
const std::string filename("dfhack-config/orders/" + name + ".json");
Json::Value orders;
{
std::ifstream file(filename);
if (!file.good())
{
out << COLOR_LIGHTRED << "Cannot find orders file: " << filename << std::endl;
return CR_FAILURE;
}
try
{
file >> orders;
}
catch (const std::exception & e)
{
out << COLOR_LIGHTRED << "Error reading orders file: " << filename << ": " << e.what() << std::endl;
return CR_FAILURE;
}
if (!file.good())
{
out << COLOR_LIGHTRED << "Error reading orders file: " << filename << std::endl;
return CR_FAILURE;
}
}
if (orders.type() != Json::arrayValue)
{
out << COLOR_LIGHTRED << "Invalid orders file: " << filename << ": expected array" << std::endl;
return CR_FAILURE;
}
CoreSuspender suspend;
try
{
return orders_import(out, orders);
}
catch (const std::exception & e)
{
out << COLOR_LIGHTRED << "Error reading orders file: " << filename << ": " << e.what() << std::endl;
return CR_FAILURE;
}
}
static command_result orders_clear_command(color_ostream & out)
{
CoreSuspender suspend;

@ -1 +1 @@
Subproject commit af53a985c54b29a5b3092127a5e8ec3495ef0cee
Subproject commit 8b81a9ff1a537b97d8e1f4186518b3fc24fbe434