rage/src/bin/config.c

78 lines
1.9 KiB
C

#include <Elementary.h>
#include "main.h"
#include "config.h"
static Config *config = NULL;
static Eet_Data_Descriptor *edd_base = NULL;
void
config_init(void)
{
Eet_Data_Descriptor_Class eddc;
Eet_File *ef;
char buf[PATH_MAX];
elm_need_efreet();
efreet_init();
eet_eina_stream_data_descriptor_class_set
(&eddc, sizeof(eddc), "Config", sizeof(Config));
edd_base = eet_data_descriptor_stream_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_BASIC
(edd_base, Config, "emotion_engine", emotion_engine, EET_T_STRING);
snprintf(buf, sizeof(buf), "%s/rage/config/standard/base.cfg", efreet_config_home_get());
ef = eet_open(buf, EET_FILE_MODE_READ);
if (ef)
{
config = eet_data_read(ef, edd_base, "config");
eet_close(ef);
}
if (!config)
{
config = calloc(1, sizeof(Config));
if (!config) abort();
// xine vlc gstreamer1
config->emotion_engine = eina_stringshare_add("gstreamer1");
config_save();
}
}
void
config_shutdown(void)
{
if (config->emotion_engine) eina_stringshare_del(config->emotion_engine);
free(config);
if (edd_base)
{
eet_data_descriptor_free(edd_base);
edd_base = NULL;
}
efreet_shutdown();
}
Config *
config_get(void)
{
return config;
}
void
config_save(void)
{
Eet_File *ef;
Eina_Bool ok;
char buf[PATH_MAX], buf2[PATH_MAX];
snprintf(buf, sizeof(buf), "%s/rage/config/standard/", efreet_config_home_get());
ecore_file_mkpath(buf);
snprintf(buf, sizeof(buf), "%s/rage/config/standard/base.cfg.tmp", efreet_config_home_get());
snprintf(buf2, sizeof(buf2), "%s/rage/config/standard/base.cfg", efreet_config_home_get());
ef = eet_open(buf, EET_FILE_MODE_WRITE);
if (ef)
{
ok = eet_data_write(ef, edd_base, "config", config, 1);
eet_close(ef);
if (ok) ecore_file_mv(buf, buf2);
}
}