#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <pwd.h>
#include <string.h>
#include <Ecore_Config.h>
#include "espik_config.h"
#include "espik_error.h"
#include "espik_debug.h"
static int ret; /* For debug */
t_servinfo* espik_server_config_set (char* server, unsigned short port)
{
t_servinfo* s_info;
espik_enter();
s_info = malloc (sizeof (t_servinfo));
s_info->host = server;
s_info->port = port;
espik_leave();
return (s_info);
}
t_userinfo* espik_user_sysinfo_get ()
{
struct passwd* pw;
t_userinfo* u_info;
espik_enter();
pw = getpwuid (getuid ());
u_info = malloc (sizeof (t_userinfo));
//u_info->nickname = pw->pw_name;
u_info->nickname = strdup ("beber_espik_test");
u_info->username = strdup (pw->pw_name);
if (! (pw->pw_gecos[0]) )
u_info->realname = strdup ("espik user");
else
u_info->realname = strdup (pw->pw_gecos);
espik_free (u_info);
espik_free (pw);
espik_leave();
return (u_info);
}
void espik_config_default_set ()
{
t_userinfo* user_sysinfo;
espik_enter();
ecore_config_string_default ("/config/server/0/host", "beber.melee");
ecore_config_int_default ("/config/server/0/port", 6667);
user_sysinfo = espik_user_sysinfo_get ();
ecore_config_string_default ("/config/user/nickname",
user_sysinfo->nickname);
ecore_config_string_default ("/config/user/username",
user_sysinfo->username);
ecore_config_string_default ("/config/user/realname",
user_sysinfo->realname);
ecore_config_string_default ("/espik/version", ESPIK_VERSION);
espik_free (user_sysinfo->nickname);
espik_free (user_sysinfo->username);
espik_free (user_sysinfo->realname);
espik_free (user_sysinfo);
espik_leave();
}
void espik_config_init ()
{
espik_enter();
if ((ret = ecore_config_init (APPS_NAME)) != ECORE_CONFIG_ERR_SUCC)
{
espik_debug_print ("Init ecore_config failed (%d)", ret);
kill_me (2);
/*
exit (ret);
*/
}
if ((ret = ecore_config_load ()) != ECORE_CONFIG_ERR_SUCC)
{
/* If an config option is not present,
* this will force it to a value */
espik_debug_print ("Load ecore_config failed (%d)", ret);
espik_config_default_set ();
/*
kill_me (2);
exit (ret);
*/
}
espik_leave();
}
void espik_config_shutdown (t_info s_info)
{
espik_free (s_info.server->host);
// free (s_info->server->port);
espik_free (s_info.server);
espik_free (s_info.client);
// free (s_info);
ecore_config_save();
ecore_config_shutdown();
}
void espik_config_get (t_info *s_info)
{
espik_enter();
s_info->server = malloc (sizeof (t_servinfo));
s_info->client = malloc (sizeof (t_userinfo));
s_info->server->host =
ecore_config_string_get ("/config/server/0/host");
s_info->server->port =
(unsigned short)ecore_config_int_get ("/config/server/0/port");
s_info->client->nickname =
ecore_config_string_get ("/config/user/nickname");
s_info->client->username =
ecore_config_string_get ("/config/user/username");
s_info->client->realname =
ecore_config_string_get ("/config/user/realname");
if (ecore_config_save () != ECORE_CONFIG_ERR_SUCC)
{
espik_debug_print ("Save ecore_config failed");
exit (-1);
}
espik_leave();
}
void espik_config_set (t_info config)
{
espik_enter();
ecore_config_int_set ("/config/server/len", 1);
ecore_config_string_set ("/config/server/0/host", config.server->host);
ecore_config_int_set ("/config/server/0/port",
(int)config.server->port);
ecore_config_int_set ("/config/server/0/autoconnect", 1);
ecore_config_string_set ("/config/user/nickname",
config.client->nickname);
ecore_config_string_set ("/config/user/username",
config.client->username);
ecore_config_string_set ("/config/user/realname",
config.client->realname);
if (ecore_config_save () != ECORE_CONFIG_ERR_SUCC)
{
espik_debug_print ("Save ecore_config failed");
exit (-1);
}
espik_leave();
}