From 0d1a17ded6a9149b6734dcecafe282f3699b8a5a Mon Sep 17 00:00:00 2001 From: Andreas Gungl Date: Wed, 7 May 2003 22:07:25 +0000 Subject: [PATCH] Make the vcard import more robust svn path=/trunk/kdepim/; revision=224540 --- kmaddrbook.cpp | 32 ++++++++++++++++++++++++++++++++ kmaddrbook.h | 4 +++- vcardviewer.cpp | 23 +++++++++++++---------- 3 files changed, 48 insertions(+), 11 deletions(-) diff --git a/kmaddrbook.cpp b/kmaddrbook.cpp index 8bf64de63..5adf4b6d5 100644 --- a/kmaddrbook.cpp +++ b/kmaddrbook.cpp @@ -19,6 +19,7 @@ #include #include #include +#include void KabcBridge::addresses(QStringList* result) // includes lists { @@ -273,3 +274,34 @@ void KMAddrBookExternal::addNewAddressee( QWidget* ) // silently to kabc. } +bool KMAddrBookExternal::addVCard( KABC::Addressee addressee, QWidget *parent ) +{ + KABC::AddressBook *ab = KABC::StdAddressBook::self(); + bool inserted = false; + + KABC::Addressee::List addressees = + ab->findByEmail( addressee.preferredEmail() ); + + if ( addressees.isEmpty() ) { + ab->insertAddressee( addressee ); + if ( !KABC::StdAddressBook::save() ) { + KMessageBox::error( parent, i18n("Can't save to addressbook.") ); + inserted = false; + } else { + QString text = i18n("The VCard was added to your addressbook. " + "You can add more information to this " + "entry by opening the addressbook."); + KMessageBox::information( parent, text, QString::null, "addedtokabc" ); + inserted = true; + } + } else { + QString text = i18n("The VCard's primary email address is already in " + "your addressbook. However you may save the VCard " + "into a file and import it into the addressbook " + "manually."); + KMessageBox::information( parent, text ); + inserted = true; + } + + return inserted; +} diff --git a/kmaddrbook.h b/kmaddrbook.h index 05e5db2be..f3eeaa673 100644 --- a/kmaddrbook.h +++ b/kmaddrbook.h @@ -9,6 +9,7 @@ #include #include +#include class KabcBridge { public: @@ -22,10 +23,11 @@ public: static void addEmail( const QString &addr, QWidget *parent ); static void addNewAddressee( QWidget* ); static void openEmail( const QString &addr, QWidget *parent ); - static void launch(QWidget *parent); + static void launch( QWidget *parent ); static bool useKab(); static bool useKAddressbook(); static bool checkForAddressBook(); + static bool addVCard( KABC::Addressee addressee, QWidget *parent ); }; #endif /*KMAddrBook_h*/ diff --git a/vcardviewer.cpp b/vcardviewer.cpp index e88e5f803..19aa2034a 100644 --- a/vcardviewer.cpp +++ b/vcardviewer.cpp @@ -19,8 +19,10 @@ #include #include +#include #include "vcardviewer.h" +#include "kmaddrbook.h" #include "addresseeview.h" using KPIM::AddresseeView; @@ -32,19 +34,22 @@ using namespace KABC; using namespace KMail; VCardViewer::VCardViewer(QWidget *parent, const QString& vCard, const char* name) -:KDialogBase(parent, name, true, i18n("VCard viewer"), User1|Close, Close, +:KDialogBase(parent, name, true, i18n("VCard viewer"), User1|Close, Close, true, KGuiItem(i18n("&Import"))) { - AddresseeView *av = new AddresseeView(this); av->setVScrollBarMode(QScrollView::Auto); setMainWidget(av); bool ok; - VCardConverter vc; - ok = vc.vCardToAddressee(vCard, mAddressee, VCardConverter::v3_0); - if (!ok) - ok = vc.vCardToAddressee(vCard, mAddressee, VCardConverter::v2_1); + VCardConverter vcc; + + // FIXME This is not really a good solution. Would be fine + // if the VCardConverter could handle this internally. + if (vCard.contains("VERSION:3.0")) + ok = vcc.vCardToAddressee(vCard, mAddressee, VCardConverter::v3_0); + else + ok = vcc.vCardToAddressee(vCard, mAddressee, VCardConverter::v2_1); if (ok) av->setAddressee(mAddressee); @@ -62,10 +67,8 @@ VCardViewer::~VCardViewer() void VCardViewer::slotUser1() { - StdAddressBook::self()->insertAddressee(mAddressee); - KMessageBox::information(this, i18n("Successfully added vCard to contacts!"), - i18n("Imported vCard")); - showButton(User1, false); + if (KMAddrBookExternal::addVCard(mAddressee, this)) + showButton(User1, false); } #include "vcardviewer.moc"