aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/backend
diff options
context:
space:
mode:
authorChristopher James Lahey <clahey@helixcode.com>2000-04-10 23:46:25 +0800
committerChris Lahey <clahey@src.gnome.org>2000-04-10 23:46:25 +0800
commit99700ad43dcbf0bf95b335a9fc8f95934080d63c (patch)
treed325feef8319087bb323f592da432884d03b6e92 /addressbook/backend
parentc4f6086c2948f3384dd95393f7ea737db6143682 (diff)
downloadgsoc2013-evolution-99700ad43dcbf0bf95b335a9fc8f95934080d63c.tar
gsoc2013-evolution-99700ad43dcbf0bf95b335a9fc8f95934080d63c.tar.gz
gsoc2013-evolution-99700ad43dcbf0bf95b335a9fc8f95934080d63c.tar.bz2
gsoc2013-evolution-99700ad43dcbf0bf95b335a9fc8f95934080d63c.tar.lz
gsoc2013-evolution-99700ad43dcbf0bf95b335a9fc8f95934080d63c.tar.xz
gsoc2013-evolution-99700ad43dcbf0bf95b335a9fc8f95934080d63c.tar.zst
gsoc2013-evolution-99700ad43dcbf0bf95b335a9fc8f95934080d63c.zip
Fixed a bug where I was sending the wrong information to some callbacks.
2000-04-10 Christopher James Lahey <clahey@helixcode.com> * addressbook/backend/ebook/e-book-view.c: Fixed a bug where I was sending the wrong information to some callbacks. * addressbook/backend/ebook/e-card.c, addressbook/backend/ebook/e-card.h: Added an e_card_duplicate function. Made ids get stored in vcards. Made sure to delete the url if it exists. * addressbook/backend/pas/Makefile.am: Made pas include addressbook/backend/ebook/ in the search path. * addressbook/backend/pas/pas-backend-file.c: Fixed some bugs and made the create card function store the generated id in the card being saved. * addressbook/backend/pas/pas-book-view.c: Fixed a double free bug. * addressbook/contact-editor/e-contact-editor.c: Fixed some bugs. Made the contact editor actually return a valid card when gtk_object_get(editor, "card", ...) is called. * addressbook/contact-editor/e-contact-editor.h: Fixed a copy and paste error. * addressbook/gui/component/addressbook.c: Made this get the card properly. * addressbook/gui/minicard/Makefile.am: Made this include contact-editor directory in the search path and link against libecontacteditor so that double clicking can open a dialog. * addressbook/gui/minicard/e-minicard.c: Fixed some small bugs. Made double clicking open a contact editor dialog if this minicard is contained in a minicard view. (It needs the minicard view to get the EBook to save to. * wombat/Makefile.am: Link wombat against libebook, since pas-backend-file now uses ECard. svn path=/trunk/; revision=2360
Diffstat (limited to 'addressbook/backend')
-rw-r--r--addressbook/backend/ebook/e-book-view.c10
-rw-r--r--addressbook/backend/ebook/e-card.c47
-rw-r--r--addressbook/backend/ebook/e-card.h2
-rw-r--r--addressbook/backend/pas/Makefile.am1
-rw-r--r--addressbook/backend/pas/pas-backend-file.c23
-rw-r--r--addressbook/backend/pas/pas-book-view.c2
6 files changed, 69 insertions, 16 deletions
diff --git a/addressbook/backend/ebook/e-book-view.c b/addressbook/backend/ebook/e-book-view.c
index fa8deff67c..2931a9347d 100644
--- a/addressbook/backend/ebook/e-book-view.c
+++ b/addressbook/backend/ebook/e-book-view.c
@@ -51,9 +51,10 @@ e_book_view_do_modified_event (EBookView *book_view,
EBookViewListenerResponse *resp)
{
gtk_signal_emit (GTK_OBJECT (book_view), e_book_view_signals [CARD_CHANGED],
- resp->id);
+ resp->cards);
- g_free (resp->id);
+ g_list_foreach (resp->cards, (GFunc) gtk_object_unref, NULL);
+ g_list_free (resp->cards);
}
static void
@@ -61,10 +62,9 @@ e_book_view_do_removed_event (EBookView *book_view,
EBookViewListenerResponse *resp)
{
gtk_signal_emit (GTK_OBJECT (book_view), e_book_view_signals [CARD_REMOVED],
- resp->cards);
+ resp->id);
- g_list_foreach (resp->cards, (GFunc) gtk_object_unref, NULL);
- g_list_free (resp->cards);
+ g_free(resp->id);
}
diff --git a/addressbook/backend/ebook/e-card.c b/addressbook/backend/ebook/e-card.c
index 227643fe8c..9c135e4d1f 100644
--- a/addressbook/backend/ebook/e-card.c
+++ b/addressbook/backend/ebook/e-card.c
@@ -31,7 +31,8 @@ enum {
ARG_PHONE,
ARG_EMAIL,
ARG_BIRTH_DATE,
- ARG_URL
+ ARG_URL,
+ ARG_ID
};
#if 0
@@ -58,6 +59,7 @@ static void parse_email(ECard *card, VObject *object);
static void parse_phone(ECard *card, VObject *object);
static void parse_address(ECard *card, VObject *object);
static void parse_url(ECard *card, VObject *object);
+static void parse_id(ECard *card, VObject *object);
static ECardPhoneFlags get_phone_flags (VObject *vobj);
static void set_phone_flags (VObject *vobj, ECardPhoneFlags flags);
@@ -77,7 +79,8 @@ struct {
{ VCEmailAddressProp, parse_email },
{ VCTelephoneProp, parse_phone },
{ VCAdrProp, parse_address },
- { VCURLProp, parse_url }
+ { VCURLProp, parse_url },
+ { VCUniqueStringProp, parse_id }
};
/**
@@ -133,6 +136,14 @@ e_card_new (char *vcard)
return card;
}
+ECard *e_card_duplicate(ECard *card)
+{
+ char *vcard = e_card_get_vcard(card);
+ ECard *new_card = e_card_new(vcard);
+ g_free (vcard);
+ return new_card;
+}
+
/**
* e_card_get_id:
* @card: an #ECard
@@ -255,9 +266,12 @@ char
g_free(value);
}
- if ( card->url )
+ if (card->url)
addPropValue(vobj, VCURLProp, card->url);
+ if (card->id)
+ addPropValue (vobj, VCUniqueStringProp, card->id);
+
#if 0
@@ -349,9 +363,6 @@ char
add_CardProperty (vprop, &crd->sound.prop);
}
- add_CardStrProperty (vobj, VCURLProp, &crd->url);
- add_CardStrProperty (vobj, VCUniqueStringProp, &crd->uid);
-
if (crd->key.prop.used) {
vprop = addPropValue (vobj, VCPublicKeyProp, crd->key.data);
add_KeyType (vprop, crd->key.type);
@@ -455,12 +466,20 @@ parse_address(ECard *card, VObject *vobj)
static void
parse_url(ECard *card, VObject *vobj)
{
- if ( card->url )
+ if (card->url)
g_free(card->url);
assign_string(vobj, &(card->url));
}
static void
+parse_id(ECard *card, VObject *vobj)
+{
+ if ( card->id )
+ g_free(card->id);
+ assign_string(vobj, &(card->id));
+}
+
+static void
parse_attribute(ECard *card, VObject *vobj)
{
ParsePropertyFunc function = g_hash_table_lookup(E_CARD_CLASS(GTK_OBJECT(card)->klass)->attribute_jump_table, vObjectName(vobj));
@@ -506,6 +525,8 @@ e_card_class_init (ECardClass *klass)
GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_BIRTH_DATE);
gtk_object_add_arg_type ("ECard::url",
GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_URL);
+ gtk_object_add_arg_type ("ECard::id",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ID);
object_class->destroy = e_card_destroy;
@@ -592,6 +613,9 @@ e_card_destroy (GtkObject *object)
if ( card->bday )
g_free(card->bday);
+ if (card->url)
+ g_free(card->url);
+
if (card->email)
gtk_object_unref(GTK_OBJECT(card->email));
if (card->phone)
@@ -629,6 +653,12 @@ e_card_set_arg (GtkObject *object, GtkArg *arg, guint arg_id)
if ( card->url )
g_free(card->url);
card->url = GTK_VALUE_STRING(*arg);
+ break;
+ case ARG_ID:
+ if (card->id)
+ g_free(card->id);
+ card->id = GTK_VALUE_STRING(*arg);
+ break;
default:
return;
}
@@ -676,6 +706,9 @@ e_card_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
case ARG_URL:
GTK_VALUE_STRING(*arg) = card->url;
break;
+ case ARG_ID:
+ GTK_VALUE_STRING(*arg) = card->id;
+ break;
default:
arg->type = GTK_TYPE_INVALID;
break;
diff --git a/addressbook/backend/ebook/e-card.h b/addressbook/backend/ebook/e-card.h
index 1f230159fb..8eaf235c81 100644
--- a/addressbook/backend/ebook/e-card.h
+++ b/addressbook/backend/ebook/e-card.h
@@ -88,6 +88,8 @@ char *e_card_get_id (ECard *card);
void e_card_set_id (ECard *card, const gchar *character);
char *e_card_get_vcard (ECard *card);
+ECard *e_card_duplicate (ECard *card);
+
void e_card_phone_free (ECardPhone *phone);
ECardPhone *e_card_phone_copy (const ECardPhone *phone);
void e_card_delivery_address_free (ECardDeliveryAddress *addr);
diff --git a/addressbook/backend/pas/Makefile.am b/addressbook/backend/pas/Makefile.am
index b8e478f1b3..62207b5963 100644
--- a/addressbook/backend/pas/Makefile.am
+++ b/addressbook/backend/pas/Makefile.am
@@ -24,6 +24,7 @@ INCLUDES = \
-I.. \
-I$(top_builddir) \
-I$(includedir) \
+ -I$(top_srcdir)/addressbook/backend/ebook \
$(GNOME_INCLUDEDIR)
gnome_libs = \
diff --git a/addressbook/backend/pas/pas-backend-file.c b/addressbook/backend/pas/pas-backend-file.c
index 935dab19d5..0dcf745d38 100644
--- a/addressbook/backend/pas/pas-backend-file.c
+++ b/addressbook/backend/pas/pas-backend-file.c
@@ -19,6 +19,7 @@
#include <pas-backend-file.h>
#include <pas-book.h>
#include <pas-card-cursor.h>
+#include <e-card.h>
#define PAS_BACKEND_FILE_VERSION_NAME "PAS-DB-VERSION"
#define PAS_BACKEND_FILE_VERSION "0.1"
@@ -153,11 +154,20 @@ pas_backend_file_process_create_card (PASBackend *backend,
int db_error;
char *id;
GList *list;
+ ECard *card;
+ char *vcard;
id = pas_backend_file_create_unique_id (req->vcard);
string_to_dbt (id, &id_dbt);
- string_to_dbt (req->vcard, &vcard_dbt);
+
+ card = e_card_new(req->vcard);
+ e_card_set_id(card, id);
+ vcard = e_card_get_vcard(card);
+ gtk_object_unref(GTK_OBJECT(card));
+ card = NULL;
+
+ string_to_dbt (vcard, &vcard_dbt);
db_error = db->put (db, &id_dbt, &vcard_dbt, 0);
@@ -187,6 +197,7 @@ pas_backend_file_process_create_card (PASBackend *backend,
}
g_free (id);
+ g_free (vcard);
g_free (req->vcard);
}
@@ -239,8 +250,13 @@ pas_backend_file_process_modify_card (PASBackend *backend,
DBT id_dbt, vcard_dbt;
int db_error;
GList *list;
+ ECard *card;
+ char *id;
- string_to_dbt (req->id, &id_dbt);
+ card = e_card_new(req->vcard);
+ id = e_card_get_id(card);
+
+ string_to_dbt (id, &id_dbt);
string_to_dbt (req->vcard, &vcard_dbt);
db_error = db->put (db, &id_dbt, &vcard_dbt, 0);
@@ -253,7 +269,7 @@ pas_backend_file_process_modify_card (PASBackend *backend,
/* else if (card changes to match view->search )
pas_book_view_notify_add_1 (view->book_view, req->vcard);
else if (card changes to not match view->search )
- pas_book_view_notify_remove (view->book_view, req->id);
+ pas_book_view_notify_remove (view->book_view, id);
*/
}
@@ -271,6 +287,7 @@ pas_backend_file_process_modify_card (PASBackend *backend,
Evolution_BookListener_CardNotFound);
}
+ gtk_object_unref(GTK_OBJECT(card));
g_free (req->vcard);
}
diff --git a/addressbook/backend/pas/pas-book-view.c b/addressbook/backend/pas/pas-book-view.c
index f712cc8ccf..e59028f88a 100644
--- a/addressbook/backend/pas/pas-book-view.c
+++ b/addressbook/backend/pas/pas-book-view.c
@@ -33,7 +33,7 @@ pas_book_view_notify_change (PASBookView *book_view,
card_sequence._length = length;
for ( i = 0; cards; cards = g_list_next(cards), i++ ) {
- card_sequence._buffer[i] = (char *) cards->data;
+ card_sequence._buffer[i] = CORBA_string_dup((char *) cards->data);
}
CORBA_exception_init (&ev);