20 #include "messagequeuejob.h"
22 #include "transport.h"
23 #include "transportattribute.h"
24 #include "transportmanager.h"
27 #include <KLocalizedString>
29 #include <akonadi/collection.h>
30 #include <akonadi/item.h>
31 #include <akonadi/itemcreatejob.h>
32 #include <akonadi/kmime/addressattribute.h>
33 #include <akonadi/kmime/messageflags.h>
34 #include <akonadi/kmime/specialmailcollections.h>
35 #include <akonadi/kmime/specialmailcollectionsrequestjob.h>
37 using namespace Akonadi;
38 using namespace KMime;
39 using namespace MailTransport;
44 class MailTransport::MessageQueueJob::Private
60 AddressAttribute addressAttribute;
70 void outboxRequestResult( KJob *job );
74 bool MessageQueueJob::Private::validate()
77 q->setError( UserDefinedError );
78 q->setErrorText( i18n(
"Empty message." ) );
83 if( addressAttribute.to().count() + addressAttribute.cc().count() +
84 addressAttribute.bcc().count() == 0 ) {
85 q->setError( UserDefinedError );
86 q->setErrorText( i18n(
"Message has no recipients." ) );
91 const int transport = transportAttribute.transportId();
92 if( TransportManager::self()->transportById( transport,
false ) == 0 ) {
93 q->setError( UserDefinedError );
94 q->setErrorText( i18n(
"Message has invalid transport." ) );
99 if( sentBehaviourAttribute.sentBehaviour() == SentBehaviourAttribute::MoveToCollection &&
100 !( sentBehaviourAttribute.moveToCollection().isValid() ) ) {
101 q->setError( UserDefinedError );
102 q->setErrorText( i18n(
"Message has invalid sent-mail folder." ) );
105 }
else if( sentBehaviourAttribute.sentBehaviour() ==
106 SentBehaviourAttribute::MoveToDefaultSentCollection ) {
113 void MessageQueueJob::Private::outboxRequestResult( KJob *job )
115 Q_ASSERT( !started );
119 kError() <<
"Failed to get the Outbox folder:" << job->error() << job->errorString();
120 q->setError( job->error() );
130 SpecialMailCollectionsRequestJob *requestJob =
131 qobject_cast<SpecialMailCollectionsRequestJob*>( job );
138 item.setMimeType( QLatin1String(
"message/rfc822" ) );
139 item.setPayload<Message::Ptr>( message );
142 item.addAttribute( addressAttribute.clone() );
143 item.addAttribute( dispatchModeAttribute.clone() );
144 item.addAttribute( sentBehaviourAttribute.clone() );
145 item.addAttribute( sentActionAttribute.clone() );
146 item.addAttribute( transportAttribute.clone() );
149 if ( KMime::isSigned( message.get() ) )
150 item.setFlag( Akonadi::MessageFlags::Signed );
151 if ( KMime::isEncrypted( message.get() ) )
152 item.setFlag( Akonadi::MessageFlags::Encrypted );
153 if ( KMime::isInvitation( message.get() ) )
154 item.setFlag( Akonadi::MessageFlags::HasInvitation );
155 if ( KMime::hasAttachment( message.get() ) )
156 item.setFlag( Akonadi::MessageFlags::HasAttachment );
160 item.setFlag( Akonadi::MessageFlags::Queued );
163 const Collection collection = requestJob->collection();
164 Q_ASSERT( collection.isValid() );
165 ItemCreateJob *cjob =
new ItemCreateJob( item, collection );
166 q->addSubjob( cjob );
169 MessageQueueJob::MessageQueueJob( QObject *parent )
170 : KCompositeJob( parent ), d( new Private( this ) )
186 return d->dispatchModeAttribute;
191 return d->addressAttribute;
196 return d->transportAttribute;
201 return d->sentBehaviourAttribute;
206 return d->sentActionAttribute;
216 SpecialMailCollectionsRequestJob *rjob =
new SpecialMailCollectionsRequestJob(
this );
217 rjob->requestDefaultCollection( SpecialMailCollections::Outbox );
218 connect( rjob, SIGNAL(result(KJob*)),
this, SLOT(outboxRequestResult(KJob*)) );
232 #include "messagequeuejob.moc"