[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kdepim] /: Add menu to define html format option for specific email (asked by David)
From:       Montel Laurent <montel () kde ! org>
Date:       2013-09-09 19:17:43
Message-ID: E1VJ6xz-00032j-BJ () scm ! kde ! org
[Download RAW message or body]

Git commit 0c73a85796945014766b628e4a674e6f052cdef0 by Montel Laurent.
Committed on 09/09/2013 at 19:16.
Pushed by mlaurent into branch 'master'.

Add menu to define html format option for specific email (asked by David)

M  +3    -0    kmail/kmmainwidget.cpp
M  +3    -1    kmail/kmreadermainwin.cpp
M  +39   -1    kmail/kmreaderwin.cpp
M  +22   -4    kmail/kmreaderwin.h
M  +31   -8    libkdepim/job/addemaildisplayjob.cpp
M  +4    -3    libkdepim/job/addemaildisplayjob.h

http://commits.kde.org/kdepim/0c73a85796945014766b628e4a674e6f052cdef0

diff --git a/kmail/kmmainwidget.cpp b/kmail/kmmainwidget.cpp
index 84ddbbd..b80cc73 100644
--- a/kmail/kmmainwidget.cpp
+++ b/kmail/kmmainwidget.cpp
@@ -2877,6 +2877,9 @@ void KMMainWidget::showMessagePopup(const Akonadi::Item&msg ,const KUrl&url,cons
       } else {
         menu->addAction( mMsgView->addAddrBookAction() );
       }
+      menu->addSeparator();
+      menu->addMenu(mMsgView->viewHtmlOption());
+      menu->addSeparator();
       menu->addAction( mMsgView->copyURLAction() );
       urlMenuAdded = true;
     } else if ( url.protocol() != QLatin1String( "attachment" ) ) {
diff --git a/kmail/kmreadermainwin.cpp b/kmail/kmreadermainwin.cpp
index dfd10b6..9b5af22 100644
--- a/kmail/kmreadermainwin.cpp
+++ b/kmail/kmreadermainwin.cpp
@@ -477,7 +477,9 @@ void KMReaderMainWin::showMessagePopup(const Akonadi::Item&msg ,const KUrl&url,c
       } else {
         menu->addAction( mReaderWin->addAddrBookAction() );
       }
-
+      menu->addSeparator();
+      menu->addMenu(mReaderWin->viewHtmlOption());
+      menu->addSeparator();
       menu->addAction( mReaderWin->copyURLAction() );
       copyAdded = true;
       urlMenuAdded = true;
diff --git a/kmail/kmreaderwin.cpp b/kmail/kmreaderwin.cpp
index 0217f73..21dadcc 100644
--- a/kmail/kmreaderwin.cpp
+++ b/kmail/kmreaderwin.cpp
@@ -31,6 +31,7 @@
 #include <kpimutils/email.h>
 #include <libkdepim/job/addemailaddressjob.h>
 #include <libkdepim/job/openemailaddressjob.h>
+#include <libkdepim/job/addemaildisplayjob.h>
 #include <libkdepim/misc/broadcaststatus.h>
 #include "kmcommands.h"
 #include "mailcommon/mdn/sendmdnhandler.h"
@@ -74,6 +75,7 @@ using MessageComposer::MessageFactory;
 #include <kservice.h>
 #include <KActionCollection>
 #include <KMessageBox>
+#include <KMenu>
 
 #include <QClipboard>
 
@@ -216,6 +218,19 @@ void KMReaderWin::createActions()
   mImageUrlSaveAsAction->setShortcutConfigurable( false );
   connect( mImageUrlSaveAsAction, SIGNAL(triggered(bool)), SLOT(slotSaveImageOnDisk()) );
 
+  // View html options
+  mViewHtmlOptions = new KMenu(i18n("Show HTML Format"));
+  mViewAsHtml = new KAction( i18n("Show HTML format when mail comes from this contact"), \
mViewHtmlOptions); +  mViewAsHtml->setShortcutConfigurable( false );
+  connect( mViewAsHtml, SIGNAL(triggered(bool)), SLOT(slotContactHtmlOptions()));
+  mViewAsHtml->setCheckable(true);
+  mViewHtmlOptions->addAction(mViewAsHtml);
+
+  mLoadExternalReference = new KAction( i18n("Load external reference when mail comes for this \
contact"), mViewHtmlOptions); +  mLoadExternalReference->setShortcutConfigurable( false );
+  connect(mLoadExternalReference, SIGNAL(triggered(bool)), SLOT(slotContactHtmlOptions()));
+  mLoadExternalReference->setCheckable(true);
+  mViewHtmlOptions->addAction(mLoadExternalReference);
 }
 
 void KMReaderWin::setUseFixedFont( bool useFixedFont )
