aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook
diff options
context:
space:
mode:
Diffstat (limited to 'addressbook')
-rw-r--r--addressbook/conduit/.cvsignore8
-rw-r--r--addressbook/conduit/Makefile.am14
-rw-r--r--addressbook/conduit/address-conduit-control-applet.c45
-rw-r--r--addressbook/conduit/address-conduit.c660
-rw-r--r--addressbook/conduit/address-conduit.h43
5 files changed, 326 insertions, 444 deletions
diff --git a/addressbook/conduit/.cvsignore b/addressbook/conduit/.cvsignore
new file mode 100644
index 0000000000..6f302c2ac7
--- /dev/null
+++ b/addressbook/conduit/.cvsignore
@@ -0,0 +1,8 @@
+.deps
+.libs
+*.lo
+Makefile.in
+Makefile
+libaddress_conduit.la
+address-conduit-control-applet
+address.conduit \ No newline at end of file
diff --git a/addressbook/conduit/Makefile.am b/addressbook/conduit/Makefile.am
index 64a1103bce..01c37f4a30 100644
--- a/addressbook/conduit/Makefile.am
+++ b/addressbook/conduit/Makefile.am
@@ -1,13 +1,8 @@
-#
-#
-#
-
INCLUDES = \
- -I$(top_srcdir)/calendar \
+ -I$(top_srcdir)/addressbook \
+ -I$(top_srcdir)/addressbook/backend \
$(GNOME_PILOT_CFLAGS)
-file_conduitsdir=$(libdir)/gnome-pilot/conduits
-
bin_PROGRAMS = address-conduit-control-applet
address_conduit_control_applet_SOURCES = address-conduit-control-applet.c
@@ -26,11 +21,6 @@ address_conduit_control_applet_LDADD = \
$(INTLLIBS)
-# $(top_builddir)/libgpilotdCM/libgpilotdcm.la \
-# $(top_builddir)/gpilotd/libgpilotd.la \
-# $(top_builddir)/gpilotd/libgpilotdconduit.la \
-
-
# address_conduit
address_conduitsdir=$(libdir)/gnome-pilot/conduits
address_conduits_LTLIBRARIES = libaddress_conduit.la
diff --git a/addressbook/conduit/address-conduit-control-applet.c b/addressbook/conduit/address-conduit-control-applet.c
index 79a43fe5c6..07a6e0042f 100644
--- a/addressbook/conduit/address-conduit-control-applet.c
+++ b/addressbook/conduit/address-conduit-control-applet.c
@@ -32,22 +32,21 @@ GtkWidget *dialogWindow=NULL;
gboolean activated,org_activation_state;
GnomePilotConduitManagement *conduit;
GnomePilotConduitConfig *conduit_config;
-GCalConduitCfg *origState = NULL;
-GCalConduitCfg *curState = NULL;
+AddressbookConduitCfg *origState = NULL;
+AddressbookConduitCfg *curState = NULL;
-static void doTrySettings(GtkWidget *widget, GCalConduitCfg *GCalConduitCfg);
-static void doRevertSettings(GtkWidget *widget, GCalConduitCfg *GCalConduitCfg);
-static void doSaveSettings(GtkWidget *widget, GCalConduitCfg *GCalConduitCfg);
+static void doTrySettings(GtkWidget *widget, AddressbookConduitCfg *cfg);
+static void doRevertSettings(GtkWidget *widget, AddressbookConduitCfg *cfg);
+static void doSaveSettings(GtkWidget *widget, AddressbookConduitCfg *cfg);
-//static void readStateCfg (GtkWidget *w, GCalConduitCfg *c);
-static void setStateCfg (GtkWidget *w, GCalConduitCfg *c);
+//static void readStateCfg (GtkWidget *w, AddressbookConduitCfg *c);
+static void setStateCfg (GtkWidget *w, AddressbookConduitCfg *c);
gint pilotId;
CORBA_Environment ev;
static GnomePilotClient *gpc;
-
/* This array must be in the same order as enumerations
in GnomePilotConduitSyncType as they are used as index.
Custom type implies Disabled state.
@@ -65,7 +64,7 @@ static gchar* sync_options[] ={ N_("Disabled"),
/* Saves the configuration data. */
static void
-gcalconduit_save_configuration(GCalConduitCfg *c)
+addressbookconduit_save_configuration(AddressbookConduitCfg *c)
{
gchar prefix[256];
@@ -80,11 +79,11 @@ gcalconduit_save_configuration(GCalConduitCfg *c)
}
/* Creates a duplicate of the configuration data */
-static GCalConduitCfg*
-gcalconduit_dupe_configuration(GCalConduitCfg *c) {
- GCalConduitCfg *retval;
+static AddressbookConduitCfg*
+gcalconduit_dupe_configuration(AddressbookConduitCfg *c) {
+ AddressbookConduitCfg *retval;
g_return_val_if_fail(c!=NULL,NULL);
- retval = g_new0(GCalConduitCfg,1);
+ retval = g_new0(AddressbookConduitCfg,1);
retval->sync_type = c->sync_type;
retval->open_secret = c->open_secret;
retval->pilotId = c->pilotId;
@@ -93,7 +92,7 @@ gcalconduit_dupe_configuration(GCalConduitCfg *c) {
static void
-doTrySettings(GtkWidget *widget, GCalConduitCfg *c)
+doTrySettings(GtkWidget *widget, AddressbookConduitCfg *c)
{
/*
readStateCfg (cfgStateWindow, curState);
@@ -111,27 +110,27 @@ doTrySettings(GtkWidget *widget, GCalConduitCfg *c)
else
gnome_pilot_conduit_config_disable (conduit_config);
- gcalconduit_save_configuration (c);
+ addressbookconduit_save_configuration (c);
}
static void
-doSaveSettings(GtkWidget *widget, GCalConduitCfg *GCalConduitCfg)
+doSaveSettings(GtkWidget *widget, AddressbookConduitCfg *cfg)
{
- doTrySettings(widget, GCalConduitCfg);
- gcalconduit_save_configuration(GCalConduitCfg);
+ doTrySettings(widget, cfg);
+ addressbookconduit_save_configuration(cfg);
}
static void
-doCancelSettings(GtkWidget *widget, GCalConduitCfg *c)
+doCancelSettings(GtkWidget *widget, AddressbookConduitCfg *c)
{
doSaveSettings (widget, c);
}
static void
-doRevertSettings(GtkWidget *widget, GCalConduitCfg *GCalConduitCfg)
+doRevertSettings(GtkWidget *widget, AddressbookConduitCfg *cfg)
{
activated = org_activation_state;
setStateCfg (cfgStateWindow, curState);
@@ -217,7 +216,7 @@ static GtkWidget
static void
-setStateCfg (GtkWidget *w, GCalConduitCfg *c)
+setStateCfg (GtkWidget *w, AddressbookConduitCfg *c)
{
GtkOptionMenu *optionMenu;
GtkMenu *menu;
@@ -236,7 +235,7 @@ setStateCfg (GtkWidget *w, GCalConduitCfg *c)
#if 0
static void
-readStateCfg (GtkWidget *w, GCalConduitCfg *c)
+readStateCfg (GtkWidget *w, AddressbookConduitCfg *c)
{
/*
GtkWidget *button;
@@ -362,7 +361,7 @@ main (int argc, char *argv[])
if(!pilotId) return -1;
/* put all code to set things up in here */
- gcalconduit_load_configuration (&origState, pilotId);
+ conduit_load_configuration (&origState, pilotId);
conduit = gnome_pilot_conduit_management_new ("address_conduit", GNOME_PILOT_CONDUIT_MGMT_ID);
if (conduit == NULL) return -1;
diff --git a/addressbook/conduit/address-conduit.c b/addressbook/conduit/address-conduit.c
index e954bbb4b0..3c6ccf573b 100644
--- a/addressbook/conduit/address-conduit.c
+++ b/addressbook/conduit/address-conduit.c
@@ -8,9 +8,6 @@
#include <signal.h>
#include <errno.h>
-#include <cal-client/cal-client.h>
-#include <cal-util/calobj.h>
-#include <cal-util/timeutil.h>
#include <pi-source.h>
#include <pi-socket.h>
#include <pi-file.h>
@@ -21,14 +18,14 @@
#include <gpilotd/gnome-pilot-conduit.h>
#include <gpilotd/gnome-pilot-conduit-standard-abs.h>
#include <address-conduit.h>
-
-//#include "GnomeCal.h"
+#include <libversit/vcc.h>
+#include "ebook/e-book-types.h"
GnomePilotConduit * conduit_get_gpilot_conduit (guint32);
void conduit_destroy_gpilot_conduit (GnomePilotConduit*);
-void local_record_from_icalobject (GCalLocalRecord *local, iCalObject *obj);
+void local_record_from_ecard (AddressbookLocalRecord *local, ECard *ecard);
-#define CONDUIT_VERSION "0.8.11"
+#define CONDUIT_VERSION "0.1"
#ifdef G_LOG_DOMAIN
#undef G_LOG_DOMAIN
#endif
@@ -37,13 +34,13 @@ void local_record_from_icalobject (GCalLocalRecord *local, iCalObject *obj);
#define DEBUG_CALCONDUIT 1
/* #undef DEBUG_CALCONDUIT */
-#ifdef DEBUG_CALCONDUIT
+#ifdef DEBUG_ADDRESSBOOKCONDUIT
#define show_exception(e) g_warning ("Exception: %s\n", CORBA_exception_id (e))
#define LOG(e...) g_log(G_LOG_DOMAIN,G_LOG_LEVEL_MESSAGE, e)
#else
#define show_exception(e)
#define LOG(e...)
-#endif
+#endif
#define WARN(e...) g_log(G_LOG_DOMAIN,G_LOG_LEVEL_WARNING, e)
#define INFO(e...) g_log(G_LOG_DOMAIN,G_LOG_LEVEL_MESSAGE, e)
@@ -57,12 +54,18 @@ void local_record_from_icalobject (GCalLocalRecord *local, iCalObject *obj);
}
+static void
+status_cb (EBook *ebook, EBookStatus status, gpointer closure)
+{
+ (*(EBookStatus*)closure) = status;
+ gtk_main_quit();
+}
/* Destroys any data allocated by gcalconduit_load_configuration
and deallocates the given configuration. */
static void
-gcalconduit_destroy_configuration(GCalConduitCfg **c)
+conduit_destroy_configuration(AddressbookConduitCfg **c)
{
g_return_if_fail(c!=NULL);
g_return_if_fail(*c!=NULL);
@@ -71,86 +74,87 @@ gcalconduit_destroy_configuration(GCalConduitCfg **c)
}
-/* Given a GCalConduitContxt*, allocates the structure */
+/* Given a AddressbookConduitContext**, allocates the structure */
static void
-gcalconduit_new_context(GCalConduitContext **ctxt,
- GCalConduitCfg *c)
+conduit_new_context(AddressbookConduitContext **ctxt,
+ AddressbookConduitCfg *c)
{
- *ctxt = g_new0(GCalConduitContext,1);
+ *ctxt = g_new0(AddressbookConduitContext,1);
g_assert(ctxt!=NULL);
(*ctxt)->cfg = c;
CORBA_exception_init (&((*ctxt)->ev));
}
-/* Destroys any data allocated by gcalconduit_new_context
+/* Destroys any data allocated by conduit_new_context
and deallocates its data. */
static void
-gcalconduit_destroy_context(GCalConduitContext **ctxt)
+conduit_destroy_context(AddressbookConduitContext **ctxt)
{
g_return_if_fail(ctxt!=NULL);
g_return_if_fail(*ctxt!=NULL);
-/*
+
if ((*ctxt)->cfg!=NULL)
- gcalconduit_destroy_configuration(&((*ctxt)->cfg));
-*/
+ conduit_destroy_configuration(&((*ctxt)->cfg));
+
g_free(*ctxt);
*ctxt = NULL;
}
static void
-gnome_address_load_cb (GtkWidget *cal_client,
- CalClientLoadStatus status,
- GCalConduitContext *ctxt)
+cursor_cb (EBook *book, EBookStatus status, ECardCursor *cursor, gpointer closure)
{
- //CalClient *client = CAL_CLIENT (cal_client);
+ AddressbookConduitContext *ctxt = (AddressbookConduitContext*)closure;
- printf ("entering gnome_address_load_cb, tried=%d\n",
- ctxt->address_load_tried);
+ if (status == E_BOOK_STATUS_SUCCESS) {
+ long length;
+ int i;
- if (status == CAL_CLIENT_LOAD_SUCCESS) {
+ ctxt->cursor = cursor;
ctxt->address_load_success = TRUE;
- printf (" success\n");
- gtk_main_quit (); /* end the sub event loop */
- } else {
- if (ctxt->address_load_tried) {
- printf ("load and create of address failed\n");
- gtk_main_quit (); /* end the sub event loop */
- return;
- }
- // cal_client_create_address (client, ctxt->address_file);
- ctxt->address_load_tried = 1;
+ length = e_card_cursor_get_length (cursor);
+ ctxt->cards = NULL;
+ for (i = 0; i < length; i ++)
+ ctxt->cards = g_list_append (ctxt->cards, e_card_cursor_get_nth (cursor, i));
+
+ gtk_main_quit(); /* end the sub event loop */
+ }
+ else {
+ WARN (_("BLARG\n"));
+ gtk_main_quit(); /* end the sub event loop */
}
}
+static void
+book_open_cb (EBook *book, EBookStatus status, gpointer closure)
+{
+ AddressbookConduitContext *ctxt = (AddressbookConduitContext*)closure;
-
-
+ if (status == E_BOOK_STATUS_SUCCESS) {
+ e_book_get_cursor (book, "(contains \"full_name\" \"\")", cursor_cb, ctxt);
+ }
+ else {
+ WARN (_("BLARG\n"));
+ gtk_main_quit(); /* end the sub event loop */
+ }
+}
static int
start_address_server (GnomePilotConduitStandardAbs *conduit,
- GCalConduitContext *ctxt)
+ AddressbookConduitContext *ctxt)
{
g_return_val_if_fail(conduit!=NULL,-2);
g_return_val_if_fail(ctxt!=NULL,-2);
- ctxt->client = cal_client_new ();
-
- /* FIX ME */
- ctxt->address_file = g_concat_dir_and_file (g_get_home_dir (),
- "evolution/local/something");
-
- gtk_signal_connect (GTK_OBJECT (ctxt->client), "cal_loaded",
- gnome_address_load_cb, ctxt);
+ ctxt->ebook = e_book_new ();
- printf ("calling cal_client_load_address\n");
- //cal_client_load_address (ctxt->client, ctxt->address_file);
+ e_book_load_uri (ctxt->ebook, "file:/home/toshok/evolution/local/Contacts", book_open_cb, ctxt);
- /* run a sub event loop to turn cal-client's async load
- notification into a synchronous call */
+ /* run a sub event loop to turn ebook's async loading into a
+ synchronous call */
gtk_main ();
if (ctxt->address_load_success)
@@ -159,78 +163,22 @@ start_address_server (GnomePilotConduitStandardAbs *conduit,
return -1;
}
-
-
-static GSList *
-get_address_objects(GnomePilotConduitStandardAbs *conduit,
- gboolean *status,
- GCalConduitContext *ctxt)
-{
-#if 0
- GList *uids;
- GSList *result = NULL;
-
- g_return_val_if_fail (conduit != NULL, NULL);
- g_return_val_if_fail (ctxt != NULL, NULL);
-
- uids = cal_client_get_uids (ctxt->client, CALOBJ_TYPE_ADDRESS);
-
- printf ("got %d address entries from cal server\n", g_list_length (uids));
-
- if (status != NULL)
- (*status) = TRUE;
-
- if (! uids)
- INFO ("No entries found");
- else {
- GList *c;
- for (c=uids; c; c=c->next)
- result = g_slist_prepend (result, (gchar *) c->data);
- /* FIX ME free uids */
- }
-
- return result;
-#endif /* 0 */
- return NULL;
-}
-
-
-static void
-local_record_from_ical_uid (GCalLocalRecord *local,
- char *uid,
- GCalConduitContext *ctxt)
-{
- iCalObject *obj;
- CalClientGetStatus status;
-
- g_assert(local!=NULL);
-
- status = cal_client_get_object (ctxt->client, uid, &obj);
-
- if (status == CAL_CLIENT_GET_SUCCESS)
- local_record_from_icalobject(local,obj);
- else
- INFO ("Object did not exist");
-}
-
-
/*
- * converts a iCalObject to a GCalLocalRecord
+ * converts a ECard to a AddressbookLocalRecord
*/
-
void
-local_record_from_icalobject(GCalLocalRecord *local,
- iCalObject *obj)
+local_record_from_ecard(AddressbookLocalRecord *local,
+ ECard *ecard)
{
g_return_if_fail(local!=NULL);
- g_return_if_fail(obj!=NULL);
+ g_return_if_fail(ecard!=NULL);
- local->ical = obj;
- local->local.ID = local->ical->pilot_id;
-/*
+ local->ecard = ecard;
+ local->local.ID = local->ecard->pilot_id;
+#if 0
LOG ("local->Id = %ld [%s], status = %d",
local->local.ID,obj->summary,local->ical->pilot_status);
-*/
+
switch(local->ical->pilot_status) {
case ICAL_PILOT_SYNC_NONE:
local->local.attr = GnomePilotRecordNothing;
@@ -242,218 +190,193 @@ local_record_from_icalobject(GCalLocalRecord *local,
local->local.attr = GnomePilotRecordDeleted;
break;
}
+#endif
+
+ local->local.attr = GnomePilotRecordNothing;
/* Records without a pilot_id are new */
if(local->local.ID == 0)
local->local.attr = GnomePilotRecordNew;
local->local.secret = 0;
+#if 0
if(obj->class!=NULL)
if(strcmp(obj->class,"PRIVATE")==0)
local->local.secret = 1;
+#endif
local->local.archived = 0;
}
+static ECard *
+get_ecard_by_pilot_id (GList *card_list, recordid_t id)
+{
+ GList *l;
+
+ for (l = card_list; l; l = l->next) {
+ guint32 pilot_id;
+ ECard *card = l->data;
+
+ if (!card)
+ continue;
+
+ gtk_object_get (GTK_OBJECT(card), "pilot_id", &pilot_id);
+
+ if (pilot_id == id)
+ return card;
+ }
+
+ return NULL;
+}
/*
* Given a PilotRecord, find the matching record in
- * the address repository. If no match, return NULL
+ * the addressbook. If no match, return NULL
*/
-static GCalLocalRecord *
-find_record_in_repository(GnomePilotConduitStandardAbs *conduit,
- PilotRecord *remote,
- GCalConduitContext *ctxt)
+static AddressbookLocalRecord *
+find_record_in_ebook(GnomePilotConduitStandardAbs *conduit,
+ PilotRecord *remote,
+ AddressbookConduitContext *ctxt)
{
- char *uid = NULL;
- GCalLocalRecord *loc;
- CalClientGetStatus status;
- iCalObject *obj;
+ AddressbookLocalRecord *loc;
+ ECard *ecard;
g_return_val_if_fail(conduit!=NULL,NULL);
g_return_val_if_fail(remote!=NULL,NULL);
LOG ("requesting %ld", remote->ID);
+ ecard = get_ecard_by_pilot_id (ctxt->cards, remote->ID);
- status = cal_client_get_uid_by_pilot_id (ctxt->client, remote->ID, &uid);
-
- if (status == CAL_CLIENT_GET_SUCCESS) {
- status = cal_client_get_object (ctxt->client, uid, &obj);
- if (status == CAL_CLIENT_GET_SUCCESS) {
- LOG ("Found");
- loc = g_new0(GCalLocalRecord,1);
- /* memory allocated in new_from_string is freed in free_match */
- local_record_from_icalobject (loc, obj);
- return loc;
- }
+ if (NULL != ecard) {
+ LOG ("Found");
+ loc = g_new0(AddressbookLocalRecord,1);
+ /* memory allocated in new_from_string is freed in free_match */
+ local_record_from_ecard (loc, ecard);
+ return loc;
}
INFO ("Object did not exist");
return NULL;
}
-
-/*
- * updates an given iCalObject in the repository
- */
-static void
-update_address_entry_in_repository(GnomePilotConduitStandardAbs *conduit,
- iCalObject *obj,
- GCalConduitContext *ctxt)
-{
- gboolean success;
-
- g_return_if_fail(conduit!=NULL);
- g_return_if_fail(obj!=NULL);
-
- success = cal_client_update_object (ctxt->client, obj);
-}
-
-
-static iCalObject *
-ical_from_remote_record(GnomePilotConduitStandardAbs *conduit,
- PilotRecord *remote,
- iCalObject *in_obj)
+static ECard *
+ecard_from_remote_record(GnomePilotConduitStandardAbs *conduit,
+ PilotRecord *remote)
{
-#if 0
- iCalObject *obj;
+ ECard *ecard;
struct Address address;
- time_t now;
-
- now = time (NULL);
+ VObject *vobj;
+ VObject *nameprop, *addressprop;
+ char *temp;
g_return_val_if_fail(remote!=NULL,NULL);
memset (&address, 0, sizeof (struct Address));
unpack_Address (&address, remote->record, remote->length);
- if (in_obj == NULL)
- obj = ical_new (address.note ? address.note : "",
- g_get_user_name (),
- address.description ? address.description : "");
- else
- obj = in_obj;
-
- if (address.note) {
- g_free (obj->comment);
- obj->comment = g_strdup (address.note);
- }
- if (address.description) {
- g_free (obj->summary);
- obj->summary = g_strdup (address.description);
- }
+ vobj = newVObject (VCCardProp);
+ nameprop = addProp (vobj, VCNameProp);
- obj->type = ICAL_ADDRESS;
- obj->new = TRUE;
- obj->created = now;
- obj->last_mod = now;
- obj->priority = 0;
- obj->transp = 0;
- obj->related = NULL;
- obj->pilot_id = remote->ID;
- obj->pilot_status = ICAL_PILOT_SYNC_NONE;
-
- /*
- * Begin and end
- */
-
- obj->dtend = mktime (& address.due);
+#define ADD_PROP(v,pilotprop,vprop) \
+ if (address.entry [(pilotprop)]) \
+ addPropValue ((v), (vprop), address.entry [(pilotprop)])
- if (address.complete)
- obj->completed = now-5; /* FIX ME */
+ ADD_PROP (nameprop, entryFirstname, VCGivenNameProp);
+ ADD_PROP (nameprop, entryLastname, VCFamilyNameProp);
- printf ("[%s] from pilot, complete=%d/%ld\n",
- address.description,
- address.complete,
- obj->completed);
+ addressprop = addProp (vobj, VCAdrProp);
- obj->priority = address.priority;
+ ADD_PROP (addressprop, entryAddress, VCStreetAddressProp);
+ ADD_PROP (addressprop, entryCity, VCCityProp);
+ ADD_PROP (addressprop, entryState, VCRegionProp);
+ ADD_PROP (addressprop, entryZip, VCPostalCodeProp);
+ ADD_PROP (addressprop, entryCountry, VCCountryNameProp);
- g_free (obj->class);
-
- if (remote->attr & dlpRecAttrSecret)
- obj->class = g_strdup ("PRIVATE");
- else
- obj->class = g_strdup ("PUBLIC");
+ ADD_PROP (vobj, entryTitle, VCTitleProp);
+
+ if (address.entry [entryCompany]) {
+ VObject *orgprop;
+ orgprop = addProp (vobj, VCOrgProp);
+ ADD_PROP (orgprop, entryCompany, VCOrgNameProp);
+ }
+ temp = writeMemVObject (NULL, NULL, vobj);
+ ecard = e_card_new (temp);
+ free (temp);
+ cleanVObject (vobj);
free_Address(&address);
- return obj;
-#endif /* 0 */
- return NULL;
+ gtk_object_set (GTK_OBJECT(ecard), "pilot_id", remote->ID);
+
+ return ecard;
}
+static void
+add_card_cb (EBook *ebook, EBookStatus status, const char *id, gpointer closure)
+{
+ (*(EBookStatus*)closure) = status;
+ gtk_main_quit();
+}
static gint
update_record (GnomePilotConduitStandardAbs *conduit,
PilotRecord *remote,
- GCalConduitContext *ctxt)
+ AddressbookConduitContext *ctxt)
{
-#if 0
- iCalObject *obj;
struct Address address;
- CalClientGetStatus status;
- char *uid;
+ ECard *ecard;
g_return_val_if_fail(remote!=NULL,-1);
memset (&address, 0, sizeof (struct Address));
unpack_Address (&address, remote->record, remote->length);
- LOG ("requesting %ld [%s]", remote->ID, address.description);
- printf ("requesting %ld [%s]\n", remote->ID, address.description);
+ LOG ("requesting %ld [%s %s]", remote->ID, address.entry[entryFirstname], address.entry[entryLastname]);
+ printf ("requesting %ld [%s %s]\n", remote->ID, address.entry[entryFirstname], address.entry[entryLastname]);
- status = cal_client_get_uid_by_pilot_id(ctxt->client, remote->ID, &uid);
- if (status == CAL_CLIENT_GET_SUCCESS)
- status = cal_client_get_object (ctxt->client, uid, &obj);
+ ecard = get_ecard_by_pilot_id (ctxt->cards, remote->ID);
- if (status != CAL_CLIENT_GET_SUCCESS) {
- time_t now = time (NULL);
+ if (ecard == NULL) {
+ EBookStatus ebook_status;
LOG ("Object did not exist, creating a new one");
printf ("Object did not exist, creating a new one\n");
- obj = ical_new (address.note ? address.note : "",
- g_get_user_name (),
- address.description ? address.description : "");
-
- obj->type = ICAL_ADDRESS;
- obj->new = TRUE;
- obj->created = now;
- obj->last_mod = now;
- obj->priority = 0;
- obj->transp = 0;
- obj->related = NULL;
- obj->pilot_id = remote->ID;
- obj->pilot_status = ICAL_PILOT_SYNC_NONE;
+ ecard = ecard_from_remote_record (conduit, remote);
+
+ /* add the ecard to the server */
+ e_book_add_card (ctxt->ebook, ecard, add_card_cb, &ebook_status);
+ gtk_main(); /* enter sub mainloop */
+
+ if (ebook_status == E_BOOK_STATUS_SUCCESS)
+ ctxt->cards = g_list_append (ctxt->cards, ecard);
+ else
+ WARN ("update_record: failed to add card to ebook\n");
} else {
+#if 0
+ /* XXX toshok: need to figure out exactly what should
+ be done here - default to the existing ecard and
+ overwrite with information from the pilot? */
iCalObject *new_obj;
LOG ("Found");
printf ("Found\n");
- new_obj = ical_from_remote_record (conduit, remote, obj);
+ new_obj = ecard_from_remote_record (conduit, remote, obj);
obj = new_obj;
+#endif
}
+#if 0
/* update record on server */
-
- update_address_entry_in_repository (conduit, obj, ctxt);
- cal_client_update_pilot_id (ctxt->client, obj->uid, obj->pilot_id,
- ICAL_PILOT_SYNC_NONE);
-
- /*
- * Shutdown
- */
- ical_object_unref (obj);
+ update_ecard (conduit, ecard, ctxt);
+#endif
free_Address(&address);
-#endif /* 0 */
-
return 0;
}
static void
-check_for_slow_setting (GnomePilotConduit *c, GCalConduitContext *ctxt)
+check_for_slow_setting (GnomePilotConduit *c, AddressbookConduitContext *ctxt)
{
#if 0
GList *uids;
@@ -476,51 +399,27 @@ check_for_slow_setting (GnomePilotConduit *c, GCalConduitContext *ctxt)
static gint
pre_sync (GnomePilotConduit *c,
GnomePilotDBInfo *dbi,
- GCalConduitContext *ctxt)
+ AddressbookConduitContext *ctxt)
{
int l;
unsigned char *buf;
GnomePilotConduitStandardAbs *conduit;
- /* gint num_records; */
- //GList *uids;
-
- /*
- g_log_set_always_fatal (G_LOG_LEVEL_ERROR |
- G_LOG_LEVEL_CRITICAL |
- G_LOG_LEVEL_WARNING);
- */
-
conduit = GNOME_PILOT_CONDUIT_STANDARD_ABS(c);
- g_message ("GnomeCal Conduit v.%s",CONDUIT_VERSION);
+ g_message ("Evolution Addressbook Conduit v.%s",CONDUIT_VERSION);
- ctxt->client = NULL;
+ ctxt->ebook = NULL;
if (start_address_server (GNOME_PILOT_CONDUIT_STANDARD_ABS(c), ctxt) != 0) {
- WARN(_("Could not start gnomecal server"));
+ WARN(_("Could not start addressbook server"));
gnome_pilot_conduit_error(GNOME_PILOT_CONDUIT(c),
- _("Could not start gnomecal server"));
+ _("Could not start addressbook server"));
return -1;
}
-#if 0
/* Set the counters for the progress bar crap */
- num_records = GNOME_Calendar_Repository_get_number_of_objects (ctxt->calendar, GNOME_Calendar_Repository_ANY, &(ctxt->ev));
-
- catch_ret_val (ctxt->ev, -1);
- gnome_pilot_conduit_standard_abs_set_num_local_records(GNOME_PILOT_CONDUIT_STANDARD_ABS(c), num_records);
- num_records = GNOME_Calendar_Repository_get_number_of_objects (ctxt->calendar, GNOME_Calendar_Repository_MODIFIED, &(ctxt->ev));
- catch_ret_val (ctxt->ev, -1);
- gnome_pilot_conduit_standard_abs_set_num_updated_local_records(GNOME_PILOT_CONDUIT_STANDARD_ABS(c), num_records);
- num_records = GNOME_Calendar_Repository_get_number_of_objects (ctxt->calendar, GNOME_Calendar_Repository_NEW, &(ctxt->ev));
- catch_ret_val (ctxt->ev, -1);
- gnome_pilot_conduit_standard_abs_set_num_new_local_records(GNOME_PILOT_CONDUIT_STANDARD_ABS(c), num_records);
- num_records = GNOME_Calendar_Repository_get_number_of_objects (ctxt->calendar, GNOME_Calendar_Repository_DELETED, &(ctxt->ev));
- catch_ret_val (ctxt->ev, -1);
- gnome_pilot_conduit_standard_abs_set_num_deleted_local_records(GNOME_PILOT_CONDUIT_STANDARD_ABS(c), num_records);
-#endif /* 0 */
gtk_object_set_data(GTK_OBJECT(c),"dbinfo",dbi);
@@ -528,16 +427,21 @@ pre_sync (GnomePilotConduit *c,
buf = (unsigned char*)g_malloc(0xffff);
if((l=dlp_ReadAppBlock(dbi->pilot_socket,dbi->db_handle,0,(unsigned char *)buf,0xffff)) < 0) {
- WARN(_("Could not read pilot's DateBook application block"));
+ WARN(_("Could not read pilot's Address application block"));
WARN("dlp_ReadAppBlock(...) = %d",l);
gnome_pilot_conduit_error(GNOME_PILOT_CONDUIT(c),
- _("Could not read pilot's DateBook application block"));
+ _("Could not read pilot's Address application block"));
return -1;
}
unpack_AddressAppInfo(&(ctxt->ai),buf,l);
g_free(buf);
+#if 0
check_for_slow_setting(c,ctxt);
+#else
+ /* for now just always use the slow sync method */
+ gnome_pilot_conduit_standard_set_slow (GNOME_PILOT_CONDUIT_STANDARD (c));
+#endif
return 0;
}
@@ -552,16 +456,16 @@ pre_sync (GnomePilotConduit *c,
static gint
match_record (GnomePilotConduitStandardAbs *conduit,
- GCalLocalRecord **local,
+ AddressbookLocalRecord **local,
PilotRecord *remote,
- GCalConduitContext *ctxt)
+ AddressbookConduitContext *ctxt)
{
LOG ("in match_record");
g_return_val_if_fail(local!=NULL,-1);
g_return_val_if_fail(remote!=NULL,-1);
- *local = find_record_in_repository(conduit,remote,ctxt);
+ *local = find_record_in_ebook(conduit,remote,ctxt);
if (*local==NULL) return -1;
return 0;
@@ -574,15 +478,15 @@ match_record (GnomePilotConduitStandardAbs *conduit,
*/
static gint
free_match (GnomePilotConduitStandardAbs *conduit,
- GCalLocalRecord **local,
- GCalConduitContext *ctxt)
+ AddressbookLocalRecord **local,
+ AddressbookConduitContext *ctxt)
{
LOG ("entering free_match");
g_return_val_if_fail(local!=NULL,-1);
g_return_val_if_fail(*local!=NULL,-1);
- ical_object_unref (GCAL_LOCALRECORD(*local)->ical);
+ gtk_object_unref (GTK_OBJECT((*local)->ecard));
g_free(*local);
*local = NULL;
@@ -594,8 +498,8 @@ free_match (GnomePilotConduitStandardAbs *conduit,
*/
static gint
archive_local (GnomePilotConduitStandardAbs *conduit,
- GCalLocalRecord *local,
- GCalConduitContext *ctxt)
+ AddressbookLocalRecord *local,
+ AddressbookConduitContext *ctxt)
{
LOG ("entering archive_local");
@@ -606,12 +510,12 @@ archive_local (GnomePilotConduitStandardAbs *conduit,
/*
Store in archive and set status to Nothing
- */
+*/
static gint
archive_remote (GnomePilotConduitStandardAbs *conduit,
- GCalLocalRecord *local,
+ AddressbookLocalRecord *local,
PilotRecord *remote,
- GCalConduitContext *ctxt)
+ AddressbookConduitContext *ctxt)
{
LOG ("entering archive_remote");
@@ -627,7 +531,7 @@ archive_remote (GnomePilotConduitStandardAbs *conduit,
static gint
store_remote (GnomePilotConduitStandardAbs *conduit,
PilotRecord *remote,
- GCalConduitContext *ctxt)
+ AddressbookConduitContext *ctxt)
{
LOG ("entering store_remote");
@@ -639,8 +543,8 @@ store_remote (GnomePilotConduitStandardAbs *conduit,
static gint
clear_status_archive_local (GnomePilotConduitStandardAbs *conduit,
- GCalLocalRecord *local,
- GCalConduitContext *ctxt)
+ AddressbookLocalRecord *local,
+ AddressbookConduitContext *ctxt)
{
LOG ("entering clear_status_archive_local");
@@ -651,52 +555,39 @@ clear_status_archive_local (GnomePilotConduitStandardAbs *conduit,
static gint
iterate (GnomePilotConduitStandardAbs *conduit,
- GCalLocalRecord **local,
- GCalConduitContext *ctxt)
+ AddressbookLocalRecord **local,
+ AddressbookConduitContext *ctxt)
{
- static GSList *events,*iterator;
- static int hest;
+ static GList *iterator;
+ static int num;
g_return_val_if_fail(local!=NULL,-1);
- if(*local==NULL) {
+ if (*local==NULL) {
LOG ("beginning iteration");
- events = get_address_objects (conduit, NULL, ctxt);
- hest = 0;
+ iterator = ctxt->cards;
+ num = 0;
- if(events!=NULL) {
- LOG ("iterating over %d records", g_slist_length (events));
- *local = g_new0(GCalLocalRecord,1);
-
- local_record_from_ical_uid(*local,(gchar*)events->data,ctxt);
- iterator = events;
- } else {
- LOG ("no events");
- (*local) = NULL;
- }
+ LOG ("iterating over %d records", g_list_length (ctxt->cards));
+ *local = g_new0(AddressbookLocalRecord, 1);
+ local_record_from_ecard (*local, (ECard*)iterator->data);
} else {
/* printf ("continuing iteration\n"); */
- hest++;
- if(g_slist_next(iterator)==NULL) {
- GSList *l;
-
+ num++;
+ if(g_list_next(iterator)==NULL) {
LOG ("ending");
/** free stuff allocated for iteration */
g_free((*local));
- LOG ("iterated over %d records", hest);
- for(l=events;l;l=l->next)
- g_free(l->data);
-
- g_slist_free(events);
+ LOG ("iterated over %d records", num);
/* ends iteration */
(*local) = NULL;
return 0;
} else {
- iterator = g_slist_next(iterator);
- local_record_from_ical_uid(*local,(gchar*)(iterator->data),ctxt);
+ iterator = g_list_next (iterator);
+ local_record_from_ecard (*local,(ECard*)(iterator->data));
}
}
return 1;
@@ -705,10 +596,10 @@ iterate (GnomePilotConduitStandardAbs *conduit,
static gint
iterate_specific (GnomePilotConduitStandardAbs *conduit,
- GCalLocalRecord **local,
+ AddressbookLocalRecord **local,
gint flag,
gint archived,
- GCalConduitContext *ctxt)
+ AddressbookConduitContext *ctxt)
{
#ifdef DEBUG_CALCONDUIT
{
@@ -737,7 +628,7 @@ iterate_specific (GnomePilotConduitStandardAbs *conduit,
static gint
purge (GnomePilotConduitStandardAbs *conduit,
- GCalConduitContext *ctxt)
+ AddressbookConduitContext *ctxt)
{
LOG ("entering purge");
@@ -749,10 +640,11 @@ purge (GnomePilotConduitStandardAbs *conduit,
static gint
set_status (GnomePilotConduitStandardAbs *conduit,
- GCalLocalRecord *local,
+ AddressbookLocalRecord *local,
gint status,
- GCalConduitContext *ctxt)
+ AddressbookConduitContext *ctxt)
{
+#if 0
gboolean success;
LOG ("entering set_status(status=%d)",status);
@@ -786,62 +678,69 @@ set_status (GnomePilotConduitStandardAbs *conduit,
if (! success) {
WARN (_("Error while communicating with address server"));
}
+#endif
return 0;
}
static gint
set_archived (GnomePilotConduitStandardAbs *conduit,
- GCalLocalRecord *local,
+ AddressbookLocalRecord *local,
gint archived,
- GCalConduitContext *ctxt)
+ AddressbookConduitContext *ctxt)
{
+#if 0
LOG ("entering set_archived");
g_return_val_if_fail(local!=NULL,-1);
- g_assert(local->ical!=NULL);
+ g_assert(local->ecard!=NULL);
local->local.archived = archived;
update_address_entry_in_repository (conduit, local->ical, ctxt);
+#endif
return 0;
}
static gint
set_pilot_id (GnomePilotConduitStandardAbs *conduit,
- GCalLocalRecord *local,
+ AddressbookLocalRecord *local,
guint32 ID,
- GCalConduitContext *ctxt)
+ AddressbookConduitContext *ctxt)
{
+ EBookStatus commit_status;
+
LOG ("entering set_pilot_id(id=%d)",ID);
g_return_val_if_fail(local!=NULL,-1);
- g_assert(local->ical!=NULL);
+ g_assert(local->ecard!=NULL);
local->local.ID = ID;
- local->ical->pilot_id = ID;
- cal_client_update_pilot_id (ctxt->client,
- local->ical->uid,
- local->local.ID,
- local->ical->pilot_status);
+ gtk_object_set (GTK_OBJECT(local->ecard), "pilot_id", local->local.ID);
+ e_book_commit_card (ctxt->ebook, local->ecard, status_cb, &commit_status);
- return 0;
+ if (commit_status == E_BOOK_STATUS_SUCCESS) {
+ return 0;
+ }
+ else {
+ WARN ("set_pilot_id failed.\n");
+ return -1;
+ }
}
static gint
transmit (GnomePilotConduitStandardAbs *conduit,
- GCalLocalRecord *local,
+ AddressbookLocalRecord *local,
PilotRecord **remote,
- GCalConduitContext *ctxt)
+ AddressbookConduitContext *ctxt)
{
-#if 0
PilotRecord *p;
LOG ("entering transmit");
g_return_val_if_fail(local!=NULL,-1);
g_return_val_if_fail(remote!=NULL,-1);
- g_assert(local->ical!=NULL);
+ g_assert(local->ecard!=NULL);
p = g_new0(PilotRecord,1);
@@ -852,23 +751,11 @@ transmit (GnomePilotConduitStandardAbs *conduit,
local->address = g_new0(struct Address,1);
- local->address->indefinite = 0; /* FIX ME */
- local->address->due = *localtime (&local->ical->dtend);
- local->address->priority = local->ical->priority;
-
- if (local->ical->completed > 0)
- local->address->complete = 1; /* FIX ME */
-
- /* STOP: don't replace these with g_strdup, since free_Address
- uses free to deallocte */
- local->address->description =
- local->ical->summary==NULL?NULL:strdup(local->ical->summary);
- local->address->note =
- local->ical->comment==NULL?NULL:strdup(local->ical->comment);
-
+#if 0
printf ("transmitting address to pilot [%s] complete=%d/%ld\n",
local->ical->summary==NULL?"NULL":local->ical->summary,
local->address->complete, local->ical->completed);
+#endif
/* Generate pilot record structure */
p->record = g_new0(char,0xffff);
@@ -876,16 +763,14 @@ transmit (GnomePilotConduitStandardAbs *conduit,
*remote = p;
-#endif /* 0 */
-
return 0;
}
static gint
free_transmit (GnomePilotConduitStandardAbs *conduit,
- GCalLocalRecord *local,
+ AddressbookLocalRecord *local,
PilotRecord **remote,
- GCalConduitContext *ctxt)
+ AddressbookConduitContext *ctxt)
{
LOG ("entering free_transmit");
@@ -900,9 +785,9 @@ free_transmit (GnomePilotConduitStandardAbs *conduit,
static gint
compare (GnomePilotConduitStandardAbs *conduit,
- GCalLocalRecord *local,
- PilotRecord *remote,
- GCalConduitContext *ctxt)
+ AddressbookLocalRecord *local,
+ PilotRecord *remote,
+ AddressbookConduitContext *ctxt)
{
#if 0
/* used by the quick compare */
@@ -969,9 +854,9 @@ compare (GnomePilotConduitStandardAbs *conduit,
static gint
compare_backup (GnomePilotConduitStandardAbs *conduit,
- GCalLocalRecord *local,
+ AddressbookLocalRecord *local,
PilotRecord *remote,
- GCalConduitContext *ctxt)
+ AddressbookConduitContext *ctxt)
{
LOG ("entering compare_backup");
@@ -981,28 +866,25 @@ compare_backup (GnomePilotConduitStandardAbs *conduit,
return -1;
}
-
static gint
delete_all (GnomePilotConduitStandardAbs *conduit,
- GCalConduitContext *ctxt)
+ AddressbookConduitContext *ctxt)
{
- GSList *events,*it;
- gboolean error;
- gboolean success;
-
- events = get_address_objects (conduit, &error, ctxt);
+ GList *it;
- if (error == FALSE) return -1;
- for (it=events; it; it = g_slist_next (it)) {
- success = cal_client_remove_object (ctxt->client, it->data);
+ for (it=ctxt->cards; it; it = g_list_next (it)) {
+ EBookStatus remove_status;
+ e_book_remove_card (ctxt->ebook, it->data, status_cb, &remove_status);
+ gtk_main (); /* enter sub main loop */
- if (!success)
- INFO ("Object did not exist");
+ if (E_BOOK_STATUS_SUCCESS != remove_status)
+ WARN ("Failed to remove ecard");
- g_free (it->data);
+ gtk_object_unref (it->data);
}
- g_slist_free (events);
+ g_list_free (ctxt->cards);
+ ctxt->cards = NULL;
return -1;
}
@@ -1011,8 +893,8 @@ GnomePilotConduit *
conduit_get_gpilot_conduit (guint32 pilotId)
{
GtkObject *retval;
- GCalConduitCfg *cfg;
- GCalConduitContext *ctxt;
+ AddressbookConduitCfg *cfg;
+ AddressbookConduitContext *ctxt;
printf ("in address's conduit_get_gpilot_conduit\n");
@@ -1020,10 +902,10 @@ conduit_get_gpilot_conduit (guint32 pilotId)
g_assert (retval != NULL);
gnome_pilot_conduit_construct(GNOME_PILOT_CONDUIT(retval),"AddressConduit");
- gcalconduit_load_configuration(&cfg,pilotId);
+ conduit_load_configuration(&cfg,pilotId);
gtk_object_set_data(retval,"addressconduit_cfg",cfg);
- gcalconduit_new_context(&ctxt,cfg);
+ conduit_new_context(&ctxt,cfg);
gtk_object_set_data(GTK_OBJECT(retval),"addressconduit_context",ctxt);
gtk_signal_connect (retval, "match_record", (GtkSignalFunc) match_record, ctxt);
@@ -1051,19 +933,19 @@ conduit_get_gpilot_conduit (guint32 pilotId)
void
conduit_destroy_gpilot_conduit (GnomePilotConduit *conduit)
{
- GCalConduitCfg *cc;
- GCalConduitContext *ctxt;
+ AddressbookConduitCfg *cc;
+ AddressbookConduitContext *ctxt;
- cc = GET_GCALCONFIG(conduit);
- ctxt = GET_GCALCONTEXT(conduit);
+ cc = GET_CONDUITCFG(conduit);
+ ctxt = GET_CONDUITCONTEXT(conduit);
- if (ctxt->client != NULL) {
- gtk_object_unref (GTK_OBJECT (ctxt->client));
+ if (ctxt->ebook != NULL) {
+ gtk_object_unref (GTK_OBJECT (ctxt->ebook));
}
- gcalconduit_destroy_configuration (&cc);
+ conduit_destroy_configuration (&cc);
- gcalconduit_destroy_context (&ctxt);
+ conduit_destroy_context (&ctxt);
gtk_object_destroy (GTK_OBJECT (conduit));
}
diff --git a/addressbook/conduit/address-conduit.h b/addressbook/conduit/address-conduit.h
index ec22e6631c..82f1b885a3 100644
--- a/addressbook/conduit/address-conduit.h
+++ b/addressbook/conduit/address-conduit.h
@@ -10,9 +10,9 @@
#include <pi-address.h>
#include <gpilotd/gnome-pilot-conduit.h>
#include <gpilotd/gnome-pilot-conduit-standard-abs.h>
-#include <cal-client/cal-client.h>
-#include <cal-util/calobj.h>
-#include <cal-util/timeutil.h>
+#include "ebook/e-card.h"
+#include "ebook/e-book.h"
+#include "ebook/e-book-view.h"
#ifdef USING_OAF
#include <liboaf/liboaf.h>
@@ -22,35 +22,38 @@
/* This is the local record structure for the GnomeCal conduit. */
-typedef struct _GCalLocalRecord GCalLocalRecord;
-struct _GCalLocalRecord {
+typedef struct _AddressbookLocalRecord AddressbookLocalRecord;
+struct _AddressbookLocalRecord {
/* The stuff from gnome-pilot-conduit-standard-abs.h
Must be first in the structure, or instances of this
structure cannot be used by gnome-pilot-conduit-standard-abs.
*/
LocalRecord local;
- /* The corresponding iCal object, as found by GnomeCal. */
- iCalObject *ical;
+ /* The corresponding Evolution addressbook object. */
+ ECard *ecard;
/* pilot-link address structure, used for implementing Transmit. */
struct Address *address;
};
-#define GCAL_LOCALRECORD(s) ((GCalLocalRecord*)(s))
+#define ADDRESSBOOK_LOCALRECORD(s) ((AddressbookLocalRecord*)(s))
/* This is the configuration of the GnomeCal conduit. */
-typedef struct _GCalConduitCfg GCalConduitCfg;
-struct _GCalConduitCfg {
+typedef struct _AddressbookConduitCfg AddressbookConduitCfg;
+struct _AddressbookConduitCfg {
gboolean open_secret;
guint32 pilotId;
GnomePilotConduitSyncType sync_type; /* only used by capplet */
};
-#define GET_GCALCONFIG(c) ((GCalConduitCfg*)gtk_object_get_data(GTK_OBJECT(c),"addressconduit_cfg"))
+#define GET_CONDUITCFG(c) ((AddressbookConduitCfg*)gtk_object_get_data(GTK_OBJECT(c),"addressconduit_cfg"))
-/* This is the context for all the GnomeCal conduit methods. */
-typedef struct _GCalConduitContext GCalConduitContext;
-struct _GCalConduitContext {
+/* This is the context for all the Addressbook conduit methods. */
+typedef struct _AddressbookConduitContext AddressbookConduitContext;
+struct _AddressbookConduitContext {
struct AddressAppInfo ai;
- GCalConduitCfg *cfg;
- CalClient *client;
+ AddressbookConduitCfg *cfg;
+ EBook *ebook;
+ ECardCursor *cursor;
+ GList *cards;
+ /* CalClient *client;*/
CORBA_Environment ev;
CORBA_ORB orb;
gboolean address_load_tried;
@@ -58,7 +61,7 @@ struct _GCalConduitContext {
char *address_file;
};
-#define GET_GCALCONTEXT(c) ((GCalConduitContext*)gtk_object_get_data(GTK_OBJECT(c),"addressconduit_context"))
+#define GET_CONDUITCONTEXT(c) ((AddressbookConduitContext*)gtk_object_get_data(GTK_OBJECT(c),"addressconduit_context"))
/* Given a GCalConduitCfg*, allocates the structure and
@@ -67,13 +70,13 @@ struct _GCalConduitContext {
both address-conduit and address-conduit-control-applet,
and we don't want to export any symbols we don't have to. */
static void
-gcalconduit_load_configuration(GCalConduitCfg **c,
- guint32 pilotId)
+conduit_load_configuration(AddressbookConduitCfg **c,
+ guint32 pilotId)
{
gchar prefix[256];
g_snprintf(prefix,255,"/gnome-pilot.d/address-conduit/Pilot_%u/",pilotId);
- *c = g_new0(GCalConduitCfg,1);
+ *c = g_new0(AddressbookConduitCfg,1);
g_assert(*c != NULL);
gnome_config_push_prefix(prefix);
(*c)->open_secret = gnome_config_get_bool("open_secret=FALSE");