diff options
author | Jesusaves <cpntb1@ymail.com> | 2022-02-22 07:09:31 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2022-02-22 07:09:31 -0300 |
commit | b9d57b7ee57e79820c97c4d452c07972b73f3c7c (patch) | |
tree | 06a98c67240ee509b19d26ee54d8515f06f37230 /saedit/config.c | |
parent | a0c410d5ac8eeeeb4d7295c8f54931fa32664f4d (diff) | |
download | tools-b9d57b7ee57e79820c97c4d452c07972b73f3c7c.tar.gz tools-b9d57b7ee57e79820c97c4d452c07972b73f3c7c.tar.bz2 tools-b9d57b7ee57e79820c97c4d452c07972b73f3c7c.tar.xz tools-b9d57b7ee57e79820c97c4d452c07972b73f3c7c.zip |
Include saedit2
Diffstat (limited to 'saedit/config.c')
-rw-r--r-- | saedit/config.c | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/saedit/config.c b/saedit/config.c new file mode 100644 index 0000000..1e20411 --- /dev/null +++ b/saedit/config.c @@ -0,0 +1,191 @@ +#include "config.h" +#include "xml.h" +#include <unistd.h> +#include <sys/stat.h> + +static GKeyFile *_config_keyfile = NULL; + +gchar * +_config_get_config_folder (void) { + return g_strjoin ( + "/", + g_get_user_config_dir (), + "saedit2", + NULL + ); +} + +gchar * +_config_get_key_file_path (void) { + gchar *dir = _config_get_config_folder (); + gchar *result; + + result = g_strjoin ( + "/", + dir, + "config.ini", + NULL + ); + + g_free (dir); + return result; +} + +void +config_keys_load () { + gchar *filename; + + _config_keyfile = g_key_file_new (); + + filename = _config_get_key_file_path (); + + g_key_file_load_from_file ( + _config_keyfile, + filename, + 0, + NULL + ); + + g_free (filename); +} + +gchar * +config_keys_get_data_folder_path () { + gchar *result; + + if (_config_keyfile == NULL) + config_keys_load (); + + result = g_key_file_get_value ( + _config_keyfile, + "Default", + "Data Folder", + NULL + ); + + if (result == NULL) + result = g_strdup (""); + + return result; +} + +void +config_keys_set_data_folder_path (const gchar *filename) { + if (_config_keyfile == NULL) + config_keys_load (); + + g_key_file_set_value ( + _config_keyfile, + "Default", + "Data Folder", + filename + ); +} + +gint +config_keys_get_tile_size () { + /* TODO */ + return 32; +} + +void +config_keys_save () { + gchar *filename; + + if (_config_keyfile == NULL) + return; + + filename = _config_get_config_folder (); + mkdir (filename, S_IRWXU); + g_free (filename); + + filename = _config_get_key_file_path (); + + g_key_file_save_to_file ( + _config_keyfile, + filename, + NULL + ); + + g_free (filename); +} + +static XMLNode *_config_paths_xml_root = NULL; + +void +config_data_paths_load () { + gchar *filename; + gchar *df_path; + + df_path = config_keys_get_data_folder_path (); + + filename = g_strjoin ( + "/", + df_path, + "paths.xml", + NULL + ); + + _config_paths_xml_root = xml_parse_file (filename); + + g_free (df_path); + g_free (filename); +} + +gchar * +config_data_paths_get_sprites_path () { + XMLNode *node; + GList *list; + gchar *name; + + if (_config_paths_xml_root == NULL) + config_data_paths_load (); + + node = _config_paths_xml_root; + + if (node != NULL) { + list = node->sub_nodes; + while (TRUE) { + list = g_list_find_custom ( + list, + "option", + xml_node_compare_with_name_func + ); + + if (list == NULL) + break; + + name = xml_node_get_attr_value (list->data, "name"); + if (name != NULL && g_strcmp0 (name, "sprites") == 0) { + g_free (name); + return xml_node_get_attr_value (list->data, "value"); + } + + g_free(name); + list = list->next; + } + } + + return g_strdup (""); +} + +gchar * +config_data_path_get_full_sprite_path (const gchar *rel_path) { + gchar *data_folder, *sprites_path, *filename; + + data_folder = config_keys_get_data_folder_path (); + sprites_path = config_data_paths_get_sprites_path (); + + filename = g_strjoin ( + "/", + data_folder, + sprites_path, + rel_path, + NULL + ); + + g_free (sprites_path); + g_free (data_folder); + + return filename; +} |