kmail
callback.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "callback.h"
00034 #include "kmkernel.h"
00035 #include "kmmessage.h"
00036 #include <libemailfunctions/email.h>
00037 #include <libkpimidentities/identity.h>
00038 #include <libkpimidentities/identitymanager.h>
00039 #include "kmmainwin.h"
00040 #include "composer.h"
00041 #include "kmreaderwin.h"
00042 #include "secondarywindow.h"
00043
00044 #include <mimelib/enum.h>
00045
00046 #include <kinputdialog.h>
00047 #include <klocale.h>
00048 #include <kdebug.h>
00049
00050 using namespace KMail;
00051
00052
00053 Callback::Callback( KMMessage* msg, KMReaderWin* readerWin )
00054 : mMsg( msg ), mReaderWin( readerWin ), mReceiverSet( false )
00055 {
00056 }
00057
00058 bool Callback::mailICal( const QString& to, const QString iCal,
00059 const QString& subject, bool delMessage ) const
00060 {
00061 kdDebug(5006) << "Mailing message:\n" << iCal << endl;
00062
00063 KMMessage *msg = new KMMessage;
00064 msg->initHeader();
00065 msg->setHeaderField( "Content-Type",
00066 "text/calendar; method=reply; charset=\"utf-8\"" );
00067 msg->setSubject( subject );
00068 msg->setTo( to );
00069 msg->setBody( iCal.utf8() );
00070 msg->setFrom( receiver() );
00071
00072 if ( delMessage )
00073
00074
00075 msg->link( mMsg, KMMsgStatusDeleted );
00076
00077
00078
00079 KConfigGroup options( KMKernel::config(), "Groupware" );
00080 if( !options.readBoolEntry( "LegacyMangleFromToHeaders", true ) ) {
00081
00082 const KPIM::Identity& identity =
00083 kmkernel->identityManager()->identityForAddress( receiver() );
00084 if( identity != KPIM::Identity::null() )
00085
00086 msg->setFrom( identity.fullEmailAddr() );
00087 msg->setHeaderField("X-KMail-Identity", QString::number( identity.uoid() ));
00088
00089 msg->setBcc( "" );
00090 }
00091
00092 KMail::Composer * cWin = KMail::makeComposer();
00093 cWin->setMsg( msg, false );
00094
00095 cWin->slotWordWrapToggled( false );
00096 cWin->setSigningAndEncryptionDisabled( true );
00097
00098 if ( options.readBoolEntry( "AutomaticSending", true ) ) {
00099 cWin->setAutoDeleteWindow( true );
00100 cWin->slotSendNow();
00101 } else {
00102 cWin->show();
00103 }
00104
00105 return true;
00106 }
00107
00108 QString Callback::receiver() const
00109 {
00110 if ( mReceiverSet )
00111
00112 return mReceiver;
00113
00114 mReceiverSet = true;
00115
00116 QStringList addrs = KPIM::splitEmailAddrList( mMsg->to() );
00117 int found = 0;
00118 for( QStringList::Iterator it = addrs.begin(); it != addrs.end(); ++it ) {
00119 if( kmkernel->identityManager()->identityForAddress( *it ) !=
00120 KPIM::Identity::null() ) {
00121
00122 ++found;
00123 mReceiver = *it;
00124 }
00125 }
00126 QStringList ccaddrs = KPIM::splitEmailAddrList( mMsg->cc() );
00127 for( QStringList::Iterator it = ccaddrs.begin(); it != ccaddrs.end(); ++it ) {
00128 if( kmkernel->identityManager()->identityForAddress( *it ) !=
00129 KPIM::Identity::null() ) {
00130
00131 ++found;
00132 mReceiver = *it;
00133 }
00134 }
00135 if( found != 1 ) {
00136 bool ok;
00137 QString selectMessage;
00138 if (found == 0) {
00139 selectMessage = i18n("<qt>None of your identities match the "
00140 "receiver of this message,<br>please "
00141 "choose which of the following addresses "
00142 "is yours, if any:");
00143 } else {
00144 selectMessage = i18n("<qt>Several of your identities match the "
00145 "receiver of this message,<br>please "
00146 "choose which of the following addresses "
00147 "is yours:");
00148 }
00149
00150 mReceiver =
00151 KInputDialog::getItem( i18n( "Select Address" ),
00152 selectMessage,
00153 addrs+ccaddrs, 0, FALSE, &ok, kmkernel->mainWin() );
00154 if( !ok )
00155 mReceiver = QString::null;
00156 }
00157
00158 return mReceiver;
00159 }
00160
00161 void Callback::closeIfSecondaryWindow() const
00162 {
00163 KMail::SecondaryWindow *window = dynamic_cast<KMail::SecondaryWindow*>( mReaderWin->mainWindow() );
00164 if ( window )
00165 window->close();
00166 }
|