[evolution] Bug #635755 - Authenticate books in addressbook importers on open
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Bug #635755 - Authenticate books in addressbook importers on open
- Date: Fri, 3 Dec 2010 18:03:27 +0000 (UTC)
commit 3a6932bd9f251d5faafc5dc0c419e7c80d5afcd0
Author: Milan Crha <mcrha redhat com>
Date: Fri Dec 3 19:01:31 2010 +0100
Bug #635755 - Authenticate books in addressbook importers on open
addressbook/importers/evolution-csv-importer.c | 19 ++++-
addressbook/importers/evolution-ldif-importer.c | 19 ++++-
addressbook/importers/evolution-vcard-importer.c | 95 +++++++++++++--------
3 files changed, 91 insertions(+), 42 deletions(-)
---
diff --git a/addressbook/importers/evolution-csv-importer.c b/addressbook/importers/evolution-csv-importer.c
index 970ada7..9e15a58 100644
--- a/addressbook/importers/evolution-csv-importer.c
+++ b/addressbook/importers/evolution-csv-importer.c
@@ -37,6 +37,7 @@
#include <libebook/e-destination.h>
#include "e-util/e-import.h"
+#include "util/addressbook.h"
#include "evolution-addressbook-importers.h"
@@ -827,6 +828,20 @@ csv_import_done (CSVImporter *gci)
}
static void
+book_loaded_cb (EBook *book, const GError *error, gpointer closure)
+{
+ CSVImporter *gci = closure;
+
+ g_return_if_fail (gci != NULL);
+ g_return_if_fail (gci->book == book);
+
+ if (error)
+ csv_import_done (gci);
+ else
+ gci->idle_id = g_idle_add (csv_import_contacts, gci);
+}
+
+static void
csv_import (EImport *ei, EImportTarget *target, EImportImporter *im)
{
CSVImporter *gci;
@@ -870,9 +885,7 @@ csv_import (EImport *ei, EImportTarget *target, EImportImporter *im)
gci->size = ftell (file);
fseek (file, 0, SEEK_SET);
- e_book_open (gci->book, FALSE, NULL);
-
- gci->idle_id = g_idle_add (csv_import_contacts, gci);
+ addressbook_load (gci->book, book_loaded_cb, gci);
}
static void
diff --git a/addressbook/importers/evolution-ldif-importer.c b/addressbook/importers/evolution-ldif-importer.c
index 15627ba..f5fe14b 100644
--- a/addressbook/importers/evolution-ldif-importer.c
+++ b/addressbook/importers/evolution-ldif-importer.c
@@ -47,6 +47,7 @@
#include <libebook/e-destination.h>
#include "e-util/e-import.h"
+#include "util/addressbook.h"
#include "evolution-addressbook-importers.h"
@@ -621,6 +622,20 @@ ldif_import_done (LDIFImporter *gci)
}
static void
+book_loaded_cb (EBook *book, const GError *error, gpointer closure)
+{
+ LDIFImporter *gci = closure;
+
+ g_return_if_fail (gci != NULL);
+ g_return_if_fail (gci->book == book);
+
+ if (error)
+ ldif_import_done (gci);
+ else
+ gci->idle_id = g_idle_add (ldif_import_contacts, gci);
+}
+
+static void
ldif_import (EImport *ei, EImportTarget *target, EImportImporter *im)
{
LDIFImporter *gci;
@@ -662,9 +677,7 @@ ldif_import (EImport *ei, EImportTarget *target, EImportImporter *im)
(GDestroyNotify) g_free,
(GDestroyNotify) NULL);
- e_book_open (gci->book, FALSE, NULL);
-
- gci->idle_id = g_idle_add (ldif_import_contacts, gci);
+ addressbook_load (gci->book, book_loaded_cb, gci);
}
static void
diff --git a/addressbook/importers/evolution-vcard-importer.c b/addressbook/importers/evolution-vcard-importer.c
index 5cad56a..1610337 100644
--- a/addressbook/importers/evolution-vcard-importer.c
+++ b/addressbook/importers/evolution-vcard-importer.c
@@ -44,9 +44,19 @@
#include "e-util/e-import.h"
#include "e-util/e-datetime-format.h"
#include "misc/e-web-view-preview.h"
+#include "util/addressbook.h"
#include "evolution-addressbook-importers.h"
+enum _VCardEncoding {
+ VCARD_ENCODING_NONE,
+ VCARD_ENCODING_UTF8,
+ VCARD_ENCODING_UTF16,
+ VCARD_ENCODING_LOCALE
+};
+
+typedef enum _VCardEncoding VCardEncoding;
+
typedef struct {
EImport *import;
EImportTarget *target;
@@ -62,6 +72,10 @@ typedef struct {
GList *contactlist;
GList *iterator;
EBook *book;
+
+ /* when opening book */
+ gchar *contents;
+ VCardEncoding encoding;
} VCardImporter;
static void vcard_import_done (VCardImporter *gci);
@@ -320,15 +334,6 @@ utf16_to_utf8 (gunichar2 *utf16)
return g_utf16_to_utf8 (utf16, -1, NULL, NULL, NULL);
}
-enum _VCardEncoding {
- VCARD_ENCODING_NONE,
- VCARD_ENCODING_UTF8,
- VCARD_ENCODING_UTF16,
- VCARD_ENCODING_LOCALE
-};
-
-typedef enum _VCardEncoding VCardEncoding;
-
/* Actually check the contents of this file */
static VCardEncoding
guess_vcard_encoding (const gchar *filename)
@@ -459,6 +464,7 @@ vcard_import_done (VCardImporter *gci)
if (gci->idle_id)
g_source_remove (gci->idle_id);
+ g_free (gci->contents);
g_object_unref (gci->book);
g_list_foreach (gci->contactlist, (GFunc) g_object_unref, NULL);
g_list_free (gci->contactlist);
@@ -469,14 +475,53 @@ vcard_import_done (VCardImporter *gci)
}
static void
+book_loaded_cb (EBook *book, const GError *error, gpointer closure)
+{
+ VCardImporter *gci = closure;
+
+ g_return_if_fail (gci != NULL);
+ g_return_if_fail (gci->book == book);
+
+ if (error) {
+ vcard_import_done (gci);
+ return;
+ }
+
+ if (gci->encoding == VCARD_ENCODING_UTF16) {
+ gchar *tmp;
+
+ gunichar2 *contents_utf16 = (gunichar2*) gci->contents;
+ tmp = utf16_to_utf8 (contents_utf16);
+ g_free (gci->contents);
+ gci->contents = tmp;
+ } else if (gci->encoding == VCARD_ENCODING_LOCALE) {
+ gchar *tmp;
+ tmp = g_locale_to_utf8 (gci->contents, -1, NULL, NULL, NULL);
+ g_free (gci->contents);
+ gci->contents = tmp;
+ }
+
+ gci->contactlist = eab_contact_list_from_string (gci->contents);
+ g_free (gci->contents);
+ gci->contents = NULL;
+ gci->iterator = gci->contactlist;
+ gci->total = g_list_length (gci->contactlist);
+
+ if (gci->iterator)
+ gci->idle_id = g_idle_add (vcard_import_contacts, gci);
+ else
+ vcard_import_done (gci);
+}
+
+static void
vcard_import (EImport *ei, EImportTarget *target, EImportImporter *im)
{
VCardImporter *gci;
- gchar *contents;
- VCardEncoding encoding;
EBook *book;
EImportTargetURI *s = (EImportTargetURI *)target;
gchar *filename;
+ gchar *contents;
+ VCardEncoding encoding;
filename = g_filename_from_uri (s->uri_src, NULL, NULL);
if (filename == NULL) {
@@ -515,32 +560,10 @@ vcard_import (EImport *ei, EImportTarget *target, EImportImporter *im)
gci->import = g_object_ref (ei);
gci->target = target;
gci->book = book;
+ gci->encoding = encoding;
+ gci->contents = contents;
- e_book_open (gci->book, FALSE, NULL);
-
- if (encoding == VCARD_ENCODING_UTF16) {
- gchar *tmp;
-
- gunichar2 *contents_utf16 = (gunichar2*)contents;
- tmp = utf16_to_utf8 (contents_utf16);
- g_free (contents);
- contents = tmp;
- } else if (encoding == VCARD_ENCODING_LOCALE) {
- gchar *tmp;
- tmp = g_locale_to_utf8 (contents, -1, NULL, NULL, NULL);
- g_free (contents);
- contents = tmp;
- }
-
- gci->contactlist = eab_contact_list_from_string (contents);
- g_free (contents);
- gci->iterator = gci->contactlist;
- gci->total = g_list_length (gci->contactlist);
-
- if (gci->iterator)
- gci->idle_id = g_idle_add (vcard_import_contacts, gci);
- else
- vcard_import_done (gci);
+ addressbook_load (book, book_loaded_cb, gci);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]