rip out all the old xml-based configuration code, and replace it with gconf-based code

This commit is contained in:
Robey Pointer 2000-09-08 00:04:52 +00:00
parent 0c86ea239f
commit 68378e5964
6 changed files with 152 additions and 215 deletions

View file

@ -1,3 +1,26 @@
2000-09-07 Robey Pointer <robey@eazel.com>
* components/services/install/lib/eazel-install-metadata.c:
(done_with_gconf), (check_gconf_init), (get_conf_string),
(get_conf_int), (get_conf_boolean), (get_urltype_from_string),
(init_default_install_configuration),
(init_default_transfer_configuration), (transferoptions_destroy),
(installoptions_destroy):
* components/services/install/lib/eazel-install-metadata.h:
* components/services/install/lib/eazel-install-object.c:
(eazel_install_new_with_config):
* components/services/install/lib/eazel-install-public.h:
* components/services/install/server/main.c:
(eazel_install_service_factory):
Rip out all the old XML-based configuration code, and replace it
with gconf-based code.
* components/services/trilobite/libtrilobite/trilobite-redirect.c:
Put redirection table into the same subtree as other trilobite
stuff. (This may change soon anyway.)
2000-09-08 Daniel Egger <egger@suse.de>
* components/help/converters/gnome-db2html2/gdb3html.c:

View file

