Implemented loading configuration files
This commit is contained in:
parent
c5382e3b65
commit
dbc8445777
@ -23,7 +23,7 @@ mailer_OBJS = account.o callbacks.o common.o compose.o mailer.o main.o
|
|||||||
mailer_CFLAGS = $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
mailer_CFLAGS = $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
||||||
|
|
||||||
mailer: $(mailer_OBJS)
|
mailer: $(mailer_OBJS)
|
||||||
$(CC) -o mailer $(mailer_OBJS) $(LDFLAGSF) $(LDFLAGS)
|
$(CC) -o mailer $(mailer_OBJS) $(LDFLAGSF) $(LDFLAGS) -L $(PREFIX)/lib -Wl,-rpath,$(PREFIX)/lib -l System
|
||||||
|
|
||||||
account.o: account.c account/account.h
|
account.o: account.c account/account.h
|
||||||
$(CC) $(mailer_CFLAGS) -c account.c
|
$(CC) $(mailer_CFLAGS) -c account.c
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#ifndef PLUGINDIR
|
#ifndef PLUGINDIR
|
||||||
# define PLUGINDIR LIBDIR "Mailer"
|
# define PLUGINDIR LIBDIR "Mailer"
|
||||||
#endif
|
#endif
|
||||||
|
#define ACCOUNT "account"
|
||||||
|
|
||||||
|
|
||||||
/* Account */
|
/* Account */
|
||||||
@ -42,14 +43,15 @@ Account * account_new(char const * type, char const * name)
|
|||||||
|
|
||||||
if((account = malloc(sizeof(*account))) == NULL)
|
if((account = malloc(sizeof(*account))) == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
memset(account, 0, sizeof(*account));
|
||||||
if((account->name = strdup(name)) == NULL
|
if((account->name = strdup(name)) == NULL
|
||||||
|| (filename = malloc(strlen(PLUGINDIR) + strlen(type)
|
|| (filename = malloc(strlen(PLUGINDIR ACCOUNT)
|
||||||
+ strlen(name) + 6)) == NULL)
|
+ strlen(name) + 6)) == NULL)
|
||||||
{
|
{
|
||||||
account_delete(account);
|
account_delete(account);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
sprintf(filename, "%s/%s/%s.so", PLUGINDIR, type, name);
|
sprintf(filename, "%s/%s/%s.so", PLUGINDIR, ACCOUNT, type);
|
||||||
if((account->handle = dlopen(filename, RTLD_LAZY)) == NULL
|
if((account->handle = dlopen(filename, RTLD_LAZY)) == NULL
|
||||||
|| (account->plugin = dlsym(account->handle,
|
|| (account->plugin = dlsym(account->handle,
|
||||||
"account_plugin")) == NULL)
|
"account_plugin")) == NULL)
|
||||||
@ -60,7 +62,7 @@ Account * account_new(char const * type, char const * name)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
free(filename);
|
free(filename);
|
||||||
account->title = NULL;
|
account->title = strdup(name);
|
||||||
account->identity = NULL;
|
account->identity = NULL;
|
||||||
return account;
|
return account;
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,6 @@ typedef struct _Account
|
|||||||
|
|
||||||
|
|
||||||
/* functions */
|
/* functions */
|
||||||
/* FIXME type should be automatically "account" and wrap plug-in engine */
|
|
||||||
Account * account_new(char const * type, char const * name);
|
Account * account_new(char const * type, char const * name);
|
||||||
void account_delete(Account * account);
|
void account_delete(Account * account);
|
||||||
|
|
||||||
|
@ -700,8 +700,7 @@ static void _on_assistant_prepare(GtkWidget * widget, GtkWidget * page,
|
|||||||
if(ad->account != NULL)
|
if(ad->account != NULL)
|
||||||
account_delete(ad->account);
|
account_delete(ad->account);
|
||||||
ac = &ad->mailer->available[ad->available];
|
ac = &ad->mailer->available[ad->available];
|
||||||
ad->account = account_new("account", ac->name);
|
ad->account = account_new(ac->name, ad->title);
|
||||||
account_set_title(ad->account, ad->title);
|
|
||||||
}
|
}
|
||||||
if(ad->account == NULL)
|
if(ad->account == NULL)
|
||||||
ad->settings = gtk_label_new("Could not load plug-in");
|
ad->settings = gtk_label_new("Could not load plug-in");
|
||||||
|
62
src/mailer.c
62
src/mailer.c
@ -88,6 +88,8 @@ static struct _toolbar _mailer_toolbar[] =
|
|||||||
/* functions */
|
/* functions */
|
||||||
static int _mailer_error(char const * message, int ret);
|
static int _mailer_error(char const * message, int ret);
|
||||||
static int _mailer_dlerror(char const * message, int ret);
|
static int _mailer_dlerror(char const * message, int ret);
|
||||||
|
static char * _mailer_config_filename(void);
|
||||||
|
static int _mailer_config_load_account(Mailer * mailer, char const * name);
|
||||||
|
|
||||||
static int _mailer_error(char const * message, int ret)
|
static int _mailer_error(char const * message, int ret)
|
||||||
{
|
{
|
||||||
@ -102,6 +104,33 @@ static int _mailer_dlerror(char const * message, int ret)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char * _mailer_config_filename(void)
|
||||||
|
{
|
||||||
|
char * homedir;
|
||||||
|
char * filename;
|
||||||
|
|
||||||
|
if((homedir = getenv("HOME")) == NULL)
|
||||||
|
return NULL;
|
||||||
|
if((filename = malloc(strlen(homedir) + strlen(MAILER_CONFIG_FILE) + 2))
|
||||||
|
== NULL)
|
||||||
|
return NULL;
|
||||||
|
sprintf(filename, "%s/%s", homedir, MAILER_CONFIG_FILE);
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int _mailer_config_load_account(Mailer * mailer, char const * name)
|
||||||
|
{
|
||||||
|
Account * account;
|
||||||
|
char * type;
|
||||||
|
|
||||||
|
if((type = config_get(mailer->config, name, "type")) == NULL)
|
||||||
|
return 1;
|
||||||
|
if((account = account_new(type, name)) == NULL)
|
||||||
|
return 1;
|
||||||
|
mailer_account_add(mailer, account);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* public */
|
/* public */
|
||||||
/* functions */
|
/* functions */
|
||||||
@ -109,7 +138,7 @@ static int _mailer_dlerror(char const * message, int ret)
|
|||||||
static int _new_plugins(Mailer * mailer);
|
static int _new_plugins(Mailer * mailer);
|
||||||
static GtkWidget * _new_folders_view(void);
|
static GtkWidget * _new_folders_view(void);
|
||||||
static GtkWidget * _new_headers(Mailer * mailer);
|
static GtkWidget * _new_headers(Mailer * mailer);
|
||||||
/* static gboolean _new_accounts(gpointer data); */
|
static void _new_config_load(Mailer * mailer);
|
||||||
|
|
||||||
Mailer * mailer_new(void)
|
Mailer * mailer_new(void)
|
||||||
{
|
{
|
||||||
@ -129,7 +158,6 @@ Mailer * mailer_new(void)
|
|||||||
mailer->account = NULL;
|
mailer->account = NULL;
|
||||||
mailer->account_cnt = 0;
|
mailer->account_cnt = 0;
|
||||||
mailer->account_cur = NULL;
|
mailer->account_cur = NULL;
|
||||||
/* g_idle_add(_new_accounts, mailer); */
|
|
||||||
/* widgets */
|
/* widgets */
|
||||||
mailer->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
mailer->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||||
gtk_window_set_default_size(GTK_WINDOW(mailer->window), 640, 480);
|
gtk_window_set_default_size(GTK_WINDOW(mailer->window), 640, 480);
|
||||||
@ -177,6 +205,9 @@ Mailer * mailer_new(void)
|
|||||||
mailer->statusbar_id = 0;
|
mailer->statusbar_id = 0;
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), mailer->statusbar, FALSE, FALSE, 0);
|
gtk_box_pack_start(GTK_BOX(vbox), mailer->statusbar, FALSE, FALSE, 0);
|
||||||
gtk_container_add(GTK_CONTAINER(mailer->window), vbox);
|
gtk_container_add(GTK_CONTAINER(mailer->window), vbox);
|
||||||
|
/* load configuration */
|
||||||
|
_new_config_load(mailer);
|
||||||
|
/* show window */
|
||||||
gtk_widget_show_all(mailer->window);
|
gtk_widget_show_all(mailer->window);
|
||||||
gtk_widget_hide(mailer->hdr_vbox);
|
gtk_widget_hide(mailer->hdr_vbox);
|
||||||
mailer->pr_window = NULL;
|
mailer->pr_window = NULL;
|
||||||
@ -322,6 +353,33 @@ static GtkWidget * _new_headers(Mailer * mailer)
|
|||||||
return vbox;
|
return vbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void _new_config_load(Mailer * mailer)
|
||||||
|
{
|
||||||
|
char * filename;
|
||||||
|
char * accounts;
|
||||||
|
char * p;
|
||||||
|
|
||||||
|
if((mailer->config = config_new()) == NULL)
|
||||||
|
return;
|
||||||
|
if((filename = _mailer_config_filename()) == NULL)
|
||||||
|
return;
|
||||||
|
config_load(mailer->config, filename);
|
||||||
|
free(filename);
|
||||||
|
if((accounts = config_get(mailer->config, "", "accounts")) == NULL
|
||||||
|
|| accounts[0] == '\0')
|
||||||
|
return;
|
||||||
|
for(p = accounts; *p != '\0'; p++)
|
||||||
|
{
|
||||||
|
if(*p != ',')
|
||||||
|
continue;
|
||||||
|
*p = '\0';
|
||||||
|
_mailer_config_load_account(mailer, accounts);
|
||||||
|
*p = ',';
|
||||||
|
accounts = p + 1;
|
||||||
|
}
|
||||||
|
if(accounts[0] != '\0')
|
||||||
|
_mailer_config_load_account(mailer, accounts);
|
||||||
|
}
|
||||||
|
|
||||||
void mailer_delete(Mailer * mailer)
|
void mailer_delete(Mailer * mailer)
|
||||||
{
|
{
|
||||||
|
@ -18,11 +18,15 @@
|
|||||||
#ifndef MAILER_MAILER_H
|
#ifndef MAILER_MAILER_H
|
||||||
# define MAILER_MAILER_H
|
# define MAILER_MAILER_H
|
||||||
|
|
||||||
|
# include <System.h>
|
||||||
# include <gtk/gtk.h>
|
# include <gtk/gtk.h>
|
||||||
# include "account/account.h"
|
# include "account/account.h"
|
||||||
|
|
||||||
|
|
||||||
/* Mailer */
|
/* Mailer */
|
||||||
|
/* defaults */
|
||||||
|
# define MAILER_CONFIG_FILE ".mailer"
|
||||||
|
|
||||||
/* types */
|
/* types */
|
||||||
typedef struct _Mailer
|
typedef struct _Mailer
|
||||||
{
|
{
|
||||||
@ -33,6 +37,9 @@ typedef struct _Mailer
|
|||||||
unsigned int account_cnt;
|
unsigned int account_cnt;
|
||||||
Account * account_cur;
|
Account * account_cur;
|
||||||
|
|
||||||
|
/* configuration */
|
||||||
|
Config * config;
|
||||||
|
|
||||||
/* widgets */
|
/* widgets */
|
||||||
GtkWidget * window;
|
GtkWidget * window;
|
||||||
GtkWidget * view_folders;
|
GtkWidget * view_folders;
|
||||||
|
@ -8,6 +8,7 @@ dist=Makefile,callbacks.h,common.h,compose.h,mailer.h
|
|||||||
|
|
||||||
[mailer]
|
[mailer]
|
||||||
type=binary
|
type=binary
|
||||||
|
ldflags=-L $(PREFIX)/lib -Wl,-rpath,$(PREFIX)/lib -l System
|
||||||
sources=account.c,callbacks.c,common.c,compose.c,mailer.c,main.c
|
sources=account.c,callbacks.c,common.c,compose.c,mailer.c,main.c
|
||||||
|
|
||||||
[account.c]
|
[account.c]
|
||||||
|
Loading…
Reference in New Issue
Block a user