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