@ -26,255 +26,171 @@
*/
#include <config.h>
#include <gconf/gconf.h>
#include <gconf/gconf-engine.h>
#include "eazel-install-metadata.h"
#define EAZEL_SERVICES_DIR_HOME "/var/eazel"
#define EAZEL_SERVICES_DIR EAZEL_SERVICES_DIR_HOME "/services"
#define INSTALL_GCONF_PATH "/apps/eazel-trilobite/install"
static gboolean create_default_metadata (const char* config_file);
static gboolean create_default_configuration_metafile (const char* target_file);
static gboolean xml_doc_sanity_checks (xmlDocPtr doc);
static URLType get_urltype_from_string (char* tmpbuf);
static gboolean get_boolean_value_from_string (char* tmpbuf);
/* these are NOT reasonable defaults. */
#define DEFAULT_SERVER "ham.eazel.com"
#define DEFAULT_PORT 8888
static gboolean
create_default_metadata (const char* config_file) {
gboolean rv;
int retval;
static GConfEngine *conf_engine = NULL;
g_print (_("Creating default configuration file ..."));
/* Ensure our services dir exists */
if (! g_file_test (EAZEL_SERVICES_DIR, G_FILE_TEST_ISDIR)) {
if (! g_file_test (EAZEL_SERVICES_DIR_HOME, G_FILE_TEST_ISDIR)) {
retval = mkdir (EAZEL_SERVICES_DIR_HOME, 0755);
if (retval < 0) {
if (errno != EEXIST) {
g_warning (_("*** Could not create services directory (%s)! ***"),
EAZEL_SERVICES_DIR_HOME);
rv = FALSE;
}
}
}
/* called by atexit so we can close the gconf connection */
static void
done_with_gconf (void)
{
gconf_engine_unref (conf_engine);
}
retval = mkdir (EAZEL_SERVICES_DIR, 0755);
if (retval < 0) {
if (errno != EEXIST) {
g_warning (_("*** Could not create services directory (%s)! ***"),
EAZEL_SERVICES_DIR);
rv = FALSE;
}
static void
check_gconf_init (void)
{
GConfError *error = NULL;
if (! gconf_is_initialized ()) {
char *argv[] = { "trilobite", NULL };
if (! gconf_init (1, argv, &error)) {
g_assert (error != NULL);
g_warning ("gconf init error: %s", error->str);
gconf_error_destroy (error);
}
}
rv = create_default_configuration_metafile (config_file);
if (rv == FALSE) {
g_warning (_("*** Could not create the default configuration file! ***"));
return FALSE;
if (conf_engine == NULL) {
conf_engine = gconf_engine_get_default ();
g_atexit (done_with_gconf);
}
return TRUE;
} /* end create_default_metadata */
}
static char *
get_conf_string (const char *key, const char *default_value)
{
char *full_key;
char *value;
full_key = g_strdup_printf ("%s/%s", INSTALL_GCONF_PATH, key);
value = gconf_get_string (conf_engine, full_key, NULL);
if ((value == NULL) && (default_value != NULL)) {
value = g_strdup (default_value);
}
g_free (full_key);
return value;
}
static int
get_conf_int (const char *key, int default_value)
{
char *full_key;
int value;
GConfError *error = NULL;
full_key = g_strdup_printf ("%s/%s", INSTALL_GCONF_PATH, key);
value = gconf_get_int (conf_engine, full_key, &error);
if (error != NULL) {
value = default_value;
gconf_error_destroy (error);
}
g_free (full_key);
return value;
}
static gboolean
create_default_configuration_metafile (const char* target_file) {
get_conf_boolean (const char *key, gboolean default_value)
{
char *full_key;
gboolean value;
GConfError *error = NULL;
xmlDocPtr doc;
xmlNodePtr tree;
doc = xmlNewDoc ("1.0");
doc->root = xmlNewDocNode (doc, NULL, "EAZEL_INSTALLER", NULL);
tree = xmlNewChild (doc->root, NULL, "PROTOCOL", "HTTP");
tree = xmlNewChild (doc->root, NULL, "PKG_LIST", "/var/eazel/services/package-list.xml");
tree = xmlNewChild (doc->root, NULL, "VERBOSE", "TRUE");
tree = xmlNewChild (doc->root, NULL, "SILENT", "FALSE");
tree = xmlNewChild (doc->root, NULL, "DEBUG", "TRUE");
tree = xmlNewChild (doc->root, NULL, "DRY_RUN", "FALSE");
tree = xmlNewChild (doc->root, NULL, "FORCE", "FALSE");
tree = xmlNewChild (doc->root, NULL, "DEPEND", "FALSE");
tree = xmlNewChild (doc->root, NULL, "UPDATE", "TRUE");
tree = xmlNewChild (doc->root, NULL, "UNINSTALL", "FALSE");
tree = xmlNewChild (doc->root, NULL, "DOWNGRADE", "FALSE");
tree = xmlNewChild (doc->root, NULL, "PORT", "8888");
tree = xmlNewChild (doc->root, NULL, "HOSTNAME", "ham.eazel.com");
tree = xmlNewChild (doc->root, NULL, "PKG_LIST_STORAGE_PATH", "/package-list.xml");
tree = xmlNewChild (doc->root, NULL, "TMP_DIR", "/tmp/eazel-install");
tree = xmlNewChild (doc->root, NULL, "RPMRC_FILE", "/usr/lib/rpm/rpmrc");
if (doc == NULL) {
xmlFreeDoc (doc);
g_error (_("*** Error generating default configuration file! ***"));
full_key = g_strdup_printf ("%s/%s", INSTALL_GCONF_PATH, key);
value = gconf_get_bool (conf_engine, full_key, &error);
if (error != NULL) {
value = default_value;
gconf_error_destroy (error);
}
xmlSaveFile (target_file, doc);
xmlFreeDoc (doc);
return TRUE;
} /* end create_default_configuration_metafile */
static gboolean
xml_doc_sanity_checks (xmlDocPtr doc) {
xmlNodePtr base;
if (doc == NULL) {
xmlFreeDoc (doc);
g_warning (_("*** Unable to open config file! ***"));
return FALSE;
}
base = doc->root;
if (base == NULL) {
xmlFreeDoc (doc);
g_warning (_("*** The config file contains no data! ***"));
return FALSE;
}
if (g_strcasecmp (base->name, "EAZEL_INSTALLER")) {
g_print (_("*** Cannot find the EAZEL_INSTALLER xmlnode! ***"));
xmlFreeDoc (doc);
g_warning (_("*** Bailing from xmlparse! ***"));
return FALSE;
}
return TRUE;
} /* end xml_doc_sanity_checks */
g_free (full_key);
return value;
}
static URLType
get_urltype_from_string (char* tmpbuf) {
get_urltype_from_string (char* tmpbuf)
{
URLType rv;
if (tmpbuf[0] == 'l' || tmpbuf[0] == 'L') {
rv = PROTOCOL_LOCAL;
}
else if (tmpbuf[0] == 'h' || tmpbuf[0] == 'H') {
} else if (tmpbuf[0] == 'f' || tmpbuf[0] == 'F') {
rv = PROTOCOL_FTP;
} else if (tmpbuf[0] == 'h' || tmpbuf[0] == 'H') {
rv = PROTOCOL_HTTP;
} else {
g_warning (_("Could not set URLType from config file!"));
rv = PROTOCOL_HTTP;
}
else if (tmpbuf[0] == 'f' || tmpbuf[0] == 'F') {
rv = PROTOCOL_FTP;
}
else {
g_warning (_("Could not set URLType from config file!"));
}
return rv;
} /* end get_urltype_from_string */
}
static gboolean
get_boolean_value_from_string (char* tmpbuf) {
gboolean rv;
if (tmpbuf[0] == 't' || tmpbuf[0] == 'T') {
rv = TRUE;
}
else if (tmpbuf[0] == 'f' || tmpbuf[0] == 'F') {
rv = FALSE;
}
return rv;
} /* end get_boolean_value_from_string */
InstallOptions*
init_default_install_configuration (const char* config_file) {
InstallOptions* rv;
xmlDocPtr doc;
xmlNodePtr base;
char* tmpbuf;
g_return_val_if_fail (config_file != NULL, NULL);
if (!g_file_exists (config_file)) {
create_default_metadata (config_file);
}
doc = xmlParseFile (config_file);
if (xml_doc_sanity_checks (doc)==FALSE) {
return NULL;
}
base = doc->root;
InstallOptions *
init_default_install_configuration (void)
{
InstallOptions *rv;
char *temp;
check_gconf_init ();
rv = g_new0 (InstallOptions, 1);
tmpbuf = xml_get_value (base, "PROTOCOL");
rv->protocol = get_urltype_from_string (tmpbuf);
temp = get_conf_string ("protocol", "http");
rv->protocol = get_urltype_from_string (temp);
g_free (temp);
rv->pkg_list = g_strdup (xml_get_value (base, "PKG_LIST"));
rv->transaction_dir = g_strdup (xml_get_value (base, "TRANSACTION_DIR"));
rv->pkg_list = get_conf_string ("package-list", "/var/eazel/services/package-list.xml");
rv->transaction_dir = get_conf_string ("transaction-dir", NULL);
if (rv->transaction_dir == NULL) {
rv->transaction_dir = g_strdup_printf ("%s/.nautilus/transactions", g_get_home_dir ());
}
tmpbuf = xml_get_value (base, "VERBOSE");
rv->mode_verbose = get_boolean_value_from_string (tmpbuf);
rv->mode_verbose = get_conf_boolean ("verbose", TRUE);
rv->mode_silent = get_conf_boolean ("silent", FALSE);
rv->mode_debug = get_conf_boolean ("debug", TRUE);
rv->mode_test = get_conf_boolean ("dry-run", FALSE);
rv->mode_force = get_conf_boolean ("force", FALSE);
rv->mode_depend = get_conf_boolean ("depend", FALSE);
rv->mode_update = get_conf_boolean ("update", TRUE);
rv->mode_uninstall = get_conf_boolean ("uninstall", FALSE);
rv->mode_downgrade = get_conf_boolean ("downgrade", FALSE);
tmpbuf = xml_get_value (base, "SILENT");
rv->mode_silent = get_boolean_value_from_string (tmpbuf);
tmpbuf = xml_get_value (base, "DEBUG");
rv->mode_debug = get_boolean_value_from_string (tmpbuf);
tmpbuf = xml_get_value (base, "DRY_RUN");
rv->mode_test = get_boolean_value_from_string (tmpbuf);
tmpbuf = xml_get_value (base, "FORCE");
rv->mode_force = get_boolean_value_from_string (tmpbuf);
tmpbuf = xml_get_value (base, "DEPEND");
rv->mode_depend = get_boolean_value_from_string (tmpbuf);
tmpbuf = xml_get_value (base, "UPDATE");
rv->mode_update = get_boolean_value_from_string (tmpbuf);
tmpbuf = xml_get_value (base, "UNINSTALL");
rv->mode_uninstall = get_boolean_value_from_string (tmpbuf);
tmpbuf = xml_get_value (base, "DOWNGRADE");
rv->mode_downgrade = get_boolean_value_from_string (tmpbuf);
g_free (tmpbuf);
xmlFreeDoc (doc);
return rv;
} /* end init_default_install_configuration */
}
TransferOptions*
init_default_transfer_configuration (const char* config_file) {
TransferOptions* rv;
xmlDocPtr doc;
xmlNodePtr base;
g_return_val_if_fail (config_file != NULL, NULL);
doc = xmlParseFile (config_file);
if (xml_doc_sanity_checks (doc)==FALSE) {
return NULL;
}
base = doc->root;
TransferOptions *
init_default_transfer_configuration (void)
{
TransferOptions *rv;
check_gconf_init ();
rv = g_new0 (TransferOptions, 1);
rv->port_number = atoi (xml_get_value (base, "PORT"));
rv->hostname = g_strdup (xml_get_value (base, "HOSTNAME"));
rv->pkg_list_storage_path = g_strdup (xml_get_value (base, "PKG_LIST_STORAGE_PATH"));
rv->tmp_dir = g_strdup (xml_get_value (base, "TMP_DIR"));
rv->rpmrc_file = g_strdup (xml_get_value (base, "RPMRC_FILE"));
xmlFreeDoc (doc);
rv->port_number = get_conf_int ("server/port", DEFAULT_PORT);
rv->hostname = get_conf_string ("server/hostname", DEFAULT_SERVER);
rv->pkg_list_storage_path = get_conf_string ("server/package-list-storage-path", "/package-list.xml");
rv->tmp_dir = get_conf_string ("server/temp-dir", "/tmp/eazel-install");
rv->rpmrc_file = get_conf_string ("server/rpmrc", "/usr/lib/rpm/rpmrc");
return rv;
} /* end init_default_transfer_configuration */
}
void
transferoptions_destroy (TransferOptions *topts)
{
g_return_if_fail (topts!=NULL);
g_free (topts->hostname);
topts->hostname = NULL;
g_free (topts->pkg_list_storage_path);
@ -289,6 +205,7 @@ void
installoptions_destroy (InstallOptions *iopts)
{
g_return_if_fail (iopts!=NULL);
g_free (iopts->pkg_list);
g_free (iopts->transaction_dir);
iopts->pkg_list = NULL;

View file

@ -29,13 +29,10 @@
#define EAZEL_INSTALL_METADATA_H
#include "eazel-install-types.h"
#include <libtrilobite/helixcode-utils.h>
#include <errno.h>
#include <sys/stat.h>
#include <gnome-xml/tree.h>
#include <gnome-xml/parser.h>
InstallOptions* init_default_install_configuration (const char* config_file);
TransferOptions* init_default_transfer_configuration (const char* config_file);
InstallOptions *init_default_install_configuration (void);
TransferOptions *init_default_transfer_configuration (void);
void transferoptions_destroy (TransferOptions *topts);
void installoptions_destroy (InstallOptions *iopts);
#endif /* EAZEL_INSTALL_METADATA_H */

View file

@ -22,6 +22,7 @@
*/
#include <config.h>
#include <errno.h>
#include <gnome.h>
#include "eazel-install-public.h"
@ -550,14 +551,14 @@ eazel_install_new()
}
EazelInstall*
eazel_install_new_with_config (const char *config_file)
eazel_install_new_with_config (void)
{
EazelInstall *service;
TransferOptions *topts;
InstallOptions *iopts;
iopts = init_default_install_configuration (config_file);
topts = init_default_transfer_configuration (config_file);
iopts = init_default_install_configuration ();
topts = init_default_transfer_configuration ();
if (iopts==NULL || topts==NULL) {
return NULL;

View file

@ -107,7 +107,7 @@ struct _EazelInstall
};
EazelInstall *eazel_install_new (void);
EazelInstall *eazel_install_new_with_config (const char *config_file);
EazelInstall *eazel_install_new_with_config (void);
GtkType eazel_install_get_type (void);
void eazel_install_unref (GtkObject *object);

View file

@ -35,7 +35,6 @@
#include <libgnomevfs/gnome-vfs.h>
#define DEFAULT_CONFIG_FILE "/var/eazel/services/eazel-services-config.xml"
#define OAF_ID_FACTORY "OAFIID:trilobite_eazel_install_service_factory:b423ff3f-1941-4b0d-bd45-6542f64abbfc"
#define OAF_ID "OAFIID:trilobite_eazel_install_service:8ff6e815-1992-437c-9771-d932db3b4a17"
@ -100,7 +99,7 @@ eazel_install_service_factory (BonoboGenericFactory *this_factory,
"prompt", "root",
NULL));
service = eazel_install_new_with_config (DEFAULT_CONFIG_FILE);
service = eazel_install_new_with_config ();
g_assert (trilobite != NULL);
g_assert (service != NULL);