summaryrefslogtreecommitdiffstats
path: root/plugins/kmail/bodypartformatter/text_vcard.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/kmail/bodypartformatter/text_vcard.cpp')
-rw-r--r--plugins/kmail/bodypartformatter/text_vcard.cpp167
1 files changed, 167 insertions, 0 deletions
diff --git a/plugins/kmail/bodypartformatter/text_vcard.cpp b/plugins/kmail/bodypartformatter/text_vcard.cpp
new file mode 100644
index 000000000..577560e5c
--- /dev/null
+++ b/plugins/kmail/bodypartformatter/text_vcard.cpp
@@ -0,0 +1,167 @@
+/* -*- mode: C++; c-file-style: "gnu" -*-
+ text_vcard.cpp
+
+ This file is part of KMail, the KDE mail client.
+ Copyright (c) 2004 Till Adam <adam@kde.org>
+
+ KMail is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ KMail is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+ In addition, as a special exception, the copyright holders give
+ permission to link the code of this program with any edition of
+ the Qt library by Trolltech AS, Norway (or with modified versions
+ of Qt that use the same license as Qt), and distribute linked
+ combinations including the two. You must obey the GNU General
+ Public License in all respects for all of the code used other than
+ Qt. If you modify this file, you may extend this exception to
+ your version of the file, but you are not obligated to do so. If
+ you do not wish to do so, delete this exception statement from
+ your version.
+*/
+
+#include <qurl.h>
+
+#include <kapplication.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <kstringhandler.h>
+#include <kglobalsettings.h>
+#include <kiconloader.h>
+
+#include <kaddrbook.h>
+
+#include "interfaces/bodypartformatter.h"
+#include "interfaces/bodypart.h"
+using KMail::Interface::BodyPart;
+#include "interfaces/bodyparturlhandler.h"
+#include "khtmlparthtmlwriter.h"
+#include <kimproxy.h>
+
+#include <kabc/vcardconverter.h>
+#include <kabc/addressee.h>
+using KABC::VCardConverter;
+using KABC::Addressee;
+
+#include "addresseeview.h"
+using KPIM::AddresseeView;
+
+#include <kdepimmacros.h>
+
+namespace {
+
+ class Formatter : public KMail::Interface::BodyPartFormatter {
+ public:
+ Formatter() {
+ // disabled pending resolution of how to share static objects when dlopening libraries
+ //mKIMProxy = ::KIMProxy::instance( kapp->dcopClient() );
+ }
+
+ Result format( BodyPart *bodyPart, KMail::HtmlWriter *writer ) const {
+
+ if ( !writer ) return AsIcon;
+
+ VCardConverter vcc;
+ const QString vCard = bodyPart->asText();
+ if ( vCard.isEmpty() ) return AsIcon;
+ Addressee::List al = vcc.parseVCards( vCard );
+ if ( al.empty() ) return AsIcon;
+
+ writer->queue (
+ "<div align=\"center\"><h2>" +
+ i18n( "Attached business cards" ) +
+ "</h2></div>"
+ );
+
+ QValueListIterator<KABC::Addressee> it = al.begin();
+ int count = 0;
+ for ( ; it != al.end(); ++it ) {
+ KABC::Addressee a = (*it);
+ if ( a.isEmpty() ) return AsIcon;
+
+ QString contact = AddresseeView::vCardAsHTML( a, 0L, AddresseeView::NoLinks, false, AddresseeView::DefaultFields );
+ writer->queue( contact );
+
+ QString addToLinkText = i18n( "[Add this contact to the addressbook]" );
+ QString op = QString::fromLatin1( "addToAddressBook:%1" ).arg( count );
+ writer->queue(
+ "<div align=\"center\"><a href=\"" +
+ bodyPart->makeLink( op ) +
+ "\">" +
+ addToLinkText +
+ "</a></div><br><br>" );
+ count++;
+ }
+
+ return Ok;
+ }
+ private:
+ //::KIMProxy *mKIMProxy;
+};
+
+ class UrlHandler : public KMail::Interface::BodyPartURLHandler {
+ public:
+ bool handleClick( BodyPart * bodyPart, const QString & path,
+ KMail::Callback& ) const {
+
+ const QString vCard = bodyPart->asText();
+ if ( vCard.isEmpty() ) return true;
+ VCardConverter vcc;
+ Addressee::List al = vcc.parseVCards( vCard );
+ int index = path.right( path.length() - path.findRev( ":" ) - 1 ).toInt();
+ if ( index == -1 ) return true;
+ KABC::Addressee a = al[index];
+ if ( a.isEmpty() ) return true;
+ KAddrBookExternal::addVCard( a, 0 );
+ return true;
+ }
+
+ bool handleContextMenuRequest( BodyPart *, const QString &, const QPoint & ) const {
+ return false;
+ }
+
+ QString statusBarMessage( BodyPart *, const QString & ) const {
+ return i18n("Add this contact to the address book.");
+ }
+ };
+
+ class Plugin : public KMail::Interface::BodyPartFormatterPlugin {
+ public:
+ const KMail::Interface::BodyPartFormatter * bodyPartFormatter( int idx ) const {
+ return validIndex( idx ) ? new Formatter() : 0 ;
+ }
+ const char * type( int idx ) const {
+ return validIndex( idx ) ? "text" : 0 ;
+ }
+ const char * subtype( int idx ) const {
+ return idx == 0 ? "x-vcard" : idx == 1 ? "vcard" : 0 ;
+ }
+
+ const KMail::Interface::BodyPartURLHandler * urlHandler( int idx ) const {
+ return validIndex( idx ) ? new UrlHandler() : 0 ;
+ }
+ private:
+ bool validIndex( int idx ) const {
+ return ( idx >= 0 && idx <= 1 );
+ }
+ };
+
+}
+
+extern "C"
+KDE_EXPORT KMail::Interface::BodyPartFormatterPlugin *
+libkmail_bodypartformatter_text_vcard_create_bodypart_formatter_plugin() {
+ KGlobal::locale()->insertCatalogue( "kmail_text_vcard_plugin" );
+ return new Plugin();
+}
+