aboutsummaryrefslogtreecommitdiff
path: root/src/espik_config.c
blob: 82aba005d50f7204205c798979174a0c065717f0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <stdio.h>
#include <stdlib.h>

#include <sys/types.h>
#include <unistd.h>
#include <pwd.h>

#include <Ecore_Config.h>

#include "espik_config.h"
#include "espik_error.h"

t_servinfo*	espik_server_config_set (char* server, unsigned short port)
{
	t_servinfo*	s_info;

	s_info = malloc (sizeof (t_servinfo));

	s_info->host = server;
	s_info->port = port;

	return (s_info);
}

t_userinfo*	espik_user_sysinfo_get ()
{
	struct passwd*	pw;
	t_userinfo*		u_info;

	pw = getpwuid (getuid ());

	u_info = malloc (sizeof (t_userinfo));

	u_info->nickname = pw->pw_name;
	u_info->username = pw->pw_name;
	u_info->realname = pw->pw_gecos;

	//free (pw);		/*FIXME: segv */

	return (u_info);
}

void	espik_config_default_set ()
{
	t_userinfo*	user_sysinfo;

	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);

	free (user_sysinfo);
}

void	espik_config_init ()
{
	int ret;
	
	if ((ret = ecore_config_init (APPS_NAME)) != ECORE_CONFIG_ERR_SUCC)
	{
		fprintf (stderr, "espik_config_init: Init ecore_config failed (%d)\n", ret);
		exit (ret);
	}

	if ((ret = ecore_config_load ()) != ECORE_CONFIG_ERR_SUCC)
	{
		fprintf (stderr, "espik_config_init: Load ecore_config failed (%d)\n", ret);
		exit (ret);
	}
}

void	espik_config_get (t_info *s_info)
{
	s_info->server = malloc (sizeof (t_servinfo));
	s_info->client = malloc (sizeof (t_userinfo));

	/* If an config option is not present, this will force it to a value */
	espik_config_default_set ();

	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)
	{
		fprintf (stderr, "espik_config_get: Save ecore_config failed\n");
		exit (-1);
	}
}

void	espik_config_set (t_info config)
{
	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)
	{
		fprintf (stderr, "espik_config_get: Save ecore_config failed\n");
		exit (-1);
	}
}