From: Alex Badea Date: Sun, 20 Jun 2010 12:30:35 +0000 (+0300) Subject: applet: factor out config-related functions to their own source file X-Git-Url: https://vcs.maemo.org/git/?p=espeaktime;a=commitdiff_plain;h=9f203c4dbeb3095816d839fd317c3c680bf17fd5 applet: factor out config-related functions to their own source file --- diff --git a/src/Makefile.am b/src/Makefile.am index 77006b7..25d50d0 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -6,12 +6,12 @@ espeaktimed_LDADD = $(GLIB_LIBS) $(DBUS_LIBS) $(MCE_LIBS) $(HAL_LIBS) libcpdir = $(libdir)/hildon-control-panel libcp_LTLIBRARIES = libespeaktime-cp.la -libespeaktime_cp_la_SOURCES = applet.c +libespeaktime_cp_la_SOURCES = applet.c config.c libespeaktime_cp_la_CFLAGS = $(HILDON_CFLAGS) $(GCONF_CLAGS) $(OSSO_CFLAGS) libespeaktime_cp_la_LDFLAGS = -module -avoid-version libespeaktime_cp_la_LIBADD = $(HILDON_LIBS) $(GCONF_LIBS) EXTRA_PROGRAMS = applet -applet_SOURCES = applet.c +applet_SOURCES = applet.c config.c applet_CFLAGS = -DTEST $(HILDON_CFLAGS) $(GCONF_CFLAGS) $(OSSO_CFLAGS) applet_LDADD = $(HILDON_LIBS) $(GCONF_LIBS) diff --git a/src/applet.c b/src/applet.c index 639f8b4..2fd3a44 100644 --- a/src/applet.c +++ b/src/applet.c @@ -1,13 +1,9 @@ #include -#include #include #include #include -#include #include - -#define ESPEAKTIME_BIN "espeaktime-now.sh" -#define GCONF_KEY "/apps/Maemo/espeaktime" +#include "config.h" /* TODO: read these from disk */ @@ -74,98 +70,6 @@ static const struct effect { }; static const int num_effects = sizeof(effects) / sizeof(effects[0]); -struct espeaktime_settings { - gchar *voice; - gchar *effect; - gchar *text; - gint amplitude; - gint pitch; - gint speed; - gboolean ignore_silent; -}; - -static void cfg_read(GConfClient *client, struct espeaktime_settings *cfg) -{ - cfg->voice = gconf_client_get_string(client, GCONF_KEY "/voice", NULL); - cfg->effect = gconf_client_get_string(client, GCONF_KEY "/effect", NULL); - cfg->text = gconf_client_get_string(client, GCONF_KEY "/text", NULL); - cfg->amplitude = gconf_client_get_int(client, GCONF_KEY "/amplitude", NULL); - cfg->pitch = gconf_client_get_int(client, GCONF_KEY "/pitch", NULL); - cfg->speed = gconf_client_get_int(client, GCONF_KEY "/speed", NULL); - cfg->ignore_silent = gconf_client_get_bool(client, GCONF_KEY "/ignore_silent", NULL); - if (!cfg->voice) - cfg->voice = g_strdup("en-us"); - if (!cfg->effect) - cfg->effect = g_strdup(""); - if (!cfg->text) - cfg->text = g_strdup("%H:%M"); - if (!cfg->amplitude) - cfg->amplitude = 100; - if (!cfg->pitch) - cfg->pitch = 50; - if (!cfg->speed) - cfg->speed = 170; - /* TODO: default ignore_silent to TRUE */ -} - -static void cfg_write(GConfClient *client, struct espeaktime_settings *cfg) -{ - gconf_client_add_dir(client, GCONF_KEY, GCONF_CLIENT_PRELOAD_NONE, NULL); - gconf_client_set_string(client, GCONF_KEY "/voice", cfg->voice, NULL); - gconf_client_set_string(client, GCONF_KEY "/effect", cfg->effect, NULL); - gconf_client_set_string(client, GCONF_KEY "/text", cfg->text, NULL); - gconf_client_set_int(client, GCONF_KEY "/amplitude", cfg->amplitude, NULL); - gconf_client_set_int(client, GCONF_KEY "/pitch", cfg->pitch, NULL); - gconf_client_set_int(client, GCONF_KEY "/speed", cfg->speed, NULL); - gconf_client_set_bool(client, GCONF_KEY "/ignore_silent", cfg->ignore_silent, NULL); -} - -static void cfg_free(struct espeaktime_settings *cfg) -{ - g_free(cfg->voice); - g_free(cfg->effect); - g_free(cfg->text); -} - -static void cfg_speak(struct espeaktime_settings *cfg, gboolean test_mode) -{ - gchar astr[16], pstr[16], sstr[16]; - gchar vstr[64]; - gchar text[4096]; - time_t t; - struct tm *tm; - int res; - pid_t pid; - - time(&t); - tm = localtime(&t); - - g_snprintf(astr, sizeof(astr), "%d", cfg->amplitude); - g_snprintf(pstr, sizeof(pstr), "%d", cfg->pitch); - g_snprintf(sstr, sizeof(sstr), "%d", cfg->speed); - g_snprintf(vstr, sizeof(vstr), "%s%s%s", cfg->voice, - (*cfg->effect) ? "+" : "", cfg->effect); - strftime(text, sizeof(text), cfg->text, tm); - - setenv("EST_TESTMODE", test_mode ? "1" : "0", 1); - setenv("EST_IGN_SILENT", cfg->ignore_silent ? "1" : "0", 1); - - pid = fork(); - if (pid < 0) { - perror("fork"); - return; - } - if (pid) - return; - g_print("execlp: -a '%s' -p '%s' -s '%s' -v '%s' '%s'\n", - astr, pstr, sstr, vstr, text); - res = execlp(ESPEAKTIME_BIN, ESPEAKTIME_BIN, - "-a", astr, "-p", pstr, "-s", sstr, "-v", vstr, - text, NULL); - g_print("execlp: %d (%s)\n", res, g_strerror(errno)); - exit(res); -} - static void add_scale(GtkVBox *vbox, GtkSizeGroup *size_group, const char *caption, GtkAdjustment *adjustment) { diff --git a/src/config.c b/src/config.c new file mode 100644 index 0000000..8eadd3f --- /dev/null +++ b/src/config.c @@ -0,0 +1,89 @@ +#include "config.h" +#include +#include +#include + +#define ESPEAKTIME_BIN "espeaktime-now.sh" +#define GCONF_KEY "/apps/Maemo/espeaktime" + +void cfg_read(GConfClient *client, struct espeaktime_settings *cfg) +{ + cfg->voice = gconf_client_get_string(client, GCONF_KEY "/voice", NULL); + cfg->effect = gconf_client_get_string(client, GCONF_KEY "/effect", NULL); + cfg->text = gconf_client_get_string(client, GCONF_KEY "/text", NULL); + cfg->amplitude = gconf_client_get_int(client, GCONF_KEY "/amplitude", NULL); + cfg->pitch = gconf_client_get_int(client, GCONF_KEY "/pitch", NULL); + cfg->speed = gconf_client_get_int(client, GCONF_KEY "/speed", NULL); + cfg->ignore_silent = gconf_client_get_bool(client, GCONF_KEY "/ignore_silent", NULL); + if (!cfg->voice) + cfg->voice = g_strdup("en-us"); + if (!cfg->effect) + cfg->effect = g_strdup(""); + if (!cfg->text) + cfg->text = g_strdup("%H:%M"); + if (!cfg->amplitude) + cfg->amplitude = 100; + if (!cfg->pitch) + cfg->pitch = 50; + if (!cfg->speed) + cfg->speed = 170; + /* TODO: default ignore_silent to TRUE */ +} + +void cfg_write(GConfClient *client, struct espeaktime_settings *cfg) +{ + gconf_client_add_dir(client, GCONF_KEY, GCONF_CLIENT_PRELOAD_NONE, NULL); + gconf_client_set_string(client, GCONF_KEY "/voice", cfg->voice, NULL); + gconf_client_set_string(client, GCONF_KEY "/effect", cfg->effect, NULL); + gconf_client_set_string(client, GCONF_KEY "/text", cfg->text, NULL); + gconf_client_set_int(client, GCONF_KEY "/amplitude", cfg->amplitude, NULL); + gconf_client_set_int(client, GCONF_KEY "/pitch", cfg->pitch, NULL); + gconf_client_set_int(client, GCONF_KEY "/speed", cfg->speed, NULL); + gconf_client_set_bool(client, GCONF_KEY "/ignore_silent", cfg->ignore_silent, NULL); +} + +void cfg_free(struct espeaktime_settings *cfg) +{ + g_free(cfg->voice); + g_free(cfg->effect); + g_free(cfg->text); +} + +void cfg_speak(struct espeaktime_settings *cfg, gboolean test_mode) +{ + gchar astr[16], pstr[16], sstr[16]; + gchar vstr[64]; + gchar text[4096]; + time_t t; + struct tm *tm; + int res; + pid_t pid; + + time(&t); + tm = localtime(&t); + + g_snprintf(astr, sizeof(astr), "%d", cfg->amplitude); + g_snprintf(pstr, sizeof(pstr), "%d", cfg->pitch); + g_snprintf(sstr, sizeof(sstr), "%d", cfg->speed); + g_snprintf(vstr, sizeof(vstr), "%s%s%s", cfg->voice, + (*cfg->effect) ? "+" : "", cfg->effect); + strftime(text, sizeof(text), cfg->text, tm); + + setenv("EST_TESTMODE", test_mode ? "1" : "0", 1); + setenv("EST_IGN_SILENT", cfg->ignore_silent ? "1" : "0", 1); + + pid = fork(); + if (pid < 0) { + perror("fork"); + return; + } + if (pid) + return; + g_print("execlp: -a '%s' -p '%s' -s '%s' -v '%s' '%s'\n", + astr, pstr, sstr, vstr, text); + res = execlp(ESPEAKTIME_BIN, ESPEAKTIME_BIN, + "-a", astr, "-p", pstr, "-s", sstr, "-v", vstr, + text, NULL); + g_print("execlp: %d (%s)\n", res, g_strerror(errno)); + exit(res); +} diff --git a/src/config.h b/src/config.h new file mode 100644 index 0000000..0018778 --- /dev/null +++ b/src/config.h @@ -0,0 +1,22 @@ +#ifndef _ESPEAKTIME_CONFIG_H +#define _ESPEAKTIME_CONFIG_H + +#include + +struct espeaktime_settings { + gchar *voice; + gchar *effect; + gchar *text; + gint amplitude; + gint pitch; + gint speed; + gboolean ignore_silent; +}; + +extern void cfg_read(GConfClient *client, struct espeaktime_settings *cfg); +extern void cfg_write(GConfClient *client, struct espeaktime_settings *cfg); +extern void cfg_speak(struct espeaktime_settings *cfg, gboolean test_mode); +extern void cfg_free(struct espeaktime_settings *cfg); + +#endif +