File r890865.diff of Package kdepim4

Subject: kmail: don't force duplicate add to addressbook
From: wstephenson@suse.de
Bug: kde#174332
Patch-upstream: 890865
--- kmail/kmreadermainwin.cpp	(revision 890864)
+++ kmail/kmreadermainwin.cpp	(revision 890865)
@@ -51,6 +51,9 @@
 
 #include "kmreadermainwin.h"
 
+#include <kabc/stdaddressbook.h>
+#include <kpimutils/email.h>
+
 KMReaderMainWin::KMReaderMainWin( bool htmlOverride, bool htmlLoadExtOverride,
                                   char *name )
   : KMail::SecondaryWindow( name ? name : "readerwindow#" ),
@@ -380,16 +383,15 @@ void KMReaderMainWin::updateMessageMenu(
 
 
 //-----------------------------------------------------------------------------
-void KMReaderMainWin::slotMsgPopup(KMMessage &aMsg, const KUrl &aUrl, const QPoint& aPoint)
+void KMReaderMainWin::slotMsgPopup( KMMessage &aMsg, const KUrl &aUrl, const QPoint &aPoint )
 {
-  KMenu * menu = new KMenu;
+  KMenu *menu = new KMenu;
   mUrl = aUrl;
   mMsg = &aMsg;
-  bool urlMenuAdded=false;
+  bool urlMenuAdded = false;
 
-  if (!aUrl.isEmpty())
-  {
-    if (aUrl.protocol() == "mailto") {
+  if ( !aUrl.isEmpty() ) {
+    if ( aUrl.protocol() == "mailto" ) {
       // popup on a mailto URL
       menu->addAction( mReaderWin->mailToComposeAction() );
       if ( mMsg ) {
@@ -397,8 +399,15 @@ void KMReaderMainWin::slotMsgPopup(KMMes
         menu->addAction( mReaderWin->mailToForwardAction() );
         menu->addSeparator();
       }
-      menu->addAction( mReaderWin->addAddrBookAction() );
-      menu->addAction( mReaderWin->openAddrBookAction() );
+      QString email =  KPIMUtils::firstEmailAddress( aUrl.path() );
+      KABC::AddressBook *addressBook = KABC::StdAddressBook::self( true );
+      KABC::Addressee::List addresseeList = addressBook->findByEmail( email );
+
+      if ( addresseeList.count() == 0 ) {
+        menu->addAction( mReaderWin->addAddrBookAction() );
+      } else {
+        menu->addAction( mReaderWin->openAddrBookAction() );
+      }
       menu->addAction( mReaderWin->copyAction() );
     } else {
       // popup on a not-mailto URL
@@ -407,22 +416,22 @@ void KMReaderMainWin::slotMsgPopup(KMMes
       menu->addAction( mReaderWin->urlSaveAsAction() );
       menu->addAction( mReaderWin->copyURLAction() );
     }
-    urlMenuAdded=true;
+    urlMenuAdded = true;
   }
-  if(!mReaderWin->copyText().isEmpty()) {
-    if ( urlMenuAdded )
+  if ( !mReaderWin->copyText().isEmpty() ) {
+    if ( urlMenuAdded ) {
       menu->addSeparator();
+    }
     menu->addAction( mMsgActions->replyMenu() );
     menu->addSeparator();
 
     menu->addAction( mReaderWin->copyAction() );
     menu->addAction( mReaderWin->selectAllAction() );
-  } else if ( !urlMenuAdded )
-  {
+  } else if ( !urlMenuAdded ) {
     // popup somewhere else (i.e., not a URL) on the message
 
-    if (!mMsg) // no message
-    {
+    if (!mMsg) {
+      // no message
       delete menu;
       return;
     }
@@ -452,7 +461,7 @@ void KMReaderMainWin::slotMsgPopup(KMMes
     menu->addAction( mSaveAtmAction );
     menu->addAction( mMsgActions->createTodoAction() );
   }
-  menu->exec(aPoint, 0);
+  menu->exec( aPoint, 0 );
   delete menu;
 }
 
--- kmail/kmmainwidget.cpp	(revision 890864)
+++ kmail/kmmainwidget.cpp	(revision 890865)
@@ -147,6 +147,9 @@ using KMail::TemplateParser;
 #include "managesievescriptsdialog.h"
 #include "customtemplatesmenu.h"
 
+#include <kabc/stdaddressbook.h>
+#include <kpimutils/email.h>
+
 #include "kmmainwidget.moc"
 
 K_GLOBAL_STATIC( KMMainWidget::PtrList, theMainWidgetList )
@@ -2478,24 +2481,30 @@ void KMMainWidget::slotMarkAll()
 //-----------------------------------------------------------------------------
 void KMMainWidget::slotMsgPopup(KMMessage&, const KUrl &aUrl, const QPoint& aPoint)
 {
-  KMenu * menu = new KMenu;
+  KMenu *menu = new KMenu;
   updateMessageMenu();
   mUrlCurrent = aUrl;
 
   bool urlMenuAdded = false;
 
-  if (!aUrl.isEmpty())
-  {
-    if (aUrl.protocol() == "mailto")
-    {
+  if ( !aUrl.isEmpty() ) {
+    if ( aUrl.protocol() == "mailto" ) {
       // popup on a mailto URL
       menu->addAction( mMsgView->mailToComposeAction() );
       menu->addAction( mMsgView->mailToReplyAction() );
       menu->addAction( mMsgView->mailToForwardAction() );
 
       menu->addSeparator();
-      menu->addAction( mMsgView->addAddrBookAction() );
-      menu->addAction( mMsgView->openAddrBookAction() );
+
+      QString email =  KPIMUtils::firstEmailAddress( aUrl.path() );
+      KABC::AddressBook *addressBook = KABC::StdAddressBook::self( true );
+      KABC::Addressee::List addresseeList = addressBook->findByEmail( email );
+
+      if ( addresseeList.count() == 0 ) {
+        menu->addAction( mMsgView->addAddrBookAction() );
+      } else {
+        menu->addAction( mMsgView->openAddrBookAction() );
+      }
       menu->addAction( mMsgView->copyURLAction() );
     } else {
       // popup on a not-mailto URL
@@ -2505,21 +2514,20 @@ void KMMainWidget::slotMsgPopup(KMMessag
       menu->addAction( mMsgView->copyURLAction() );
     }
 
-    urlMenuAdded=true;
-    kDebug( 0 ) <<" URL is:" << aUrl;
+    urlMenuAdded = true;
+    kDebug() <<" URL is:" << aUrl;
   }
 
-
-  if(mMsgView && !mMsgView->copyText().isEmpty()) {
-    if ( urlMenuAdded )
+  if ( mMsgView && !mMsgView->copyText().isEmpty() ) {
+    if ( urlMenuAdded ) {
       menu->addSeparator();
+    }
     menu->addAction( mMsgActions->replyMenu() );
     menu->addSeparator();
 
     menu->addAction( mMsgView->copyAction() );
     menu->addAction( mMsgView->selectAllAction() );
-  } else  if ( !urlMenuAdded )
-  {
+  } else if ( !urlMenuAdded ) {
     // popup somewhere else (i.e., not a URL) on the message
 
     if (!mHeaders->currentMsg()) // no messages
@@ -2532,8 +2540,9 @@ void KMMainWidget::slotMsgPopup(KMMessag
       menu->addAction( mUseAction );
     } else {
 
-      if ( !mFolder->isSent() )
+      if ( !mFolder->isSent() ) {
         menu->addAction( mMsgActions->replyMenu() );
+      }
       menu->addAction( mForwardActionMenu );
     }
     menu->addAction(editAction());
@@ -2548,7 +2557,7 @@ void KMMainWidget::slotMsgPopup(KMMessag
     menu->addSeparator();
 
     menu->addAction( viewSourceAction() );
-    if(mMsgView) {
+    if ( mMsgView ) {
       menu->addAction( mMsgView->toggleFixFontAction() );
     }
     menu->addSeparator();
@@ -2557,16 +2566,17 @@ void KMMainWidget::slotMsgPopup(KMMessag
     menu->addAction( mSaveAttachmentsAction );
 
     menu->addSeparator();
-    if( mFolder->isTrash() )
+    if ( mFolder->isTrash() ) {
       menu->addAction( mDeleteAction );
-    else
+    } else {
       menu->addAction( mTrashAction );
+    }
 
     menu->addSeparator();
     menu->addAction( mMsgActions->createTodoAction() );
   }
   KAcceleratorManager::manage(menu);
-  menu->exec(aPoint, 0);
+  menu->exec( aPoint, 0 );
   delete menu;
 }
 
Index: kmail/kmreadermainwin.cpp
===================================================================
Index: kmail/kmmainwidget.cpp
===================================================================
openSUSE Build Service is sponsored by