aboutsummaryrefslogblamecommitdiff
path: root/src/espik_config.c
blob: f24b32c92fed28da2f0d94ab0cdef79b43ecb0a1 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11





                      
                   



                         
                        
                        
 

                                       
                                                                           
 
                               
                      
 
                                              
 

                              
 
                      
                        

 
                                         
 
                           
                               
                      
 
                                  
 
                                              
 

                                       
        



                                                         
 



                      
 
                      
                        

 
                                   
 
                                     
                      
 

                                                                             
 
                                                 
 





                                                             
 
                                                                      
 
                            
                      

 
                            
 

                      
                                                                           
         
                                                                         
                            


                           
         
 
                                                                  
         

                                                      
                                                                         
                                            



                            
         
                      

 
                                         
 

                      

                                                      
        










                                                                               
 

                                                          
                                                               

                          
                      

 
                                        
 

                      

                                                                               

                                                         

                                                                    





                                                         
 

                                                          
                                                               

                          
                      
 
#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->username = pw->pw_name;
	
	if (! (pw->pw_gecos[0]) )
		u_info->realname = strdup ("espik user");
	else
		u_info->realname = pw->pw_gecos;

	/* FIXME: segv
	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);

	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_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();
}