ConfigFile: Improve error messages and complete docs

This commit is contained in:
Rémi Verschelde 2020-03-05 10:41:31 +01:00
parent 6d269dbf56
commit f7c87ed3dd
3 changed files with 26 additions and 19 deletions

View file

@ -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() {
} }

View file

@ -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

View file

@ -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>