@@ -533,7 +548,6 @@ void KMReaderWin::slotMailtoReply()
   command->start();
 }
 
-
 CSSHelper* KMReaderWin::cssHelper() const
 {
   return mViewer->cssHelper();
@@ -752,6 +766,30 @@ void KMReaderWin::slotPrintComposeResult( KJob *job )
 void KMReaderWin::setContactItem(const Akonadi::Item& contact)
 {
   mSearchedContact = contact;
+  updateHtmlActions();
+}
+
+void KMReaderWin::updateHtmlActions()
+{
+    if (mSearchedContact.isValid()) {
+        mLoadExternalReference->setChecked(false);
+        mViewAsHtml->setChecked(false);
+    } else {
+        //TODO
+    }
+}
+
+void KMReaderWin::slotContactHtmlOptions()
+{
+    const KUrl url = urlClicked();
+    if( url.isEmpty() )
+      return;
+    const QString emailString = KPIMUtils::decodeMailtoUrl( url ).toLower();
+
+    KPIM::AddEmailDiplayJob *job = new KPIM::AddEmailDiplayJob( emailString, mMainWindow, this );
+    job->setRemoteContent(mLoadExternalReference->isChecked());
+    job->setShowAsHTML(mViewAsHtml->isChecked());
+    job->start();
 }
 
 void KMReaderWin::slotEditContact()
diff --git a/kmail/kmreaderwin.h b/kmail/kmreaderwin.h
index a5731fa..c9b6545 100644
--- a/kmail/kmreaderwin.h
+++ b/kmail/kmreaderwin.h
@@ -1,6 +1,7 @@
 /* -*- mode: C++; c-file-style: "gnu" -*-
   This file is part of KMail, the KDE mail client.
   Copyright (c) 1997 Markus Wuebben <markus.wuebben@kde.org>
+  Copyright (c) 2013 Laurent Montel <montel@kde.org>
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -28,6 +29,7 @@
 class KActionCollection;
 class KAction;
 class KToggleAction;
+class KMenu;
 namespace MessageViewer {
   class HeaderStrategy;
   class HeaderStyle;
@@ -149,7 +151,9 @@ public:
   KAction *saveMessageDisplayFormatAction();
   KAction *resetMessageDisplayFormatAction();
 
-  KAction* editContactAction() const { return mEditContactAction; }
+  KAction *editContactAction() const { return mEditContactAction; }
+
+  KMenu *viewHtmlOption() const { return mViewHtmlOptions; }
 
   Akonadi::Item message() const;
 
@@ -199,20 +203,34 @@ public slots:
   void contactStored( const Akonadi::Item &item );
   void slotContactEditorError(const QString &error);
 
-protected:
+  void slotContactHtmlOptions();
 
+protected:
   KUrl urlClicked() const;
   KUrl imageUrlClicked() const;
 
 private:
   void createActions();
+  void updateHtmlActions();
+
 private:
   Akonadi::Item mSearchedContact;
   QWidget *mMainWindow;
   KActionCollection *mActionCollection;
 
-  KAction *mMailToComposeAction, *mMailToReplyAction, *mMailToForwardAction,
-    *mAddAddrBookAction, *mOpenAddrBookAction, *mUrlSaveAsAction, \
*mAddBookmarksAction,*mImageUrlSaveAsAction, *mEditContactAction; +  KAction *mMailToComposeAction;
+  KAction *mMailToReplyAction;
+  KAction *mMailToForwardAction;
+  KAction *mAddAddrBookAction;
+  KAction *mOpenAddrBookAction;
+  KAction *mUrlSaveAsAction;
+  KAction *mAddBookmarksAction;
+  KAction *mImageUrlSaveAsAction;
+  KAction *mEditContactAction;
+  KAction *mViewAsHtml;
+  KAction *mLoadExternalReference;
+
+  KMenu *mViewHtmlOptions;
 
   MessageViewer::Viewer *mViewer;
 
diff --git a/libkdepim/job/addemaildisplayjob.cpp b/libkdepim/job/addemaildisplayjob.cpp
index 69cbfe5..41e21ec 100644
--- a/libkdepim/job/addemaildisplayjob.cpp
+++ b/libkdepim/job/addemaildisplayjob.cpp
@@ -71,6 +71,20 @@ public:
         createContact();
     }
 
+    void modifyContact()
+    {
+        //TODO
+        /*
+        Akonadi::Item item = contact;
+        KABC::Addressee contact = searchJob->contacts()[0];
+        contact.insertCustom( QLatin1String( "KADDRESSBOOK" ), QLatin1String( "MailPreferedFormatting" \
), mShowAsHTML ? QLatin1String("HTML") : QLatin1String("TEXT")  ); +        contact.insertCustom( \
QLatin1String( "KADDRESSBOOK" ), QLatin1String( "MailAllowToRemoteContent" ), mRemoteContent ? \
QLatin1String( "TRUE" ) : QLatin1String( "FALSE" ) ); +        item.setPayload<KABC::Addressee>( contact \
); +        Akonadi::ItemModifyJob *job = new Akonadi::ItemModifyJob( item );
+        q->connect( job, SIGNAL(result(KJob*)), SLOT(slotAddModifyContactDone(KJob*)) );
+        */
+    }
+
     void slotSearchDone( KJob *job )
     {
         if ( job->error() ) {
@@ -220,6 +234,7 @@ public:
     }
 
     AddEmailDiplayJob *q;
+    Akonadi::Item contact;
     bool mShowAsHTML;
     bool mRemoteContent;
     QString mCompleteAddress;
@@ -238,25 +253,33 @@ AddEmailDiplayJob::~AddEmailDiplayJob()
     delete d;
 }
 
