aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/backend
diff options
context:
space:
mode:
authornobody <nobody@localhost>2003-04-02 01:15:53 +0800
committernobody <nobody@localhost>2003-04-02 01:15:53 +0800
commit2e5b2bbb530b642dda56b332cfd93810ac415098 (patch)
treee2b63c11a404a5dd99d407c989c8846fd0d5379d /addressbook/backend
parent5cda225087bfdc66e19edb703689e8af655e171c (diff)
downloadgsoc2013-evolution-EVOLUTION_1_2_4.tar
gsoc2013-evolution-EVOLUTION_1_2_4.tar.gz
gsoc2013-evolution-EVOLUTION_1_2_4.tar.bz2
gsoc2013-evolution-EVOLUTION_1_2_4.tar.lz
gsoc2013-evolution-EVOLUTION_1_2_4.tar.xz
gsoc2013-evolution-EVOLUTION_1_2_4.tar.zst
gsoc2013-evolution-EVOLUTION_1_2_4.zip
This commit was manufactured by cvs2svn to create tagEVOLUTION_1_2_4
'EVOLUTION_1_2_4'. svn path=/tags/EVOLUTION_1_2_4/; revision=20614
Diffstat (limited to 'addressbook/backend')
-rw-r--r--addressbook/backend/ebook/e-book-util.c210
-rw-r--r--addressbook/backend/ebook/e-card-simple.c311
-rw-r--r--addressbook/backend/ebook/e-card-simple.h18
-rw-r--r--addressbook/backend/ebook/e-card.c1174
-rw-r--r--addressbook/backend/ebook/e-card.h28
-rw-r--r--addressbook/backend/ebook/evolution-ldif-importer.c138
-rw-r--r--addressbook/backend/ebook/evolution-vcard-importer.c105
-rw-r--r--addressbook/backend/pas/pas-backend-file.c598
-rw-r--r--addressbook/backend/pas/pas-backend-ldap.c626
9 files changed, 1726 insertions, 1482 deletions
diff --git a/addressbook/backend/ebook/e-book-util.c b/addressbook/backend/ebook/e-book-util.c
index cc00d045f4..dac9022051 100644
--- a/addressbook/backend/ebook/e-book-util.c
+++ b/addressbook/backend/ebook/e-book-util.c
@@ -27,10 +27,12 @@
#include <config.h>
#include "e-book-util.h"
-#include <string.h>
-#include <glib.h>
-#include <glib-object.h>
-#include <e-util/e-config-listener.h>
+#include <gtk/gtkobject.h>
+#include <gtk/gtksignal.h>
+#include <libgnome/gnome-defs.h>
+#include <libgnome/gnome-util.h>
+#include <bonobo/bonobo-listener.h>
+#include <bonobo/bonobo-event-source.h>
#include "e-card-compare.h"
typedef struct _CommonBookInfo CommonBookInfo;
@@ -55,7 +57,7 @@ e_book_expand_uri (const char *uri)
char *ret_val;
char *file_name;
- file_name = g_build_filename(uri + offset, "addressbook.db", NULL);
+ file_name = g_concat_dir_and_file(uri + offset, "addressbook.db");
ret_val = g_strdup_printf("file://%s", file_name);
g_free(file_name);
return ret_val;
@@ -73,27 +75,32 @@ got_uri_book_cb (EBook *book, EBookStatus status, gpointer closure)
if (status == E_BOOK_STATUS_SUCCESS) {
info->cb (book, info->closure);
} else {
- if (book)
- g_object_unref (book);
info->cb (NULL, info->closure);
}
g_free (info);
}
-void
+gboolean
e_book_load_address_book_by_uri (EBook *book, const char *uri, EBookCallback open_response, gpointer closure)
{
+ gboolean rv;
char *real_uri;
- g_return_if_fail (book != NULL);
- g_return_if_fail (E_IS_BOOK (book));
- g_return_if_fail (open_response != NULL);
+ g_return_val_if_fail (book != NULL, FALSE);
+ g_return_val_if_fail (E_IS_BOOK (book), FALSE);
+ g_return_val_if_fail (open_response != NULL, FALSE);
real_uri = e_book_expand_uri (uri);
- e_book_load_uri (book, real_uri, open_response, closure);
+ rv = e_book_load_uri (book, real_uri, open_response, closure);
+
+ if (!rv) {
+ g_warning ("Couldn't load addressbook %s", real_uri);
+ }
g_free (real_uri);
+
+ return rv;
}
void
@@ -109,16 +116,19 @@ e_book_use_address_book_by_uri (const char *uri, EBookCommonCallback cb, gpointe
info->closure = closure;
book = e_book_new ();
- e_book_load_address_book_by_uri (book, uri, got_uri_book_cb, info);
+ if (! e_book_load_address_book_by_uri (book, uri, got_uri_book_cb, info)) {
+ gtk_object_unref (GTK_OBJECT (book));
+ g_free (info);
+ }
}
-EConfigListener *
-e_book_get_config_database ()
+Bonobo_ConfigDatabase
+e_book_get_config_database (CORBA_Environment *ev)
{
- static EConfigListener *config_db;
+ static Bonobo_ConfigDatabase config_db;
if (config_db == NULL)
- config_db = e_config_listener_new ();
+ config_db = bonobo_get_object ("wombat:", "Bonobo/ConfigDatabase", ev);
return config_db;
}
@@ -136,7 +146,7 @@ got_default_book_cb (EBook *book, EBookStatus status, gpointer closure)
default book got loaded twice. */
if (common_default_book) {
- g_object_unref (book);
+ gtk_object_unref (GTK_OBJECT (book));
book = common_default_book;
}
@@ -147,8 +157,7 @@ got_default_book_cb (EBook *book, EBookStatus status, gpointer closure)
}
} else {
- if (book)
- g_object_unref (book);
+
info->cb (NULL, info->closure);
}
@@ -173,33 +182,22 @@ e_book_use_default_book (EBookCommonCallback cb, gpointer closure)
info->closure = closure;
book = e_book_new ();
- e_book_load_default_book (book, got_default_book_cb, info);
+ if (! e_book_load_default_book (book, got_default_book_cb, info)) {
+ gtk_object_unref (GTK_OBJECT (book));
+ g_free (info);
+ }
}
static char *default_book_uri;
-static char*
-get_local_book_uri (void)
-{
- char *filename;
- char *uri;
-
- filename = g_build_filename (g_get_home_dir(),
- "evolution/local/Contacts/addressbook.db",
- NULL);
- uri = g_strdup_printf ("file://%s", filename);
-
- g_free (filename);
-
- return uri;
-}
-
static void
set_default_book_uri_local (void)
{
- g_free (default_book_uri);
+ char *filename;
- default_book_uri = get_local_book_uri ();
+ filename = gnome_util_prepend_user_home ("evolution/local/Contacts/addressbook.db");
+ default_book_uri = g_strdup_printf ("file://%s", filename);
+ g_free (filename);
}
static void
@@ -217,33 +215,37 @@ set_default_book_uri (char *val)
}
}
-#define DEFAULT_CONTACTS_URI_PATH "/apps/evolution/shell/default_folders/contacts_uri"
static void
-default_folder_listener (EConfigListener *cl, const char *key, gpointer data)
+default_folder_listener (BonoboListener *listener, char *event_name,
+ CORBA_any *any, CORBA_Environment *ev,
+ gpointer user_data)
{
+ Bonobo_ConfigDatabase config_db;
char *val;
- if (strcmp (key, DEFAULT_CONTACTS_URI_PATH))
- return;
-
- val = e_config_listener_get_string (cl, DEFAULT_CONTACTS_URI_PATH);
+ config_db = e_book_get_config_database (ev);
+ val = bonobo_config_get_string (config_db, "/DefaultFolders/contacts_uri", ev);
set_default_book_uri (val);
}
static void
-set_default_book_uri_from_config_db (void)
+set_default_book_uri_from_bonobo_conf (void)
{
char *val;
- EConfigListener* config_db;
+ Bonobo_ConfigDatabase config_db;
+ CORBA_Environment ev;
- config_db = e_book_get_config_database ();
- val = e_config_listener_get_string_with_default (config_db, DEFAULT_CONTACTS_URI_PATH, NULL, NULL);
+ CORBA_exception_init (&ev);
+ config_db = e_book_get_config_database (&ev);
+ val = bonobo_config_get_string (config_db, "/DefaultFolders/contacts_uri", &ev);
- g_signal_connect (config_db,
- "key_changed",
- G_CALLBACK (default_folder_listener), NULL);
+ bonobo_event_source_client_add_listener (config_db, default_folder_listener,
+ "Bonobo/ConfigDatabase:change/DefaultFolders:contacts_uri",
+ NULL,
+ NULL);
+ CORBA_exception_free (&ev);
set_default_book_uri (val);
}
@@ -262,34 +264,28 @@ e_book_default_book_open (EBook *book, EBookStatus status, gpointer closure)
g_free (default_book_closure);
/* If there's a transient error, report it to the caller, but
- * if the old default folder has disappeared, fall back to the
- * local contacts folder instead, except when the default
- * folder is also the local folder.
+ * if the old default folder has disappeared, fall back to
+ * the local contacts folder instead.
*/
if (status == E_BOOK_STATUS_PROTOCOL_NOT_SUPPORTED ||
status == E_BOOK_STATUS_NO_SUCH_BOOK) {
- char *local_uri = get_local_book_uri();
- if (strcmp (local_uri, default_book_uri)) {
- set_default_book_uri_local ();
- e_book_load_default_book (book, user_response, user_closure);
- }
- else
- user_response (book, status, user_closure);
- g_free (local_uri);
+ set_default_book_uri_local ();
+ e_book_load_default_book (book, user_response, user_closure);
} else {
user_response (book, status, user_closure);
}
}
-void
+gboolean
e_book_load_default_book (EBook *book, EBookCallback open_response, gpointer closure)
{
- const char *uri;
+ char *uri;
+ gboolean rv;
DefaultBookClosure *default_book_closure;
- g_return_if_fail (book != NULL);
- g_return_if_fail (E_IS_BOOK (book));
- g_return_if_fail (open_response != NULL);
+ g_return_val_if_fail (book != NULL, FALSE);
+ g_return_val_if_fail (E_IS_BOOK (book), FALSE);
+ g_return_val_if_fail (open_response != NULL, FALSE);
uri = e_book_get_default_book_uri ();
@@ -298,16 +294,21 @@ e_book_load_default_book (EBook *book, EBookCallback open_response, gpointer clo
default_book_closure->closure = closure;
default_book_closure->open_response = open_response;
- e_book_load_uri (book, uri,
- e_book_default_book_open, default_book_closure);
+ rv = e_book_load_uri (book, uri,
+ e_book_default_book_open, default_book_closure);
+
+ if (!rv) {
+ g_warning ("Couldn't load default addressbook");
+ }
+ return rv;
}
-const char *
+char*
e_book_get_default_book_uri ()
{
if (!default_book_uri)
- set_default_book_uri_from_config_db ();
+ set_default_book_uri_from_bonobo_conf ();
return default_book_uri;
}
@@ -335,15 +336,15 @@ struct _SimpleQueryInfo {
static void
book_add_simple_query (EBook *book, SimpleQueryInfo *info)
{
- GList *pending = g_object_get_data (G_OBJECT(book), "sq_pending");
+ GList *pending = gtk_object_get_data (GTK_OBJECT (book), "sq_pending");
pending = g_list_prepend (pending, info);
- g_object_set_data (G_OBJECT (book), "sq_pending", pending);
+ gtk_object_set_data (GTK_OBJECT (book), "sq_pending", pending);
}
static SimpleQueryInfo *
book_lookup_simple_query (EBook *book, guint tag)
{
- GList *pending = g_object_get_data (G_OBJECT (book), "sq_pending");
+ GList *pending = gtk_object_get_data (GTK_OBJECT (book), "sq_pending");
while (pending) {
SimpleQueryInfo *sq = pending->data;
if (sq->tag == tag)
@@ -356,7 +357,7 @@ book_lookup_simple_query (EBook *book, guint tag)
static void
book_remove_simple_query (EBook *book, SimpleQueryInfo *info)
{
- GList *pending = g_object_get_data (G_OBJECT (book), "sq_pending");
+ GList *pending = gtk_object_get_data (GTK_OBJECT (book), "sq_pending");
GList *i;
for (i=pending; i != NULL; i = g_list_next (i)) {
@@ -366,17 +367,17 @@ book_remove_simple_query (EBook *book, SimpleQueryInfo *info)
break;
}
}
- g_object_set_data (G_OBJECT (book), "sq_pending", pending);
+ gtk_object_set_data (GTK_OBJECT (book), "sq_pending", pending);
}
static guint
book_issue_tag (EBook *book)
{
- gpointer ptr = g_object_get_data (G_OBJECT (book), "sq_tag");
+ gpointer ptr = gtk_object_get_data (GTK_OBJECT (book), "sq_tag");
guint tag = GPOINTER_TO_UINT (ptr);
if (tag == 0)
tag = 1;
- g_object_set_data (G_OBJECT (book), "sq_tag", GUINT_TO_POINTER (tag+1));
+ gtk_object_set_data (GTK_OBJECT (book), "sq_tag", GUINT_TO_POINTER (tag+1));
return tag;
}
@@ -387,7 +388,7 @@ simple_query_new (EBook *book, const char *query, EBookSimpleQueryCallback cb, g
sq->tag = book_issue_tag (book);
sq->book = book;
- g_object_ref (book);
+ gtk_object_ref (GTK_OBJECT (book));
sq->query = g_strdup (query);
sq->cb = cb;
sq->closure = closure;
@@ -403,17 +404,17 @@ static void
simple_query_disconnect (SimpleQueryInfo *sq)
{
if (sq->add_tag) {
- g_signal_handler_disconnect (sq->view, sq->add_tag);
+ gtk_signal_disconnect (GTK_OBJECT (sq->view), sq->add_tag);
sq->add_tag = 0;
}
if (sq->seq_complete_tag) {
- g_signal_handler_disconnect (sq->view, sq->seq_complete_tag);
+ gtk_signal_disconnect (GTK_OBJECT (sq->view), sq->seq_complete_tag);
sq->seq_complete_tag = 0;
}
if (sq->view) {
- g_object_unref (sq->view);
+ gtk_object_unref (GTK_OBJECT (sq->view));
sq->view = NULL;
}
}
@@ -429,9 +430,9 @@ simple_query_free (SimpleQueryInfo *sq)
g_free (sq->query);
if (sq->book)
- g_object_unref (sq->book);
+ gtk_object_unref (GTK_OBJECT (sq->book));
- g_list_foreach (sq->cards, (GFunc) g_object_unref, NULL);
+ g_list_foreach (sq->cards, (GFunc) gtk_object_unref, NULL);
g_list_free (sq->cards);
g_free (sq);
@@ -446,7 +447,7 @@ simple_query_card_added_cb (EBookView *view, const GList *cards, gpointer closur
return;
sq->cards = g_list_concat (sq->cards, g_list_copy ((GList *) cards));
- g_list_foreach ((GList *) cards, (GFunc) g_object_ref, NULL);
+ g_list_foreach ((GList *) cards, (GFunc) gtk_object_ref, NULL);
}
static void
@@ -480,12 +481,16 @@ simple_query_book_view_cb (EBook *book, EBookStatus status, EBookView *book_view
}
sq->view = book_view;
- g_object_ref (book_view);
+ gtk_object_ref (GTK_OBJECT (book_view));
- sq->add_tag = g_signal_connect (sq->view, "card_added",
- G_CALLBACK (simple_query_card_added_cb), sq);
- sq->seq_complete_tag = g_signal_connect (sq->view, "sequence_complete",
- G_CALLBACK (simple_query_sequence_complete_cb), sq);
+ sq->add_tag = gtk_signal_connect (GTK_OBJECT (sq->view),
+ "card_added",
+ GTK_SIGNAL_FUNC (simple_query_card_added_cb),
+ sq);
+ sq->seq_complete_tag = gtk_signal_connect (GTK_OBJECT (sq->view),
+ "sequence_complete",
+ GTK_SIGNAL_FUNC (simple_query_sequence_complete_cb),
+ sq);
}
guint
@@ -783,26 +788,3 @@ e_book_query_address_default (const gchar *email,
e_book_use_default_book (have_address_book_open_cb, info);
}
-
-/* bad place for this i know. */
-int
-e_utf8_casefold_collate_len (const gchar *str1, const gchar *str2, int len)
-{
- gchar *s1 = g_utf8_casefold(str1, len);
- gchar *s2 = g_utf8_casefold(str2, len);
- int rv;
-
- rv = g_utf8_collate (s1, s2);
-
- g_free (s1);
- g_free (s2);
-
- return rv;
-}
-
-int
-e_utf8_casefold_collate (const gchar *str1, const gchar *str2)
-{
- return e_utf8_casefold_collate_len (str1, str2, -1);
-}
-
diff --git a/addressbook/backend/ebook/e-card-simple.c b/addressbook/backend/ebook/e-card-simple.c
index db008011cd..daab2f211c 100644
--- a/addressbook/backend/ebook/e-card-simple.c
+++ b/addressbook/backend/ebook/e-card-simple.c
@@ -13,19 +13,19 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <bonobo/bonobo-i18n.h>
+#include <gtk/gtkobject.h>
+#include <gal/util/e-unicode-i18n.h>
#include <gal/util/e-util.h>
#include <libversit/vcc.h>
#include "e-card-simple.h"
-/* Object property IDs */
+/* Object argument IDs */
enum {
- PROP_0,
- PROP_CARD,
+ ARG_0,
+ ARG_CARD,
};
-static GObjectClass *parent_class;
typedef enum _ECardSimpleInternalType ECardSimpleInternalType;
typedef struct _ECardSimpleFieldData ECardSimpleFieldData;
@@ -115,9 +115,9 @@ static int field_data_count = sizeof (field_data) / sizeof (field_data[0]);
static void e_card_simple_init (ECardSimple *simple);
static void e_card_simple_class_init (ECardSimpleClass *klass);
-static void e_card_simple_dispose (GObject *object);
-static void e_card_simple_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
-static void e_card_simple_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
+static void e_card_simple_destroy (GtkObject *object);
+static void e_card_simple_set_arg (GtkObject *object, GtkArg *arg, guint arg_id);
+static void e_card_simple_get_arg (GtkObject *object, GtkArg *arg, guint arg_id);
static void fill_in_info(ECardSimple *simple);
@@ -208,25 +208,24 @@ char *address_names[] = {
*
* Return value: The type ID of the &ECardSimple class.
**/
-GType
+GtkType
e_card_simple_get_type (void)
{
- static GType simple_type = 0;
+ static GtkType simple_type = 0;
if (!simple_type) {
- static const GTypeInfo simple_info = {
- sizeof (ECardSimpleClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) e_card_simple_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
+ GtkTypeInfo simple_info = {
+ "ECardSimple",
sizeof (ECardSimple),
- 0, /* n_preallocs */
- (GInstanceInitFunc) e_card_simple_init,
+ sizeof (ECardSimpleClass),
+ (GtkClassInitFunc) e_card_simple_class_init,
+ (GtkObjectInitFunc) e_card_simple_init,
+ NULL, /* reserved_1 */
+ NULL, /* reserved_2 */
+ (GtkClassInitFunc) NULL
};
- simple_type = g_type_register_static (G_TYPE_OBJECT, "ECardSimple", &simple_info, 0);
+ simple_type = gtk_type_unique (gtk_object_get_type (), &simple_info);
}
return simple_type;
@@ -241,10 +240,10 @@ e_card_simple_get_type (void)
ECardSimple *
e_card_simple_new (ECard *card)
{
- ECardSimple *simple = g_object_new (E_TYPE_CARD_SIMPLE, NULL);
- g_object_set(simple,
- "card", card,
- NULL);
+ ECardSimple *simple = E_CARD_SIMPLE(gtk_type_new(e_card_simple_get_type()));
+ gtk_object_set(GTK_OBJECT(simple),
+ "card", card,
+ NULL);
return simple;
}
@@ -320,22 +319,16 @@ e_card_simple_get_vcard_assume_utf8 (ECardSimple *simple)
static void
e_card_simple_class_init (ECardSimpleClass *klass)
{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS(klass);
+ GtkObjectClass *object_class;
- parent_class = g_type_class_ref (G_TYPE_OBJECT);
+ object_class = GTK_OBJECT_CLASS(klass);
- object_class->dispose = e_card_simple_dispose;
- object_class->get_property = e_card_simple_get_property;
- object_class->set_property = e_card_simple_set_property;
+ gtk_object_add_arg_type ("ECardSimple::card",
+ GTK_TYPE_OBJECT, GTK_ARG_READWRITE, ARG_CARD);
- g_object_class_install_property (object_class, PROP_CARD,
- g_param_spec_object ("card",
- _("ECard"),
- /*_( */"XXX blurb" /*)*/,
- E_TYPE_CARD,
- G_PARAM_READWRITE));
+ object_class->destroy = e_card_simple_destroy;
+ object_class->get_arg = e_card_simple_get_arg;
+ object_class->set_arg = e_card_simple_set_arg;
}
/*
@@ -343,103 +336,73 @@ e_card_simple_class_init (ECardSimpleClass *klass)
*/
static void
-e_card_simple_dispose (GObject *object)
+e_card_simple_destroy (GtkObject *object)
{
ECardSimple *simple;
int i;
simple = E_CARD_SIMPLE (object);
- if (simple->card) {
- g_object_unref(simple->card);
- simple->card = NULL;
- }
- if (simple->temp_fields) {
- g_list_foreach(simple->temp_fields, (GFunc) g_free, NULL);
- g_list_free(simple->temp_fields);
- simple->temp_fields = NULL;
- }
-
- for(i = 0; i < E_CARD_SIMPLE_PHONE_ID_LAST; i++) {
- if (simple->phone[i]) {
- e_card_phone_unref (simple->phone[i]);
- simple->phone[i] = NULL;
- }
- }
- for(i = 0; i < E_CARD_SIMPLE_EMAIL_ID_LAST; i++) {
- if (simple->email[i]) {
- g_free(simple->email[i]);
- simple->email[i] = NULL;
- }
- }
- for(i = 0; i < E_CARD_SIMPLE_ADDRESS_ID_LAST; i++) {
- if (simple->address[i]) {
- e_card_address_label_unref(simple->address[i]);
- simple->address[i] = NULL;
- }
- }
- for(i = 0; i < E_CARD_SIMPLE_ADDRESS_ID_LAST; i++) {
- if (simple->delivery[i]) {
- e_card_delivery_address_unref(simple->delivery[i]);
- simple->delivery[i] = NULL;
- }
- }
+ if (simple->card)
+ gtk_object_unref(GTK_OBJECT(simple->card));
+ g_list_foreach(simple->temp_fields, (GFunc) g_free, NULL);
+ g_list_free(simple->temp_fields);
+ simple->temp_fields = NULL;
- if (G_OBJECT_CLASS (parent_class)->dispose)
- G_OBJECT_CLASS (parent_class)->dispose (object);
+ for(i = 0; i < E_CARD_SIMPLE_PHONE_ID_LAST; i++)
+ e_card_phone_unref (simple->phone[i]);
+ for(i = 0; i < E_CARD_SIMPLE_EMAIL_ID_LAST; i++)
+ g_free(simple->email[i]);
+ for(i = 0; i < E_CARD_SIMPLE_ADDRESS_ID_LAST; i++)
+ e_card_address_label_unref(simple->address[i]);
+ for(i = 0; i < E_CARD_SIMPLE_ADDRESS_ID_LAST; i++)
+ e_card_delivery_address_unref(simple->delivery[i]);
}
/* Set_arg handler for the simple */
static void
-e_card_simple_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
+e_card_simple_set_arg (GtkObject *object, GtkArg *arg, guint arg_id)
{
ECardSimple *simple;
simple = E_CARD_SIMPLE (object);
- switch (prop_id) {
- case PROP_CARD:
+ switch (arg_id) {
+ case ARG_CARD:
if (simple->card)
- g_object_unref(simple->card);
+ gtk_object_unref(GTK_OBJECT(simple->card));
g_list_foreach(simple->temp_fields, (GFunc) g_free, NULL);
g_list_free(simple->temp_fields);
simple->temp_fields = NULL;
- if (g_value_get_object (value))
- simple->card = E_CARD(g_value_get_object (value));
+ if (GTK_VALUE_OBJECT(*arg))
+ simple->card = E_CARD(GTK_VALUE_OBJECT(*arg));
else
simple->card = NULL;
if(simple->card)
- g_object_ref(simple->card);
+ gtk_object_ref(GTK_OBJECT(simple->card));
fill_in_info(simple);
break;
default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
+ return;
}
}
/* Get_arg handler for the simple */
static void
-e_card_simple_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
+e_card_simple_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
{
ECardSimple *simple;
simple = E_CARD_SIMPLE (object);
- switch (prop_id) {
- case PROP_CARD:
+ switch (arg_id) {
+ case ARG_CARD:
e_card_simple_sync_card(simple);
- g_value_set_object (value, simple->card);
+ GTK_VALUE_OBJECT (*arg) = (GtkObject *) simple->card;
break;
default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ arg->type = GTK_TYPE_INVALID;
break;
}
}
@@ -481,12 +444,12 @@ fill_in_info(ECardSimple *simple)
EIterator *iterator;
- g_object_get(card,
- "address_label", &address_list,
- "address", &delivery_list,
- "phone", &phone_list,
- "email", &email_list,
- NULL);
+ gtk_object_get(GTK_OBJECT(card),
+ "address_label", &address_list,
+ "address", &delivery_list,
+ "phone", &phone_list,
+ "email", &email_list,
+ NULL);
for (i = 0; i < E_CARD_SIMPLE_PHONE_ID_LAST; i++) {
e_card_phone_unref(simple->phone[i]);
simple->phone[i] = NULL;
@@ -510,7 +473,7 @@ fill_in_info(ECardSimple *simple)
}
}
}
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
for (i = 0; i < E_CARD_SIMPLE_EMAIL_ID_LAST; i++) {
g_free(simple->email[i]);
@@ -525,7 +488,7 @@ fill_in_info(ECardSimple *simple)
}
}
}
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
for (i = 0; i < E_CARD_SIMPLE_ADDRESS_ID_LAST; i++) {
e_card_address_label_unref(simple->address[i]);
@@ -540,7 +503,7 @@ fill_in_info(ECardSimple *simple)
}
}
}
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
for (i = 0; i < E_CARD_SIMPLE_ADDRESS_ID_LAST; i++) {
e_card_delivery_address_unref(simple->delivery[i]);
@@ -555,7 +518,7 @@ fill_in_info(ECardSimple *simple)
}
}
}
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
e_card_free_empty_lists (card);
}
}
@@ -577,12 +540,12 @@ e_card_simple_sync_card(ECardSimple *simple)
EIterator *iterator;
- g_object_get(card,
- "address_label", &address_list,
- "address", &delivery_list,
- "phone", &phone_list,
- "email", &email_list,
- NULL);
+ gtk_object_get(GTK_OBJECT(card),
+ "address_label", &address_list,
+ "address", &delivery_list,
+ "phone", &phone_list,
+ "email", &email_list,
+ NULL);
for (iterator = e_list_get_iterator(phone_list); e_iterator_is_valid(iterator); e_iterator_next(iterator) ) {
int i;
@@ -622,7 +585,7 @@ e_card_simple_sync_card(ECardSimple *simple)
}
}
}
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
for (i = 0; i < E_CARD_SIMPLE_PHONE_ID_LAST; i ++) {
if (simple->phone[i]) {
simple->phone[i]->flags = phone_correspondences[i];
@@ -648,7 +611,7 @@ e_card_simple_sync_card(ECardSimple *simple)
}
}
}
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
for (i = 0; i < E_CARD_SIMPLE_EMAIL_ID_LAST; i ++) {
if (simple->email[i]) {
e_list_append(email_list, simple->email[i]);
@@ -677,7 +640,7 @@ e_card_simple_sync_card(ECardSimple *simple)
}
}
}
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
for (i = 0; i < E_CARD_SIMPLE_ADDRESS_ID_LAST; i ++) {
if (simple->address[i]) {
simple->address[i]->flags &= ~E_CARD_ADDR_MASK;
@@ -708,7 +671,7 @@ e_card_simple_sync_card(ECardSimple *simple)
}
}
}
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
for (i = 0; i < E_CARD_SIMPLE_ADDRESS_ID_LAST; i ++) {
if (simple->delivery[i]) {
simple->delivery[i]->flags &= ~E_CARD_ADDR_MASK;
@@ -783,8 +746,6 @@ void e_card_simple_set_delivery_address (ECardSimple *simple
{
e_card_delivery_address_unref(simple->delivery[id]);
simple->delivery[id] = e_card_delivery_address_ref(delivery);
- e_card_address_label_unref(simple->address[id]);
- simple->address[id] = e_card_delivery_address_to_label(simple->delivery[id]);
simple->changed = TRUE;
}
@@ -809,17 +770,17 @@ char *e_card_simple_get (ECardSimple *simple,
switch(type) {
case E_CARD_SIMPLE_INTERNAL_TYPE_STRING:
if (simple->card) {
- g_object_get(simple->card,
- field_data[field].ecard_field, &string,
- NULL);
+ gtk_object_get(GTK_OBJECT(simple->card),
+ field_data[field].ecard_field, &string,
+ NULL);
return g_strdup(string);
} else
return NULL;
case E_CARD_SIMPLE_INTERNAL_TYPE_DATE:
if (simple->card) {
- g_object_get(simple->card,
- field_data[field].ecard_field, &date,
- NULL);
+ gtk_object_get(GTK_OBJECT(simple->card),
+ field_data[field].ecard_field, &date,
+ NULL);
if (date != NULL) {
char buf[26];
struct tm then;
@@ -857,9 +818,9 @@ char *e_card_simple_get (ECardSimple *simple,
case E_CARD_SIMPLE_INTERNAL_TYPE_BOOL:
if (simple->card) {
gboolean boole;
- g_object_get (simple->card,
- field_data[field].ecard_field, &boole,
- NULL);
+ gtk_object_get (GTK_OBJECT (simple->card),
+ field_data[field].ecard_field, &boole,
+ NULL);
if (boole)
return g_strdup("true");
else
@@ -873,19 +834,19 @@ char *e_card_simple_get (ECardSimple *simple,
if (simple->card) {
gboolean is_list;
- g_object_get(simple->card,
- "file_as", &string,
- NULL);
+ gtk_object_get(GTK_OBJECT(simple->card),
+ "file_as", &string,
+ NULL);
if (string && *string)
return g_strdup(string);
- g_object_get(simple->card,
- "full_name", &string,
- NULL);
+ gtk_object_get(GTK_OBJECT(simple->card),
+ "full_name", &string,
+ NULL);
if (string && *string)
return g_strdup(string);
- g_object_get(simple->card,
- "org", &string,
- NULL);
+ gtk_object_get(GTK_OBJECT(simple->card),
+ "org", &string,
+ NULL);
if (string && *string)
return g_strdup(string);
is_list = e_card_evolution_list (simple->card);
@@ -899,33 +860,33 @@ char *e_card_simple_get (ECardSimple *simple,
return NULL;
case E_CARD_SIMPLE_FIELD_FAMILY_NAME:
if (simple->card) {
- g_object_get (simple->card,
- "name", &name,
- NULL);
+ gtk_object_get (GTK_OBJECT(simple->card),
+ "name", &name,
+ NULL);
return g_strdup (name->family);
} else
return NULL;
case E_CARD_SIMPLE_FIELD_GIVEN_NAME:
if (simple->card) {
- g_object_get (simple->card,
- "name", &name,
- NULL);
+ gtk_object_get (GTK_OBJECT(simple->card),
+ "name", &name,
+ NULL);
return g_strdup (name->given);
} else
return NULL;
case E_CARD_SIMPLE_FIELD_ADDITIONAL_NAME:
if (simple->card) {
- g_object_get (simple->card,
- "name", &name,
- NULL);
+ gtk_object_get (GTK_OBJECT(simple->card),
+ "name", &name,
+ NULL);
return g_strdup (name->additional);
} else
return NULL;
case E_CARD_SIMPLE_FIELD_NAME_SUFFIX:
if (simple->card) {
- g_object_get (simple->card,
- "name", &name,
- NULL);
+ gtk_object_get (GTK_OBJECT(simple->card),
+ "name", &name,
+ NULL);
return g_strdup (name->suffix);
} else
return NULL;
@@ -1001,9 +962,9 @@ file_as_get_style (ECardSimple *simple)
if (!company)
company = g_strdup("");
if (filestring) {
- g_object_get (simple->card,
- "name", &name,
- NULL);
+ gtk_object_get (GTK_OBJECT (simple->card),
+ "name", &name,
+ NULL);
if (!name) {
goto end;
@@ -1039,9 +1000,9 @@ file_as_set_style(ECardSimple *simple, int style)
if (!company)
company = g_strdup("");
- g_object_get (simple->card,
- "name", &name,
- NULL);
+ gtk_object_get (GTK_OBJECT (simple->card),
+ "name", &name,
+ NULL);
if (name) {
string = name_to_style(name, company, style);
e_card_simple_set(simple, E_CARD_SIMPLE_FIELD_FILE_AS, string);
@@ -1064,17 +1025,17 @@ void e_card_simple_set (ECardSimple *simple,
case E_CARD_SIMPLE_FIELD_FULL_NAME:
case E_CARD_SIMPLE_FIELD_ORG:
style = file_as_get_style(simple);
- g_object_set(simple->card,
- field_data[field].ecard_field, data,
- NULL);
+ gtk_object_set(GTK_OBJECT(simple->card),
+ field_data[field].ecard_field, data,
+ NULL);
file_as_set_style(simple, style);
break;
default:
switch(type) {
case E_CARD_SIMPLE_INTERNAL_TYPE_STRING:
- g_object_set(simple->card,
- field_data[field].ecard_field, data,
- NULL);
+ gtk_object_set(GTK_OBJECT(simple->card),
+ field_data[field].ecard_field, data,
+ NULL);
break;
case E_CARD_SIMPLE_INTERNAL_TYPE_DATE:
break; /* FIXME!!!! */
@@ -1108,9 +1069,9 @@ void e_card_simple_set (ECardSimple *simple,
boole = FALSE;
else if (!strcasecmp (data, "false"))
boole = FALSE;
- g_object_set (simple->card,
- field_data[field].ecard_field, boole,
- NULL);
+ gtk_object_set (GTK_OBJECT (simple->card),
+ field_data[field].ecard_field, boole,
+ NULL);
}
break;
}
@@ -1150,7 +1111,7 @@ const char *e_card_simple_get_ecard_field (ECardSimple *simple,
const char *e_card_simple_get_name (ECardSimple *simple,
ECardSimpleField field)
{
- return _(field_data[field].name);
+ return U_(field_data[field].name);
}
gboolean
@@ -1181,7 +1142,7 @@ e_card_simple_get_allow_newlines (ECardSimple *simple,
const char *e_card_simple_get_short_name (ECardSimple *simple,
ECardSimpleField field)
{
- return _(field_data[field].short_name);
+ return U_(field_data[field].short_name);
}
void e_card_simple_arbitrary_foreach (ECardSimple *simple,
@@ -1191,9 +1152,9 @@ void e_card_simple_arbitrary_foreach (ECardSimple
if (simple->card) {
EList *list;
EIterator *iterator;
- g_object_get(simple->card,
- "arbitrary", &list,
- NULL);
+ gtk_object_get(GTK_OBJECT(simple->card),
+ "arbitrary", &list,
+ NULL);
for (iterator = e_list_get_iterator(list); e_iterator_is_valid(iterator); e_iterator_next(iterator)) {
const ECardArbitrary *arbitrary = e_iterator_get(iterator);
if (callback)
@@ -1209,9 +1170,9 @@ const ECardArbitrary *e_card_simple_get_arbitrary (ECardSimple *sim
if (simple->card) {
EList *list;
EIterator *iterator;
- g_object_get(simple->card,
- "arbitrary", &list,
- NULL);
+ gtk_object_get(GTK_OBJECT(simple->card),
+ "arbitrary", &list,
+ NULL);
for (iterator = e_list_get_iterator(list); e_iterator_is_valid(iterator); e_iterator_next(iterator)) {
const ECardArbitrary *arbitrary = e_iterator_get(iterator);
if (!strcasecmp(arbitrary->key, key))
@@ -1234,9 +1195,9 @@ void e_card_simple_set_arbitrary (ECardSimple *sim
EIterator *iterator;
simple->changed = TRUE;
- g_object_get(simple->card,
- "arbitrary", &list,
- NULL);
+ gtk_object_get(GTK_OBJECT(simple->card),
+ "arbitrary", &list,
+ NULL);
for (iterator = e_list_get_iterator(list); e_iterator_is_valid(iterator); e_iterator_next(iterator)) {
const ECardArbitrary *arbitrary = e_iterator_get(iterator);
if (!strcasecmp(arbitrary->key, key)) {
@@ -1263,9 +1224,9 @@ e_card_simple_set_name (ECardSimple *simple, ECardName *name)
{
int style;
style = file_as_get_style(simple);
- g_object_set (simple->card,
- "name", name,
- NULL);
+ gtk_object_set (GTK_OBJECT (simple->card),
+ "name", name,
+ NULL);
file_as_set_style(simple, style);
}
diff --git a/addressbook/backend/ebook/e-card-simple.h b/addressbook/backend/ebook/e-card-simple.h
index 868d4e1573..b2b5147f3d 100644
--- a/addressbook/backend/ebook/e-card-simple.h
+++ b/addressbook/backend/ebook/e-card-simple.h
@@ -13,18 +13,17 @@
#define __E_CARD_SIMPLE_H__
#include <time.h>
-#include <glib-object.h>
+#include <gtk/gtk.h>
#include <stdio.h>
#include <ebook/e-card.h>
#include <ebook/e-card-types.h>
#include <e-util/e-list.h>
#define E_TYPE_CARD_SIMPLE (e_card_simple_get_type ())
-#define E_CARD_SIMPLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_CARD_SIMPLE, ECardSimple))
-#define E_CARD_SIMPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_CARD_SIMPLE, ECardSimpleClass))
-#define E_IS_CARD_SIMPLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_CARD_SIMPLE))
-#define E_IS_CARD_SIMPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), E_TYPE_CARD_SIMPLE))
-#define E_CARD_SIMPLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), E_TYPE_CARD_SIMPLE, ECardSimpleClass))
+#define E_CARD_SIMPLE(obj) (GTK_CHECK_CAST ((obj), E_TYPE_CARD_SIMPLE, ECardSimple))
+#define E_CARD_SIMPLE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_CARD_SIMPLE, ECardSimpleClass))
+#define E_IS_CARD_SIMPLE(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_CARD_SIMPLE))
+#define E_IS_CARD_SIMPLE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), E_TYPE_CARD_SIMPLE))
typedef enum _ECardSimplePhoneId ECardSimplePhoneId;
typedef enum _ECardSimpleEmailId ECardSimpleEmailId;
@@ -139,7 +138,7 @@ typedef struct _ECardSimple ECardSimple;
typedef struct _ECardSimpleClass ECardSimpleClass;
struct _ECardSimple {
- GObject object;
+ GtkObject object;
ECard *card;
GList *temp_fields;
@@ -153,7 +152,7 @@ struct _ECardSimple {
};
struct _ECardSimpleClass {
- GObjectClass parent_class;
+ GtkObjectClass parent_class;
};
typedef void (*ECardSimpleArbitraryCallback) (const ECardArbitrary *arbitrary, gpointer closure);
@@ -227,7 +226,8 @@ ECardSimpleField e_card_simple_map_phone_to_field (ECardSimplePho
ECardSimpleField e_card_simple_map_email_to_field (ECardSimpleEmailId email_id);
ECardSimpleField e_card_simple_map_address_to_field (ECardSimpleAddressId address_id);
-GType e_card_simple_get_type (void);
+/* Standard Gtk function */
+GtkType e_card_simple_get_type (void);
#endif /* ! __E_CARD_SIMPLE_H__ */
diff --git a/addressbook/backend/ebook/e-card.c b/addressbook/backend/ebook/e-card.c
index 945888dad7..9c77ab6a4b 100644
--- a/addressbook/backend/ebook/e-card.c
+++ b/addressbook/backend/ebook/e-card.c
@@ -12,6 +12,7 @@
#include "e-card.h"
+#include <gal/util/e-i18n.h>
#include <gal/widgets/e-unicode.h>
#include <ctype.h>
@@ -21,13 +22,15 @@
#include <time.h>
#include <math.h>
-#include <bonobo/bonobo-i18n.h>
+#include <gtk/gtkobject.h>
+#include <bonobo/bonobo-object-client.h>
#include <gal/util/e-util.h>
#include <libversit/vcc.h>
#include "e-util/ename/e-name-western.h"
#include "e-util/ename/e-address-western.h"
#include "e-book.h"
+#include "e-destination.h"
#define is_a_prop_of(obj,prop) (isAPropertyOf ((obj),(prop)))
#define str_val(obj) (the_str = (vObjectValueType (obj))? fakeCString (vObjectUStringZValue (obj)) : calloc (1, 1))
@@ -39,55 +42,53 @@
#define XEV_LIST_SHOW_ADDRESSES "X-EVOLUTION-LIST-SHOW_ADDRESSES"
#define XEV_RELATED_CONTACTS "X-EVOLUTION-RELATED_CONTACTS"
-/* Object property IDs */
+/* Object argument IDs */
enum {
- PROP_0,
- PROP_FILE_AS,
- PROP_FULL_NAME,
- PROP_NAME,
- PROP_ADDRESS,
- PROP_ADDRESS_LABEL,
- PROP_PHONE,
- PROP_EMAIL,
- PROP_BIRTH_DATE,
- PROP_URL,
- PROP_ORG,
- PROP_ORG_UNIT,
- PROP_OFFICE,
- PROP_TITLE,
- PROP_ROLE,
- PROP_MANAGER,
- PROP_ASSISTANT,
- PROP_NICKNAME,
- PROP_SPOUSE,
- PROP_ANNIVERSARY,
- PROP_MAILER,
- PROP_CALURI,
- PROP_FBURL,
- PROP_ICSCALENDAR,
- PROP_NOTE,
- PROP_RELATED_CONTACTS,
- PROP_CATEGORIES,
- PROP_CATEGORY_LIST,
- PROP_WANTS_HTML,
- PROP_WANTS_HTML_SET,
- PROP_EVOLUTION_LIST,
- PROP_EVOLUTION_LIST_SHOW_ADDRESSES,
- PROP_ARBITRARY,
- PROP_ID,
- PROP_LAST_USE,
- PROP_USE_SCORE,
+ ARG_0,
+ ARG_FILE_AS,
+ ARG_FULL_NAME,
+ ARG_NAME,
+ ARG_ADDRESS,
+ ARG_ADDRESS_LABEL,
+ ARG_PHONE,
+ ARG_EMAIL,
+ ARG_BIRTH_DATE,
+ ARG_URL,
+ ARG_ORG,
+ ARG_ORG_UNIT,
+ ARG_OFFICE,
+ ARG_TITLE,
+ ARG_ROLE,
+ ARG_MANAGER,
+ ARG_ASSISTANT,
+ ARG_NICKNAME,
+ ARG_SPOUSE,
+ ARG_ANNIVERSARY,
+ ARG_MAILER,
+ ARG_CALURI,
+ ARG_FBURL,
+ ARG_ICSCALENDAR,
+ ARG_NOTE,
+ ARG_RELATED_CONTACTS,
+ ARG_CATEGORIES,
+ ARG_CATEGORY_LIST,
+ ARG_WANTS_HTML,
+ ARG_WANTS_HTML_SET,
+ ARG_EVOLUTION_LIST,
+ ARG_EVOLUTION_LIST_SHOW_ADDRESSES,
+ ARG_ARBITRARY,
+ ARG_ID,
+ ARG_LAST_USE,
+ ARG_USE_SCORE,
};
-static GObjectClass *parent_class;
-
static void parse(ECard *card, VObject *vobj, char *default_charset);
static void e_card_init (ECard *card);
static void e_card_class_init (ECardClass *klass);
-static void e_card_dispose (GObject *object);
-static void e_card_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
-static void e_card_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
+static void e_card_destroy (GtkObject *object);
+static void e_card_set_arg (GtkObject *object, GtkArg *arg, guint arg_id);
+static void e_card_get_arg (GtkObject *object, GtkArg *arg, guint arg_id);
static void assign_string(VObject *vobj, char *default_charset, char **string);
@@ -182,25 +183,24 @@ struct {
*
* Return value: The type ID of the &ECard class.
**/
-GType
+GtkType
e_card_get_type (void)
{
- static GType card_type = 0;
+ static GtkType card_type = 0;
if (!card_type) {
- static const GTypeInfo card_info = {
- sizeof (ECardClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) e_card_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
+ GtkTypeInfo card_info = {
+ "ECard",
sizeof (ECard),
- 0, /* n_preallocs */
- (GInstanceInitFunc) e_card_init,
+ sizeof (ECardClass),
+ (GtkClassInitFunc) e_card_class_init,
+ (GtkObjectInitFunc) e_card_init,
+ NULL, /* reserved_1 */
+ NULL, /* reserved_2 */
+ (GtkClassInitFunc) NULL
};
- card_type = g_type_register_static (G_TYPE_OBJECT, "ECard", &card_info, 0);
+ card_type = gtk_type_unique (gtk_object_get_type (), &card_info);
}
return card_type;
@@ -209,7 +209,7 @@ e_card_get_type (void)
ECard *
e_card_new_with_default_charset (char *vcard, char *default_charset)
{
- ECard *card = g_object_new (E_TYPE_CARD, NULL);
+ ECard *card = E_CARD(gtk_type_new(e_card_get_type()));
VObject *vobj = Parse_MIME(vcard, strlen(vcard));
while(vobj) {
VObject *next;
@@ -248,7 +248,7 @@ e_card_duplicate(ECard *card)
if (card->book) {
new_card->book = card->book;
- g_object_ref (new_card->book);
+ gtk_object_ref (GTK_OBJECT (new_card->book));
}
return new_card;
@@ -282,7 +282,7 @@ e_card_get_use_score(ECard *card)
e_card_get_today (&today);
g_date_set_dmy (&last_use, card->last_use->day, card->last_use->month, card->last_use->year);
- days_since_last_use = g_date_get_julian (&today) - g_date_get_julian (&last_use);
+ days_since_last_use = g_date_julian (&today) - g_date_julian (&last_use);
/* Apply a seven-day "grace period" to the use score decay. */
days_since_last_use -= 7;
@@ -306,9 +306,9 @@ e_card_touch(ECard *card)
if (card->last_use == NULL)
card->last_use = g_new (ECardDate, 1);
- card->last_use->day = g_date_get_day (&today);
- card->last_use->month = g_date_get_month (&today);
- card->last_use->year = g_date_get_year (&today);
+ card->last_use->day = g_date_day (&today);
+ card->last_use->month = g_date_month (&today);
+ card->last_use->year = g_date_year (&today);
card->raw_use_score = use_score + 1.0;
}
@@ -360,10 +360,10 @@ e_card_set_book (ECard *card, EBook *book)
g_return_if_fail (card && E_IS_CARD (card));
if (card->book)
- g_object_unref (card->book);
+ gtk_object_unref (GTK_OBJECT (card->book));
card->book = book;
if (card->book)
- g_object_ref (card->book);
+ gtk_object_ref (GTK_OBJECT (card->book));
}
gchar *
@@ -543,7 +543,7 @@ e_card_get_vobject (const ECard *card, gboolean assumeUTF8)
if (!(is_ascii || assumeUTF8))
addPropValue (addressprop, "CHARSET", "UTF-8");
}
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
}
if ( card->address_label ) {
@@ -558,7 +558,7 @@ e_card_get_vobject (const ECard *card, gboolean assumeUTF8)
set_address_flags (labelprop, address_label->flags);
}
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
}
if ( card->phone ) {
@@ -570,7 +570,7 @@ e_card_get_vobject (const ECard *card, gboolean assumeUTF8)
set_phone_flags (phoneprop, phone->flags);
}
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
}
if ( card->email ) {
@@ -580,7 +580,7 @@ e_card_get_vobject (const ECard *card, gboolean assumeUTF8)
emailprop = ADD_PROP_VALUE(vobj, VCEmailAddressProp, (char *) e_iterator_get(iterator));
addProp (emailprop, VCInternetProp);
}
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
}
if ( card->bday ) {
@@ -834,9 +834,9 @@ parse_email(ECard *card, VObject *vobj, char *default_charset)
EList *list;
assign_string(vobj, default_charset, &next_email);
- g_object_get(card,
- "email", &list,
- NULL);
+ gtk_object_get(GTK_OBJECT(card),
+ "email", &list,
+ NULL);
e_list_append(list, next_email);
g_free (next_email);
}
@@ -864,9 +864,9 @@ parse_phone(ECard *card, VObject *vobj, char *default_charset)
assign_string(vobj, default_charset, &(next_phone->number));
next_phone->flags = get_phone_flags(vobj);
- g_object_get(card,
- "phone", &list,
- NULL);
+ gtk_object_get(GTK_OBJECT(card),
+ "phone", &list,
+ NULL);
e_list_append(list, next_phone);
e_card_phone_unref (next_phone);
}
@@ -886,9 +886,9 @@ parse_address(ECard *card, VObject *vobj, char *default_charset)
next_addr->code = e_v_object_get_child_value (vobj, VCPostalCodeProp, default_charset);
next_addr->country = e_v_object_get_child_value (vobj, VCCountryNameProp, default_charset);
- g_object_get(card,
- "address", &list,
- NULL);
+ gtk_object_get(GTK_OBJECT(card),
+ "address", &list,
+ NULL);
e_list_append(list, next_addr);
e_card_delivery_address_unref (next_addr);
}
@@ -902,9 +902,9 @@ parse_address_label(ECard *card, VObject *vobj, char *default_charset)
next_addr->flags = get_address_flags (vobj);
assign_string(vobj, default_charset, &next_addr->data);
- g_object_get(card,
- "address_label", &list,
- NULL);
+ gtk_object_get(GTK_OBJECT(card),
+ "address_label", &list,
+ NULL);
e_list_append(list, next_addr);
e_card_address_label_unref (next_addr);
}
@@ -1063,7 +1063,7 @@ add_list_unique(ECard *card, EList *list, char *string)
e_list_append(list, temp);
}
g_free(temp);
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
}
static void
@@ -1073,9 +1073,9 @@ do_parse_categories(ECard *card, char *str)
char *copy = g_new(char, length + 1);
int i, j;
EList *list;
- g_object_get(card,
- "category_list", &list,
- NULL);
+ gtk_object_get(GTK_OBJECT(card),
+ "category_list", &list,
+ NULL);
for (i = 0, j = 0; str[i]; i++, j++) {
switch (str[i]) {
case '\\':
@@ -1198,9 +1198,9 @@ parse_arbitrary(ECard *card, VObject *vobj, char *default_charset)
assign_string(vobj, default_charset, &(arbitrary->value));
- g_object_get(card,
- "arbitrary", &list,
- NULL);
+ gtk_object_get(GTK_OBJECT(card),
+ "arbitrary", &list,
+ NULL);
e_list_append(list, arbitrary);
e_card_arbitrary_unref(arbitrary);
}
@@ -1242,7 +1242,7 @@ parse_use_score(ECard *card, VObject *vobj, char *default_charset)
static void
parse_attribute(ECard *card, VObject *vobj, char *default_charset)
{
- ParsePropertyFunc function = g_hash_table_lookup(E_CARD_GET_CLASS(card)->attribute_jump_table, vObjectName(vobj));
+ ParsePropertyFunc function = g_hash_table_lookup(E_CARD_CLASS(GTK_OBJECT(card)->klass)->attribute_jump_table, vObjectName(vobj));
if ( function )
function(card, vobj, default_charset);
}
@@ -1280,11 +1280,9 @@ static void
e_card_class_init (ECardClass *klass)
{
int i;
- GObjectClass *object_class;
+ GtkObjectClass *object_class;
- object_class = G_OBJECT_CLASS(klass);
-
- parent_class = g_type_class_ref (G_TYPE_OBJECT);
+ object_class = GTK_OBJECT_CLASS(klass);
klass->attribute_jump_table = g_hash_table_new(g_str_hash, g_str_equal);
@@ -1292,257 +1290,81 @@ e_card_class_init (ECardClass *klass)
g_hash_table_insert(klass->attribute_jump_table, attribute_jump_array[i].key, attribute_jump_array[i].function);
}
- object_class->dispose = e_card_dispose;
- object_class->get_property = e_card_get_property;
- object_class->set_property = e_card_set_property;
-
- g_object_class_install_property (object_class, PROP_FILE_AS,
- g_param_spec_string ("file_as",
- _("File As"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FULL_NAME,
- g_param_spec_string ("full_name",
- _("Full Name"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_NAME,
- g_param_spec_pointer ("name",
- _("Name"),
- /*_( */"XXX blurb" /*)*/,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_ADDRESS,
- g_param_spec_object ("address",
- _("Address"),
- /*_( */"XXX blurb" /*)*/,
- E_TYPE_LIST,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_ADDRESS_LABEL,
- g_param_spec_object ("address_label",
- _("Address Label"),
- /*_( */"XXX blurb" /*)*/,
- E_TYPE_LIST,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_PHONE,
- g_param_spec_object ("phone",
- _("Phone"),
- /*_( */"XXX blurb" /*)*/,
- E_TYPE_LIST,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_EMAIL,
- g_param_spec_object ("email",
- _("Email"),
- /*_( */"XXX blurb" /*)*/,
- E_TYPE_LIST,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_BIRTH_DATE,
- g_param_spec_pointer ("birth_date",
- _("Birth date"),
- /*_( */"XXX blurb" /*)*/,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_URL,
- g_param_spec_string ("url",
- _("URL"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_ORG,
- g_param_spec_string ("org",
- _("Organization"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_ORG_UNIT,
- g_param_spec_string ("org_unit",
- _("Organizational Unit"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_OFFICE,
- g_param_spec_string ("office",
- _("Office"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_TITLE,
- g_param_spec_string ("title",
- _("Title"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_ROLE,
- g_param_spec_string ("role",
- _("Role"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_MANAGER,
- g_param_spec_string ("manager",
- _("Manager"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_ASSISTANT,
- g_param_spec_string ("assistant",
- _("Assistant"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_NICKNAME,
- g_param_spec_string ("nickname",
- _("Nickname"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_SPOUSE,
- g_param_spec_string ("spouse",
- _("Spouse"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_ANNIVERSARY,
- g_param_spec_pointer ("anniversary",
- _("Anniversary"),
- /*_( */"XXX blurb" /*)*/,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_MAILER,
- g_param_spec_string ("mailer",
- _("Mailer"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_CALURI,
- g_param_spec_string ("caluri",
- _("Calendar URI"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FBURL,
- g_param_spec_string ("fburl",
- _("Free/Busy URL"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_ICSCALENDAR,
- g_param_spec_string ("icscalendar",
- _("ICS Calendar"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_NOTE,
- g_param_spec_string ("note",
- _("Note"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_RELATED_CONTACTS,
- g_param_spec_string ("related_contacts",
- _("Related Contacts"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_CATEGORIES,
- g_param_spec_string ("categories",
- _("Categories"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_CATEGORY_LIST,
- g_param_spec_object ("category list",
- _("Category List"),
- /*_( */"XXX blurb" /*)*/,
- E_TYPE_LIST,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_WANTS_HTML,
- g_param_spec_boolean ("wants_html",
- _("Wants HTML"),
- /*_( */"XXX blurb" /*)*/,
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_WANTS_HTML_SET,
- g_param_spec_boolean ("wants_html_set",
- _("Wants HTML set"),
- /*_( */"XXX blurb" /*)*/,
- FALSE,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_EVOLUTION_LIST,
- g_param_spec_boolean ("list",
- _("List"),
- /*_( */"XXX blurb" /*)*/,
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_EVOLUTION_LIST_SHOW_ADDRESSES,
- g_param_spec_boolean ("list_show_addresses",
- _("List Show Addresses"),
- /*_( */"XXX blurb" /*)*/,
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_ARBITRARY,
- g_param_spec_object ("arbitrary",
- _("Arbitrary"),
- /*_( */"XXX blurb" /*)*/,
- E_TYPE_LIST,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_ID,
- g_param_spec_string ("id",
- _("ID"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_LAST_USE,
- g_param_spec_pointer ("last_use",
- _("Last Use"),
- /*_( */"XXX blurb" /*)*/,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_USE_SCORE,
- /* XXX at some point we
- should remove
- LAX_VALIDATION and figure
- out some hard min & max
- scores. */
- g_param_spec_float ("use_score",
- _("Use Score"),
- /*_( */"XXX blurb" /*)*/,
- 0.0,
- 0.0,
- 0.0,
- G_PARAM_READWRITE | G_PARAM_LAX_VALIDATION));
+ gtk_object_add_arg_type ("ECard::file_as",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_FILE_AS);
+ gtk_object_add_arg_type ("ECard::full_name",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_FULL_NAME);
+ gtk_object_add_arg_type ("ECard::name",
+ GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_NAME);
+ gtk_object_add_arg_type ("ECard::address",
+ GTK_TYPE_OBJECT, GTK_ARG_READABLE, ARG_ADDRESS);
+ gtk_object_add_arg_type ("ECard::address_label",
+ GTK_TYPE_OBJECT, GTK_ARG_READABLE, ARG_ADDRESS_LABEL);
+ gtk_object_add_arg_type ("ECard::phone",
+ GTK_TYPE_OBJECT, GTK_ARG_READABLE, ARG_PHONE);
+ gtk_object_add_arg_type ("ECard::email",
+ GTK_TYPE_OBJECT, GTK_ARG_READABLE, ARG_EMAIL);
+ gtk_object_add_arg_type ("ECard::birth_date",
+ 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::org",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ORG);
+ gtk_object_add_arg_type ("ECard::org_unit",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ORG_UNIT);
+ gtk_object_add_arg_type ("ECard::office",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_OFFICE);
+ gtk_object_add_arg_type ("ECard::title",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_TITLE);
+ gtk_object_add_arg_type ("ECard::role",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ROLE);
+ gtk_object_add_arg_type ("ECard::manager",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_MANAGER);
+ gtk_object_add_arg_type ("ECard::assistant",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ASSISTANT);
+ gtk_object_add_arg_type ("ECard::nickname",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_NICKNAME);
+ gtk_object_add_arg_type ("ECard::spouse",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_SPOUSE);
+ gtk_object_add_arg_type ("ECard::anniversary",
+ GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_ANNIVERSARY);
+ gtk_object_add_arg_type ("ECard::mailer",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_MAILER);
+ gtk_object_add_arg_type ("ECard::caluri",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_CALURI);
+ gtk_object_add_arg_type ("ECard::fburl",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_FBURL);
+ gtk_object_add_arg_type ("ECard::icscalendar",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ICSCALENDAR);
+ gtk_object_add_arg_type ("ECard::note",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_NOTE);
+ gtk_object_add_arg_type ("ECard::related_contacts",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_RELATED_CONTACTS);
+ gtk_object_add_arg_type ("ECard::categories",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_CATEGORIES);
+ gtk_object_add_arg_type ("ECard::category_list",
+ GTK_TYPE_OBJECT, GTK_ARG_READWRITE, ARG_CATEGORY_LIST);
+ gtk_object_add_arg_type ("ECard::wants_html",
+ GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_WANTS_HTML);
+ gtk_object_add_arg_type ("ECard::wants_html_set",
+ GTK_TYPE_BOOL, GTK_ARG_READABLE, ARG_WANTS_HTML);
+ gtk_object_add_arg_type ("ECard::list",
+ GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_EVOLUTION_LIST);
+ gtk_object_add_arg_type ("ECard::list_show_addresses",
+ GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_EVOLUTION_LIST_SHOW_ADDRESSES);
+ gtk_object_add_arg_type ("ECard::arbitrary",
+ GTK_TYPE_OBJECT, GTK_ARG_READWRITE, ARG_ARBITRARY);
+ gtk_object_add_arg_type ("ECard::id",
+ GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ID);
+ gtk_object_add_arg_type ("ECard::last_use",
+ GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_LAST_USE);
+ gtk_object_add_arg_type ("ECard::use_score",
+ GTK_TYPE_FLOAT, GTK_ARG_READWRITE, ARG_USE_SCORE);
+
+
+ object_class->destroy = e_card_destroy;
+ object_class->get_arg = e_card_get_arg;
+ object_class->set_arg = e_card_set_arg;
}
ECardPhone *
@@ -1936,7 +1758,7 @@ e_card_email_match_single_string (const gchar *a, const gchar *b)
for (xa=a; *xa && *xa != '@'; ++xa);
for (xb=b; *xb && *xb != '@'; ++xb);
- if (xa-a != xb-b || *xa != *xb || g_ascii_strncasecmp (a, b, xa-a))
+ if (xa-a != xb-b || *xa != *xb || g_strncasecmp (a, b, xa-a))
return FALSE;
if (*xa == '\0')
@@ -1977,7 +1799,7 @@ e_card_email_match_string (const ECard *card, const gchar *str)
if (e_card_email_match_single_string (e_iterator_get (iter), str))
return TRUE;
}
- g_object_unref (iter);
+ gtk_object_unref (GTK_OBJECT (iter));
return FALSE;
}
@@ -1996,14 +1818,14 @@ e_card_email_find_number (const ECard *card, const gchar *email)
iter = e_list_get_iterator (card->email);
for (e_iterator_reset (iter); e_iterator_is_valid (iter); e_iterator_next (iter)) {
- if (!g_ascii_strcasecmp (e_iterator_get (iter), email))
+ if (!g_strcasecmp (e_iterator_get (iter), email))
goto finished;
++count;
}
count = -1;
finished:
- g_object_unref (iter);
+ gtk_object_unref (GTK_OBJECT (iter));
return count;
}
@@ -2013,82 +1835,75 @@ e_card_email_find_number (const ECard *card, const gchar *email)
*/
static void
-e_card_dispose (GObject *object)
+e_card_destroy (GtkObject *object)
{
ECard *card = E_CARD(object);
+ g_free(card->id);
+ if (card->book)
+ gtk_object_unref (GTK_OBJECT (card->book));
+ g_free(card->file_as);
+ g_free(card->fname);
+ e_card_name_unref(card->name);
+ g_free(card->bday);
+
+ g_free(card->url);
+ g_free(card->org);
+ g_free(card->org_unit);
+ g_free(card->office);
+ g_free(card->title);
+ g_free(card->role);
+ g_free(card->manager);
+ g_free(card->assistant);
+ g_free(card->nickname);
+ g_free(card->spouse);
+ g_free(card->anniversary);
+ g_free(card->caluri);
+ g_free(card->fburl);
+ g_free(card->icscalendar);
+ g_free(card->note);
+ g_free(card->related_contacts);
-#define FREE_IF(x) do { if ((x)) { g_free (x); x = NULL; } } while (0)
-#define UNREF_IF(x) do { if ((x)) { g_object_unref (x); x = NULL; } } while (0)
-
- FREE_IF (card->id);
- UNREF_IF (card->book);
- FREE_IF(card->file_as);
- FREE_IF(card->fname);
- if (card->name) {
- e_card_name_unref(card->name);
- card->name = NULL;
- }
- FREE_IF(card->bday);
-
- FREE_IF(card->url);
- FREE_IF(card->org);
- FREE_IF(card->org_unit);
- FREE_IF(card->office);
- FREE_IF(card->title);
- FREE_IF(card->role);
- FREE_IF(card->manager);
- FREE_IF(card->assistant);
- FREE_IF(card->nickname);
- FREE_IF(card->spouse);
- FREE_IF(card->anniversary);
- FREE_IF(card->caluri);
- FREE_IF(card->fburl);
- FREE_IF(card->icscalendar);
- FREE_IF(card->note);
- FREE_IF(card->related_contacts);
-
- UNREF_IF (card->categories);
- UNREF_IF (card->email);
- UNREF_IF (card->phone);
- UNREF_IF (card->address);
- UNREF_IF (card->address_label);
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- G_OBJECT_CLASS (parent_class)->dispose (object);
+ if (card->categories)
+ gtk_object_unref(GTK_OBJECT(card->categories));
+ if (card->email)
+ gtk_object_unref(GTK_OBJECT(card->email));
+ if (card->phone)
+ gtk_object_unref(GTK_OBJECT(card->phone));
+ if (card->address)
+ gtk_object_unref(GTK_OBJECT(card->address));
+ if (card->address_label)
+ gtk_object_unref(GTK_OBJECT(card->address_label));
}
/* Set_arg handler for the card */
static void
-e_card_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
+e_card_set_arg (GtkObject *object, GtkArg *arg, guint arg_id)
{
ECard *card;
card = E_CARD (object);
- switch (prop_id) {
- case PROP_FILE_AS:
+ switch (arg_id) {
+ case ARG_FILE_AS:
g_free(card->file_as);
- card->file_as = g_strdup(g_value_get_string (value));
+ card->file_as = g_strdup(GTK_VALUE_STRING(*arg));
if (card->file_as == NULL)
card->file_as = g_strdup("");
break;
- case PROP_FULL_NAME:
+ case ARG_FULL_NAME:
g_free(card->fname);
- card->fname = g_strdup(g_value_get_string (value));
+ card->fname = g_strdup(GTK_VALUE_STRING(*arg));
if (card->fname == NULL)
card->fname = g_strdup("");
e_card_name_unref (card->name);
card->name = e_card_name_from_string (card->fname);
break;
- case PROP_NAME:
+ case ARG_NAME:
e_card_name_unref (card->name);
- card->name = e_card_name_ref(g_value_get_pointer (value));
+ card->name = e_card_name_ref(GTK_VALUE_POINTER(*arg));
if (card->name == NULL)
card->name = e_card_name_new();
if (card->fname == NULL) {
@@ -2108,193 +1923,189 @@ e_card_set_property (GObject *object,
card->file_as = string;
}
break;
- case PROP_CATEGORIES:
+ case ARG_CATEGORIES:
if (card->categories)
- g_object_unref(card->categories);
+ gtk_object_unref(GTK_OBJECT(card->categories));
card->categories = NULL;
- if (g_value_get_string (value))
- do_parse_categories(card, (char*)g_value_get_string (value));
+ if (GTK_VALUE_STRING(*arg))
+ do_parse_categories(card, GTK_VALUE_STRING(*arg));
break;
- case PROP_CATEGORY_LIST:
+ case ARG_CATEGORY_LIST:
if (card->categories)
- g_object_unref(card->categories);
- card->categories = E_LIST(g_value_get_object(value));
+ gtk_object_unref(GTK_OBJECT(card->categories));
+ card->categories = E_LIST(GTK_VALUE_OBJECT(*arg));
if (card->categories)
- g_object_ref(card->categories);
+ gtk_object_ref(GTK_OBJECT(card->categories));
break;
- case PROP_BIRTH_DATE:
+ case ARG_BIRTH_DATE:
g_free(card->bday);
- if (g_value_get_pointer (value)) {
+ if (GTK_VALUE_POINTER (*arg)) {
card->bday = g_new (ECardDate, 1);
- memcpy (card->bday, g_value_get_pointer (value), sizeof (ECardDate));
+ memcpy (card->bday, GTK_VALUE_POINTER (*arg), sizeof (ECardDate));
} else {
card->bday = NULL;
}
break;
- case PROP_URL:
+ case ARG_URL:
g_free(card->url);
- card->url = g_strdup(g_value_get_string(value));
+ card->url = g_strdup(GTK_VALUE_STRING(*arg));
break;
- case PROP_ORG:
+ case ARG_ORG:
g_free(card->org);
- card->org = g_strdup(g_value_get_string(value));
+ card->org = g_strdup(GTK_VALUE_STRING(*arg));
break;
- case PROP_ORG_UNIT:
+ case ARG_ORG_UNIT:
g_free(card->org_unit);
- card->org_unit = g_strdup(g_value_get_string(value));
+ card->org_unit = g_strdup(GTK_VALUE_STRING(*arg));
break;
- case PROP_OFFICE:
+ case ARG_OFFICE:
g_free(card->office);
- card->office = g_strdup(g_value_get_string(value));
+ card->office = g_strdup(GTK_VALUE_STRING(*arg));
break;
- case PROP_TITLE:
+ case ARG_TITLE:
g_free(card->title);
- card->title = g_strdup(g_value_get_string(value));
+ card->title = g_strdup(GTK_VALUE_STRING(*arg));
break;
- case PROP_ROLE:
+ case ARG_ROLE:
g_free(card->role);
- card->role = g_strdup(g_value_get_string(value));
+ card->role = g_strdup(GTK_VALUE_STRING(*arg));
break;
- case PROP_MANAGER:
+ case ARG_MANAGER:
g_free(card->manager);
- card->manager = g_strdup(g_value_get_string(value));
+ card->manager = g_strdup(GTK_VALUE_STRING(*arg));
break;
- case PROP_ASSISTANT:
+ case ARG_ASSISTANT:
g_free(card->assistant);
- card->assistant = g_strdup(g_value_get_string(value));
+ card->assistant = g_strdup(GTK_VALUE_STRING(*arg));
break;
- case PROP_NICKNAME:
+ case ARG_NICKNAME:
g_free(card->nickname);
- card->nickname = g_strdup(g_value_get_string(value));
+ card->nickname = g_strdup(GTK_VALUE_STRING(*arg));
break;
- case PROP_SPOUSE:
+ case ARG_SPOUSE:
g_free(card->spouse);
- card->spouse = g_strdup(g_value_get_string(value));
+ card->spouse = g_strdup(GTK_VALUE_STRING(*arg));
break;
- case PROP_ANNIVERSARY:
+ case ARG_ANNIVERSARY:
g_free(card->anniversary);
- if (g_value_get_pointer (value)) {
+ if (GTK_VALUE_POINTER (*arg)) {
card->anniversary = g_new (ECardDate, 1);
- memcpy (card->anniversary, g_value_get_pointer (value), sizeof (ECardDate));
+ memcpy (card->anniversary, GTK_VALUE_POINTER (*arg), sizeof (ECardDate));
} else {
card->anniversary = NULL;
}
break;
- case PROP_MAILER:
+ case ARG_MAILER:
g_free(card->mailer);
- card->mailer = g_strdup(g_value_get_string(value));
+ card->mailer = g_strdup(GTK_VALUE_STRING(*arg));
break;
- case PROP_CALURI:
+ case ARG_CALURI:
g_free(card->caluri);
- card->caluri = g_strdup(g_value_get_string(value));
+ card->caluri = g_strdup(GTK_VALUE_STRING(*arg));
break;
- case PROP_FBURL:
+ case ARG_FBURL:
g_free(card->fburl);
- card->fburl = g_strdup(g_value_get_string(value));
+ card->fburl = g_strdup(GTK_VALUE_STRING(*arg));
break;
- case PROP_ICSCALENDAR:
+ case ARG_ICSCALENDAR:
g_free(card->icscalendar);
- card->icscalendar = g_strdup(g_value_get_string(value));
+ card->icscalendar = g_strdup(GTK_VALUE_STRING(*arg));
break;
- case PROP_NOTE:
+ case ARG_NOTE:
g_free (card->note);
- card->note = g_strdup(g_value_get_string(value));
+ card->note = g_strdup(GTK_VALUE_STRING(*arg));
break;
- case PROP_RELATED_CONTACTS:
+ case ARG_RELATED_CONTACTS:
g_free (card->related_contacts);
- card->related_contacts = g_strdup(g_value_get_string(value));
+ card->related_contacts = g_strdup(GTK_VALUE_STRING(*arg));
break;
- case PROP_WANTS_HTML:
- card->wants_html = g_value_get_boolean (value);
+ case ARG_WANTS_HTML:
+ card->wants_html = GTK_VALUE_BOOL(*arg);
card->wants_html_set = TRUE;
break;
- case PROP_ARBITRARY:
+ case ARG_ARBITRARY:
if (card->arbitrary)
- g_object_unref(card->arbitrary);
- card->arbitrary = E_LIST(g_value_get_pointer(value));
+ gtk_object_unref(GTK_OBJECT(card->arbitrary));
+ card->arbitrary = E_LIST(GTK_VALUE_OBJECT(*arg));
if (card->arbitrary)
- g_object_ref(card->arbitrary);
+ gtk_object_ref(GTK_OBJECT(card->arbitrary));
break;
- case PROP_ID:
+ case ARG_ID:
g_free(card->id);
- card->id = g_strdup(g_value_get_string(value));
+ card->id = g_strdup(GTK_VALUE_STRING(*arg));
if (card->id == NULL)
card->id = g_strdup ("");
break;
- case PROP_LAST_USE:
+ case ARG_LAST_USE:
g_free(card->last_use);
- if (g_value_get_pointer (value)) {
+ if (GTK_VALUE_POINTER (*arg)) {
card->last_use = g_new (ECardDate, 1);
- memcpy (card->last_use, g_value_get_pointer (value), sizeof (ECardDate));
+ memcpy (card->last_use, GTK_VALUE_POINTER (*arg), sizeof (ECardDate));
} else {
card->last_use = NULL;
}
break;
- case PROP_USE_SCORE:
- card->raw_use_score = g_value_get_float (value);
+ case ARG_USE_SCORE:
+ card->raw_use_score = GTK_VALUE_FLOAT(*arg);
break;
- case PROP_EVOLUTION_LIST:
- card->list = g_value_get_boolean (value);
+ case ARG_EVOLUTION_LIST:
+ card->list = GTK_VALUE_BOOL(*arg);
break;
- case PROP_EVOLUTION_LIST_SHOW_ADDRESSES:
- card->list_show_addresses = g_value_get_boolean (value);
+ case ARG_EVOLUTION_LIST_SHOW_ADDRESSES:
+ card->list_show_addresses = GTK_VALUE_BOOL(*arg);
break;
default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
+ return;
}
}
/* Get_arg handler for the card */
static void
-e_card_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
+e_card_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
{
ECard *card;
card = E_CARD (object);
- switch (prop_id) {
- case PROP_FILE_AS:
- g_value_set_string (value, card->file_as);
+ switch (arg_id) {
+ case ARG_FILE_AS:
+ GTK_VALUE_STRING (*arg) = card->file_as;
break;
- case PROP_FULL_NAME:
- g_value_set_string (value, card->fname);
+ case ARG_FULL_NAME:
+ GTK_VALUE_STRING (*arg) = card->fname;
break;
- case PROP_NAME:
- g_value_set_pointer (value, card->name);
+ case ARG_NAME:
+ GTK_VALUE_POINTER(*arg) = card->name;
break;
- case PROP_ADDRESS:
+ case ARG_ADDRESS:
if (!card->address)
card->address = e_list_new((EListCopyFunc) e_card_delivery_address_ref,
(EListFreeFunc) e_card_delivery_address_unref,
NULL);
- g_value_set_object (value, card->address);
+ GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(card->address);
break;
- case PROP_ADDRESS_LABEL:
+ case ARG_ADDRESS_LABEL:
if (!card->address_label)
card->address_label = e_list_new((EListCopyFunc) e_card_address_label_ref,
(EListFreeFunc) e_card_address_label_unref,
NULL);
- g_value_set_object (value, card->address_label);
+ GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(card->address_label);
break;
- case PROP_PHONE:
+ case ARG_PHONE:
if (!card->phone)
card->phone = e_list_new((EListCopyFunc) e_card_phone_ref,
(EListFreeFunc) e_card_phone_unref,
NULL);
- g_value_set_object (value, card->phone);
+ GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(card->phone);
break;
- case PROP_EMAIL:
+ case ARG_EMAIL:
if (!card->email)
card->email = e_list_new((EListCopyFunc) g_strdup,
(EListFreeFunc) g_free,
NULL);
- g_value_set_object (value, card->email);
+ GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(card->email);
break;
- case PROP_CATEGORIES:
+ case ARG_CATEGORIES:
{
int i;
char ** strs;
@@ -2310,102 +2121,103 @@ e_card_get_property (GObject *object,
strs[i] = (char *)e_iterator_get(iterator);
}
strs[i] = 0;
- g_value_set_string(value, g_strjoinv(", ", strs));
+ GTK_VALUE_STRING(*arg) = g_strjoinv(", ", strs);
g_free(strs);
}
break;
- case PROP_CATEGORY_LIST:
+ case ARG_CATEGORY_LIST:
if (!card->categories)
card->categories = e_list_new((EListCopyFunc) g_strdup,
(EListFreeFunc) g_free,
NULL);
- g_value_set_object (value, card->categories);
+ GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(card->categories);
break;
- case PROP_BIRTH_DATE:
- g_value_set_pointer (value, card->bday);
+ case ARG_BIRTH_DATE:
+ GTK_VALUE_POINTER(*arg) = card->bday;
break;
- case PROP_URL:
- g_value_set_string (value, card->url);
+ case ARG_URL:
+ GTK_VALUE_STRING(*arg) = card->url;
break;
- case PROP_ORG:
- g_value_set_string (value, card->org);
+ case ARG_ORG:
+ GTK_VALUE_STRING(*arg) = card->org;
break;
- case PROP_ORG_UNIT:
- g_value_set_string (value, card->org_unit);
+ case ARG_ORG_UNIT:
+ GTK_VALUE_STRING(*arg) = card->org_unit;
break;
- case PROP_OFFICE:
- g_value_set_string (value, card->office);
+ case ARG_OFFICE:
+ GTK_VALUE_STRING(*arg) = card->office;
break;
- case PROP_TITLE:
- g_value_set_string (value, card->title);
+ case ARG_TITLE:
+ GTK_VALUE_STRING(*arg) = card->title;
break;
- case PROP_ROLE:
- g_value_set_string (value, card->role);
+ case ARG_ROLE:
+ GTK_VALUE_STRING(*arg) = card->role;
break;
- case PROP_MANAGER:
- g_value_set_string (value, card->manager);
+ case ARG_MANAGER:
+ GTK_VALUE_STRING(*arg) = card->manager;
break;
- case PROP_ASSISTANT:
- g_value_set_string (value, card->assistant);
+ case ARG_ASSISTANT:
+ GTK_VALUE_STRING(*arg) = card->assistant;
break;
- case PROP_NICKNAME:
- g_value_set_string (value, card->nickname);
+ case ARG_NICKNAME:
+ GTK_VALUE_STRING(*arg) = card->nickname;
break;
- case PROP_SPOUSE:
- g_value_set_string (value, card->spouse);
+ case ARG_SPOUSE:
+ GTK_VALUE_STRING(*arg) = card->spouse;
break;
- case PROP_ANNIVERSARY:
- g_value_set_pointer (value, card->anniversary);
+ case ARG_ANNIVERSARY:
+ GTK_VALUE_POINTER(*arg) = card->anniversary;
break;
- case PROP_MAILER:
- g_value_set_string (value, card->mailer);
+ case ARG_MAILER:
+ GTK_VALUE_STRING(*arg) = card->mailer;
break;
- case PROP_CALURI:
- g_value_set_string (value, card->caluri);
+ case ARG_CALURI:
+ GTK_VALUE_STRING(*arg) = card->caluri;
break;
- case PROP_FBURL:
- g_value_set_string (value, card->fburl);
+ case ARG_FBURL:
+ GTK_VALUE_STRING(*arg) = card->fburl;
break;
- case PROP_ICSCALENDAR:
- g_value_set_string (value, card->icscalendar);
+ case ARG_ICSCALENDAR:
+ GTK_VALUE_STRING(*arg) = card->icscalendar;
break;
- case PROP_NOTE:
- g_value_set_string (value, card->note);
+ case ARG_NOTE:
+ GTK_VALUE_STRING(*arg) = card->note;
break;
- case PROP_RELATED_CONTACTS:
- g_value_set_string (value, card->related_contacts);
+ case ARG_RELATED_CONTACTS:
+ GTK_VALUE_STRING(*arg) = card->related_contacts;
break;
- case PROP_WANTS_HTML:
- g_value_set_boolean (value, card->wants_html);
+ case ARG_WANTS_HTML:
+ GTK_VALUE_BOOL(*arg) = card->wants_html;
break;
- case PROP_WANTS_HTML_SET:
- g_value_set_boolean (value, card->wants_html_set);
+ case ARG_WANTS_HTML_SET:
+ GTK_VALUE_BOOL(*arg) = card->wants_html_set;
break;
- case PROP_ARBITRARY:
+ case ARG_ARBITRARY:
if (!card->arbitrary)
card->arbitrary = e_list_new((EListCopyFunc) e_card_arbitrary_ref,
(EListFreeFunc) e_card_arbitrary_unref,
NULL);
- g_value_set_object (value, card->arbitrary);
+ GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(card->arbitrary);
break;
- case PROP_ID:
- g_value_set_string (value, card->id);
+ case ARG_ID:
+ GTK_VALUE_STRING(*arg) = card->id;
break;
- case PROP_LAST_USE:
- g_value_set_pointer (value, card->last_use);
+ case ARG_LAST_USE:
+ GTK_VALUE_POINTER(*arg) = card->last_use;
break;
- case PROP_USE_SCORE:
- g_value_set_float (value, e_card_get_use_score (card));
+
+ case ARG_USE_SCORE:
+ GTK_VALUE_FLOAT(*arg) = e_card_get_use_score (card);
break;
- case PROP_EVOLUTION_LIST:
- g_value_set_boolean (value, card->list);
+ case ARG_EVOLUTION_LIST:
+ GTK_VALUE_BOOL(*arg) = card->list;
break;
- case PROP_EVOLUTION_LIST_SHOW_ADDRESSES:
- g_value_set_boolean (value, card->list_show_addresses);
+ case ARG_EVOLUTION_LIST_SHOW_ADDRESSES:
+ GTK_VALUE_BOOL(*arg) = card->list_show_addresses;
break;
default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ arg->type = GTK_TYPE_INVALID;
break;
}
}
@@ -2461,7 +2273,7 @@ e_card_load_cards_from_file_with_default_charset(const char *filename, char *def
GList *list = NULL;
while(vobj) {
VObject *next;
- ECard *card = g_object_new (E_TYPE_CARD, NULL);
+ ECard *card = E_CARD(gtk_type_new(e_card_get_type()));
parse(card, vobj, default_charset);
next = nextVObjectInList(vobj);
cleanVObject(vobj);
@@ -2485,7 +2297,7 @@ e_card_load_cards_from_string_with_default_charset(const char *str, char *defaul
GList *list = NULL;
while(vobj) {
VObject *next;
- ECard *card = g_object_new (E_TYPE_CARD, NULL);
+ ECard *card = E_CARD(gtk_type_new(e_card_get_type()));
parse(card, vobj, default_charset);
next = nextVObjectInList(vobj);
cleanVObject(vobj);
@@ -2506,32 +2318,32 @@ void
e_card_free_empty_lists (ECard *card)
{
if (card->address && e_list_length (card->address) == 0) {
- g_object_unref (card->address);
+ gtk_object_unref (GTK_OBJECT (card->address));
card->address = NULL;
}
if (card->address_label && e_list_length (card->address_label) == 0) {
- g_object_unref (card->address_label);
+ gtk_object_unref (GTK_OBJECT (card->address_label));
card->address_label = NULL;
}
if (card->phone && e_list_length (card->phone) == 0) {
- g_object_unref (card->phone);
+ gtk_object_unref (GTK_OBJECT (card->phone));
card->phone = NULL;
}
if (card->email && e_list_length (card->email) == 0) {
- g_object_unref (card->email);
+ gtk_object_unref (GTK_OBJECT (card->email));
card->email = NULL;
}
if (card->categories && e_list_length (card->categories) == 0) {
- g_object_unref (card->categories);
+ gtk_object_unref (GTK_OBJECT (card->categories));
card->categories = NULL;
}
if (card->arbitrary && e_list_length (card->arbitrary) == 0) {
- g_object_unref (card->arbitrary);
+ gtk_object_unref (GTK_OBJECT (card->arbitrary));
card->arbitrary = NULL;
}
}
@@ -2734,6 +2546,278 @@ set_address_flags (VObject *vobj, ECardAddressFlags flags)
}
}
+#include <Evolution-Composer.h>
+
+#define COMPOSER_OAFID "OAFIID:GNOME_Evolution_Mail_Composer"
+
+void
+e_card_list_send (GList *cards, ECardDisposition disposition)
+{
+ BonoboObjectClient *bonobo_server;
+ GNOME_Evolution_Composer composer_server;
+ CORBA_Environment ev;
+
+ if (cards == NULL)
+ return;
+
+ /* First, I obtain an object reference that represents the Composer. */
+ bonobo_server = bonobo_object_activate (COMPOSER_OAFID, 0);
+
+ g_return_if_fail (bonobo_server != NULL);
+
+ composer_server = bonobo_object_corba_objref (BONOBO_OBJECT (bonobo_server));
+
+ CORBA_exception_init (&ev);
+
+ if (disposition == E_CARD_DISPOSITION_AS_TO) {
+ GNOME_Evolution_Composer_RecipientList *to_list, *cc_list, *bcc_list;
+ CORBA_char *subject;
+ int to_i, bcc_i;
+ GList *iter;
+ gint to_length = 0, bcc_length = 0;
+
+ /* Figure out how many addresses of each kind we have. */
+ for (iter = cards; iter != NULL; iter = g_list_next (iter)) {
+ ECard *card = E_CARD (iter->data);
+ if (e_card_evolution_list (card)) {
+ gint len = card->email ? e_list_length (card->email) : 0;
+ if (e_card_evolution_list_show_addresses (card))
+ to_length += len;
+ else
+ bcc_length += len;
+ } else {
+ if (card->email != NULL)
+ ++to_length;
+ }
+ }
+
+ /* Now I have to make a CORBA sequences that represents a recipient list with
+ the right number of entries, for the cards. */
+ to_list = GNOME_Evolution_Composer_RecipientList__alloc ();
+ to_list->_maximum = to_length;
+ to_list->_length = to_length;
+ if (to_length > 0) {
+ to_list->_buffer = CORBA_sequence_GNOME_Evolution_Composer_Recipient_allocbuf (to_length);
+ }
+
+ cc_list = GNOME_Evolution_Composer_RecipientList__alloc ();
+ cc_list->_maximum = cc_list->_length = 0;
+
+ bcc_list = GNOME_Evolution_Composer_RecipientList__alloc ();
+ bcc_list->_maximum = bcc_length;
+ bcc_list->_length = bcc_length;
+ if (bcc_length > 0) {
+ bcc_list->_buffer = CORBA_sequence_GNOME_Evolution_Composer_Recipient_allocbuf (bcc_length);
+ }
+
+ to_i = 0;
+ bcc_i = 0;
+ while (cards != NULL) {
+ ECard *card = cards->data;
+ EIterator *iterator;
+ gchar *name, *addr;
+ gboolean is_list, is_hidden, free_name_addr;
+ GNOME_Evolution_Composer_Recipient *recipient;
+
+ if (card->email != NULL) {
+
+ is_list = e_card_evolution_list (card);
+ is_hidden = is_list && !e_card_evolution_list_show_addresses (card);
+
+ for (iterator = e_list_get_iterator (card->email); e_iterator_is_valid (iterator); e_iterator_next (iterator)) {
+
+ if (is_hidden) {
+ recipient = &(bcc_list->_buffer[bcc_i]);
+ ++bcc_i;
+ } else {
+ recipient = &(to_list->_buffer[to_i]);
+ ++to_i;
+ }
+
+ name = "";
+ addr = "";
+ free_name_addr = FALSE;
+ if (e_iterator_is_valid (iterator)) {
+
+ if (is_list) {
+ /* We need to decode the list entries, which are XMLified EDestinations. */
+ EDestination *dest = e_destination_import (e_iterator_get (iterator));
+ if (dest != NULL) {
+ name = g_strdup (e_destination_get_name (dest));
+ addr = g_strdup (e_destination_get_email (dest));
+ free_name_addr = TRUE;
+ gtk_object_unref (GTK_OBJECT (dest));
+ }
+
+ } else { /* is just a plain old card */
+ if (card->name)
+ name = e_card_name_to_string (card->name);
+ addr = g_strdup ((char *) e_iterator_get (iterator));
+ free_name_addr = TRUE;
+ }
+ }
+
+ recipient->name = CORBA_string_dup (name ? name : "");
+ recipient->address = CORBA_string_dup (addr ? addr : "");
+
+ if (free_name_addr) {
+ g_free ((gchar *) name);
+ g_free ((gchar *) addr);
+ }
+
+ /* If this isn't a list, we quit after the first (i.e. the default) address. */
+ if (!is_list)
+ break;
+
+ }
+ gtk_object_unref (GTK_OBJECT (iterator));
+ }
+
+ cards = g_list_next (cards);
+ }
+
+ subject = CORBA_string_dup ("");
+
+ GNOME_Evolution_Composer_setHeaders (composer_server, "", to_list, cc_list, bcc_list, subject, &ev);
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_printerr ("gui/e-meeting-edit.c: I couldn't set the composer headers via CORBA! Aagh.\n");
+ CORBA_exception_free (&ev);
+ return;
+ }
+
+ CORBA_free (to_list);
+ CORBA_free (cc_list);
+ CORBA_free (bcc_list);
+ CORBA_free (subject);
+ }
+
+ if (disposition == E_CARD_DISPOSITION_AS_ATTACHMENT) {
+ CORBA_char *content_type, *filename, *description;
+ GNOME_Evolution_Composer_AttachmentData *attach_data;
+ CORBA_boolean show_inline;
+ char *tempstr;
+
+ GNOME_Evolution_Composer_RecipientList *to_list, *cc_list, *bcc_list;
+ CORBA_char *subject;
+
+ content_type = CORBA_string_dup ("text/x-vcard");
+ filename = CORBA_string_dup ("");
+
+ if (cards->next) {
+ description = CORBA_string_dup (_("Multiple VCards"));
+ } else {
+ char *file_as;
+
+ gtk_object_get(GTK_OBJECT(cards->data),
+ "file_as", &file_as,
+ NULL);
+
+ tempstr = g_strdup_printf (_("VCard for %s"), file_as);
+ description = CORBA_string_dup (tempstr);
+ g_free (tempstr);
+ }
+
+ show_inline = FALSE;
+
+ tempstr = e_card_list_get_vcard (cards);
+ attach_data = GNOME_Evolution_Composer_AttachmentData__alloc();
+ attach_data->_maximum = attach_data->_length = strlen (tempstr);
+ attach_data->_buffer = CORBA_sequence_CORBA_char_allocbuf (attach_data->_length);
+ strcpy (attach_data->_buffer, tempstr);
+ g_free (tempstr);
+
+ GNOME_Evolution_Composer_attachData (composer_server,
+ content_type, filename, description,
+ show_inline, attach_data,
+ &ev);
+
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_printerr ("gui/e-meeting-edit.c: I couldn't attach data to the composer via CORBA! Aagh.\n");
+ CORBA_exception_free (&ev);
+ return;
+ }
+
+ CORBA_free (content_type);
+ CORBA_free (filename);
+ CORBA_free (description);
+ CORBA_free (attach_data);
+
+ to_list = GNOME_Evolution_Composer_RecipientList__alloc ();
+ to_list->_maximum = to_list->_length = 0;
+
+ cc_list = GNOME_Evolution_Composer_RecipientList__alloc ();
+ cc_list->_maximum = cc_list->_length = 0;
+
+ bcc_list = GNOME_Evolution_Composer_RecipientList__alloc ();
+ bcc_list->_maximum = bcc_list->_length = 0;
+
+ if (!cards || cards->next) {
+ subject = CORBA_string_dup ("Contact information");
+ } else {
+ ECard *card = cards->data;
+ const gchar *tempstr2;
+
+ tempstr2 = NULL;
+ gtk_object_get(GTK_OBJECT(card),
+ "file_as", &tempstr2,
+ NULL);
+ if (!tempstr2 || !*tempstr2)
+ gtk_object_get(GTK_OBJECT(card),
+ "full_name", &tempstr2,
+ NULL);
+ if (!tempstr2 || !*tempstr2)
+ gtk_object_get(GTK_OBJECT(card),
+ "org", &tempstr2,
+ NULL);
+ if (!tempstr2 || !*tempstr2) {
+ EList *list;
+ EIterator *iterator;
+ gtk_object_get(GTK_OBJECT(card),
+ "email", &list,
+ NULL);
+ iterator = e_list_get_iterator (list);
+ if (e_iterator_is_valid (iterator)) {
+ tempstr2 = e_iterator_get (iterator);
+ }
+ gtk_object_unref (GTK_OBJECT (iterator));
+ }
+
+ if (!tempstr2 || !*tempstr2)
+ tempstr = g_strdup_printf ("Contact information");
+ else
+ tempstr = g_strdup_printf ("Contact information for %s", tempstr2);
+ subject = CORBA_string_dup (tempstr);
+ g_free (tempstr);
+ }
+
+ GNOME_Evolution_Composer_setHeaders (composer_server, "", to_list, cc_list, bcc_list, subject, &ev);
+
+ CORBA_free (to_list);
+ CORBA_free (cc_list);
+ CORBA_free (bcc_list);
+ CORBA_free (subject);
+ }
+
+ GNOME_Evolution_Composer_show (composer_server, &ev);
+
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_printerr ("gui/e-meeting-edit.c: I couldn't show the composer via CORBA! Aagh.\n");
+ CORBA_exception_free (&ev);
+ return;
+ }
+
+ CORBA_exception_free (&ev);
+}
+
+void
+e_card_send (ECard *card, ECardDisposition disposition)
+{
+ GList *list;
+ list = g_list_prepend (NULL, card);
+ e_card_list_send (list, disposition);
+ g_list_free (list);
+}
+
gboolean
e_card_evolution_list (ECard *card)
{
diff --git a/addressbook/backend/ebook/e-card.h b/addressbook/backend/ebook/e-card.h
index d82d5f4cb6..dbaa954ba7 100644
--- a/addressbook/backend/ebook/e-card.h
+++ b/addressbook/backend/ebook/e-card.h
@@ -13,17 +13,16 @@
#define __E_CARD_H__
#include <time.h>
-#include <glib-object.h>
+#include <gtk/gtkobject.h>
#include <stdio.h>
#include <ebook/e-card-types.h>
#include <e-util/e-list.h>
#define E_TYPE_CARD (e_card_get_type ())
-#define E_CARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_CARD, ECard))
-#define E_CARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_CARD, ECardClass))
-#define E_IS_CARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_CARD))
-#define E_IS_CARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), E_TYPE_CARD))
-#define E_CARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), E_TYPE_CARD, ECardClass))
+#define E_CARD(obj) (GTK_CHECK_CAST ((obj), E_TYPE_CARD, ECard))
+#define E_CARD_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_CARD, ECardClass))
+#define E_IS_CARD(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_CARD))
+#define E_IS_CARD_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), E_TYPE_CARD))
typedef struct _ECard ECard;
typedef struct _ECardClass ECardClass;
@@ -31,7 +30,7 @@ typedef struct _ECardClass ECardClass;
struct _EBook; /* Forward reference */
struct _ECard {
- GObject object;
+ GtkObject object;
char *id;
struct _EBook *book; /* The EBook this card is from. */
@@ -113,7 +112,7 @@ struct _ECard {
};
struct _ECardClass {
- GObjectClass parent_class;
+ GtkObjectClass parent_class;
GHashTable *attribute_jump_table;
};
@@ -196,6 +195,16 @@ GList *e_card_load_cards_from_string_with_default_charset (const
char *default_charset);
void e_card_free_empty_lists (ECard *card);
+enum _ECardDisposition {
+ E_CARD_DISPOSITION_AS_ATTACHMENT,
+ E_CARD_DISPOSITION_AS_TO,
+};
+typedef enum _ECardDisposition ECardDisposition;
+void e_card_send (ECard *card,
+ ECardDisposition disposition);
+void e_card_list_send (GList *cards,
+ ECardDisposition disposition);
+
/* Getting ECards via their URIs */
typedef void (*ECardCallback) (ECard *card, gpointer closure);
void e_card_load_uri (const gchar *book_uri,
@@ -204,6 +213,7 @@ void e_card_load_uri (const gchar
gpointer closure);
-GType e_card_get_type (void);
+/* Standard Gtk function */
+GtkType e_card_get_type (void);
#endif /* ! __E_CARD_H__ */
diff --git a/addressbook/backend/ebook/evolution-ldif-importer.c b/addressbook/backend/ebook/evolution-ldif-importer.c
index 7a204daa95..5602f3fb18 100644
--- a/addressbook/backend/ebook/evolution-ldif-importer.c
+++ b/addressbook/backend/ebook/evolution-ldif-importer.c
@@ -13,24 +13,22 @@
*/
#include <config.h>
+#include <bonobo.h>
+#include <gnome.h>
+#include <liboaf/liboaf.h>
#include <stdio.h>
#include <ctype.h>
-#include <string.h>
#include <e-book.h>
-#include <e-book-util.h>
#include <e-card-simple.h>
#include <e-destination.h>
-#include <libgnome/gnome-init.h>
-#include <bonobo/bonobo-generic-factory.h>
-#include <bonobo/bonobo-main.h>
-
#include <importer/evolution-importer.h>
#include <importer/GNOME_Evolution_Importer.h>
#define COMPONENT_FACTORY_IID "OAFIID:GNOME_Evolution_Addressbook_LDIF_ImporterFactory"
-#define COMPONENT_IID "OAFIID:GNOME_Evolution_Addressbook_LDIF_Importer"
+
+static BonoboGenericFactory *factory = NULL;
static GHashTable *dn_card_hash;
@@ -240,17 +238,17 @@ parseLine( ECardSimple *simple, ECardDeliveryAddress *address, char **buf )
field_handled = FALSE;
for (i = 0; i < num_ldif_fields; i ++) {
- if (!g_ascii_strcasecmp (ptr, ldif_fields[i].ldif_attribute)) {
+ if (!g_strcasecmp (ptr, ldif_fields[i].ldif_attribute)) {
if (ldif_fields[i].flags & FLAG_ADDRESS) {
- if (!g_ascii_strcasecmp (ptr, "locality"))
+ if (!g_strcasecmp (ptr, "locality"))
address->city = g_strdup (ldif_value->str);
- else if (!g_ascii_strcasecmp (ptr, "countryname"))
+ else if (!g_strcasecmp (ptr, "countryname"))
address->country = g_strdup (ldif_value->str);
- else if (!g_ascii_strcasecmp (ptr, "postalcode"))
+ else if (!g_strcasecmp (ptr, "postalcode"))
address->code = g_strdup (ldif_value->str);
- else if (!g_ascii_strcasecmp (ptr, "st"))
+ else if (!g_strcasecmp (ptr, "st"))
address->region = g_strdup (ldif_value->str);
- else if (!g_ascii_strcasecmp (ptr, "streetaddress"))
+ else if (!g_strcasecmp (ptr, "streetaddress"))
address->street = g_strdup (ldif_value->str);
}
else {
@@ -264,16 +262,16 @@ parseLine( ECardSimple *simple, ECardDeliveryAddress *address, char **buf )
/* handle objectclass/dn/member out here */
if (!field_handled) {
- if (!g_ascii_strcasecmp (ptr, "dn"))
+ if (!g_strcasecmp (ptr, "dn"))
g_hash_table_insert (dn_card_hash, g_strdup(ldif_value->str), simple->card);
- else if (!g_ascii_strcasecmp (ptr, "objectclass") && !g_ascii_strcasecmp (ldif_value->str, "groupofnames")) {
+ else if (!g_strcasecmp (ptr, "objectclass") && !g_strcasecmp (ldif_value->str, "groupofnames")) {
e_card_simple_set (simple, E_CARD_SIMPLE_FIELD_IS_LIST, "true");
}
- else if (!g_ascii_strcasecmp (ptr, "member")) {
+ else if (!g_strcasecmp (ptr, "member")) {
EList *email;
- g_object_get (simple->card,
- "email", &email,
- NULL);
+ gtk_object_get (GTK_OBJECT (simple->card),
+ "email", &email,
+ NULL);
e_list_append (email, ldif_value->str);
}
}
@@ -328,7 +326,7 @@ getNextLDIFEntry( FILE *f )
while (buf) {
if (!parseLine (simple, address, &buf)) {
/* parsing error */
- g_object_unref (simple);
+ gtk_object_unref (GTK_OBJECT (simple));
e_card_delivery_address_unref (address);
return NULL;
}
@@ -376,17 +374,17 @@ resolve_list_card (LDIFImporter *gci, ECard *card)
if (!e_card_evolution_list (card))
return;
- g_object_get (card,
- "email", &email,
- "full_name", &full_name,
- NULL);
+ gtk_object_get (GTK_OBJECT (card),
+ "email", &email,
+ "full_name", &full_name,
+ NULL);
/* set file_as to full_name so we don't later try and figure
out a first/last name for the list. */
if (full_name)
- g_object_set (card,
- "file_as", full_name,
- NULL);
+ gtk_object_set (GTK_OBJECT (card),
+ "file_as", full_name,
+ NULL);
email_iter = e_list_get_iterator (email);
while (e_iterator_is_valid (email_iter)) {
@@ -399,7 +397,7 @@ resolve_list_card (LDIFImporter *gci, ECard *card)
gchar *dest_xml;
e_destination_set_card (dest, dn_card, 0); /* Hard-wired for default e-mail, since netscape only exports 1 email address */
dest_xml = e_destination_export (dest);
- g_object_unref (dest);
+ gtk_object_unref (GTK_OBJECT (dest));
if (dest_xml) {
e_iterator_set (email_iter, dest_xml);
g_free (dest_xml);
@@ -450,18 +448,33 @@ book_open_cb (EBook *book, EBookStatus status, gpointer closure)
}
static void
-ebook_open (LDIFImporter *gci, const char *uri)
+ebook_create (LDIFImporter *gci)
{
+ gchar *path, *uri;
+
gci->book = e_book_new ();
if (!gci->book) {
printf ("%s: %s(): Couldn't create EBook, bailing.\n",
__FILE__,
- G_GNUC_FUNCTION);
+ __FUNCTION__);
return;
}
+#if 0
+ path = g_concat_dir_and_file (g_get_home_dir (),
+ "evolution/local/Contacts/addressbook.db");
+ uri = g_strdup_printf ("file://%s", path);
+ g_free (path);
+
+ if (! e_book_load_uri (gci->book, uri, book_open_cb, gci)) {
+ printf ("error calling load_uri!\n");
+ }
+ g_free(uri);
+#endif
- e_book_load_address_book_by_uri (gci->book, uri, book_open_cb, gci);
+ if (! e_book_load_default_book (gci->book, book_open_cb, gci)) {
+ g_warning ("Error calling load_default_book");
+ }
}
/* EvolutionImporter methods */
@@ -536,16 +549,16 @@ support_format_fn (EvolutionImporter *importer,
}
static void
-importer_destroy_cb (gpointer data,
- GObject *where_object_was)
+importer_destroy_cb (GtkObject *object,
+ LDIFImporter *gci)
{
- bonobo_main_quit ();
+ gtk_main_quit ();
}
static gboolean
load_file_fn (EvolutionImporter *importer,
const char *filename,
- const char *uri,
+ const char *folderpath,
void *closure)
{
LDIFImporter *gci;
@@ -555,33 +568,62 @@ load_file_fn (EvolutionImporter *importer,
gci->cardlist = NULL;
gci->iterator = NULL;
gci->ready = FALSE;
- ebook_open (gci, uri);
+ ebook_create (gci);
return TRUE;
}
static BonoboObject *
factory_fn (BonoboGenericFactory *_factory,
- const char *component_id,
void *closure)
{
EvolutionImporter *importer;
LDIFImporter *gci;
- if (!strcmp (component_id, COMPONENT_IID)) {
- gci = g_new (LDIFImporter, 1);
- importer = evolution_importer_new (support_format_fn, load_file_fn,
- process_item_fn, NULL, gci);
+ gci = g_new (LDIFImporter, 1);
+ importer = evolution_importer_new (support_format_fn, load_file_fn,
+ process_item_fn, NULL, gci);
- g_object_weak_ref (G_OBJECT (importer),
- importer_destroy_cb, gci);
+ gtk_signal_connect (GTK_OBJECT (importer), "destroy",
+ GTK_SIGNAL_FUNC (importer_destroy_cb), gci);
- return BONOBO_OBJECT (importer);
+ return BONOBO_OBJECT (importer);
+}
+
+static void
+importer_init (void)
+{
+ if (factory != NULL)
+ return;
+
+ factory = bonobo_generic_factory_new (COMPONENT_FACTORY_IID,
+ factory_fn, NULL);
+
+ if (factory == NULL) {
+ g_error ("Unable to create factory");
}
- else {
- g_warning (COMPONENT_FACTORY_IID ": Don't know what to do with %s", component_id);
- return NULL;
+
+ bonobo_running_context_auto_exit_unref (BONOBO_OBJECT (factory));
+}
+
+int
+main (int argc,
+ char **argv)
+{
+ CORBA_ORB orb;
+
+ gnome_init_with_popt_table ("Evolution-LDIF-Importer",
+ "0.0", argc, argv, oaf_popt_options, 0,
+ NULL);
+ orb = oaf_init (argc, argv);
+ if (bonobo_init (orb, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE) {
+ g_error ("Could not initialize Bonobo.");
}
+
+ importer_init ();
+ bonobo_main ();
+
+ return 0;
}
-BONOBO_ACTIVATION_FACTORY (COMPONENT_FACTORY_IID, "Evolution LDIF Importer Factory", VERSION, factory_fn, NULL);
+
diff --git a/addressbook/backend/ebook/evolution-vcard-importer.c b/addressbook/backend/ebook/evolution-vcard-importer.c
index b5baebf2d1..f07192d72c 100644
--- a/addressbook/backend/ebook/evolution-vcard-importer.c
+++ b/addressbook/backend/ebook/evolution-vcard-importer.c
@@ -1,14 +1,13 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
#include <config.h>
#include <stdio.h>
-#include <string.h>
+#include <liboaf/liboaf.h>
#include <bonobo/bonobo-context.h>
#include <bonobo/bonobo-generic-factory.h>
#include <bonobo/bonobo-main.h>
#include <e-book.h>
-#include <e-book-util.h>
#include <importer/evolution-importer.h>
#include <importer/GNOME_Evolution_Importer.h>
@@ -16,10 +15,12 @@
#include <e-util/e-path.h>
#define COMPONENT_FACTORY_IID "OAFIID:GNOME_Evolution_Addressbook_VCard_ImporterFactory"
-#define COMPONENT_IID "OAFIID:GNOME_Evolution_Addressbook_VCard_Importer"
+
+static BonoboGenericFactory *factory = NULL;
typedef struct {
char *filename;
+ char *folderpath;
GList *cardlist;
GList *iterator;
EBook *book;
@@ -30,7 +31,7 @@ static void
add_card_cb (EBook *book, EBookStatus status, const gchar *id, gpointer closure)
{
ECard *card = E_CARD(closure);
- g_object_unref(card);
+ gtk_object_unref(GTK_OBJECT(card));
}
static void
@@ -43,18 +44,39 @@ book_open_cb (EBook *book, EBookStatus status, gpointer closure)
}
static void
-ebook_open (VCardImporter *gci, const char *uri)
+ebook_create (VCardImporter *gci)
{
+ gchar *path, *uri;
+ gchar *epath;
+
gci->book = e_book_new ();
if (!gci->book) {
printf ("%s: %s(): Couldn't create EBook, bailing.\n",
__FILE__,
- G_GNUC_FUNCTION);
+ __FUNCTION__);
return;
}
- e_book_load_address_book_by_uri (gci->book, uri, book_open_cb, gci);
+#if 0
+ path = g_concat_dir_and_file (g_get_home_dir (), "evolution/local");
+ uri = g_strdup_printf ("file://%s", path);
+ g_free (path);
+
+ epath = e_path_to_physical (uri, gci->folderpath);
+ g_free (uri);
+ uri = g_strdup_printf ("%s/addressbook.db", epath);
+ g_free (epath);
+
+ if (! e_book_load_uri (gci->book, uri, book_open_cb, gci)) {
+ printf ("error calling load_uri!\n");
+ }
+ g_free(uri);
+#endif
+
+ if (! e_book_load_default_book (gci->book, book_open_cb, gci)) {
+ g_warning ("Error calling load_default_book");
+ }
}
/* EvolutionImporter methods */
@@ -128,7 +150,7 @@ check_file_is_vcard (const char *filename)
return FALSE;
}
- if (g_ascii_strncasecmp (line, "BEGIN:VCARD", 11) == 0) {
+ if (g_strncasecmp (line, "BEGIN:VCARD", 11) == 0) {
result = TRUE;
} else {
result = FALSE;
@@ -151,7 +173,7 @@ support_format_fn (EvolutionImporter *importer,
return check_file_is_vcard (filename);
}
for (i = 0; supported_extensions[i] != NULL; i++) {
- if (g_ascii_strcasecmp (supported_extensions[i], ext) == 0)
+ if (g_strcasecmp (supported_extensions[i], ext) == 0)
return check_file_is_vcard (filename);
}
@@ -159,16 +181,16 @@ support_format_fn (EvolutionImporter *importer,
}
static void
-importer_destroy_cb (gpointer data,
- GObject *where_object_was)
+importer_destroy_cb (GtkObject *object,
+ VCardImporter *gci)
{
- bonobo_main_quit ();
+ gtk_main_quit ();
}
static gboolean
load_file_fn (EvolutionImporter *importer,
const char *filename,
- const char *uri,
+ const char *folderpath,
void *closure)
{
VCardImporter *gci;
@@ -179,35 +201,66 @@ load_file_fn (EvolutionImporter *importer,
gci = (VCardImporter *) closure;
gci->filename = g_strdup (filename);
+ gci->folderpath = g_strdup (folderpath);
gci->cardlist = NULL;
gci->iterator = NULL;
gci->ready = FALSE;
- ebook_open (gci, uri);
+ ebook_create (gci);
return TRUE;
}
static BonoboObject *
factory_fn (BonoboGenericFactory *_factory,
- const char *component_id,
void *closure)
{
EvolutionImporter *importer;
VCardImporter *gci;
- if (!strcmp (component_id, COMPONENT_IID)) {
- gci = g_new (VCardImporter, 1);
- importer = evolution_importer_new (support_format_fn, load_file_fn,
- process_item_fn, NULL, gci);
+ gci = g_new (VCardImporter, 1);
+ importer = evolution_importer_new (support_format_fn, load_file_fn,
+ process_item_fn, NULL, gci);
+
+ gtk_signal_connect (GTK_OBJECT (importer), "destroy",
+ GTK_SIGNAL_FUNC (importer_destroy_cb), gci);
- g_object_weak_ref (G_OBJECT (importer),
- importer_destroy_cb, gci);
- return BONOBO_OBJECT (importer);
+ return BONOBO_OBJECT (importer);
+}
+
+static void
+importer_init (void)
+{
+ if (factory != NULL)
+ return;
+
+ factory = bonobo_generic_factory_new (COMPONENT_FACTORY_IID,
+ factory_fn, NULL);
+
+ if (factory == NULL) {
+ g_error ("Unable to create factory");
}
- else {
- g_warning (COMPONENT_FACTORY_IID ": Don't know what to do with %s", component_id);
- return NULL;
+
+ bonobo_running_context_auto_exit_unref (BONOBO_OBJECT (factory));
+}
+
+int
+main (int argc,
+ char **argv)
+{
+ CORBA_ORB orb;
+
+ gnome_init_with_popt_table ("Evolution-VCard-Importer",
+ PACKAGE, argc, argv, oaf_popt_options, 0,
+ NULL);
+ orb = oaf_init (argc, argv);
+ if (bonobo_init (orb, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE) {
+ g_error ("Could not initialize Bonobo.");
}
+
+ importer_init ();
+ bonobo_main ();
+
+ return 0;
}
-BONOBO_ACTIVATION_FACTORY (COMPONENT_FACTORY_IID, "Evolution VCard Importer Factory", VERSION, factory_fn, NULL);
+
diff --git a/addressbook/backend/pas/pas-backend-file.c b/addressbook/backend/pas/pas-backend-file.c
index 06eb84cc4e..ddef2a568b 100644
--- a/addressbook/backend/pas/pas-backend-file.c
+++ b/addressbook/backend/pas/pas-backend-file.c
@@ -10,13 +10,15 @@
#include "pas-backend-file.h"
#include <stdio.h>
-#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
#include <db.h>
#include <sys/stat.h>
+#include <libgnome/gnome-defs.h>
+#include <libgnome/gnome-i18n.h>
+
#include <e-util/e-db3-utils.h>
#if DB_VERSION_MAJOR != 3 || \
@@ -25,14 +27,15 @@
#error Including wrong DB3. Need libdb 3.1.17.
#endif
+#include <gtk/gtksignal.h>
+#include <libgnome/gnome-defs.h>
+#include <libgnome/gnome-util.h>
#include <gal/util/e-util.h>
#include <gal/widgets/e-unicode.h>
#include <ebook/e-card-simple.h>
#include <e-util/e-dbhash.h>
#include <e-util/e-db3-utils.h>
-#include <libgnome/gnome-i18n.h>
-
#include "pas-book.h"
#include "pas-card-cursor.h"
#include "pas-backend-card-sexp.h"
@@ -51,10 +54,13 @@ typedef struct _PASBackendFileSearchContext PASBackendFileSearchContext;
typedef struct _PasBackendFileChangeContext PASBackendFileChangeContext;
struct _PASBackendFilePrivate {
+ GList *clients;
+ gboolean loaded;
char *uri;
char *filename;
DB *file_db;
EList *book_views;
+ gboolean writable;
GHashTable *address_lists;
PASBackendSummary *summary;
};
@@ -208,7 +214,7 @@ pas_backend_file_book_view_copy(const PASBackendFileBookView *book_view, void *c
new_book_view->search = g_strdup(book_view->search);
new_book_view->card_sexp = book_view->card_sexp;
if (new_book_view->card_sexp)
- g_object_ref(new_book_view->card_sexp);
+ gtk_object_ref(GTK_OBJECT(new_book_view->card_sexp));
new_book_view->change_id = g_strdup(book_view->change_id);
if (book_view->change_context) {
@@ -230,7 +236,7 @@ pas_backend_file_book_view_free(PASBackendFileBookView *book_view, void *closure
{
g_free(book_view->search);
if (book_view->card_sexp)
- g_object_unref (book_view->card_sexp);
+ gtk_object_unref (GTK_OBJECT(book_view->card_sexp));
g_free(book_view->change_id);
if (book_view->change_context) {
@@ -268,7 +274,7 @@ get_nth(PASCardCursor *cursor, long n, gpointer data)
}
static void
-cursor_destroy(gpointer data, GObject *where_object_was)
+cursor_destroy(GtkObject *object, gpointer data)
{
CORBA_Environment ev;
GNOME_Evolution_Addressbook_Book corba_book;
@@ -294,7 +300,7 @@ cursor_destroy(gpointer data, GObject *where_object_was)
}
static void
-view_destroy(gpointer data, GObject *where_object_was)
+view_destroy(GtkObject *object, gpointer data)
{
PASBook *book = (PASBook *)data;
PASBackendFile *bf;
@@ -304,7 +310,7 @@ view_destroy(gpointer data, GObject *where_object_was)
bf = PAS_BACKEND_FILE(pas_book_get_backend(book));
for (iterator = e_list_get_iterator(bf->priv->book_views); e_iterator_is_valid(iterator); e_iterator_next(iterator)) {
const PASBackendFileBookView *view = e_iterator_get(iterator);
- if (view->book_view == (PASBookView*)where_object_was) {
+ if (view->book_view == PAS_BOOK_VIEW(object)) {
e_iterator_delete(iterator);
success = TRUE;
break;
@@ -312,7 +318,7 @@ view_destroy(gpointer data, GObject *where_object_was)
}
if (!success)
g_warning ("Failed to remove from book_views list");
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
bonobo_object_unref(BONOBO_OBJECT(book));
}
@@ -337,116 +343,6 @@ vcard_matches_search (const PASBackendFileBookView *view, char *vcard_string)
return pas_backend_card_sexp_match_vcard (view->card_sexp, vcard_string);
}
-static gboolean
-ecard_matches_search (const PASBackendFileBookView *view, ECard *card)
-{
- /* If this is not a search context view, it doesn't match be default */
- if (view->card_sexp == NULL)
- return FALSE;
-
- return pas_backend_card_sexp_match_ecard (view->card_sexp, card);
-}
-
-typedef struct {
- PASBackendFile *bf;
- PASBook *book;
- const PASBackendFileBookView *view;
- DBC *dbc;
-
- int card_count;
- int card_threshold;
- int card_threshold_max;
- GList *cards;
-
- gboolean done_first;
- gboolean search_needed;
-} FileBackendSearchClosure;
-
-static void
-free_search_closure (FileBackendSearchClosure *closure)
-{
- g_list_foreach (closure->cards, (GFunc)g_free, NULL);
- g_list_free (closure->cards);
- g_free (closure);
-}
-
-static gboolean
-pas_backend_file_search_timeout (gpointer data)
-{
- FileBackendSearchClosure *closure = data;
- int db_error = 0;
- DBT id_dbt, vcard_dbt;
- int file_version_name_len;
- DBC *dbc = closure->dbc;
-
- file_version_name_len = strlen (PAS_BACKEND_FILE_VERSION_NAME);
-
- memset (&id_dbt, 0, sizeof (id_dbt));
- memset (&vcard_dbt, 0, sizeof (vcard_dbt));
-
- if (closure->done_first) {
- db_error = dbc->c_get(dbc, &id_dbt, &vcard_dbt, DB_NEXT);
- }
- else {
- db_error = dbc->c_get(dbc, &id_dbt, &vcard_dbt, DB_FIRST);
- closure->done_first = TRUE;
- }
-
- while (db_error == 0) {
-
- /* don't include the version in the list of cards */
- if (id_dbt.size != file_version_name_len+1
- || strcmp (id_dbt.data, PAS_BACKEND_FILE_VERSION_NAME)) {
- char *vcard_string = vcard_dbt.data;
-
- /* check if the vcard matches the search sexp */
- if ((!closure->search_needed) || vcard_matches_search (closure->view, vcard_string)) {
- closure->cards = g_list_prepend (closure->cards, g_strdup (vcard_string));
- closure->card_count ++;
- }
-
- /* If we've accumulated a number of checks, pass them off to the client. */
- if (closure->card_count >= closure->card_threshold) {
- pas_book_view_notify_add (closure->view->book_view, closure->cards);
- /* Clean up the handed-off data. */
- g_list_foreach (closure->cards, (GFunc)g_free, NULL);
- g_list_free (closure->cards);
- closure->cards = NULL;
- closure->card_count = 0;
-
- /* Yeah, this scheme is overly complicated. But I like it. */
- if (closure->card_threshold < closure->card_threshold_max) {
- closure->card_threshold = MIN (2*closure->card_threshold, closure->card_threshold_max);
- }
-
- /* return here, we'll do the next lump in the next callback */
- g_timeout_add (200, pas_backend_file_search_timeout, closure);
-
- return FALSE;
- }
- }
-
- db_error = dbc->c_get(dbc, &id_dbt, &vcard_dbt, DB_NEXT);
- }
-
- dbc->c_close (dbc);
-
- if (db_error != DB_NOTFOUND) {
- g_warning ("pas_backend_file_search: error building list\n");
- free_search_closure (closure);
- }
-
- if (closure->card_count)
- pas_book_view_notify_add (closure->view->book_view, closure->cards);
-
- pas_book_view_notify_complete (closure->view->book_view, GNOME_Evolution_Addressbook_BookViewListener_Success);
-
- free_search_closure (closure);
-
- return FALSE;
-}
-
-
static void
pas_backend_file_search (PASBackendFile *bf,
PASBook *book,
@@ -456,6 +352,9 @@ pas_backend_file_search (PASBackendFile *bf,
PASBackendFileBookView *view = (PASBackendFileBookView *)cnstview;
gboolean search_needed;
+ if (!bf->priv->loaded)
+ return;
+
search_needed = TRUE;
if ( ! strcmp (view->search, "(contains \"x-evolution-any-field\" \"\")"))
@@ -467,7 +366,7 @@ pas_backend_file_search (PASBackendFile *bf,
pas_book_view_notify_status_message (view->book_view, _("Loading..."));
if (view->card_sexp) {
- g_object_unref (view->card_sexp);
+ gtk_object_unref (GTK_OBJECT(view->card_sexp));
view->card_sexp = NULL;
}
@@ -482,24 +381,74 @@ pas_backend_file_search (PASBackendFile *bf,
do_summary_query (bf, view, completion_search);
}
else {
- FileBackendSearchClosure *closure = g_new0 (FileBackendSearchClosure, 1);
- DB *db = bf->priv->file_db;
- int db_error;
+ gint card_count = 0, card_threshold = 20, card_threshold_max = 3000;
+ int db_error = 0;
+ GList *cards = NULL;
+ DB *db = bf->priv->file_db;
+ DBC *dbc;
+ DBT id_dbt, vcard_dbt;
+ int file_version_name_len;
+
+ file_version_name_len = strlen (PAS_BACKEND_FILE_VERSION_NAME);
- closure->card_threshold = 20;
- closure->card_threshold_max = 3000;
- closure->search_needed = search_needed;
- closure->view = view;
- closure->bf = bf;
- closure->book = book;
+ db_error = db->cursor (db, NULL, &dbc, 0);
- db_error = db->cursor (db, NULL, &closure->dbc, 0);
+ memset (&id_dbt, 0, sizeof (id_dbt));
+ memset (&vcard_dbt, 0, sizeof (vcard_dbt));
if (db_error != 0) {
g_warning ("pas_backend_file_search: error building list\n");
} else {
- g_idle_add (pas_backend_file_search_timeout, closure);
+ db_error = dbc->c_get(dbc, &id_dbt, &vcard_dbt, DB_FIRST);
+
+ while (db_error == 0) {
+
+ /* don't include the version in the list of cards */
+ if (id_dbt.size != file_version_name_len+1
+ || strcmp (id_dbt.data, PAS_BACKEND_FILE_VERSION_NAME)) {
+ char *vcard_string = vcard_dbt.data;
+
+ /* check if the vcard matches the search sexp */
+ if ((!search_needed) || vcard_matches_search (view, vcard_string)) {
+ cards = g_list_prepend (cards, g_strdup (vcard_string));
+ card_count ++;
+ }
+
+ /* If we've accumulated a number of checks, pass them off to the client. */
+ if (card_count >= card_threshold) {
+ pas_book_view_notify_add (view->book_view, cards);
+ /* Clean up the handed-off data. */
+ g_list_foreach (cards, (GFunc)g_free, NULL);
+ g_list_free (cards);
+ cards = NULL;
+ card_count = 0;
+
+ /* Yeah, this scheme is overly complicated. But I like it. */
+ if (card_threshold < card_threshold_max) {
+ card_threshold = MIN (2*card_threshold, card_threshold_max);
+ }
+ }
+ }
+
+ db_error = dbc->c_get(dbc, &id_dbt, &vcard_dbt, DB_NEXT);
+ }
+ dbc->c_close (dbc);
+
+ if (db_error != DB_NOTFOUND) {
+ g_warning ("pas_backend_file_search: error building list\n");
+ }
}
+
+ if (card_count)
+ pas_book_view_notify_add (view->book_view, cards);
+
+ pas_book_view_notify_complete (view->book_view, GNOME_Evolution_Addressbook_BookViewListener_Success);
+
+ /*
+ ** It's fine to do this now since the data has been handed off.
+ */
+ g_list_foreach (cards, (GFunc)g_free, NULL);
+ g_list_free (cards);
}
}
@@ -541,6 +490,9 @@ pas_backend_file_changes (PASBackendFile *bf,
memset (&id_dbt, 0, sizeof (id_dbt));
memset (&vcard_dbt, 0, sizeof (vcard_dbt));
+ if (!bf->priv->loaded)
+ return;
+
/* Find the changed ids */
dirname = g_strdup (bf->priv->filename);
slash = strrchr (dirname, '/');
@@ -572,9 +524,9 @@ pas_backend_file_changes (PASBackendFile *bf,
* card changing
*/
card = e_card_new (vcard_dbt.data);
- g_object_set (card, "last_use", NULL, "use_score", 0.0, NULL);
+ gtk_object_set (GTK_OBJECT (card), "last_use", NULL, "use_score", 0.0, NULL);
vcard_string = e_card_get_vcard_assume_utf8 (card);
- g_object_unref (card);
+ gtk_object_unref (GTK_OBJECT (card));
/* check what type of change has occurred, if any */
switch (e_dbhash_compare (ehash, id, vcard_string)) {
@@ -612,7 +564,7 @@ pas_backend_file_changes (PASBackendFile *bf,
for (v = ctx->del_ids; v != NULL; v = v->next){
char *id = v->data;
- pas_book_view_notify_remove_1 (view->book_view, id);
+ pas_book_view_notify_remove (view->book_view, id);
}
pas_book_view_notify_complete (view->book_view, GNOME_Evolution_Addressbook_BookViewListener_Success);
@@ -684,7 +636,7 @@ do_create(PASBackend *backend,
ret_val = NULL;
}
- g_object_unref(card);
+ gtk_object_unref(GTK_OBJECT(card));
card = NULL;
if (vcard_ptr && ret_val)
@@ -716,7 +668,7 @@ pas_backend_file_process_create_card (PASBackend *backend,
bonobo_object_unref (BONOBO_OBJECT (view->book_view));
}
}
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
pas_book_respond_create (
book,
@@ -739,76 +691,59 @@ pas_backend_file_process_create_card (PASBackend *backend,
}
static void
-pas_backend_file_process_remove_cards (PASBackend *backend,
- PASBook *book,
- PASRemoveCardsRequest *req)
+pas_backend_file_process_remove_card (PASBackend *backend,
+ PASBook *book,
+ PASRemoveCardRequest *req)
{
PASBackendFile *bf = PAS_BACKEND_FILE (backend);
DB *db = bf->priv->file_db;
DBT id_dbt, vcard_dbt;
int db_error;
EIterator *iterator;
+ char *vcard_string;
const char *id;
- GList *l;
- GList *removed_cards = NULL;
- GNOME_Evolution_Addressbook_BookListener_CallStatus rv = GNOME_Evolution_Addressbook_BookListener_Success;
-
- for (l = req->ids; l; l = l->next) {
- id = l->data;
- string_to_dbt (id, &id_dbt);
- memset (&vcard_dbt, 0, sizeof (vcard_dbt));
+ id = req->id;
+ string_to_dbt (id, &id_dbt);
+ memset (&vcard_dbt, 0, sizeof (vcard_dbt));
- db_error = db->get (db, NULL, &id_dbt, &vcard_dbt, 0);
- if (0 != db_error) {
- rv = GNOME_Evolution_Addressbook_BookListener_CardNotFound;
- continue;
- }
+ db_error = db->get (db, NULL, &id_dbt, &vcard_dbt, 0);
+ if (0 != db_error) {
+ pas_book_respond_remove (
+ book,
+ GNOME_Evolution_Addressbook_BookListener_CardNotFound);
+ return;
+ }
- db_error = db->del (db, NULL, &id_dbt, 0);
- if (0 != db_error) {
- rv = GNOME_Evolution_Addressbook_BookListener_CardNotFound;
- continue;
- }
-
- removed_cards = g_list_prepend (removed_cards, e_card_new (vcard_dbt.data));
+ db_error = db->del (db, NULL, &id_dbt, 0);
+ if (0 != db_error) {
+ pas_book_respond_remove (
+ book,
+ GNOME_Evolution_Addressbook_BookListener_CardNotFound);
+ return;
}
- /* if we actually removed some, try to sync */
- if (removed_cards) {
- db_error = db->sync (db, 0);
- if (db_error != 0)
- g_warning ("db->sync failed.\n");
- }
+ db_error = db->sync (db, 0);
+ if (db_error != 0)
+ g_warning ("db->sync failed.\n");
+
+ vcard_string = vcard_dbt.data;
for (iterator = e_list_get_iterator (bf->priv->book_views); e_iterator_is_valid(iterator); e_iterator_next(iterator)) {
const PASBackendFileBookView *view = e_iterator_get(iterator);
- GList *view_removed = NULL;
- for (l = removed_cards; l; l = l->next) {
- ECard *removed_card = l->data;
- if (ecard_matches_search (view, removed_card)) {
- view_removed = g_list_prepend (view_removed, (char*)e_card_get_id (removed_card));
- }
- }
- if (view_removed) {
+ if (vcard_matches_search (view, vcard_string)) {
bonobo_object_ref (BONOBO_OBJECT (view->book_view));
- pas_book_view_notify_remove (view->book_view, view_removed);
+ pas_book_view_notify_remove (view->book_view, req->id);
pas_book_view_notify_complete (view->book_view, GNOME_Evolution_Addressbook_BookViewListener_Success);
bonobo_object_unref (BONOBO_OBJECT (view->book_view));
- g_list_free (view_removed);
}
}
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
- pas_book_respond_remove (book, rv);
-
- for (l = removed_cards; l; l = l->next) {
- ECard *c = l->data;
- pas_backend_summary_remove_card (bf->priv->summary, e_card_get_id (c));
- g_object_unref (c);
- }
-
- g_list_free (removed_cards);
+ pas_book_respond_remove (
+ book,
+ GNOME_Evolution_Addressbook_BookListener_Success);
+ pas_backend_summary_remove_card (bf->priv->summary, id);
}
static void
@@ -878,7 +813,7 @@ pas_backend_file_process_modify_card (PASBackend *backend,
else if (new_match)
pas_book_view_notify_add_1 (view->book_view, req->vcard);
else /* if (old_match) */
- pas_book_view_notify_remove_1 (view->book_view, id);
+ pas_book_view_notify_remove (view->book_view, id);
pas_book_view_notify_complete (view->book_view, GNOME_Evolution_Addressbook_BookViewListener_Success);
@@ -887,7 +822,7 @@ pas_backend_file_process_modify_card (PASBackend *backend,
CORBA_exception_free (&ev);
}
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
pas_book_respond_modify (
book,
@@ -904,7 +839,7 @@ pas_backend_file_process_modify_card (PASBackend *backend,
g_free(old_vcard_string);
- g_object_unref(card);
+ gtk_object_unref(GTK_OBJECT(card));
}
static void
@@ -1038,8 +973,8 @@ pas_backend_file_process_get_cursor (PASBackend *backend,
get_nth,
cursor_data);
- g_object_weak_ref (G_OBJECT (cursor),
- cursor_destroy, cursor_data);
+ gtk_signal_connect(GTK_OBJECT(cursor), "destroy",
+ GTK_SIGNAL_FUNC(cursor_destroy), cursor_data);
pas_book_respond_get_cursor (
book,
@@ -1059,11 +994,14 @@ pas_backend_file_process_get_book_view (PASBackend *backend,
PASBackendFileBookView view;
EIterator *iterator;
+ g_return_if_fail (req->listener != NULL);
+
bonobo_object_ref(BONOBO_OBJECT(book));
book_view = pas_book_view_new (req->listener);
- g_object_weak_ref (G_OBJECT (book_view), view_destroy, book);
+ gtk_signal_connect(GTK_OBJECT(book_view), "destroy",
+ GTK_SIGNAL_FUNC(view_destroy), book);
view.book_view = book_view;
view.search = g_strdup (req->search);
@@ -1079,13 +1017,10 @@ pas_backend_file_process_get_book_view (PASBackend *backend,
: GNOME_Evolution_Addressbook_BookListener_CardNotFound /* XXX */),
book_view);
- if (!pas_backend_is_loaded (backend))
- return;
-
iterator = e_list_get_iterator(bf->priv->book_views);
e_iterator_last(iterator);
pas_backend_file_search (bf, book, e_iterator_get(iterator), FALSE);
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
}
static void
@@ -1098,11 +1033,14 @@ pas_backend_file_process_get_completion_view (PASBackend *backend,
PASBackendFileBookView view;
EIterator *iterator;
+ g_return_if_fail (req->listener != NULL);
+
bonobo_object_ref(BONOBO_OBJECT(book));
book_view = pas_book_view_new (req->listener);
- g_object_weak_ref (G_OBJECT (book_view), view_destroy, book);
+ gtk_signal_connect(GTK_OBJECT(book_view), "destroy",
+ GTK_SIGNAL_FUNC(view_destroy), book);
view.book_view = book_view;
view.search = g_strdup (req->search);
@@ -1118,13 +1056,10 @@ pas_backend_file_process_get_completion_view (PASBackend *backend,
: GNOME_Evolution_Addressbook_BookListener_CardNotFound /* XXX */),
book_view);
- if (!pas_backend_is_loaded (backend))
- return;
-
iterator = e_list_get_iterator(bf->priv->book_views);
e_iterator_last(iterator);
pas_backend_file_search (bf, book, e_iterator_get(iterator), TRUE);
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
}
static void
@@ -1138,11 +1073,14 @@ pas_backend_file_process_get_changes (PASBackend *backend,
PASBackendFileChangeContext ctx;
EIterator *iterator;
+ g_return_if_fail (req->listener != NULL);
+
bonobo_object_ref(BONOBO_OBJECT(book));
book_view = pas_book_view_new (req->listener);
- g_object_weak_ref (G_OBJECT (book_view), view_destroy, book);
+ gtk_signal_connect(GTK_OBJECT(book_view), "destroy",
+ GTK_SIGNAL_FUNC(view_destroy), book);
pas_book_respond_get_changes (book,
(book_view != NULL
@@ -1164,13 +1102,10 @@ pas_backend_file_process_get_changes (PASBackend *backend,
e_list_append(bf->priv->book_views, &view);
- if (!pas_backend_is_loaded (backend))
- return;
-
iterator = e_list_get_iterator(bf->priv->book_views);
e_iterator_last(iterator);
pas_backend_file_changes (bf, book, e_iterator_get(iterator));
- g_object_unref(iterator);
+ gtk_object_unref(GTK_OBJECT(iterator));
}
static void
@@ -1219,14 +1154,85 @@ pas_backend_file_process_get_supported_fields (PASBackend *backend,
for (i = 0; i < E_CARD_SIMPLE_FIELD_LAST; i ++)
e_list_append (fields, e_card_simple_get_ecard_field (simple, i));
- g_object_unref (card);
- g_object_unref (simple);
+ gtk_object_unref (GTK_OBJECT (card));
+ gtk_object_unref (GTK_OBJECT (simple));
pas_book_respond_get_supported_fields (book,
GNOME_Evolution_Addressbook_BookListener_Success,
fields);
}
+static void
+pas_backend_file_process_client_requests (PASBook *book)
+{
+ PASBackend *backend;
+ PASRequest *req;
+
+ backend = pas_book_get_backend (book);
+
+ req = pas_book_pop_request (book);
+ if (req == NULL)
+ return;
+
+ switch (req->op) {
+ case CreateCard:
+ pas_backend_file_process_create_card (backend, book, (PASCreateCardRequest*)req);
+ break;
+
+ case RemoveCard:
+ pas_backend_file_process_remove_card (backend, book, (PASRemoveCardRequest*)req);
+ break;
+
+ case ModifyCard:
+ pas_backend_file_process_modify_card (backend, book, (PASModifyCardRequest*)req);
+ break;
+
+ case CheckConnection:
+ pas_backend_file_process_check_connection (backend, book, (PASCheckConnectionRequest*)req);
+ break;
+
+ case GetVCard:
+ pas_backend_file_process_get_vcard (backend, book, (PASGetVCardRequest*)req);
+ break;
+
+ case GetCursor:
+ pas_backend_file_process_get_cursor (backend, book, (PASGetCursorRequest*)req);
+ break;
+
+ case GetBookView:
+ pas_backend_file_process_get_book_view (backend, book, (PASGetBookViewRequest*)req);
+ break;
+
+ case GetCompletionView:
+ pas_backend_file_process_get_completion_view (backend, book, (PASGetCompletionViewRequest*)req);
+ break;
+
+ case GetChanges:
+ pas_backend_file_process_get_changes (backend, book, (PASGetChangesRequest*)req);
+ break;
+
+ case AuthenticateUser:
+ pas_backend_file_process_authenticate_user (backend, book, (PASAuthenticateUserRequest*)req);
+ break;
+
+ case GetSupportedFields:
+ pas_backend_file_process_get_supported_fields (backend, book, (PASGetSupportedFieldsRequest*)req);
+ break;
+ }
+
+ pas_book_free_request (req);
+}
+
+static void
+pas_backend_file_book_destroy_cb (PASBook *book, gpointer data)
+{
+ PASBackendFile *backend;
+
+ backend = PAS_BACKEND_FILE (data);
+
+ pas_backend_remove_client (PAS_BACKEND (backend), book);
+}
+
/*
** versions:
**
@@ -1301,7 +1307,7 @@ pas_backend_file_upgrade_db (PASBackendFile *bf, char *old_version)
card_failed++;
}
- g_object_unref (card);
+ gtk_object_unref (GTK_OBJECT(card));
}
db_error = dbc->c_get(dbc, &id_dbt, &vcard_dbt, DB_NEXT);
@@ -1353,10 +1359,11 @@ pas_backend_file_maybe_upgrade_db (PASBackendFile *bf)
return ret_val;
}
+
#define INITIAL_VCARD "BEGIN:VCARD\n\
X-EVOLUTION-FILE-AS:Ximian, Inc.\n\
LABEL;WORK;QUOTED-PRINTABLE:401 Park Drive 3 West=0ABoston, MA 02215=0AUSA\n\
-TEL;WORK;VOICE:(617) 375-3800\n\
+TEL;WORK;VOICE:(617) 236-0442\n\
TEL;WORK;FAX:(617) 236-8630\n\
EMAIL;INTERNET:hello@ximian.com\n\
URL:www.ximian.com/\n\
@@ -1378,6 +1385,8 @@ pas_backend_file_load_uri (PASBackend *backend,
struct stat sb;
char *summary_filename;
+ g_assert (bf->priv->loaded == FALSE);
+
db_version (&major, &minor, &patch);
if (major != 3 ||
@@ -1422,10 +1431,10 @@ pas_backend_file_load_uri (PASBackend *backend,
char *create_initial_file;
char *dir;
- dir = g_path_get_dirname(filename);
- create_initial_file = g_build_filename (dir, "create-initial", NULL);
+ dir = g_dirname(filename);
+ create_initial_file = g_concat_dir_and_file(dir, "create-initial");
- if (g_file_test(create_initial_file, G_FILE_TEST_EXISTS)) {
+ if (g_file_exists(create_initial_file)) {
char *id;
id = do_create(backend, INITIAL_VCARD, NULL);
g_free (id);
@@ -1444,9 +1453,14 @@ pas_backend_file_load_uri (PASBackend *backend,
return GNOME_Evolution_Addressbook_BookListener_OtherError;
}
- if (!pas_backend_file_maybe_upgrade_db (bf)) {
+ bf->priv->writable = writable;
+
+ if (pas_backend_file_maybe_upgrade_db (bf))
+ bf->priv->loaded = TRUE;
+ else {
db->close (db, 0);
bf->priv->file_db = NULL;
+ bf->priv->writable = FALSE;
return GNOME_Evolution_Addressbook_BookListener_OtherError;
}
@@ -1459,6 +1473,7 @@ pas_backend_file_load_uri (PASBackend *backend,
if (stat (bf->priv->filename, &sb) == -1) {
db->close (db, 0);
bf->priv->file_db = NULL;
+ bf->priv->writable = FALSE;
return GNOME_Evolution_Addressbook_BookListener_OtherError;
}
db_mtime = sb.st_mtime;
@@ -1472,8 +1487,6 @@ pas_backend_file_load_uri (PASBackend *backend,
build_summary (bf->priv);
}
- pas_backend_set_is_loaded (backend, TRUE);
- pas_backend_set_is_writable (backend, writable);
return GNOME_Evolution_Addressbook_BookListener_Success;
}
@@ -1485,15 +1498,99 @@ pas_backend_file_get_uri (PASBackend *backend)
bf = PAS_BACKEND_FILE (backend);
+ g_return_val_if_fail (bf->priv->loaded, NULL);
g_assert (bf->priv->uri != NULL);
return bf->priv->uri;
}
+static gboolean
+pas_backend_file_add_client (PASBackend *backend,
+ GNOME_Evolution_Addressbook_BookListener listener)
+{
+ PASBackendFile *bf;
+ PASBook *book;
+
+ g_assert (backend != NULL);
+ g_assert (PAS_IS_BACKEND_FILE (backend));
+
+ bf = PAS_BACKEND_FILE (backend);
+
+ book = pas_book_new (backend, listener);
+
+ if (!book) {
+ if (!bf->priv->clients)
+ pas_backend_last_client_gone (backend);
+
+ return FALSE;
+ }
+
+ gtk_signal_connect (GTK_OBJECT (book), "destroy",
+ pas_backend_file_book_destroy_cb, backend);
+
+ gtk_signal_connect (GTK_OBJECT (book), "requests_queued",
+ pas_backend_file_process_client_requests, NULL);
+
+ bf->priv->clients = g_list_prepend (
+ bf->priv->clients, book);
+
+ if (bf->priv->loaded) {
+ pas_book_respond_open (
+ book, GNOME_Evolution_Addressbook_BookListener_Success);
+ if (bf->priv->writable)
+ pas_book_report_writable (book, bf->priv->writable);
+ } else {
+ pas_book_respond_open (
+ book, GNOME_Evolution_Addressbook_BookListener_OtherError);
+ }
+
+ bonobo_object_unref (BONOBO_OBJECT (book));
+
+ return TRUE;
+}
+
+static void
+pas_backend_file_remove_client (PASBackend *backend,
+ PASBook *book)
+{
+ PASBackendFile *bf;
+ GList *l;
+ PASBook *lbook;
+
+ g_return_if_fail (backend != NULL);
+ g_return_if_fail (PAS_IS_BACKEND_FILE (backend));
+ g_return_if_fail (book != NULL);
+ g_return_if_fail (PAS_IS_BOOK (book));
+
+ bf = PAS_BACKEND_FILE (backend);
+
+ /* Find the book in the list of clients */
+
+ for (l = bf->priv->clients; l; l = l->next) {
+ lbook = PAS_BOOK (l->data);
+
+ if (lbook == book)
+ break;
+ }
+
+ g_assert (l != NULL);
+
+ /* Disconnect */
+
+ bf->priv->clients = g_list_remove_link (bf->priv->clients, l);
+ g_list_free_1 (l);
+
+ /* When all clients go away, notify the parent factory about it so that
+ * it may decide whether to kill the backend or not.
+ */
+ if (!bf->priv->clients)
+ pas_backend_last_client_gone (backend);
+}
+
static char *
-pas_backend_file_get_static_capabilities (PASBackend *backend)
+pas_backend_file_get_static_capabilities (PASBackend *backend)
{
- return g_strdup("local,do-initial-query,bulk-removes");
+ return g_strdup("local,do-initial-query,cache-completions");
}
static gboolean
@@ -1516,10 +1613,10 @@ pas_backend_file_new (void)
{
PASBackendFile *backend;
- backend = g_object_new (PAS_TYPE_BACKEND_FILE, NULL);
+ backend = gtk_type_new (pas_backend_file_get_type ());
if (! pas_backend_file_construct (backend)) {
- g_object_unref (backend);
+ gtk_object_unref (GTK_OBJECT (backend));
return NULL;
}
@@ -1528,53 +1625,40 @@ pas_backend_file_new (void)
}
static void
-pas_backend_file_dispose (GObject *object)
+pas_backend_file_destroy (GtkObject *object)
{
PASBackendFile *bf;
bf = PAS_BACKEND_FILE (object);
- if (bf->priv) {
- g_object_unref(bf->priv->book_views);
- g_object_unref(bf->priv->summary);
- g_free (bf->priv->uri);
- g_free (bf->priv->filename);
+ gtk_object_unref(GTK_OBJECT(bf->priv->book_views));
+ gtk_object_unref(GTK_OBJECT(bf->priv->summary));
+ g_free (bf->priv->uri);
+ g_free (bf->priv->filename);
- g_free (bf->priv);
- bf->priv = NULL;
- }
+ g_free (bf->priv);
- G_OBJECT_CLASS (pas_backend_file_parent_class)->dispose (object);
+ GTK_OBJECT_CLASS (pas_backend_file_parent_class)->destroy (object);
}
static void
pas_backend_file_class_init (PASBackendFileClass *klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkObjectClass *object_class = (GtkObjectClass *) klass;
PASBackendClass *parent_class;
- pas_backend_file_parent_class = g_type_class_peek_parent (klass);
+ pas_backend_file_parent_class = gtk_type_class (pas_backend_get_type ());
parent_class = PAS_BACKEND_CLASS (klass);
/* Set the virtual methods. */
parent_class->load_uri = pas_backend_file_load_uri;
parent_class->get_uri = pas_backend_file_get_uri;
+ parent_class->add_client = pas_backend_file_add_client;
+ parent_class->remove_client = pas_backend_file_remove_client;
parent_class->get_static_capabilities = pas_backend_file_get_static_capabilities;
- parent_class->create_card = pas_backend_file_process_create_card;
- parent_class->remove_cards = pas_backend_file_process_remove_cards;
- parent_class->modify_card = pas_backend_file_process_modify_card;
- parent_class->check_connection = pas_backend_file_process_check_connection;
- parent_class->get_vcard = pas_backend_file_process_get_vcard;
- parent_class->get_cursor = pas_backend_file_process_get_cursor;
- parent_class->get_book_view = pas_backend_file_process_get_book_view;
- parent_class->get_completion_view = pas_backend_file_process_get_completion_view;
- parent_class->get_changes = pas_backend_file_process_get_changes;
- parent_class->authenticate_user = pas_backend_file_process_authenticate_user;
- parent_class->get_supported_fields = pas_backend_file_process_get_supported_fields;
-
- object_class->dispose = pas_backend_file_dispose;
+ object_class->destroy = pas_backend_file_destroy;
}
static void
@@ -1583,8 +1667,11 @@ pas_backend_file_init (PASBackendFile *backend)
PASBackendFilePrivate *priv;
priv = g_new0 (PASBackendFilePrivate, 1);
+ priv->loaded = FALSE;
+ priv->clients = NULL;
priv->book_views = e_list_new((EListCopyFunc) pas_backend_file_book_view_copy, (EListFreeFunc) pas_backend_file_book_view_free, NULL);
priv->uri = NULL;
+ priv->writable = FALSE;
backend->priv = priv;
}
@@ -1592,25 +1679,24 @@ pas_backend_file_init (PASBackendFile *backend)
/**
* pas_backend_file_get_type:
*/
-GType
+GtkType
pas_backend_file_get_type (void)
{
- static GType type = 0;
+ static GtkType type = 0;
if (! type) {
- GTypeInfo info = {
- sizeof (PASBackendFileClass),
- NULL, /* base_class_init */
- NULL, /* base_class_finalize */
- (GClassInitFunc) pas_backend_file_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
+ GtkTypeInfo info = {
+ "PASBackendFile",
sizeof (PASBackendFile),
- 0, /* n_preallocs */
- (GInstanceInitFunc) pas_backend_file_init
+ sizeof (PASBackendFileClass),
+ (GtkClassInitFunc) pas_backend_file_class_init,
+ (GtkObjectInitFunc) pas_backend_file_init,
+ NULL, /* reserved 1 */
+ NULL, /* reserved 2 */
+ (GtkClassInitFunc) NULL
};
- type = g_type_register_static (PAS_TYPE_BACKEND, "PASBackendFile", &info, 0);
+ type = gtk_type_unique (pas_backend_get_type (), &info);
}
return type;
diff --git a/addressbook/backend/pas/pas-backend-ldap.c b/addressbook/backend/pas/pas-backend-ldap.c
index 237bc8597c..866bad8148 100644
--- a/addressbook/backend/pas/pas-backend-ldap.c
+++ b/addressbook/backend/pas/pas-backend-ldap.c
@@ -10,7 +10,10 @@
#include "config.h"
#include <fcntl.h>
-#include <string.h>
+#include <gtk/gtksignal.h>
+
+#include <libgnome/gnome-defs.h>
+#include <libgnome/gnome-i18n.h>
#ifdef DEBUG
#define LDAP_DEBUG
@@ -35,7 +38,6 @@
#include <e-util/e-sexp.h>
#include <ebook/e-card-simple.h>
-#include <libgnome/gnome-i18n.h>
#include "pas-backend-ldap.h"
#include "pas-backend-card-sexp.h"
@@ -44,9 +46,6 @@
#include <stdlib.h>
-/* this is broken currently, don't enable it */
-/*#define ENABLE_SASL_BINDS*/
-
typedef enum {
PAS_BACKEND_LDAP_TLS_NO,
PAS_BACKEND_LDAP_TLS_ALWAYS,
@@ -88,6 +87,7 @@ typedef struct LDAPOp LDAPOp;
struct _PASBackendLDAPPrivate {
char *uri;
gboolean connected;
+ GList *clients;
gchar *ldap_host; /* the hostname of the server */
int ldap_port; /* the port of the server */
@@ -112,7 +112,6 @@ struct _PASBackendLDAPPrivate {
LDAP *ldap;
EList *supported_fields;
- EList *supported_auth_methods;
/* whether or not there's support for the objectclass we need
to store all our additional fields */
@@ -120,6 +119,8 @@ struct _PASBackendLDAPPrivate {
gboolean calEntrySupported;
gboolean evolutionPersonChecked;
+ gboolean writable;
+
/* our operations */
GHashTable *id_to_op;
int active_ops;
@@ -293,7 +294,7 @@ remove_view (int msgid, LDAPOp *op, PASBookView *view)
}
static void
-view_destroy(gpointer data, GObject *where_object_was)
+view_destroy(GtkObject *object, gpointer data)
{
PASBook *book = (PASBook *)data;
PASBackendLDAP *bl;
@@ -306,7 +307,7 @@ view_destroy(gpointer data, GObject *where_object_was)
while (e_iterator_is_valid (iter)) {
PASBackendLDAPBookView *view = (PASBackendLDAPBookView*)e_iterator_get (iter);
- if (view->book_view == (PASBookView*)where_object_was) {
+ if (view->book_view == PAS_BOOK_VIEW(object)) {
GNOME_Evolution_Addressbook_Book corba_book;
CORBA_Environment ev;
@@ -321,7 +322,7 @@ view_destroy(gpointer data, GObject *where_object_was)
/* free up the view structure */
g_free (view->search);
- g_object_unref (view->card_sexp);
+ gtk_object_unref (GTK_OBJECT (view->card_sexp));
g_free (view);
/* and remove it from our list */
@@ -346,7 +347,7 @@ view_destroy(gpointer data, GObject *where_object_was)
e_iterator_next (iter);
}
- g_object_unref (iter);
+ gtk_object_unref (GTK_OBJECT (iter));
}
@@ -371,7 +372,7 @@ find_book_view (PASBackendLDAP *bl)
rv = v->book_view;
}
- g_object_unref (iter);
+ gtk_object_unref (GTK_OBJECT (iter));
return rv;
}
@@ -457,20 +458,20 @@ check_schema_support (PASBackendLDAP *bl)
continue;
for (j = 0; oc->oc_names[j]; j++)
- if (!g_ascii_strcasecmp (oc->oc_names[j], EVOLUTIONPERSON)) {
+ if (!g_strcasecmp (oc->oc_names[j], EVOLUTIONPERSON)) {
g_print ("support found on ldap server for objectclass evolutionPerson\n");
bl->priv->evolutionPersonSupported = TRUE;
add_oc_attributes_to_supported_fields (bl, oc);
}
- else if (!g_ascii_strcasecmp (oc->oc_names[j], CALENTRY)) {
+ else if (!g_strcasecmp (oc->oc_names[j], CALENTRY)) {
g_print ("support found on ldap server for objectclass calEntry\n");
bl->priv->calEntrySupported = TRUE;
add_oc_attributes_to_supported_fields (bl, oc);
}
- else if (!g_ascii_strcasecmp (oc->oc_names[j], INETORGPERSON)
- || !g_ascii_strcasecmp (oc->oc_names[j], ORGANIZATIONALPERSON)
- || !g_ascii_strcasecmp (oc->oc_names[j], PERSON)) {
+ else if (!g_strcasecmp (oc->oc_names[j], INETORGPERSON)
+ || !g_strcasecmp (oc->oc_names[j], ORGANIZATIONALPERSON)
+ || !g_strcasecmp (oc->oc_names[j], PERSON)) {
add_oc_attributes_to_supported_fields (bl, oc);
}
@@ -487,7 +488,7 @@ check_schema_support (PASBackendLDAP *bl)
of draconian acl's that keep subschema
reads from working until the user is
authed. */
- if (!pas_backend_is_writable (PAS_BACKEND (bl))) {
+ if (!bl->priv->writable) {
g_warning ("subschema read returned nothing before successful auth");
bl->priv->evolutionPersonChecked = FALSE;
}
@@ -590,25 +591,8 @@ query_ldap_root_dse (PASBackendLDAP *bl)
values = ldap_get_values (ldap, resp, "supportedSASLMechanisms");
if (values) {
- char *auth_method;
- if (bl->priv->supported_auth_methods)
- g_object_unref (bl->priv->supported_auth_methods);
- bl->priv->supported_auth_methods = e_list_new ((EListCopyFunc)g_strdup, (EListFreeFunc)g_free, NULL);
-
- auth_method = g_strdup_printf ("ldap/simple-binddn|%s", _("Using Distinguished Name (DN)"));
- e_list_append (bl->priv->supported_auth_methods, auth_method);
- g_free (auth_method);
-
- auth_method = g_strdup_printf ("ldap/simple-email|%s", _("Using Email Address"));
- e_list_append (bl->priv->supported_auth_methods, auth_method);
- g_free (auth_method);
-
- for (i = 0; values[i]; i++) {
- auth_method = g_strdup_printf ("sasl/%s|%s", values[i], values[i]);
- e_list_append (bl->priv->supported_auth_methods, auth_method);
- g_free (auth_method);
+ for (i = 0; values[i]; i++)
g_message ("supported SASL mechanism: %s", values[i]);
- }
ldap_value_free (values);
}
@@ -721,7 +705,6 @@ pas_backend_ldap_connect (PASBackendLDAP *bl)
if (!bl->priv->evolutionPersonChecked)
check_schema_support (bl);
- pas_backend_set_is_loaded (PAS_BACKEND (bl), TRUE);
return GNOME_Evolution_Addressbook_BookListener_Success;
}
else
@@ -1051,7 +1034,7 @@ static void
add_objectclass_mod (PASBackendLDAP *bl, GPtrArray *mod_array, GList *existing_objectclasses)
{
#define FIND_INSERT(oc) \
- if (!g_list_find_custom (existing_objectclasses, (oc), (GCompareFunc)g_ascii_strcasecmp)) \
+ if (!g_list_find_custom (existing_objectclasses, (oc), (GCompareFunc)g_strcasecmp)) \
g_ptr_array_add (objectclasses, g_strdup ((oc)))
#define INSERT(oc) \
g_ptr_array_add (objectclasses, g_strdup ((oc)))
@@ -1167,7 +1150,7 @@ create_card_handler (LDAPOp *op, LDAPMessage *res)
e_iterator_next (iter);
}
- g_object_unref (iter);
+ gtk_object_unref (GTK_OBJECT (iter));
}
else {
ldap_perror (ldap, "create_card");
@@ -1191,14 +1174,14 @@ create_card_dtor (LDAPOp *op)
LDAPCreateOp *create_op = (LDAPCreateOp*)op;
g_free (create_op->dn);
- g_object_unref (create_op->new_card);
+ gtk_object_unref (GTK_OBJECT (create_op->new_card));
g_free (create_op);
}
static void
pas_backend_ldap_process_create_card (PASBackend *backend,
PASBook *book,
- PASCreateCardRequest *req)
+ PASRequest *req)
{
LDAPCreateOp *create_op = g_new (LDAPCreateOp, 1);
PASBackendLDAP *bl = PAS_BACKEND_LDAP (backend);
@@ -1213,9 +1196,9 @@ pas_backend_ldap_process_create_card (PASBackend *backend,
book_view = find_book_view (bl);
- printf ("vcard = %s\n", req->vcard);
+ printf ("vcard = %s\n", req->create.vcard);
- new_ecard = e_card_new (req->vcard);
+ new_ecard = e_card_new (req->create.vcard);
create_op->new_card = e_card_simple_new (new_ecard);
create_op->dn = create_dn_from_ecard (create_op->new_card, bl->priv->ldap_rootdn);
@@ -1235,7 +1218,7 @@ pas_backend_ldap_process_create_card (PASBackend *backend,
create_op->dn);
g_free (create_op->dn);
- g_object_unref (create_op->new_card);
+ gtk_object_unref (GTK_OBJECT(create_op->new_card));
g_free (create_op);
return;
}
@@ -1350,13 +1333,13 @@ remove_card_handler (LDAPOp *op, LDAPMessage *res)
bonobo_object_dup_ref(bonobo_object_corba_objref(BONOBO_OBJECT(view->book_view)), &ev);
- pas_book_view_notify_remove_1 (view->book_view, remove_op->id);
+ pas_book_view_notify_remove (view->book_view, remove_op->id);
bonobo_object_release_unref(bonobo_object_corba_objref(BONOBO_OBJECT(view->book_view)), &ev);
e_iterator_next (iter);
}
- g_object_unref (iter);
+ gtk_object_unref (GTK_OBJECT (iter));
}
else {
ldap_perror (bl->priv->ldap, "remove_card");
@@ -1379,9 +1362,9 @@ remove_card_dtor (LDAPOp *op)
}
static void
-pas_backend_ldap_process_remove_cards (PASBackend *backend,
- PASBook *book,
- PASRemoveCardsRequest *req)
+pas_backend_ldap_process_remove_card (PASBackend *backend,
+ PASBook *book,
+ PASRequest *req)
{
LDAPRemoveOp *remove_op = g_new (LDAPRemoveOp, 1);
PASBackendLDAP *bl = PAS_BACKEND_LDAP (backend);
@@ -1391,12 +1374,7 @@ pas_backend_ldap_process_remove_cards (PASBackend *backend,
book_view = find_book_view (bl);
- /*
- ** since we didn't pass "bulk-removes" in our static
- ** capabilities, we should only get 1 length lists here, so
- ** the id we're deleting is the first and only id in the list.
- */
- remove_op->id = g_strdup (req->ids->data);
+ remove_op->id = g_strdup (req->remove.id);
do {
book_view_notify_status (book_view, _("Removing card from LDAP server..."));
@@ -1482,14 +1460,14 @@ modify_card_modify_handler (LDAPOp *op, LDAPMessage *res)
else if (new_match)
pas_book_view_notify_add_1 (view->book_view, modify_op->vcard);
else /* if (old_match) */
- pas_book_view_notify_remove_1 (view->book_view, e_card_simple_get_id (modify_op->card));
+ pas_book_view_notify_remove (view->book_view, e_card_simple_get_id (modify_op->card));
pas_book_view_notify_complete (view->book_view, GNOME_Evolution_Addressbook_BookViewListener_Success);
bonobo_object_release_unref(bonobo_object_corba_objref(BONOBO_OBJECT(view->book_view)), &ev);
e_iterator_next (iter);
}
- g_object_unref (iter);
+ gtk_object_unref (GTK_OBJECT (iter));
}
else {
ldap_perror (ldap, "ldap_modify_s");
@@ -1605,17 +1583,17 @@ modify_card_dtor (LDAPOp *op)
g_list_free (modify_op->existing_objectclasses);
g_free (modify_op->current_vcard);
if (modify_op->current_card)
- g_object_unref (modify_op->current_card);
+ gtk_object_unref (GTK_OBJECT (modify_op->current_card));
g_free (modify_op->vcard);
if (modify_op->card)
- g_object_unref (modify_op->card);
+ gtk_object_unref (GTK_OBJECT (modify_op->card));
g_free (modify_op);
}
static void
pas_backend_ldap_process_modify_card (PASBackend *backend,
PASBook *book,
- PASModifyCardRequest *req)
+ PASRequest *req)
{
LDAPModifyOp *modify_op = g_new0 (LDAPModifyOp, 1);
PASBackendLDAP *bl = PAS_BACKEND_LDAP (backend);
@@ -1627,10 +1605,10 @@ pas_backend_ldap_process_modify_card (PASBackend *backend,
book_view = find_book_view (bl);
- modify_op->vcard = g_strdup (req->vcard);
+ modify_op->vcard = g_strdup (req->modify.vcard);
new_ecard = e_card_new (modify_op->vcard);
modify_op->card = e_card_simple_new (new_ecard);
- g_object_unref (new_ecard);
+ gtk_object_unref (GTK_OBJECT (new_ecard));
modify_op->id = e_card_simple_get_id(modify_op->card);
ldap = bl->priv->ldap;
@@ -1697,7 +1675,7 @@ get_vcard_handler (LDAPOp *op, LDAPMessage *res)
GNOME_Evolution_Addressbook_BookListener_Success,
vcard);
g_free (vcard);
- g_object_unref (simple);
+ gtk_object_unref (GTK_OBJECT (simple));
ldap_op_finished (op);
}
else if (msg_type == LDAP_RES_SEARCH_RESULT) {
@@ -1727,7 +1705,7 @@ get_vcard_dtor (LDAPOp *op)
static void
pas_backend_ldap_process_get_vcard (PASBackend *backend,
PASBook *book,
- PASGetVCardRequest *req)
+ PASRequest *req)
{
LDAPGetVCardOp *get_vcard_op = g_new0 (LDAPGetVCardOp, 1);
PASBackendLDAP *bl = PAS_BACKEND_LDAP (backend);
@@ -1739,7 +1717,7 @@ pas_backend_ldap_process_get_vcard (PASBackend *backend,
book_view = find_book_view (bl);
do {
- ldap_error = ldap_search_ext (ldap, req->id,
+ ldap_error = ldap_search_ext (ldap, req->get_vcard.id,
LDAP_SCOPE_BASE,
"(objectclass=*)",
NULL, 0, NULL, NULL,
@@ -1786,7 +1764,7 @@ get_nth(PASCardCursor *cursor, long n, gpointer data)
}
static void
-cursor_destroy(gpointer data, GObject *where_object_was)
+cursor_destroy(GtkObject *object, gpointer data)
{
PASBackendLDAPCursorPrivate *cursor_data = (PASBackendLDAPCursorPrivate *) data;
@@ -1837,7 +1815,7 @@ get_cursor_handler (LDAPOp *op, LDAPMessage *res)
cursor_op->cursor_data->num_elements ++;
cursor_op->cursor_data->elements = g_list_prepend (cursor_op->cursor_data->elements,
vcard);
- g_object_unref (simple);
+ gtk_object_unref (GTK_OBJECT (simple));
}
}
}
@@ -1852,7 +1830,8 @@ get_cursor_handler (LDAPOp *op, LDAPMessage *res)
get_nth,
cursor_op->cursor_data);
- g_object_weak_ref (G_OBJECT (cursor), cursor_destroy, cursor_op->cursor_data);
+ gtk_signal_connect(GTK_OBJECT(cursor), "destroy",
+ GTK_SIGNAL_FUNC(cursor_destroy), cursor_op->cursor_data);
cursor_op->responded = TRUE;
}
@@ -1878,7 +1857,7 @@ get_cursor_dtor (LDAPOp *op)
LDAPGetCursorOp *cursor_op = (LDAPGetCursorOp*)op;
if (!cursor_op->responded) {
- cursor_destroy (cursor_op->cursor_data, NULL);
+ cursor_destroy (NULL, cursor_op->cursor_data);
}
g_free (op);
@@ -1887,7 +1866,7 @@ get_cursor_dtor (LDAPOp *op)
static void
pas_backend_ldap_process_get_cursor (PASBackend *backend,
PASBook *book,
- PASGetCursorRequest *req)
+ PASRequest *req)
{
PASBackendLDAP *bl = PAS_BACKEND_LDAP (backend);
LDAP *ldap = bl->priv->ldap;
@@ -2154,9 +2133,9 @@ anniversary_populate (ECardSimple *card, char **values)
{
if (values[0]) {
ECardDate dt = e_card_date_from_string (values[0]);
- g_object_set (card->card,
- "anniversary", &dt,
- NULL);
+ gtk_object_set (GTK_OBJECT (card->card),
+ "anniversary", &dt,
+ NULL);
}
}
@@ -2166,9 +2145,9 @@ anniversary_ber (ECardSimple *card)
ECardDate *dt;
struct berval** result = NULL;
- g_object_get (card->card,
- "anniversary", &dt,
- NULL);
+ gtk_object_get (GTK_OBJECT (card->card),
+ "anniversary", &dt,
+ NULL);
if (dt) {
char *anniversary;
@@ -2193,15 +2172,15 @@ anniversary_compare (ECardSimple *ecard1, ECardSimple *ecard2)
char *date1 = NULL, *date2 = NULL;
gboolean equal;
- g_object_get (ecard1->card,
- "anniversary", &dt,
- NULL);
+ gtk_object_get (GTK_OBJECT (ecard1->card),
+ "anniversary", &dt,
+ NULL);
if (dt)
date1 = e_card_date_to_string (dt);
- g_object_get (ecard2->card,
- "anniversary", &dt,
- NULL);
+ gtk_object_get (GTK_OBJECT (ecard2->card),
+ "anniversary", &dt,
+ NULL);
if (dt)
date2 = e_card_date_to_string (dt);
@@ -2221,9 +2200,9 @@ birthday_populate (ECardSimple *card, char **values)
{
if (values[0]) {
ECardDate dt = e_card_date_from_string (values[0]);
- g_object_set (card->card,
- "birth_date", &dt,
- NULL);
+ gtk_object_set (GTK_OBJECT (card->card),
+ "birth_date", &dt,
+ NULL);
}
}
@@ -2233,9 +2212,9 @@ birthday_ber (ECardSimple *card)
ECardDate *dt;
struct berval** result = NULL;
- g_object_get (card->card,
- "birth_date", &dt,
- NULL);
+ gtk_object_get (GTK_OBJECT (card->card),
+ "birth_date", &dt,
+ NULL);
if (dt) {
char *birthday;
@@ -2260,15 +2239,15 @@ birthday_compare (ECardSimple *ecard1, ECardSimple *ecard2)
char *date1 = NULL, *date2 = NULL;
gboolean equal;
- g_object_get (ecard1->card,
- "birth_date", &dt,
- NULL);
+ gtk_object_get (GTK_OBJECT (ecard1->card),
+ "birth_date", &dt,
+ NULL);
if (dt)
date1 = e_card_date_to_string (dt);
- g_object_get (ecard2->card,
- "birth_date", &dt,
- NULL);
+ gtk_object_get (GTK_OBJECT (ecard2->card),
+ "birth_date", &dt,
+ NULL);
if (dt)
date2 = e_card_date_to_string (dt);
@@ -2290,9 +2269,9 @@ category_populate (ECardSimple *card, char **values)
ECard *ecard;
EList *categories;
- g_object_get (card,
- "card", &ecard,
- NULL);
+ gtk_object_get (GTK_OBJECT (card),
+ "card", &ecard,
+ NULL);
categories = e_list_new((EListCopyFunc) g_strdup,
(EListFreeFunc) g_free,
@@ -2301,11 +2280,11 @@ category_populate (ECardSimple *card, char **values)
for (i = 0; values[i]; i++)
e_list_append (categories, values[i]);
- g_object_set (ecard,
- "category_list", categories,
- NULL);
+ gtk_object_set (GTK_OBJECT (ecard),
+ "category_list", categories,
+ NULL);
- g_object_unref (categories);
+ gtk_object_unref (GTK_OBJECT (categories));
e_card_simple_sync_card (card);
}
@@ -2319,13 +2298,13 @@ category_ber (ECardSimple *card)
ECard *ecard;
int i;
- g_object_get (card,
- "card", &ecard,
- NULL);
+ gtk_object_get (GTK_OBJECT (card),
+ "card", &ecard,
+ NULL);
- g_object_get (ecard,
- "category_list", &categories,
- NULL);
+ gtk_object_get (GTK_OBJECT (ecard),
+ "category_list", &categories,
+ NULL);
if (e_list_length (categories) != 0) {
result = g_new0 (struct berval*, e_list_length (categories) + 1);
@@ -2339,7 +2318,7 @@ category_ber (ECardSimple *card)
result[i]->bv_len = strlen (category);
}
- g_object_unref (iterator);
+ gtk_object_unref (GTK_OBJECT (iterator));
}
return result;
@@ -2615,12 +2594,10 @@ func_beginswith(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *da
str, str));
}
else if (!strcmp (ldap_attr, "fileAs")) {
- if (ldap_data->bl->priv->evolutionPersonSupported)
- ldap_data->list = g_list_prepend(ldap_data->list,
- g_strdup_printf("(fileAs=%s*)", str));
- else
- ldap_data->list = g_list_prepend(ldap_data->list,
- g_strdup_printf("(sn=%s*)", str));
+ ldap_data->list = g_list_prepend(ldap_data->list,
+ g_strdup_printf(
+ "(|(fileAs=%s*)(&(!(fileAs=*))(sn=%s*)))",
+ str, str));
}
else {
ldap_data->list = g_list_prepend(ldap_data->list,
@@ -2781,7 +2758,7 @@ build_card_from_entry (LDAP *ldap, LDAPMessage *e, GList **existing_objectclasse
struct prop_info *info = NULL;
char **values;
- if (existing_objectclasses && !g_ascii_strcasecmp (attr, "objectclass")) {
+ if (existing_objectclasses && !strcasecmp (attr, "objectclass")) {
values = ldap_get_values (ldap, e, attr);
for (i = 0; values[i]; i ++)
*existing_objectclasses = g_list_append (*existing_objectclasses, g_strdup (values[i]));
@@ -2790,7 +2767,7 @@ build_card_from_entry (LDAP *ldap, LDAPMessage *e, GList **existing_objectclasse
}
else {
for (i = 0; i < num_prop_infos; i ++)
- if (!g_ascii_strcasecmp (attr, prop_info[i].ldap_attr)) {
+ if (!g_strcasecmp (attr, prop_info[i].ldap_attr)) {
info = &prop_info[i];
break;
}
@@ -2807,7 +2784,7 @@ build_card_from_entry (LDAP *ldap, LDAPMessage *e, GList **existing_objectclasse
}
else if (info->prop_type & PROP_TYPE_COMPLEX) {
/* if it's a list call the ecard-populate function,
- which calls g_object_set to set the property */
+ which calls gtk_object_set to set the property */
info->populate_ecard_func(card,
values);
}
@@ -2825,7 +2802,7 @@ build_card_from_entry (LDAP *ldap, LDAPMessage *e, GList **existing_objectclasse
e_card_simple_sync_card (card);
- g_object_unref (ecard);
+ gtk_object_unref (GTK_OBJECT (ecard));
return card;
}
@@ -2891,7 +2868,7 @@ poll_ldap (PASBackendLDAP *bl)
}
e_iterator_next (iter);
}
- g_object_unref (iter);
+ gtk_object_unref (GTK_OBJECT (iter));
return TRUE;
}
@@ -2902,7 +2879,6 @@ send_pending_adds (LDAPSearchOp *search_op)
search_op->num_sent_this_time += search_op->num_pending_adds;
pas_book_view_notify_add (search_op->op.view, search_op->pending_adds);
g_list_foreach (search_op->pending_adds, (GFunc)g_free, NULL);
- g_list_free (search_op->pending_adds);
search_op->pending_adds = NULL;
search_op->num_pending_adds = 0;
}
@@ -2968,7 +2944,7 @@ ldap_search_handler (LDAPOp *op, LDAPMessage *res)
e_card_simple_get_vcard_assume_utf8 (card));
search_op->num_pending_adds ++;
- g_object_unref (card);
+ gtk_object_unref (GTK_OBJECT(card));
e = ldap_next_entry(ldap, e);
}
@@ -3094,27 +3070,34 @@ pas_backend_ldap_search (PASBackendLDAP *bl,
}
static void
-ldap_get_view (PASBackend *backend,
- PASBook *book,
- const char *search,
- GNOME_Evolution_Addressbook_BookViewListener listener,
- int limit)
+pas_backend_ldap_process_get_book_view (PASBackend *backend,
+ PASBook *book,
+ PASRequest *req)
{
PASBackendLDAP *bl = PAS_BACKEND_LDAP (backend);
PASBookView *book_view;
PASBackendLDAPBookView *view;
- book_view = pas_book_view_new (listener);
+ g_return_if_fail (req->get_book_view.listener != NULL);
+
+ book_view = pas_book_view_new (req->get_book_view.listener);
bonobo_object_ref(BONOBO_OBJECT(book));
- g_object_weak_ref (G_OBJECT (book_view), view_destroy, book);
+ gtk_signal_connect(GTK_OBJECT(book_view), "destroy",
+ GTK_SIGNAL_FUNC(view_destroy), book);
view = g_new0(PASBackendLDAPBookView, 1);
view->book_view = book_view;
- view->search = g_strdup(search);
+ view->search = g_strdup(req->get_book_view.search);
view->card_sexp = pas_backend_card_sexp_new (view->search);
view->blpriv = bl->priv;
- view->limit = limit;
+
+ if (req->op == GetCompletionView) {
+ view->limit = MIN (bl->priv->ldap_limit, 100);
+ }
+ else {
+ view->limit = bl->priv->ldap_limit;
+ }
e_list_append(bl->priv->book_views, view);
@@ -3130,155 +3113,92 @@ ldap_get_view (PASBackend *backend,
}
static void
-pas_backend_ldap_process_get_book_view (PASBackend *backend,
- PASBook *book,
- PASGetBookViewRequest *req)
-{
- PASBackendLDAP *bl = PAS_BACKEND_LDAP (backend);
-
- ldap_get_view (backend, book, req->search, req->listener,
- bl->priv->ldap_limit);
-}
-
-static void
-pas_backend_ldap_process_get_completion_view (PASBackend *backend,
- PASBook *book,
- PASGetCompletionViewRequest *req)
-{
- PASBackendLDAP *bl = PAS_BACKEND_LDAP (backend);
-
- ldap_get_view (backend, book, req->search, req->listener,
- MIN (bl->priv->ldap_limit, 100));
-}
-
-static void
-pas_backend_ldap_process_get_changes (PASBackend *backend,
- PASBook *book,
- PASGetChangesRequest *req)
-{
- /* FIXME: implement */
-}
-
-static void
pas_backend_ldap_process_check_connection (PASBackend *backend,
PASBook *book,
- PASCheckConnectionRequest *req)
+ PASRequest *req)
{
PASBackendLDAP *bl = PAS_BACKEND_LDAP (backend);
pas_book_report_connection (book, bl->priv->connected);
}
-#define LDAP_SIMPLE_PREFIX "ldap/simple-"
-#define SASL_PREFIX "sasl/"
-
static void
pas_backend_ldap_process_authenticate_user (PASBackend *backend,
PASBook *book,
- PASAuthenticateUserRequest *req)
+ PASRequest *req)
{
PASBackendLDAP *bl = PAS_BACKEND_LDAP (backend);
int ldap_error;
char *dn = NULL;
- if (!strncasecmp (req->auth_method, LDAP_SIMPLE_PREFIX, strlen (LDAP_SIMPLE_PREFIX))) {
-
- if (!strcmp (req->auth_method, "ldap/simple-email")) {
- LDAPMessage *res, *e;
- char *query = g_strdup_printf ("(mail=%s)", req->user);
+ if (!strcmp (req->auth_user.auth_method, "ldap/simple-email")) {
+ LDAPMessage *res, *e;
+ char *query = g_strdup_printf ("(mail=%s)", req->auth_user.user);
- ldap_error = ldap_search_s (bl->priv->ldap,
- bl->priv->ldap_rootdn,
- bl->priv->ldap_scope,
- query,
- NULL, 0, &res);
- g_free (query);
+ ldap_error = ldap_search_s (bl->priv->ldap,
+ bl->priv->ldap_rootdn,
+ bl->priv->ldap_scope,
+ query,
+ NULL, 0, &res);
+ g_free (query);
- if (ldap_error == LDAP_SUCCESS) {
- char *entry_dn;
+ if (ldap_error == LDAP_SUCCESS) {
+ char *entry_dn;
- e = ldap_first_entry (bl->priv->ldap, res);
+ e = ldap_first_entry (bl->priv->ldap, res);
- entry_dn = ldap_get_dn (bl->priv->ldap, e);
- dn = g_strdup(entry_dn);
+ entry_dn = ldap_get_dn (bl->priv->ldap, e);
+ dn = g_strdup(entry_dn);
- ldap_memfree (entry_dn);
- ldap_msgfree (res);
- }
- else {
- pas_book_respond_authenticate_user (book,
- GNOME_Evolution_Addressbook_BookListener_PermissionDenied);
- return;
- }
- }
- else if (!strcmp (req->auth_method, "ldap/simple-binddn")) {
- dn = g_strdup (req->user);
+ ldap_memfree (entry_dn);
+ ldap_msgfree (res);
}
-
- /* now authenticate against the DN we were either supplied or queried for */
- printf ("simple auth as %s\n", dn);
- ldap_error = ldap_simple_bind_s(bl->priv->ldap,
- dn,
- req->passwd);
-
- pas_book_respond_authenticate_user (book,
- ldap_error_to_response (ldap_error));
- }
-#ifdef ENABLE_SASL_BINDS
- else if (!strncasecmp (req->auth_method, SASL_PREFIX, strlen (SASL_PREFIX))) {
- g_print ("sasl bind (mech = %s) as %s", req->auth_method + strlen (SASL_PREFIX), req->user);
- ldap_error = ldap_sasl_bind_s (bl->priv->ldap,
- NULL,
- req->auth_method + strlen (SASL_PREFIX),
- req->passwd,
- NULL,
- NULL,
- NULL);
-
- if (ldap_error == LDAP_NOT_SUPPORTED)
- pas_book_respond_authenticate_user (book,
- GNOME_Evolution_Addressbook_BookListener_UnsupportedAuthenticationMethod);
- else
+ else {
pas_book_respond_authenticate_user (book,
- ldap_error_to_response (ldap_error));
+ GNOME_Evolution_Addressbook_BookListener_PermissionDenied);
+ return;
+ }
}
-#endif
- else {
- pas_book_respond_authenticate_user (book,
- GNOME_Evolution_Addressbook_BookListener_UnsupportedAuthenticationMethod);
- return;
+ else if (!strcmp (req->auth_user.auth_method, "ldap/simple-binddn")) {
+ dn = g_strdup (req->auth_user.user);
}
- if (ldap_error == LDAP_SUCCESS) {
- bl->priv->auth_dn = dn;
- bl->priv->auth_passwd = g_strdup (req->passwd);
+ /* now authenticate against the DN we were either supplied or queried for */
+ printf ("authenticating as %s\n", dn);
+ ldap_error = ldap_simple_bind_s(bl->priv->ldap,
+ dn,
+ req->auth_user.passwd);
- pas_backend_set_is_writable (backend, TRUE);
+ bl->priv->auth_dn = dn;
+ bl->priv->auth_passwd = g_strdup (req->auth_user.passwd);
- /* force a requery on the root dse since some ldap
- servers are set up such that they don't report
- anything (including the schema DN) until the user
- is authenticated */
- if (!bl->priv->evolutionPersonChecked) {
- ldap_error = query_ldap_root_dse (bl);
+ pas_book_respond_authenticate_user (book,
+ ldap_error_to_response (ldap_error));
- if (LDAP_SUCCESS == ldap_error) {
- if (!bl->priv->evolutionPersonChecked)
- check_schema_support (bl);
- }
- else
- g_warning ("Failed to perform root dse query after authenticating, (ldap_error 0x%02x)", ldap_error);
- }
+ bl->priv->writable = (ldap_error == LDAP_SUCCESS);
+
+ /* if the bind was successful we force a requery on the root
+ dse since some ldap servers are set up such that they don't
+ report anything (including the schema DN) until the user is
+ authenticated */
+ if (!bl->priv->evolutionPersonChecked && ldap_error == LDAP_SUCCESS) {
+ ldap_error = query_ldap_root_dse (bl);
- pas_book_report_writable (book, TRUE);
+ if (LDAP_SUCCESS == ldap_error) {
+ if (!bl->priv->evolutionPersonChecked)
+ check_schema_support (bl);
+ }
+ else
+ g_warning ("Failed to perform root dse query after authenticating, (ldap_error 0x%02x)", ldap_error);
}
+ pas_book_report_writable (book, bl->priv->writable);
}
static void
pas_backend_ldap_process_get_supported_fields (PASBackend *backend,
PASBook *book,
- PASGetSupportedFieldsRequest *req)
+ PASRequest *req)
{
PASBackendLDAP *bl = PAS_BACKEND_LDAP (backend);
@@ -3289,16 +3209,75 @@ pas_backend_ldap_process_get_supported_fields (PASBackend *backend,
}
static void
-pas_backend_ldap_process_get_supported_auth_methods (PASBackend *backend,
- PASBook *book,
- PASGetSupportedAuthMethodsRequest *req)
+pas_backend_ldap_process_client_requests (PASBook *book)
+{
+ PASBackend *backend;
+ PASRequest *req;
+
+ backend = pas_book_get_backend (book);
+
+ req = pas_book_pop_request (book);
+ if (req == NULL)
+ return;
+
+ switch (req->op) {
+ case CreateCard:
+ pas_backend_ldap_process_create_card (backend, book, req);
+ break;
+
+ case RemoveCard:
+ pas_backend_ldap_process_remove_card (backend, book, req);
+ break;
+
+ case ModifyCard:
+ pas_backend_ldap_process_modify_card (backend, book, req);
+ break;
+
+ case CheckConnection:
+ pas_backend_ldap_process_check_connection (backend, book, req);
+ break;
+
+ case GetVCard:
+ pas_backend_ldap_process_get_vcard (backend, book, req);
+ break;
+
+ case GetCursor:
+ pas_backend_ldap_process_get_cursor (backend, book, req);
+ break;
+
+ case GetBookView:
+ pas_backend_ldap_process_get_book_view (backend, book, req);
+ break;
+
+ case GetCompletionView:
+ /* we don't support summaries so completion view requests are the same as book view requests */
+ pas_backend_ldap_process_get_book_view (backend, book, req);
+ break;
+
+ case GetChanges:
+ /* FIXME: Code this. */
+ break;
+
+ case AuthenticateUser:
+ pas_backend_ldap_process_authenticate_user (backend, book, req);
+ break;
+ case GetSupportedFields:
+ pas_backend_ldap_process_get_supported_fields (backend, book, req);
+ break;
+ }
+
+ pas_book_free_request (req);
+}
+
+static void
+pas_backend_ldap_book_destroy_cb (PASBook *book, gpointer data)
{
- PASBackendLDAP *bl = PAS_BACKEND_LDAP (backend);
+ PASBackendLDAP *backend;
- pas_book_respond_get_supported_auth_methods (book,
- GNOME_Evolution_Addressbook_BookListener_Success,
- bl->priv->supported_auth_methods);
+ backend = PAS_BACKEND_LDAP (data);
+
+ pas_backend_remove_client (PAS_BACKEND (backend), book);
}
static GNOME_Evolution_Addressbook_BookListener_CallStatus
@@ -3392,7 +3371,75 @@ pas_backend_ldap_get_uri (PASBackend *backend)
return bl->priv->uri;
}
-static char*
+static gboolean
+pas_backend_ldap_add_client (PASBackend *backend,
+ GNOME_Evolution_Addressbook_BookListener listener)
+{
+ PASBackendLDAP *bl;
+ PASBook *book;
+
+ g_assert (backend != NULL);
+ g_assert (PAS_IS_BACKEND_LDAP (backend));
+
+ bl = PAS_BACKEND_LDAP (backend);
+
+ book = pas_book_new (backend, listener);
+
+ if (!book) {
+ if (!bl->priv->clients)
+ pas_backend_last_client_gone (backend);
+
+ return FALSE;
+ }
+
+ gtk_signal_connect (GTK_OBJECT (book), "destroy",
+ pas_backend_ldap_book_destroy_cb, backend);
+
+ gtk_signal_connect (GTK_OBJECT (book), "requests_queued",
+ pas_backend_ldap_process_client_requests, NULL);
+
+ bl->priv->clients = g_list_prepend (
+ bl->priv->clients, book);
+
+ if (bl->priv->connected) {
+ pas_book_respond_open (
+ book, GNOME_Evolution_Addressbook_BookListener_Success);
+ } else {
+ pas_book_respond_open (
+ book, GNOME_Evolution_Addressbook_BookListener_OtherError);
+ }
+
+ pas_book_report_writable (book, bl->priv->writable);
+
+ bonobo_object_unref (BONOBO_OBJECT (book));
+
+ return TRUE;
+}
+
+static void
+pas_backend_ldap_remove_client (PASBackend *backend,
+ PASBook *book)
+{
+ PASBackendLDAP *bl;
+
+ g_return_if_fail (backend != NULL);
+ g_return_if_fail (PAS_IS_BACKEND_LDAP (backend));
+ g_return_if_fail (book != NULL);
+ g_return_if_fail (PAS_IS_BOOK (book));
+
+ bl = PAS_BACKEND_LDAP (backend);
+
+ /* Disconnect */
+ bl->priv->clients = g_list_remove (bl->priv->clients, book);
+
+ /* When all clients go away, notify the parent factory about it so that
+ * it may decide whether to kill the backend or not.
+ */
+ if (!bl->priv->clients)
+ pas_backend_last_client_gone (backend);
+}
+
+static char *
pas_backend_ldap_get_static_capabilities (PASBackend *backend)
{
return g_strdup("net");
@@ -3418,10 +3465,10 @@ pas_backend_ldap_new (void)
{
PASBackendLDAP *backend;
- backend = g_object_new (PAS_TYPE_BACKEND_LDAP, NULL);
+ backend = gtk_type_new (pas_backend_ldap_get_type ());
if (! pas_backend_ldap_construct (backend)) {
- g_object_unref (backend);
+ gtk_object_unref (GTK_OBJECT (backend));
return NULL;
}
@@ -3440,71 +3487,51 @@ call_dtor (int msgid, LDAPOp *op, gpointer data)
}
static void
-pas_backend_ldap_dispose (GObject *object)
+pas_backend_ldap_destroy (GtkObject *object)
{
PASBackendLDAP *bl;
bl = PAS_BACKEND_LDAP (object);
- if (bl->priv) {
- g_hash_table_foreach_remove (bl->priv->id_to_op, (GHRFunc)call_dtor, NULL);
- g_hash_table_destroy (bl->priv->id_to_op);
+ g_hash_table_foreach_remove (bl->priv->id_to_op, (GHRFunc)call_dtor, NULL);
+ g_hash_table_destroy (bl->priv->id_to_op);
- if (bl->priv->poll_timeout != -1) {
- printf ("removing timeout\n");
- g_source_remove (bl->priv->poll_timeout);
- }
-
- g_object_unref (bl->priv->book_views);
-
- if (bl->priv->supported_fields)
- g_object_unref (bl->priv->supported_fields);
+ if (bl->priv->poll_timeout != -1) {
+ printf ("removing timeout\n");
+ g_source_remove (bl->priv->poll_timeout);
+ }
- if (bl->priv->supported_auth_methods)
- g_object_unref (bl->priv->supported_auth_methods);
+ gtk_object_unref (GTK_OBJECT (bl->priv->book_views));
- g_free (bl->priv->uri);
+ if (bl->priv->supported_fields)
+ gtk_object_unref (GTK_OBJECT (bl->priv->supported_fields));
- g_free (bl->priv);
- bl->priv = NULL;
- }
+ g_free (bl->priv->uri);
- if (G_OBJECT_CLASS (pas_backend_ldap_parent_class)->dispose)
- G_OBJECT_CLASS (pas_backend_ldap_parent_class)->dispose (object);
+ GTK_OBJECT_CLASS (pas_backend_ldap_parent_class)->destroy (object);
}
static void
pas_backend_ldap_class_init (PASBackendLDAPClass *klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkObjectClass *object_class = (GtkObjectClass *) klass;
PASBackendClass *parent_class;
/* get client side information (extensions present in the library) */
get_ldap_library_info ();
- pas_backend_ldap_parent_class = g_type_class_peek_parent (klass);
+ pas_backend_ldap_parent_class = gtk_type_class (pas_backend_get_type ());
parent_class = PAS_BACKEND_CLASS (klass);
/* Set the virtual methods. */
parent_class->load_uri = pas_backend_ldap_load_uri;
parent_class->get_uri = pas_backend_ldap_get_uri;
+ parent_class->add_client = pas_backend_ldap_add_client;
+ parent_class->remove_client = pas_backend_ldap_remove_client;
parent_class->get_static_capabilities = pas_backend_ldap_get_static_capabilities;
- parent_class->create_card = pas_backend_ldap_process_create_card;
- parent_class->remove_cards = pas_backend_ldap_process_remove_cards;
- parent_class->modify_card = pas_backend_ldap_process_modify_card;
- parent_class->check_connection = pas_backend_ldap_process_check_connection;
- parent_class->get_vcard = pas_backend_ldap_process_get_vcard;
- parent_class->get_cursor = pas_backend_ldap_process_get_cursor;
- parent_class->get_book_view = pas_backend_ldap_process_get_book_view;
- parent_class->get_completion_view = pas_backend_ldap_process_get_completion_view;
- parent_class->get_changes = pas_backend_ldap_process_get_changes;
- parent_class->authenticate_user = pas_backend_ldap_process_authenticate_user;
- parent_class->get_supported_fields = pas_backend_ldap_process_get_supported_fields;
- parent_class->get_supported_auth_methods = pas_backend_ldap_process_get_supported_auth_methods;
-
- object_class->dispose = pas_backend_ldap_dispose;
+ object_class->destroy = pas_backend_ldap_destroy;
}
static void
@@ -3526,25 +3553,24 @@ pas_backend_ldap_init (PASBackendLDAP *backend)
/**
* pas_backend_ldap_get_type:
*/
-GType
+GtkType
pas_backend_ldap_get_type (void)
{
- static GType type = 0;
+ static GtkType type = 0;
if (! type) {
- GTypeInfo info = {
- sizeof (PASBackendLDAPClass),
- NULL, /* base_class_init */
- NULL, /* base_class_finalize */
- (GClassInitFunc) pas_backend_ldap_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
+ GtkTypeInfo info = {
+ "PASBackendLDAP",
sizeof (PASBackendLDAP),
- 0, /* n_preallocs */
- (GInstanceInitFunc) pas_backend_ldap_init
+ sizeof (PASBackendLDAPClass),
+ (GtkClassInitFunc) pas_backend_ldap_class_init,
+ (GtkObjectInitFunc) pas_backend_ldap_init,
+ NULL, /* reserved 1 */
+ NULL, /* reserved 2 */
+ (GtkClassInitFunc) NULL
};
- type = g_type_register_static (PAS_TYPE_BACKEND, "PASBackendLDAP", &info, 0);
+ type = gtk_type_unique (pas_backend_get_type (), &info);
}
return type;