aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui/contact-list-editor
diff options
context:
space:
mode:
authorChris Toshok <toshok@ximian.com>2004-04-10 01:29:51 +0800
committerChris Toshok <toshok@src.gnome.org>2004-04-10 01:29:51 +0800
commite68394b0d08bd873b39829da8a54ba08177b76e8 (patch)
tree2ad52a40cb1cd9912e883fe96a9055ed8faaa14a /addressbook/gui/contact-list-editor
parent97634e4d349969c7309b96cdbd4466d743ee9afb (diff)
downloadgsoc2013-evolution-e68394b0d08bd873b39829da8a54ba08177b76e8.tar.gz
gsoc2013-evolution-e68394b0d08bd873b39829da8a54ba08177b76e8.tar.zst
gsoc2013-evolution-e68394b0d08bd873b39829da8a54ba08177b76e8.zip
use the new e_destination_export_to_vcard_attribute call to build up the
2004-04-09 Chris Toshok <toshok@ximian.com> * importers/evolution-ldif-importer.c (resolve_list_card): use the new e_destination_export_to_vcard_attribute call to build up the attributes. * importers/evolution-vcard-importer.c (process_item_fn): if we're importing a vcard that we wrote out previously containing xml in the EMAIL attributes, DTRT and strip it out and use e_destination_export_to_vcard_attribute to build up the proper attribute. * util/Makefile.am (libeabutil_la_SOURCES): remove eab-destination.[ch] and add e-destination.[ch]. * printing/e-contact-print.c (e_contact_print_contact): we don't have to worry about the "<?xml..." EMAIL fields anymore. * gui/widgets/eab-gui-util.c (eab_send_contact_list): just use the value as the address (since that's what it is) in the list case. * gui/widgets/eab-contact-display.c (render_contact_list): remove the EABDestination stuff from here. (eab_contact_display_render_compact): same. * gui/widgets/e-minicard.c (activiate_editor): fix warnings - use EAB_EDITOR instead of G_OBJECT. (add_field): we don't have to worry about the "<?xml..." EMAIL fields anymore. (remodel): same. * gui/widgets/e-addressbook-treeview-adapter.c (adapter_get_value): we don't have to worry about the "<?xml..." EMAIL fields anymore. * gui/widgets/e-addressbook-table-adapter.c (addressbook_value_at): we don't have to worry about the "<?xml..." EMAIL fields anymore. * gui/contact-list-editor/e-contact-list-model.c (contact_list_value_at): eab->e. (contact_list_model_dispose): we're not a GtkObject, we're a GObject. rename _destroy to _dispose, and chain up to the parent class's ::dispose. (e_contact_list_model_class_init): GtkObject -> GObject, and destroy -> dispose. (e_contact_list_model_init): GtkObject -> GObject, and EAB -> E. (e_contact_list_model_add_destination): EAB -> E. (e_contact_list_model_add_email): same. (e_contact_list_model_add_contact): same. (e_contact_list_model_get_destination): same. * gui/contact-list-editor/e-contact-list-editor.c (table_drag_data_received_cb): add email num arg to e_contact_list_model_add_contact. (extract_info): fill in the vcard attributes instead of just generating xml. (fill_in_info): extract the values from the vcard attributes. * gui/component/select-names/e-select-names-text-model.c (e_select_names_text_model_insert_length): eab->e, and don't sometimes copy, sometimes ::new. always ::new. (e_select_names_text_model_delete): same. (e_select_names_text_model_obj_count): same. (nth_obj_index): same. * gui/component/select-names/e-select-names-table-model.c (fill_in_info): eab -> e. * gui/component/select-names/e-select-names-popup.c (make_contact_editor_cb): eab -> e. (change_email_num_cb): same. (toggle_html_mail_cb): same. (populate_popup_contact): same, and remove code that checks for <?xml, then imports the EDestination. (quick_add_cb): eab -> e. (populate_popup_nocontact): same. (e_select_names_populate_popup): same. * gui/component/select-names/e-select-names-model.h: eab -> e, and remove prototypes for nuked functions. * gui/component/select-names/e-select-names-model.c (destination_changed_proxy, send_changed, connect_destination, disconnect_destination): nuke. (e_select_names_model_duplicate): EAB -> E. (e_select_names_model_get_textification): same. (e_select_names_model_get_address_text): same. (e_select_names_model_get_destination): same. (e_select_names_model_export_destinationv): same. (send_changed): same. (e_select_names_model_import_destinationv): same. (e_select_names_model_get_contact): same. (e_select_names_model_contains): same. (e_select_names_model_insert): same, and remove call to connect_destination. (e_select_names_model_append): same. (e_select_names_model_replace): same, and remove call to disconnect/connect_destination. (e_select_names_model_delete): same. (delete_all_iter): nuke. (e_select_names_model_delete_all): use g_object_unref for the foreach call. (e_select_names_model_merge): EAB -> E. (e_select_names_model_name_pos): same. (e_select_names_model_name_pos): same. (e_select_names_model_load_all_contacts): nuke. (e_select_names_model_cancel_all_contact_load): nuke. * gui/component/select-names/e-select-names-manager.c (clean_cb, focus_in_cb, focus_out_cb, completion_popup_cb): nuke. (completion_handler): EAB -> E, and the signals are gone. * gui/component/select-names/e-select-names-completion.c: in general, s/eab_dest/e_dest and s/EABDest/EDest. (e_select_names_completion_got_book_view_cb): move the e_book_view_start to below the assignment of sequence_complete_received, just to put my mind at ease. (e_select_names_completion_stop_query): un-#if notyet the call to e_book_cancel. (e_select_names_completion_start_query): free the waiting_query before assigning to it. * gui/component/select-names/e-select-names-bonobo.c (entry_set_property_fn): remove calls to e_select_names_model_load_all_contacts, since that function is dead. * gui/component/addressbook-migrate.c (setup_progress_dialog): take the label to display to the user as an arg. (migrate_contact_lists_for_local_folders): loop over all contacts in all local addressbooks looking for ones that have <?xml in their EMAIL attributes. for the ones we find, call e_destination_export_to_vcard_attribute to build up the proper attribute. (addressbook_migrate): add in a clause for all versions under 1.5.7 to convert contact lists. also, move the unrefs of the sources/groups to outside the if, as they're created outside it. * gui/component/Makefile.am (INCLUDES): remove the addressbook/backend/ dirs, since libebook isn't there anymore (nothing is, actually). Add addressbook/util/. svn path=/trunk/; revision=25390
Diffstat (limited to 'addressbook/gui/contact-list-editor')
-rw-r--r--addressbook/gui/contact-list-editor/e-contact-list-editor.c83
-rw-r--r--addressbook/gui/contact-list-editor/e-contact-list-model.c39
2 files changed, 81 insertions, 41 deletions
diff --git a/addressbook/gui/contact-list-editor/e-contact-list-editor.c b/addressbook/gui/contact-list-editor/e-contact-list-editor.c
index 0c762ff982..22dccfcb67 100644
--- a/addressbook/gui/contact-list-editor/e-contact-list-editor.c
+++ b/addressbook/gui/contact-list-editor/e-contact-list-editor.c
@@ -23,9 +23,12 @@
#include "e-contact-list-editor.h"
#include <string.h>
-#include <glib.h>
+
#include <libgnome/gnome-i18n.h>
#include <libgnomeui/gnome-window-icon.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtktogglebutton.h>
+
#include <bonobo/bonobo-ui-container.h>
#include <bonobo/bonobo-ui-util.h>
#include <bonobo/bonobo-window.h>
@@ -868,7 +871,8 @@ table_drag_data_received_cb (ETable *table, int row, int col,
if (!e_contact_get (contact, E_CONTACT_IS_LIST)) {
e_contact_list_model_add_contact (E_CONTACT_LIST_MODEL (editor->model),
- contact);
+ contact,
+ 0 /* Hard-wired for default e-mail */);
changed = TRUE;
}
@@ -916,7 +920,6 @@ extract_info(EContactListEditor *editor)
EContact *contact = editor->contact;
if (contact) {
int i;
- GList *email_list;
char *image_data;
gsize image_data_len;
char *string = gtk_editable_get_chars(GTK_EDITABLE (editor->list_name_entry), 0, -1);
@@ -932,19 +935,19 @@ extract_info(EContactListEditor *editor)
e_contact_set (contact, E_CONTACT_LIST_SHOW_ADDRESSES,
GINT_TO_POINTER (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(editor->visible_addrs_checkbutton))));
- email_list = NULL;
+ e_vcard_remove_attributes (E_VCARD (contact), "", EVC_EMAIL);
+
/* then refill it from the contact list model */
for (i = 0; i < e_table_model_row_count (editor->model); i ++) {
- const EABDestination *dest = e_contact_list_model_get_destination (E_CONTACT_LIST_MODEL (editor->model), i);
- gchar *dest_xml = eab_destination_export (dest);
- if (dest_xml)
- email_list = g_list_append (email_list, dest_xml);
- }
+ const EDestination *dest = e_contact_list_model_get_destination (E_CONTACT_LIST_MODEL (editor->model), i);
+ EVCardAttribute *attr;
- e_contact_set (contact, E_CONTACT_EMAIL, email_list);
+ attr = e_vcard_attribute_new (NULL, EVC_EMAIL);
- g_list_foreach (email_list, (GFunc) g_free, NULL);
- g_list_free (email_list);
+ e_vcard_add_attribute (E_VCARD (contact), attr);
+
+ e_destination_export_to_vcard_attribute (dest, attr);
+ }
if (editor->image_set
&& e_image_chooser_get_image_data (E_IMAGE_CHOOSER (editor->list_image),
@@ -976,7 +979,7 @@ fill_in_info(EContactListEditor *editor)
GList *iter;
file_as = e_contact_get_const (editor->contact, E_CONTACT_FILE_AS);
- email_list = e_contact_get (editor->contact, E_CONTACT_EMAIL);
+ email_list = e_contact_get_attributes (editor->contact, E_CONTACT_EMAIL);
is_evolution_list = GPOINTER_TO_INT (e_contact_get (editor->contact, E_CONTACT_IS_LIST));
show_addresses = GPOINTER_TO_INT (e_contact_get (editor->contact, E_CONTACT_LIST_SHOW_ADDRESSES));
@@ -992,18 +995,54 @@ fill_in_info(EContactListEditor *editor)
e_contact_list_model_remove_all (E_CONTACT_LIST_MODEL (editor->model));
for (iter = email_list; iter; iter = iter->next) {
- char *dest_xml = iter->data;
- EABDestination *dest;
-
- /* g_message ("incoming xml: [%s]", dest_xml); */
- dest = eab_destination_import (dest_xml);
-
- if (dest != NULL) {
- e_contact_list_model_add_destination (E_CONTACT_LIST_MODEL (editor->model), dest);
+ EVCardAttribute *attr = iter->data;
+ GList *p;
+ EDestination *list_dest = e_destination_new ();
+ char *contact_uid = NULL;
+ char *email = NULL;
+ char *name = NULL;
+ int email_num = -1;
+ gboolean html_pref = FALSE;
+
+ for (p = e_vcard_attribute_get_params (attr); p; p = p->next) {
+ EVCardAttributeParam *param = p->data;
+ const char *param_name = e_vcard_attribute_param_get_name (param);
+ if (!g_ascii_strcasecmp (param_name,
+ EVC_X_DEST_CONTACT_UID)) {
+ GList *v = e_vcard_attribute_param_get_values (param);
+ contact_uid = v ? v->data : NULL;
+ }
+ else if (!g_ascii_strcasecmp (param_name,
+ EVC_X_DEST_EMAIL_NUM)) {
+ GList *v = e_vcard_attribute_param_get_values (param);
+ email_num = v ? atoi (v->data) : -1;
+ }
+ else if (!g_ascii_strcasecmp (param_name,
+ EVC_X_DEST_NAME)) {
+ GList *v = e_vcard_attribute_param_get_values (param);
+ name = v ? v->data : NULL;
+ }
+ else if (!g_ascii_strcasecmp (param_name,
+ EVC_X_DEST_EMAIL)) {
+ GList *v = e_vcard_attribute_param_get_values (param);
+ email = v ? v->data : NULL;
+ }
+ else if (!g_ascii_strcasecmp (param_name,
+ EVC_X_DEST_HTML_MAIL)) {
+ GList *v = e_vcard_attribute_param_get_values (param);
+ html_pref = v ? !g_ascii_strcasecmp (v->data, "true") : FALSE;
+ }
}
+
+ if (contact_uid) e_destination_set_contact_uid (list_dest, contact_uid, email_num);
+ if (name) e_destination_set_name (list_dest, name);
+ if (email) e_destination_set_email (list_dest, email);
+ e_destination_set_html_mail_pref (list_dest, html_pref);
+
+ e_contact_list_model_add_destination (E_CONTACT_LIST_MODEL (editor->model), list_dest);
}
- g_list_foreach (email_list, (GFunc) g_free, NULL);
+ g_list_foreach (email_list, (GFunc) e_vcard_attribute_free, NULL);
g_list_free (email_list);
photo = e_contact_get (editor->contact, E_CONTACT_LOGO);
diff --git a/addressbook/gui/contact-list-editor/e-contact-list-model.c b/addressbook/gui/contact-list-editor/e-contact-list-model.c
index c7fd626372..8a22da19db 100644
--- a/addressbook/gui/contact-list-editor/e-contact-list-model.c
+++ b/addressbook/gui/contact-list-editor/e-contact-list-model.c
@@ -30,7 +30,7 @@ contact_list_value_at (ETableModel *etc, int col, int row)
{
EContactListModel *model = E_CONTACT_LIST_MODEL (etc);
- return (void *) eab_destination_get_textrep (model->data[row], TRUE);
+ return (void *) e_destination_get_textrep (model->data[row], TRUE);
}
/* This function sets the value at a particular point in our ETableModel. */
@@ -80,7 +80,7 @@ contact_list_value_to_string (ETableModel *etc, int col, const void *value)
}
static void
-contact_list_model_destroy (GtkObject *o)
+contact_list_model_dispose (GObject *o)
{
EContactListModel *model = E_CONTACT_LIST_MODEL (o);
int i;
@@ -96,17 +96,17 @@ contact_list_model_destroy (GtkObject *o)
model->data_count = 0;
model->data_alloc = 0;
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (o);
+ (* G_OBJECT_CLASS (parent_class)->dispose) (o);
}
static void
-e_contact_list_model_class_init (GtkObjectClass *object_class)
+e_contact_list_model_class_init (GObjectClass *object_class)
{
ETableModelClass *model_class = (ETableModelClass *) object_class;
parent_class = g_type_class_ref (PARENT_TYPE);
- object_class->destroy = contact_list_model_destroy;
+ object_class->dispose = contact_list_model_dispose;
model_class->column_count = contact_list_col_count;
model_class->row_count = contact_list_row_count;
@@ -121,13 +121,13 @@ e_contact_list_model_class_init (GtkObjectClass *object_class)
}
static void
-e_contact_list_model_init (GtkObject *object)
+e_contact_list_model_init (GObject *object)
{
EContactListModel *model = E_CONTACT_LIST_MODEL(object);
model->data_alloc = 10;
model->data_count = 0;
- model->data = g_new (EABDestination*, model->data_alloc);
+ model->data = g_new (EDestination*, model->data_alloc);
}
GType
@@ -172,16 +172,16 @@ e_contact_list_model_new ()
}
void
-e_contact_list_model_add_destination (EContactListModel *model, EABDestination *dest)
+e_contact_list_model_add_destination (EContactListModel *model, EDestination *dest)
{
g_return_if_fail (E_IS_CONTACT_LIST_MODEL (model));
- g_return_if_fail (EAB_IS_DESTINATION (dest));
+ g_return_if_fail (E_IS_DESTINATION (dest));
e_table_model_pre_change (E_TABLE_MODEL (model));
if (model->data_count + 1 >= model->data_alloc) {
model->data_alloc *= 2;
- model->data = g_renew (EABDestination*, model->data, model->data_alloc);
+ model->data = g_renew (EDestination*, model->data, model->data_alloc);
}
model->data[model->data_count ++] = dest;
@@ -194,28 +194,29 @@ void
e_contact_list_model_add_email (EContactListModel *model,
const char *email)
{
- EABDestination *new_dest;
+ EDestination *new_dest;
g_return_if_fail (E_IS_CONTACT_LIST_MODEL (model));
g_return_if_fail (email != NULL);
- new_dest = eab_destination_new ();
- eab_destination_set_email (new_dest, email);
+ new_dest = e_destination_new ();
+ e_destination_set_email (new_dest, email);
e_contact_list_model_add_destination (model, new_dest);
}
void
e_contact_list_model_add_contact (EContactListModel *model,
- EContact *contact)
+ EContact *contact,
+ int email_num)
{
- EABDestination *new_dest;
+ EDestination *new_dest;
g_return_if_fail (E_IS_CONTACT_LIST_MODEL (model));
g_return_if_fail (E_IS_CONTACT (contact));
- new_dest = eab_destination_new ();
- eab_destination_set_contact (new_dest, contact, 0); /* Hard-wired for default e-mail */
+ new_dest = e_destination_new ();
+ e_destination_set_contact (new_dest, contact, email_num);
e_contact_list_model_add_destination (model, new_dest);
}
@@ -229,7 +230,7 @@ e_contact_list_model_remove_row (EContactListModel *model, int row)
e_table_model_pre_change (E_TABLE_MODEL (model));
g_object_unref (model->data[row]);
- memmove (model->data + row, model->data + row + 1, sizeof (EABDestination*) * (model->data_count - row - 1));
+ memmove (model->data + row, model->data + row + 1, sizeof (EDestination*) * (model->data_count - row - 1));
model->data_count --;
e_table_model_row_deleted (E_TABLE_MODEL (model), row);
@@ -255,7 +256,7 @@ e_contact_list_model_remove_all (EContactListModel *model)
}
-const EABDestination *
+const EDestination *
e_contact_list_model_get_destination (EContactListModel *model, int row)
{
g_return_val_if_fail (E_IS_CONTACT_LIST_MODEL (model), NULL);