-void AddEmailDiplayJob::showAsHTML(bool html)
+void AddEmailDiplayJob::setShowAsHTML(bool html)
 {
     d->mShowAsHTML = html;
 }
 
-void AddEmailDiplayJob::remoteContent(bool b)
+void AddEmailDiplayJob::setRemoteContent(bool b)
 {
     d->mRemoteContent = b;
 }
 
+void AddEmailDiplayJob::setContact(const Akonadi::Item &contact)
+{
+    d->contact = contact;
+}
 
 void AddEmailDiplayJob::start()
 {
-    // first check whether a contact with the same email exists already
-    Akonadi::ContactSearchJob *searchJob = new Akonadi::ContactSearchJob( this );
-    searchJob->setLimit( 1 );
-    searchJob->setQuery( Akonadi::ContactSearchJob::Email, d->mEmail,
-                         Akonadi::ContactSearchJob::ExactMatch );
-    connect( searchJob, SIGNAL(result(KJob*)), SLOT(slotSearchDone(KJob*)) );
+    if (d->contact.isValid()) {
+        d->modifyContact();
+    } else {
+        // first check whether a contact with the same email exists already
+        Akonadi::ContactSearchJob *searchJob = new Akonadi::ContactSearchJob( this );
+        searchJob->setLimit( 1 );
+        searchJob->setQuery( Akonadi::ContactSearchJob::Email, d->mEmail,
+                             Akonadi::ContactSearchJob::ExactMatch );
+        connect( searchJob, SIGNAL(result(KJob*)), SLOT(slotSearchDone(KJob*)) );
+    }
 }
 
 #include "addemaildisplayjob.moc"
diff --git a/libkdepim/job/addemaildisplayjob.h b/libkdepim/job/addemaildisplayjob.h
index 59b6895..8813889 100644
--- a/libkdepim/job/addemaildisplayjob.h
+++ b/libkdepim/job/addemaildisplayjob.h
@@ -35,11 +35,12 @@ class KDEPIM_EXPORT AddEmailDiplayJob : public KJob
   Q_OBJECT
 
   public:
-    AddEmailDiplayJob( const QString &email, QWidget *parentWidget, QObject *parent = 0 );
+    explicit AddEmailDiplayJob( const QString &email, QWidget *parentWidget, QObject *parent = 0 );
 
     ~AddEmailDiplayJob();
-    void showAsHTML(bool html);
-    void remoteContent(bool b);
+    void setShowAsHTML(bool html);
+    void setRemoteContent(bool b);
+    void setContact(const Akonadi::Item &contact);
 
     virtual void start();
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic