aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook
diff options
context:
space:
mode:
Diffstat (limited to 'addressbook')
-rw-r--r--addressbook/ChangeLog40
-rw-r--r--addressbook/backend/ebook/e-card-compare.c4
-rw-r--r--addressbook/backend/ebook/e-card-simple.c60
-rw-r--r--addressbook/contact-editor/Makefile.am1
-rw-r--r--addressbook/contact-editor/e-contact-quick-add.c3
-rw-r--r--addressbook/gui/Makefile.am2
-rw-r--r--addressbook/gui/component/Makefile.am1
-rw-r--r--addressbook/gui/component/addressbook-component.c3
-rw-r--r--addressbook/gui/contact-editor/Makefile.am1
-rw-r--r--addressbook/gui/contact-editor/e-contact-quick-add.c3
-rw-r--r--addressbook/gui/merging/.cvsignore6
-rw-r--r--addressbook/gui/merging/Makefile.am22
-rw-r--r--addressbook/gui/merging/e-card-duplicate-detected.glade255
-rw-r--r--addressbook/gui/merging/e-card-merging.c100
-rw-r--r--addressbook/gui/merging/e-card-merging.h27
-rw-r--r--addressbook/gui/widgets/Makefile.am10
-rw-r--r--addressbook/gui/widgets/e-addressbook-table-adapter.c3
-rw-r--r--addressbook/gui/widgets/e-addressbook-util.c3
-rw-r--r--addressbook/gui/widgets/e-addressbook-view.c3
-rw-r--r--addressbook/gui/widgets/e-minicard-control.c3
-rw-r--r--addressbook/gui/widgets/e-minicard-view.c2
21 files changed, 512 insertions, 40 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog
index 77769698ff..a6621db265 100644
--- a/addressbook/ChangeLog
+++ b/addressbook/ChangeLog
@@ -1,3 +1,43 @@
+2001-06-09 Christopher James Lahey <clahey@ximian.com>
+
+ * backend/ebook/e-card-compare.c (use_common_book_cb): Null
+ terminate the strv here.
+ (e_card_locate_match): ref here instead of unref.
+
+ * backend/ebook/e-card-simple.c (e_card_simple_get): Handle a NULL
+ card here.
+
+ * contact-editor/Makefile.am (INCLUDES), gui/widgets/Makefile.am
+ (INCLUDES): Added addressbook/gui/merging here.
+
+ * contact-editor/e-contact-quick-add.c (book_ready_cb),
+ gui/component/addressbook-component.c (dnd_drop_book_open_cb),
+ gui/widgets/e-addressbook-table-adapter.c
+ (addressbook_append_row), gui/widgets/e-addressbook-util.c
+ (add_card_cb), gui/widgets/e-addressbook-view.c
+ (selection_received), gui/widgets/e-minicard-control.c
+ (book_open_cb): Use e_card_merging_book_add_card instead of
+ e_book_add_card here.
+
+ * gui/Makefile.am (SUBDIRS): Added merging.
+
+ * gui/component/Makefile.am (evolution_addressbook_LDADD),
+ gui/widgets/Makefile.am (minicard_test_LDADD,
+ minicard_widget_test_LDADD): Added libecardmerging.a here.
+
+ * gui/merging/, gui/merging/.cvsignore, gui/merging/Makefile.am:
+ New addressbook library.
+
+ * gui/merging/e-card-duplicate-detected.glade: Glade file for
+ duplicate detected dialog.
+
+ * gui/merging/e-card-merging.c, gui/merging/e-card-merging.h: New
+ files for detecting duplicates before adding and putting up a
+ dialog if duplicates are found.
+
+ * gui/widgets/e-minicard-view.c: Include e-addressbook-util.h
+ here.
+
2001-06-08 Chris Toshok <toshok@ximian.com>
* contact-editor/e-contact-editor.c (e_contact_editor_new): remove
diff --git a/addressbook/backend/ebook/e-card-compare.c b/addressbook/backend/ebook/e-card-compare.c
index fc80d5e6c6..f249c1727b 100644
--- a/addressbook/backend/ebook/e-card-compare.c
+++ b/addressbook/backend/ebook/e-card-compare.c
@@ -419,7 +419,7 @@ use_common_book_cb (EBook *book, gpointer closure)
/* Build up our full query from the parts. */
-
+ query_parts[p] = NULL;
qj = g_strjoinv (" ", query_parts);
if (p > 0) {
query = g_strdup_printf ("(or %s)", qj);
@@ -446,7 +446,7 @@ e_card_locate_match (ECard *card, ECardMatchQueryCallback cb, gpointer closure)
info = g_new (MatchSearchInfo, 1);
info->card = card;
- gtk_object_unref (GTK_OBJECT (card));
+ gtk_object_ref (GTK_OBJECT (card));
info->cb = cb;
info->closure = closure;
diff --git a/addressbook/backend/ebook/e-card-simple.c b/addressbook/backend/ebook/e-card-simple.c
index f7550017a0..ed10a56685 100644
--- a/addressbook/backend/ebook/e-card-simple.c
+++ b/addressbook/backend/ebook/e-card-simple.c
@@ -727,15 +727,21 @@ char *e_card_simple_get (ECardSimple *simple,
ECardName *name;
switch(type) {
case E_CARD_SIMPLE_INTERNAL_TYPE_STRING:
- gtk_object_get(GTK_OBJECT(simple->card),
- field_data[field].ecard_field, &string,
- NULL);
- return g_strdup(string);
+ if (simple->card) {
+ 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:
- gtk_object_get(GTK_OBJECT(simple->card),
- field_data[field].ecard_field, &date,
- NULL);
- return NULL; /* FIXME!!!! */
+ if (simple->card) {
+ gtk_object_get(GTK_OBJECT(simple->card),
+ field_data[field].ecard_field, &date,
+ NULL);
+ return NULL; /* FIXME!!!! */
+ } else
+ return NULL;
case E_CARD_SIMPLE_INTERNAL_TYPE_ADDRESS:
addr = e_card_simple_get_address(simple,
field_data[field].list_type_index);
@@ -757,24 +763,30 @@ char *e_card_simple_get (ECardSimple *simple,
case E_CARD_SIMPLE_INTERNAL_TYPE_SPECIAL:
switch (field) {
case E_CARD_SIMPLE_FIELD_NAME_OR_ORG:
- gtk_object_get(GTK_OBJECT(simple->card),
- "full_name", &string,
- NULL);
- if (string && *string)
+ if (simple->card) {
+ gtk_object_get(GTK_OBJECT(simple->card),
+ "full_name", &string,
+ NULL);
+ if (string && *string)
+ return g_strdup(string);
+ gtk_object_get(GTK_OBJECT(simple->card),
+ "org", &string,
+ NULL);
+ if (string && *string)
+ return g_strdup(string);
+ string = e_card_simple_get_email(simple,
+ E_CARD_SIMPLE_EMAIL_ID_EMAIL);
return g_strdup(string);
- gtk_object_get(GTK_OBJECT(simple->card),
- "org", &string,
- NULL);
- if (string && *string)
- return g_strdup(string);
- string = e_card_simple_get_email(simple,
- E_CARD_SIMPLE_EMAIL_ID_EMAIL);
- return g_strdup(string);
+ } else
+ return NULL;
case E_CARD_SIMPLE_FIELD_FAMILY_NAME:
- gtk_object_get (GTK_OBJECT(simple->card),
- "name", &name,
- NULL);
- return g_strdup (name->family);
+ if (simple->card) {
+ gtk_object_get (GTK_OBJECT(simple->card),
+ "name", &name,
+ NULL);
+ return g_strdup (name->family);
+ } else
+ return NULL;
default:
return NULL;
}
diff --git a/addressbook/contact-editor/Makefile.am b/addressbook/contact-editor/Makefile.am
index 700be0ff35..47a79c7255 100644
--- a/addressbook/contact-editor/Makefile.am
+++ b/addressbook/contact-editor/Makefile.am
@@ -4,6 +4,7 @@ INCLUDES = \
-I$(top_srcdir) \
-I$(top_srcdir)/addressbook/ \
-I$(top_srcdir)/addressbook/backend \
+ -I$(top_srcdir)/addressbook/gui/merging \
-I$(top_srcdir)/widgets/e-table \
-DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \
-DDATADIR=\""$(datadir)"\" \
diff --git a/addressbook/contact-editor/e-contact-quick-add.c b/addressbook/contact-editor/e-contact-quick-add.c
index f9556f6758..edc8bae5cc 100644
--- a/addressbook/contact-editor/e-contact-quick-add.c
+++ b/addressbook/contact-editor/e-contact-quick-add.c
@@ -42,6 +42,7 @@
#include <addressbook/backend/ebook/e-card.h>
#include "e-contact-editor.h"
#include "e-contact-quick-add.h"
+#include "e-card-merging.h"
static void
e_card_quick_set_name (ECard *card, const gchar *str)
@@ -85,7 +86,7 @@ book_ready_cb (EBook *book, EBookStatus status, gpointer user_data)
gpointer cb_user_data = gtk_object_get_data (GTK_OBJECT (card), "e-contact-quick-add-user-data");
if (status == E_BOOK_STATUS_SUCCESS) {
- e_book_add_card (book, card, NULL, NULL);
+ e_card_merging_book_add_card (book, card, NULL, NULL);
if (cb)
cb (card, cb_user_data);
} else {
diff --git a/addressbook/gui/Makefile.am b/addressbook/gui/Makefile.am
index cd8fe38705..8ba306c0d3 100644
--- a/addressbook/gui/Makefile.am
+++ b/addressbook/gui/Makefile.am
@@ -1 +1 @@
-SUBDIRS = widgets search component
+SUBDIRS = merging widgets search component
diff --git a/addressbook/gui/component/Makefile.am b/addressbook/gui/component/Makefile.am
index e3f444d500..6f38d86436 100644
--- a/addressbook/gui/component/Makefile.am
+++ b/addressbook/gui/component/Makefile.am
@@ -54,6 +54,7 @@ evolution_addressbook_LDADD = \
$(top_builddir)/widgets/misc/libemiscwidgets.a \
$(top_builddir)/addressbook/printing/libecontactprint.a \
$(top_builddir)/addressbook/gui/search/libeaddressbooksearch.a \
+ $(top_builddir)/addressbook/gui/merging/libecardmerging.a \
$(top_builddir)/filter/libfilter.la \
$(top_builddir)/e-util/libeutil.la \
$(top_builddir)/widgets/menus/libmenus.la
diff --git a/addressbook/gui/component/addressbook-component.c b/addressbook/gui/component/addressbook-component.c
index f27384dd36..6274eea50c 100644
--- a/addressbook/gui/component/addressbook-component.c
+++ b/addressbook/gui/component/addressbook-component.c
@@ -41,6 +41,7 @@
#include "addressbook-storage.h"
#include "addressbook-component.h"
#include "addressbook.h"
+#include "addressbook/gui/merging/e-card-merging.h"
@@ -299,7 +300,7 @@ dnd_drop_book_open_cb (EBook *book, EBookStatus status, GList *card_list)
for (l = card_list; l; l = l->next) {
ECard *card = l->data;
- e_book_add_card (book, card, NULL /* XXX */, NULL);
+ e_card_merging_book_add_card (book, card, NULL /* XXX */, NULL);
}
}
diff --git a/addressbook/gui/contact-editor/Makefile.am b/addressbook/gui/contact-editor/Makefile.am
index 700be0ff35..47a79c7255 100644
--- a/addressbook/gui/contact-editor/Makefile.am
+++ b/addressbook/gui/contact-editor/Makefile.am
@@ -4,6 +4,7 @@ INCLUDES = \
-I$(top_srcdir) \
-I$(top_srcdir)/addressbook/ \
-I$(top_srcdir)/addressbook/backend \
+ -I$(top_srcdir)/addressbook/gui/merging \
-I$(top_srcdir)/widgets/e-table \
-DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \
-DDATADIR=\""$(datadir)"\" \
diff --git a/addressbook/gui/contact-editor/e-contact-quick-add.c b/addressbook/gui/contact-editor/e-contact-quick-add.c
index f9556f6758..edc8bae5cc 100644
--- a/addressbook/gui/contact-editor/e-contact-quick-add.c
+++ b/addressbook/gui/contact-editor/e-contact-quick-add.c
@@ -42,6 +42,7 @@
#include <addressbook/backend/ebook/e-card.h>
#include "e-contact-editor.h"
#include "e-contact-quick-add.h"
+#include "e-card-merging.h"
static void
e_card_quick_set_name (ECard *card, const gchar *str)
@@ -85,7 +86,7 @@ book_ready_cb (EBook *book, EBookStatus status, gpointer user_data)
gpointer cb_user_data = gtk_object_get_data (GTK_OBJECT (card), "e-contact-quick-add-user-data");
if (status == E_BOOK_STATUS_SUCCESS) {
- e_book_add_card (book, card, NULL, NULL);
+ e_card_merging_book_add_card (book, card, NULL, NULL);
if (cb)
cb (card, cb_user_data);
} else {
diff --git a/addressbook/gui/merging/.cvsignore b/addressbook/gui/merging/.cvsignore
new file mode 100644
index 0000000000..09980ae6ba
--- /dev/null
+++ b/addressbook/gui/merging/.cvsignore
@@ -0,0 +1,6 @@
+.deps
+.libs
+Makefile
+Makefile.in
+*.lo
+*.la
diff --git a/addressbook/gui/merging/Makefile.am b/addressbook/gui/merging/Makefile.am
new file mode 100644
index 0000000000..493edc0002
--- /dev/null
+++ b/addressbook/gui/merging/Makefile.am
@@ -0,0 +1,22 @@
+INCLUDES = \
+ -DG_LOG_DOMAIN=\"e-card-gui\" \
+ -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \
+ -DEVOLUTION_DATADIR=\""$(datadir)"\" \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/addressbook/backend/ebook \
+ $(BONOBO_GNOME_CFLAGS) \
+ $(EXTRA_GNOME_CFLAGS)
+
+noinst_LIBRARIES = \
+ libecardmerging.a
+
+libecardmerging_a_SOURCES = \
+ e-card-merging.c \
+ e-card-merging.h
+
+
+gladedir = $(datadir)/evolution/glade
+glade_DATA = e-card-duplicate-detected.glade
+
+EXTRA_DIST = \
+ $(glade_DATA)
diff --git a/addressbook/gui/merging/e-card-duplicate-detected.glade b/addressbook/gui/merging/e-card-duplicate-detected.glade
new file mode 100644
index 0000000000..bc6624e8fd
--- /dev/null
+++ b/addressbook/gui/merging/e-card-duplicate-detected.glade
@@ -0,0 +1,255 @@
+<?xml version="1.0"?>
+<GTK-Interface>
+
+<project>
+ <name>e-card-duplicate-detected</name>
+ <program_name>e-card-duplicate-detected</program_name>
+ <directory></directory>
+ <source_directory>src</source_directory>
+ <pixmaps_directory>pixmaps</pixmaps_directory>
+ <language>C</language>
+ <gnome_support>True</gnome_support>
+ <gettext_support>True</gettext_support>
+ <use_widget_names>True</use_widget_names>
+ <output_main_file>False</output_main_file>
+ <output_support_files>False</output_support_files>
+ <output_build_files>False</output_build_files>
+ <gnome_help_support>True</gnome_help_support>
+</project>
+
+<widget>
+ <class>GnomeDialog</class>
+ <name>dialog-duplicate-contact</name>
+ <title>Duplicate Contact Detected</title>
+ <type>GTK_WINDOW_POPUP</type>
+ <position>GTK_WIN_POS_NONE</position>
+ <modal>False</modal>
+ <allow_shrink>False</allow_shrink>
+ <allow_grow>True</allow_grow>
+ <auto_shrink>False</auto_shrink>
+ <auto_close>False</auto_close>
+ <hide_on_close>False</hide_on_close>
+
+ <widget>
+ <class>GtkVBox</class>
+ <child_name>GnomeDialog:vbox</child_name>
+ <name>dialog-vbox1</name>
+ <homogeneous>False</homogeneous>
+ <spacing>8</spacing>
+ <child>
+ <padding>4</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkHButtonBox</class>
+ <child_name>GnomeDialog:action_area</child_name>
+ <name>dialog-action_area1</name>
+ <layout_style>GTK_BUTTONBOX_END</layout_style>
+ <spacing>8</spacing>
+ <child_min_width>85</child_min_width>
+ <child_min_height>27</child_min_height>
+ <child_ipad_x>7</child_ipad_x>
+ <child_ipad_y>0</child_ipad_y>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>True</fill>
+ <pack>GTK_PACK_END</pack>
+ </child>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button3</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <label>Add Anyway</label>
+ <stock_pixmap>GNOME_STOCK_PIXMAP_ADD</stock_pixmap>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button4</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkTable</class>
+ <name>table1</name>
+ <rows>5</rows>
+ <columns>2</columns>
+ <homogeneous>False</homogeneous>
+ <row_spacing>6</row_spacing>
+ <column_spacing>6</column_spacing>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>Custom</class>
+ <name>custom-old-card</name>
+ <creation_function>e_card_merging_create_old_card</creation_function>
+ <int1>0</int1>
+ <int2>0</int2>
+ <last_modification_time>Fri, 08 Jun 2001 01:33:22 GMT</last_modification_time>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>4</top_attach>
+ <bottom_attach>5</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>True</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label1</name>
+ <label>The name or email address of this contact already exists
+in this folder. Would you like to add it anyway?</label>
+ <justify>GTK_JUSTIFY_LEFT</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label3</name>
+ <label>Original Contact:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>3</top_attach>
+ <bottom_attach>4</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label4</name>
+ <label>New Contact:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>Custom</class>
+ <name>custom-new-card</name>
+ <creation_function>e_card_merging_create_old_card</creation_function>
+ <int1>0</int1>
+ <int2>0</int2>
+ <last_modification_time>Fri, 08 Jun 2001 01:33:22 GMT</last_modification_time>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>True</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkAlignment</class>
+ <name>alignment1</name>
+ <xalign>0.5</xalign>
+ <yalign>0</yalign>
+ <xscale>1</xscale>
+ <yscale>0</yscale>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>1</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>5</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+
+ <widget>
+ <class>Custom</class>
+ <name>custom2</name>
+ <creation_function>e_create_image_widget</creation_function>
+ <string1>malehead.png</string1>
+ <int1>0</int1>
+ <int2>0</int2>
+ <last_modification_time>Fri, 08 Jun 2001 00:18:39 GMT</last_modification_time>
+ </widget>
+ </widget>
+ </widget>
+ </widget>
+</widget>
+
+</GTK-Interface>
diff --git a/addressbook/gui/merging/e-card-merging.c b/addressbook/gui/merging/e-card-merging.c
new file mode 100644
index 0000000000..701ab69da9
--- /dev/null
+++ b/addressbook/gui/merging/e-card-merging.c
@@ -0,0 +1,100 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Code for checking for duplicates when doing ECard work.
+ *
+ * Author:
+ * Christopher James Lahey <clahey@ximian.com>
+ *
+ * Copyright 2001, Ximian, Inc.
+ */
+
+#include <config.h>
+
+#include "e-card-merging.h"
+#include <libgnomeui/gnome-dialog.h>
+#include "e-card-compare.h"
+#include <glade/glade.h>
+#include <gtk/gtksignal.h>
+#include "addressbook/gui/widgets/e-minicard-widget.h"
+
+typedef struct {
+ EBook *book;
+ ECard *card;
+ EBookIdCallback cb;
+ gpointer closure;
+} ECardMergingLookup;
+
+static void
+clicked (GnomeDialog *dialog, int button, ECardMergingLookup *lookup)
+{
+ switch (button) {
+ case 0:
+ e_book_add_card (lookup->book, lookup->card, lookup->cb, lookup->closure);
+ break;
+ case 1:
+ if (lookup->cb)
+ lookup->cb (lookup->book, E_BOOK_STATUS_CANCELLED, NULL, lookup->closure);
+ break;
+ }
+ g_free (lookup);
+ gnome_dialog_close (dialog);
+}
+
+static void
+match_query_callback (ECard *card, ECard *match, ECardMatchType type, gpointer closure)
+{
+ ECardMergingLookup *lookup = closure;
+ if (type == E_CARD_MATCH_NONE) {
+ e_book_add_card (lookup->book, card, lookup->cb, lookup->closure);
+ g_free (lookup);
+ } else {
+ GladeXML *ui = glade_xml_new (EVOLUTION_GLADEDIR "/e-card-duplicate-detected.glade", NULL);
+ GtkWidget *widget;
+
+ widget = glade_xml_get_widget (ui, "custom-old-card");
+ gtk_object_set (GTK_OBJECT (widget),
+ "card", match,
+ NULL);
+
+ widget = glade_xml_get_widget (ui, "custom-new-card");
+ gtk_object_set (GTK_OBJECT (widget),
+ "card", card,
+ NULL);
+
+ widget = glade_xml_get_widget (ui, "dialog-duplicate-contact");
+
+ gtk_signal_connect (GTK_OBJECT (widget), "clicked",
+ GTK_SIGNAL_FUNC (clicked), lookup);
+ }
+}
+
+gboolean
+e_card_merging_book_add_card (EBook *book,
+ ECard *card,
+ EBookIdCallback cb,
+ gpointer closure)
+{
+ ECardMergingLookup *lookup;
+ lookup = g_new (ECardMergingLookup, 1);
+
+ lookup->book = book;
+ lookup->card = card;
+ lookup->cb = cb;
+ lookup->closure = closure;
+
+ e_card_locate_match (card, match_query_callback, lookup);
+ return TRUE;
+}
+
+GtkWidget *
+e_card_merging_create_old_card(gchar *name,
+ gchar *string1, gchar *string2,
+ gint int1, gint int2);
+
+GtkWidget *
+e_card_merging_create_old_card(gchar *name,
+ gchar *string1, gchar *string2,
+ gint int1, gint int2)
+{
+ return e_minicard_widget_new ();
+}
diff --git a/addressbook/gui/merging/e-card-merging.h b/addressbook/gui/merging/e-card-merging.h
new file mode 100644
index 0000000000..022cad0099
--- /dev/null
+++ b/addressbook/gui/merging/e-card-merging.h
@@ -0,0 +1,27 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * The Evolution addressbook client object.
+ *
+ * Author:
+ * Christopher James Lahey <clahey@ximian.com>
+ *
+ * Copyright 2001, Ximian, Inc.
+ */
+
+#ifndef __E_CARD_MERGING_H__
+#define __E_CARD_MERGING_H__
+
+#include <libgnome/gnome-defs.h>
+
+#include <addressbook/backend/ebook/e-book.h>
+
+BEGIN_GNOME_DECLS
+
+gboolean e_card_merging_book_add_card (EBook *book,
+ ECard *card,
+ EBookIdCallback cb,
+ gpointer closure);
+
+END_GNOME_DECLS
+
+#endif /* ! __E_CARD_MERGING_H__ */
diff --git a/addressbook/gui/widgets/Makefile.am b/addressbook/gui/widgets/Makefile.am
index 92b925d199..a375965a66 100644
--- a/addressbook/gui/widgets/Makefile.am
+++ b/addressbook/gui/widgets/Makefile.am
@@ -5,10 +5,7 @@ INCLUDES = \
-I$(top_srcdir) \
-I$(top_srcdir)/addressbook/backend/ebook \
-I$(top_srcdir)/addressbook/contact-editor \
- -I$(top_srcdir)/widgets/e-text \
- -I$(top_srcdir)/widgets/e-table \
- -I$(top_srcdir)/widgets/e-reflow \
- -I$(top_srcdir)/widgets/e-table \
+ -I$(top_srcdir)/addressbook/gui/merging \
-I$(top_srcdir)/widgets/misc \
$(BONOBO_GNOME_CFLAGS) \
$(EXTRA_GNOME_CFLAGS)
@@ -71,11 +68,13 @@ minicard_test_LDADD = \
$(top_builddir)/e-util/ename/libename.la \
$(top_builddir)/addressbook/contact-editor/libecontacteditor.a \
$(top_builddir)/addressbook/printing/libecontactprint.a \
+ $(top_builddir)/addressbook/gui/merging/libecardmerging.a \
$(top_builddir)/widgets/misc/libemiscwidgets.a \
$(top_builddir)/e-util/libeutil.la \
$(EXTRA_GNOME_LIBS) \
$(BONOBO_GNOME_LIBS) \
- $(GNOME_PRINT_LIBS)
+ $(GNOME_PRINT_LIBS) \
+ libeminicard.a
#reflow_test_SOURCES = \
# test-reflow.c
@@ -123,6 +122,7 @@ minicard_widget_test_LDADD = \
$(top_builddir)/addressbook/printing/libecontactprint.a \
$(top_builddir)/widgets/misc/libemiscwidgets.a \
$(top_builddir)/e-util/libeutil.la \
+ $(top_builddir)/addressbook/gui/merging/libecardmerging.a \
$(EXTRA_GNOME_LIBS) \
$(BONOBO_GNOME_LIBS) \
$(GNOME_PRINT_LIBS)
diff --git a/addressbook/gui/widgets/e-addressbook-table-adapter.c b/addressbook/gui/widgets/e-addressbook-table-adapter.c
index 5ddc8acdfb..9557046afe 100644
--- a/addressbook/gui/widgets/e-addressbook-table-adapter.c
+++ b/addressbook/gui/widgets/e-addressbook-table-adapter.c
@@ -3,6 +3,7 @@
#include <config.h>
#include "e-addressbook-model.h"
#include "e-addressbook-table-adapter.h"
+#include "e-card-merging.h"
#include "e-addressbook-util.h"
#include <gnome-xml/tree.h>
#include <gnome-xml/parser.h>
@@ -169,7 +170,7 @@ addressbook_append_row (ETableModel *etm, ETableModel *source, gint row)
e_card_simple_set(simple, col, val);
}
e_card_simple_sync_card(simple);
- e_book_add_card (e_addressbook_model_get_ebook (priv->model), card, NULL, NULL);
+ e_card_merging_book_add_card (e_addressbook_model_get_ebook (priv->model), card, NULL, NULL);
gtk_object_unref(GTK_OBJECT(simple));
gtk_object_unref(GTK_OBJECT(card));
}
diff --git a/addressbook/gui/widgets/e-addressbook-util.c b/addressbook/gui/widgets/e-addressbook-util.c
index 55d3ce503e..6db628c412 100644
--- a/addressbook/gui/widgets/e-addressbook-util.c
+++ b/addressbook/gui/widgets/e-addressbook-util.c
@@ -26,6 +26,7 @@
#include "e-addressbook-util.h"
#include "e-contact-editor.h"
+#include "e-card-merging.h"
void
e_addressbook_error_dialog (const gchar *msg, EBookStatus status)
@@ -84,7 +85,7 @@ add_card_cb (EContactEditor *ce, ECard *card, gpointer data)
EBook *book;
book = E_BOOK (data);
- e_book_add_card (book, card, card_added_cb, NULL);
+ e_card_merging_book_add_card (book, card, card_added_cb, NULL);
}
/* Callback for the commit_card signal from the contact editor */
diff --git a/addressbook/gui/widgets/e-addressbook-view.c b/addressbook/gui/widgets/e-addressbook-view.c
index 99dc600e94..99672f2ede 100644
--- a/addressbook/gui/widgets/e-addressbook-view.c
+++ b/addressbook/gui/widgets/e-addressbook-view.c
@@ -53,6 +53,7 @@
#include "e-addressbook-reflow-adapter.h"
#include "e-minicard-view-widget.h"
#include "e-contact-save-as.h"
+#include "e-card-merging.h"
#include "e-contact-editor.h"
@@ -1168,7 +1169,7 @@ selection_received (GtkWidget *invisible,
for (l = card_list; l; l = l->next) {
ECard *card = l->data;
- e_book_add_card (view->book, card, NULL /* XXX */, NULL);
+ e_card_merging_book_add_card (view->book, card, NULL /* XXX */, NULL);
}
g_list_foreach (card_list, (GFunc)gtk_object_unref, NULL);
diff --git a/addressbook/gui/widgets/e-minicard-control.c b/addressbook/gui/widgets/e-minicard-control.c
index ab1356d1d5..7802dd0b20 100644
--- a/addressbook/gui/widgets/e-minicard-control.c
+++ b/addressbook/gui/widgets/e-minicard-control.c
@@ -19,6 +19,7 @@
#include "e-minicard-control.h"
#include "e-minicard-widget.h"
+#include "e-card-merging.h"
#if 0
enum {
@@ -225,7 +226,7 @@ static void
book_open_cb (EBook *book, EBookStatus status, gpointer closure)
{
ECard *card = closure;
- e_book_add_card(book, card, NULL, NULL);
+ e_card_merging_book_add_card(book, card, NULL, NULL);
gtk_object_unref(GTK_OBJECT(card));
}
diff --git a/addressbook/gui/widgets/e-minicard-view.c b/addressbook/gui/widgets/e-minicard-view.c
index 66b25401a5..a85656a743 100644
--- a/addressbook/gui/widgets/e-minicard-view.c
+++ b/addressbook/gui/widgets/e-minicard-view.c
@@ -24,7 +24,7 @@
#include "e-minicard-view.h"
-#include "e-contact-editor.h"
+#include "e-addressbook-util.h"
#include <gtk/gtkselection.h>
#include <gtk/gtkdnd.h>