1
0
Fork 0

Change: only output settings that are changed in crashlog

pull/11232/head
Patric Stout 2023-09-04 12:18:07 +02:00
parent 6a4a89a73e
commit b6b559c518
6 changed files with 42 additions and 10 deletions

View File

@ -136,7 +136,7 @@ void CrashLog::FillCrashLog()
if (!this->TryExecute("companies", [&game]() { SurveyCompanies(game["companies"]); return true; })) {
game["companies"] = "crashed while gathering information";
}
if (!this->TryExecute("settings", [&game]() { SurveySettings(game["settings"]); return true; })) {
if (!this->TryExecute("settings", [&game]() { SurveySettings(game["settings_changed"], true); return true; })) {
game["settings"] = "crashed while gathering information";
}
if (!this->TryExecute("grfs", [&game]() { SurveyGrfs(game["grfs"]); return true; })) {

View File

@ -66,7 +66,7 @@ std::string NetworkSurveyHandler::CreatePayload(Reason reason, bool for_preview)
auto &game = survey["game"];
SurveyTimers(game["timers"]);
SurveyCompanies(game["companies"]);
SurveySettings(game["settings"]);
SurveySettings(game["settings"], false);
SurveyGrfs(game["grfs"]);
SurveyGameScript(game["game_script"]);
}

View File

@ -716,6 +716,12 @@ bool IntSettingDesc::IsSameValue(const IniItem *item, void *object) const
return item_value == object_value;
}
bool IntSettingDesc::IsDefaultValue(void *object) const
{
int32_t object_value = this->Read(object);
return this->def == object_value;
}
std::string StringSettingDesc::FormatValue(const void *object) const
{
const std::string &str = this->Read(object);
@ -742,12 +748,24 @@ bool StringSettingDesc::IsSameValue(const IniItem *item, void *object) const
return item->value->compare(str) == 0;
}
bool StringSettingDesc::IsDefaultValue(void *object) const
{
const std::string &str = this->Read(object);
return this->def == str;
}
bool ListSettingDesc::IsSameValue(const IniItem *item, void *object) const
{
/* Checking for equality is way more expensive than just writing the value. */
return false;
}
bool ListSettingDesc::IsDefaultValue(void *object) const
{
/* Defaults of lists are often complicated, and hard to compare. */
return false;
}
/**
* Loads all items from a 'grpname' section into a list
* The list parameter can be a nullptr pointer, in this case nothing will be

View File

@ -130,6 +130,14 @@ struct SettingDesc {
* @return True if the value is definitely the same (might be false when the same).
*/
virtual bool IsSameValue(const IniItem *item, void *object) const = 0;
/**
* Check whether the value is the same as the default value.
*
* @param object The object the setting is in.
* @return true iff the value is the default value.
*/
virtual bool IsDefaultValue(void *object) const = 0;
};
/** Base integer type, including boolean, settings. Only these are shown in the settings UI. */
@ -215,6 +223,7 @@ struct IntSettingDesc : SettingDesc {
std::string FormatValue(const void *object) const override;
void ParseValue(const IniItem *item, void *object) const override;
bool IsSameValue(const IniItem *item, void *object) const override;
bool IsDefaultValue(void *object) const override;
int32_t Read(const void *object) const;
private:
@ -307,6 +316,7 @@ struct StringSettingDesc : SettingDesc {
std::string FormatValue(const void *object) const override;
void ParseValue(const IniItem *item, void *object) const override;
bool IsSameValue(const IniItem *item, void *object) const override;
bool IsDefaultValue(void *object) const override;
const std::string &Read(const void *object) const;
private:
@ -324,6 +334,7 @@ struct ListSettingDesc : SettingDesc {
std::string FormatValue(const void *object) const override;
void ParseValue(const IniItem *item, void *object) const override;
bool IsSameValue(const IniItem *item, void *object) const override;
bool IsDefaultValue(void *object) const override;
};
/** Placeholder for settings that have been removed, but might still linger in the savegame. */
@ -334,6 +345,7 @@ struct NullSettingDesc : SettingDesc {
std::string FormatValue(const void *object) const override { NOT_REACHED(); }
void ParseValue(const IniItem *item, void *object) const override { NOT_REACHED(); }
bool IsSameValue(const IniItem *item, void *object) const override { NOT_REACHED(); }
bool IsDefaultValue(void *object) const override { NOT_REACHED(); }
};
typedef std::variant<IntSettingDesc, BoolSettingDesc, OneOfManySettingDesc, ManyOfManySettingDesc, StringSettingDesc, ListSettingDesc, NullSettingDesc> SettingVariant;

View File

@ -122,8 +122,9 @@ static auto &GenericSettingTables()
* @param survey The JSON object.
* @param table The settings table to convert.
* @param object The object to get the settings from.
* @param skip_if_default If true, skip any settings that are on their default value.
*/
static void SurveySettingsTable(nlohmann::json &survey, const SettingTable &table, void *object)
static void SurveySettingsTable(nlohmann::json &survey, const SettingTable &table, void *object, bool skip_if_default)
{
for (auto &desc : table) {
const SettingDesc *sd = GetSettingDesc(desc);
@ -131,6 +132,7 @@ static void SurveySettingsTable(nlohmann::json &survey, const SettingTable &tabl
if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to)) continue;
auto name = sd->GetName();
if (skip_if_default && sd->IsDefaultValue(object)) continue;
survey[name] = sd->FormatValue(object);
}
}
@ -140,17 +142,17 @@ static void SurveySettingsTable(nlohmann::json &survey, const SettingTable &tabl
*
* @param survey The JSON object.
*/
void SurveySettings(nlohmann::json &survey)
void SurveySettings(nlohmann::json &survey, bool skip_if_default)
{
SurveySettingsTable(survey, _misc_settings, nullptr);
SurveySettingsTable(survey, _misc_settings, nullptr, skip_if_default);
#if defined(_WIN32) && !defined(DEDICATED)
SurveySettingsTable(survey, _win32_settings, nullptr);
SurveySettingsTable(survey, _win32_settings, nullptr, skip_if_default);
#endif
for (auto &table : GenericSettingTables()) {
SurveySettingsTable(survey, table, &_settings_game);
SurveySettingsTable(survey, table, &_settings_game, skip_if_default);
}
SurveySettingsTable(survey, _currency_settings, &_custom_currency);
SurveySettingsTable(survey, _company_settings, &_settings_client.company);
SurveySettingsTable(survey, _currency_settings, &_custom_currency, skip_if_default);
SurveySettingsTable(survey, _company_settings, &_settings_client.company, skip_if_default);
}
/**

View File

@ -22,7 +22,7 @@ void SurveyGameScript(nlohmann::json &survey);
void SurveyGrfs(nlohmann::json &survey);
void SurveyLibraries(nlohmann::json &survey);
void SurveyOpenTTD(nlohmann::json &survey);
void SurveySettings(nlohmann::json &survey);
void SurveySettings(nlohmann::json &survey, bool skip_if_default);
void SurveyTimers(nlohmann::json &survey);
/* Defined in os/<os>/survey_<os>.cpp. */