00001
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
#ifdef HAVE_CONFIG_H
00031
#include <config.h>
00032
#endif
00033
00034
#include "maildirjob.h"
00035
00036
#include "kmfoldermaildir.h"
00037
00038
#include <kapplication.h>
00039
#include <kdebug.h>
00040
00041
#include <qtimer.h>
00042
#include <qdatetime.h>
00043
00044
namespace KMail {
00045
00046
00047
00048 MaildirJob::MaildirJob( KMMessage *msg, JobType jt ,
KMFolder *folder )
00049 : FolderJob( msg, jt, folder ), mParentFolder( 0 )
00050 {
00051 }
00052
00053
00054 MaildirJob::MaildirJob( QPtrList<KMMessage>& msgList,
const QString& sets,
00055 JobType jt ,
KMFolder *folder )
00056 : FolderJob( msgList, sets, jt, folder ), mParentFolder( 0 )
00057 {
00058 }
00059
00060
00061 MaildirJob::~MaildirJob()
00062 {
00063 }
00064
00065
00066
void MaildirJob::setParentFolder(
const KMFolderMaildir* parent )
00067 {
00068 mParentFolder = const_cast<KMFolderMaildir*>( parent );
00069 }
00070
00071
00072
00073
00074
void MaildirJob::execute()
00075 {
00076 QTimer::singleShot( 0,
this, SLOT(startJob()) );
00077 }
00078
00079
00080
void MaildirJob::startJob()
00081 {
00082
switch( mType ) {
00083
case tGetMessage:
00084 {
00085 KMMessage* msg = mMsgList.first();
00086
if ( msg ) {
00087 msg->setComplete(
true );
00088 emit messageRetrieved( msg );
00089 }
00090 }
00091
break;
00092
case tDeleteMessage:
00093 {
00094 static_cast<KMFolder*>(mParentFolder)->removeMsg( mMsgList );
00095 }
00096
break;
00097
case tPutMessage:
00098 {
00099 mParentFolder->addMsg( mMsgList.first() );
00100 emit messageStored( mMsgList.first() );
00101 }
00102
break;
00103
case tExpireMessages:
00104 {
00105 expireMessages();
00106 }
00107
break;
00108
case tCopyMessage:
00109
case tCreateFolder:
00110
case tGetFolder:
00111
case tListDirectory:
00112 kdDebug(5006)<<k_funcinfo<<
"### Serious problem! "<<endl;
00113
break;
00114
default:
00115
break;
00116 }
00117
00118
00119 deleteLater();
00120 }
00121
00122
void
00123 MaildirJob::expireMessages()
00124 {
00125
int days = 0;
00126
int maxUnreadTime = 0;
00127
int maxReadTime = 0;
00128
const KMMsgBase *mb = 0;
00129 QValueList<int> rmvMsgList;
00130
int i = 0;
00131 time_t msgTime, maxTime = 0;
00132 QTime t;
00133
00134 days = mParentFolder->daysToExpire( mParentFolder->getUnreadExpireAge(),
00135 mParentFolder->getUnreadExpireUnits() );
00136
if (days > 0) {
00137 kdDebug(5006) <<
"deleting unread older than "<< days <<
" days" << endl;
00138 maxUnreadTime = time(0) - days * 3600 * 24;
00139 }
00140
00141 days = mParentFolder->daysToExpire( mParentFolder->getReadExpireAge(),
00142 mParentFolder->getReadExpireUnits() );
00143
if (days > 0) {
00144 kdDebug(5006) <<
"deleting read older than "<< days <<
" days" << endl;
00145 maxReadTime = time(0) - days * 3600 * 24;
00146 }
00147
00148
if ((maxUnreadTime == 0) && (maxReadTime == 0)) {
00149
return;
00150 }
00151
00152 t.start();
00153 mParentFolder->open();
00154
for( i=mParentFolder->count()-1; i>=0; i-- ) {
00155 mb = mParentFolder->getMsgBase(i);
00156
if (mb == 0) {
00157
continue;
00158 }
00159 msgTime = mb->date();
00160
00161
if (mb->isUnread()) {
00162 maxTime = maxUnreadTime;
00163 }
else {
00164 maxTime = maxReadTime;
00165 }
00166
00167
if (msgTime < maxTime) {
00168 mParentFolder->removeMsg( i );
00169 }
00170
if ( t.elapsed() >= 150 ) {
00171 kapp->processEvents();
00172 t.restart();
00173 }
00174 }
00175 mParentFolder->close();
00176
00177
return;
00178 }
00179
00180 }
00181
00182
#include "maildirjob.moc"