Merge pull request #36810 from akien-mga/configfile-better-errors
ConfigFile: Improve error messages
This commit is contained in:
commit
e8b68c48ea
3 changed files with 26 additions and 19 deletions
|
@ -86,7 +86,8 @@ void ConfigFile::set_value(const String &p_section, const String &p_key, const V
|
||||||
Variant ConfigFile::get_value(const String &p_section, const String &p_key, Variant p_default) const {
|
Variant ConfigFile::get_value(const String &p_section, const String &p_key, Variant p_default) const {
|
||||||
|
|
||||||
if (!values.has(p_section) || !values[p_section].has(p_key)) {
|
if (!values.has(p_section) || !values[p_section].has(p_key)) {
|
||||||
ERR_FAIL_COND_V_MSG(p_default.get_type() == Variant::NIL, Variant(), "Couldn't find the given section '" + p_section + "', key '" + p_key + "' and no default was given.");
|
ERR_FAIL_COND_V_MSG(p_default.get_type() == Variant::NIL, Variant(),
|
||||||
|
vformat("Couldn't find the given section \"%s\" and key \"%s\", and no default was given.", p_section, p_key));
|
||||||
return p_default;
|
return p_default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +113,7 @@ void ConfigFile::get_sections(List<String> *r_sections) const {
|
||||||
}
|
}
|
||||||
void ConfigFile::get_section_keys(const String &p_section, List<String> *r_keys) const {
|
void ConfigFile::get_section_keys(const String &p_section, List<String> *r_keys) const {
|
||||||
|
|
||||||
ERR_FAIL_COND_MSG(!values.has(p_section), "Cannont get keys from nonexistent section '" + p_section + "'.");
|
ERR_FAIL_COND_MSG(!values.has(p_section), vformat("Cannot get keys from nonexistent section \"%s\".", p_section));
|
||||||
|
|
||||||
for (OrderedHashMap<String, Variant>::ConstElement E = values[p_section].front(); E; E = E.next()) {
|
for (OrderedHashMap<String, Variant>::ConstElement E = values[p_section].front(); E; E = E.next()) {
|
||||||
r_keys->push_back(E.key());
|
r_keys->push_back(E.key());
|
||||||
|
@ -121,12 +122,14 @@ void ConfigFile::get_section_keys(const String &p_section, List<String> *r_keys)
|
||||||
|
|
||||||
void ConfigFile::erase_section(const String &p_section) {
|
void ConfigFile::erase_section(const String &p_section) {
|
||||||
|
|
||||||
|
ERR_FAIL_COND_MSG(!values.has(p_section), vformat("Cannot erase nonexistent section \"%s\".", p_section));
|
||||||
values.erase(p_section);
|
values.erase(p_section);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigFile::erase_section_key(const String &p_section, const String &p_key) {
|
void ConfigFile::erase_section_key(const String &p_section, const String &p_key) {
|
||||||
|
|
||||||
ERR_FAIL_COND_MSG(!values.has(p_section), "Cannot erase key from nonexistent section '" + p_section + "'.");
|
ERR_FAIL_COND_MSG(!values.has(p_section), vformat("Cannot erase key \"%s\" from nonexistent section \"%s\".", p_key, p_section));
|
||||||
|
ERR_FAIL_COND_MSG(!values[p_section].has(p_key), vformat("Cannot erase nonexistent key \"%s\" from section \"%s\".", p_key, p_section));
|
||||||
|
|
||||||
values[p_section].erase(p_key);
|
values[p_section].erase(p_key);
|
||||||
}
|
}
|
||||||
|
@ -291,7 +294,7 @@ Error ConfigFile::_parse(const String &p_path, VariantParser::Stream *p_stream)
|
||||||
if (err == ERR_FILE_EOF) {
|
if (err == ERR_FILE_EOF) {
|
||||||
return OK;
|
return OK;
|
||||||
} else if (err != OK) {
|
} else if (err != OK) {
|
||||||
ERR_PRINT("ConfgFile - " + p_path + ":" + itos(lines) + " error: " + error_text + ".");
|
ERR_PRINT(vformat("ConfigFile parse error at %s:%d: %s.", p_path, lines, error_text));
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -324,11 +327,8 @@ void ConfigFile::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("save", "path"), &ConfigFile::save);
|
ClassDB::bind_method(D_METHOD("save", "path"), &ConfigFile::save);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("load_encrypted", "path", "key"), &ConfigFile::load_encrypted);
|
ClassDB::bind_method(D_METHOD("load_encrypted", "path", "key"), &ConfigFile::load_encrypted);
|
||||||
ClassDB::bind_method(D_METHOD("load_encrypted_pass", "path", "pass"), &ConfigFile::load_encrypted_pass);
|
ClassDB::bind_method(D_METHOD("load_encrypted_pass", "path", "password"), &ConfigFile::load_encrypted_pass);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("save_encrypted", "path", "key"), &ConfigFile::save_encrypted);
|
ClassDB::bind_method(D_METHOD("save_encrypted", "path", "key"), &ConfigFile::save_encrypted);
|
||||||
ClassDB::bind_method(D_METHOD("save_encrypted_pass", "path", "pass"), &ConfigFile::save_encrypted_pass);
|
ClassDB::bind_method(D_METHOD("save_encrypted_pass", "path", "password"), &ConfigFile::save_encrypted_pass);
|
||||||
}
|
|
||||||
|
|
||||||
ConfigFile::ConfigFile() {
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,8 +74,6 @@ public:
|
||||||
|
|
||||||
Error save_encrypted(const String &p_path, const Vector<uint8_t> &p_key);
|
Error save_encrypted(const String &p_path, const Vector<uint8_t> &p_key);
|
||||||
Error save_encrypted_pass(const String &p_path, const String &p_pass);
|
Error save_encrypted_pass(const String &p_path, const String &p_pass);
|
||||||
|
|
||||||
ConfigFile();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CONFIG_FILE_H
|
#endif // CONFIG_FILE_H
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
<argument index="0" name="section" type="String">
|
<argument index="0" name="section" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Deletes the specified section along with all the key-value pairs inside.
|
Deletes the specified section along with all the key-value pairs inside. Raises an error if the section does not exist.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="erase_section_key">
|
<method name="erase_section_key">
|
||||||
|
@ -48,6 +48,7 @@
|
||||||
<argument index="1" name="key" type="String">
|
<argument index="1" name="key" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Deletes the specified key in a section. Raises an error if either the section or the key do not exist.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_section_keys" qualifiers="const">
|
<method name="get_section_keys" qualifiers="const">
|
||||||
|
@ -56,7 +57,7 @@
|
||||||
<argument index="0" name="section" type="String">
|
<argument index="0" name="section" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Returns an array of all defined key identifiers in the specified section.
|
Returns an array of all defined key identifiers in the specified section. Raises an error and returns an empty array if the section does not exist.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_sections" qualifiers="const">
|
<method name="get_sections" qualifiers="const">
|
||||||
|
@ -76,7 +77,7 @@
|
||||||
<argument index="2" name="default" type="Variant" default="null">
|
<argument index="2" name="default" type="Variant" default="null">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Returns the current value for the specified section and key. If the section and/or the key do not exist, the method returns the value of the optional [code]default[/code] argument, or [code]null[/code] if it is omitted.
|
Returns the current value for the specified section and key. If either the section or the key do not exist, the method returns the fallback [code]default[/code] value. If [code]default[/code] is not specified or set to [code]null[/code], an error is also raised.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="has_section" qualifiers="const">
|
<method name="has_section" qualifiers="const">
|
||||||
|
@ -105,7 +106,7 @@
|
||||||
<argument index="0" name="path" type="String">
|
<argument index="0" name="path" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Loads the config file specified as a parameter. The file's contents are parsed and loaded in the ConfigFile object which the method was called on.
|
Loads the config file specified as a parameter. The file's contents are parsed and loaded in the [ConfigFile] object which the method was called on.
|
||||||
Returns one of the [enum Error] code constants ([code]OK[/code] on success).
|
Returns one of the [enum Error] code constants ([code]OK[/code] on success).
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
@ -117,6 +118,8 @@
|
||||||
<argument index="1" name="key" type="PackedByteArray">
|
<argument index="1" name="key" type="PackedByteArray">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Loads the encrypted config file specified as a parameter, using the provided [code]key[/code] to decrypt it. The file's contents are parsed and loaded in the [ConfigFile] object which the method was called on.
|
||||||
|
Returns one of the [enum Error] code constants ([code]OK[/code] on success).
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="load_encrypted_pass">
|
<method name="load_encrypted_pass">
|
||||||
|
@ -124,9 +127,11 @@
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="path" type="String">
|
<argument index="0" name="path" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="1" name="pass" type="String">
|
<argument index="1" name="password" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Loads the encrypted config file specified as a parameter, using the provided [code]password[/code] to decrypt it. The file's contents are parsed and loaded in the [ConfigFile] object which the method was called on.
|
||||||
|
Returns one of the [enum Error] code constants ([code]OK[/code] on success).
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="parse">
|
<method name="parse">
|
||||||
|
@ -145,7 +150,7 @@
|
||||||
<argument index="0" name="path" type="String">
|
<argument index="0" name="path" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Saves the contents of the ConfigFile object to the file specified as a parameter. The output file uses an INI-style structure.
|
Saves the contents of the [ConfigFile] object to the file specified as a parameter. The output file uses an INI-style structure.
|
||||||
Returns one of the [enum Error] code constants ([code]OK[/code] on success).
|
Returns one of the [enum Error] code constants ([code]OK[/code] on success).
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
@ -157,6 +162,8 @@
|
||||||
<argument index="1" name="key" type="PackedByteArray">
|
<argument index="1" name="key" type="PackedByteArray">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Saves the contents of the [ConfigFile] object to the AES-256 encrypted file specified as a parameter, using the provided [code]key[/code] to encrypt it. The output file uses an INI-style structure.
|
||||||
|
Returns one of the [enum Error] code constants ([code]OK[/code] on success).
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="save_encrypted_pass">
|
<method name="save_encrypted_pass">
|
||||||
|
@ -164,9 +171,11 @@
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="path" type="String">
|
<argument index="0" name="path" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="1" name="pass" type="String">
|
<argument index="1" name="password" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Saves the contents of the [ConfigFile] object to the AES-256 encrypted file specified as a parameter, using the provided [code]password[/code] to encrypt it. The output file uses an INI-style structure.
|
||||||
|
Returns one of the [enum Error] code constants ([code]OK[/code] on success).
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="set_value">
|
<method name="set_value">
|
||||||
|
@ -179,7 +188,7 @@
|
||||||
<argument index="2" name="value" type="Variant">
|
<argument index="2" name="value" type="Variant">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Assigns a value to the specified key of the specified section. If the section and/or the key do not exist, they are created. Passing a [code]null[/code] value deletes the specified key if it exists, and deletes the section if it ends up empty once the key has been removed.
|
Assigns a value to the specified key of the specified section. If either the section or the key do not exist, they are created. Passing a [code]null[/code] value deletes the specified key if it exists, and deletes the section if it ends up empty once the key has been removed.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
</methods>
|
</methods>
|
||||||
|
|
Loading…
Reference in a new issue