[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-pim
Subject: [Kde-pim] Testers wanted for 'Pop leave on server options' patch
From: Rich Birch <ringo () albumsnaps ! com>
Date: 2005-04-14 13:38:10
Message-ID: 425E7242.3050105 () albumsnaps ! com
[Download RAW message or body]
Hi
A call for people to test this patch that implements the pop options;
Leave messages on server for n days
Leave only x messages on server
Leave only y MBs on server
Thanks
Rich
["popLeaveOnServerOptions2.patch" (text/plain)]
Index: kmail/accountdialog.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/accountdialog.cpp,v
retrieving revision 1.162
diff -u -p -u -p -r1.162 accountdialog.cpp
--- kmail/accountdialog.cpp 2 Apr 2005 02:48:44 -0000 1.162
+++ kmail/accountdialog.cpp 11 Apr 2005 16:41:26 -0000
@@ -621,22 +621,42 @@ void AccountDialog::makePopAccountPage()
connect( mPop.leaveOnServerCheck, SIGNAL( clicked() ),
this, SLOT( slotLeaveOnServerClicked() ) );
grid->addMultiCellWidget( mPop.leaveOnServerCheck, 6, 6, 0, 1 );
- mPop.deleteAfterDaysCheck =
- new QCheckBox( i18n("Delete messages over a certain age"), page1 );
- grid->addMultiCellWidget( mPop.deleteAfterDaysCheck, 7, 7, 0, 1 );
- connect( mPop.deleteAfterDaysCheck, SIGNAL( toggled(bool) ),
- this, SLOT( slotEnableDeleteAfterDays(bool)) );
- mPop.deleteAfterDaysLabel = new QLabel( i18n("Delete age:"), page1 );
- grid->addWidget( mPop.deleteAfterDaysLabel, 8, 0 );
- mPop.deleteAfterDaysSpin = new KIntNumInput( page1 );
- mPop.deleteAfterDaysSpin->setRange( 1, 365, 1, false );
- mPop.deleteAfterDaysSpin->setSuffix( i18n(" days") );
- mPop.deleteAfterDaysSpin->setValue( 1 );
- mPop.deleteAfterDaysLabel->setBuddy( mPop.deleteAfterDaysSpin );
- grid->addWidget( mPop.deleteAfterDaysSpin, 8, 1 );
-
+ QHBox *afterDaysBox = new QHBox( page1 );
+ afterDaysBox->setSpacing( KDialog::spacingHint() );
+ mPop.leaveOnServerDaysCheck =
+ new QCheckBox( i18n("Leave messages on the server for"), afterDaysBox );
+ connect( mPop.leaveOnServerDaysCheck, SIGNAL( toggled(bool) ),
+ this, SLOT( slotEnableLeaveOnServerDays(bool)) );
+ mPop.leaveOnServerDaysSpin = new KIntNumInput( afterDaysBox );
+ mPop.leaveOnServerDaysSpin->setRange( 1, 365, 1, false );
+ mPop.leaveOnServerDaysSpin->setSuffix( i18n(" days") );
+ mPop.leaveOnServerDaysSpin->setValue( 1 );
+ afterDaysBox->setStretchFactor( mPop.leaveOnServerDaysSpin, 1 );
+ grid->addMultiCellWidget( afterDaysBox, 7, 7, 0, 1 );
+ QHBox *leaveOnServerCountBox = new QHBox( page1 );
+ leaveOnServerCountBox->setSpacing( KDialog::spacingHint() );
+ mPop.leaveOnServerCountCheck =
+ new QCheckBox( i18n("Keep only the last"), leaveOnServerCountBox );
+ connect( mPop.leaveOnServerCountCheck, SIGNAL( toggled(bool) ),
+ this, SLOT( slotEnableLeaveOnServerCount(bool)) );
+ mPop.leaveOnServerCountSpin = new KIntNumInput( leaveOnServerCountBox );
+ mPop.leaveOnServerCountSpin->setRange( 1, 999999, 1, false );
+ mPop.leaveOnServerCountSpin->setSuffix( i18n(" messages") );
+ mPop.leaveOnServerCountSpin->setValue( 100 );
+ grid->addMultiCellWidget( leaveOnServerCountBox, 8, 8, 0, 1 );
+ QHBox *leaveOnServerSizeBox = new QHBox( page1 );
+ leaveOnServerSizeBox->setSpacing( KDialog::spacingHint() );
+ mPop.leaveOnServerSizeCheck =
+ new QCheckBox( i18n("Keep only the last"), leaveOnServerSizeBox );
+ connect( mPop.leaveOnServerSizeCheck, SIGNAL( toggled(bool) ),
+ this, SLOT( slotEnableLeaveOnServerSize(bool)) );
+ mPop.leaveOnServerSizeSpin = new KIntNumInput( leaveOnServerSizeBox );
+ mPop.leaveOnServerSizeSpin->setRange( 1, 999999, 1, false );
+ mPop.leaveOnServerSizeSpin->setSuffix( i18n(" MB") );
+ mPop.leaveOnServerSizeSpin->setValue( 10 );
+ grid->addMultiCellWidget( leaveOnServerSizeBox, 9, 9, 0, 1 );
#if 0
- QHBox* resourceHB = new QHBox( page1 );
+ QHBox *resourceHB = new QHBox( page1 );
resourceHB->setSpacing( 11 );
mPop.resourceCheck =
new QCheckBox( i18n( "Account for semiautomatic resource handling" ), \
resourceHB ); @@ -658,12 +678,12 @@ void AccountDialog::makePopAccountPage()
i18n( "Delete all outdated allocations for the resource \
represented by this account." ) ); connect( mPop.resourceClearPastButton, SIGNAL( \
clicked() ), this, SLOT( slotClearPastResourceAllocations() ) );
- grid->addMultiCellWidget( resourceHB, 9, 9, 0, 2 );
+ grid->addMultiCellWidget( resourceHB, 10, 10, 0, 2 );
#endif
mPop.includeInCheck =
new QCheckBox( i18n("Include in man&ual mail check"), page1 );
- grid->addMultiCellWidget( mPop.includeInCheck, 9, 9, 0, 1 );
+ grid->addMultiCellWidget( mPop.includeInCheck, 10, 10, 0, 1 );
QHBox * hbox = new QHBox( page1 );
hbox->setSpacing( KDialog::spacingHint() );
@@ -675,7 +695,7 @@ void AccountDialog::makePopAccountPage()
mPop.filterOnServerSizeSpin->setRange( 1, 10000000, 100, FALSE );
mPop.filterOnServerSizeSpin->setValue( 50000 );
mPop.filterOnServerSizeSpin->setSuffix( i18n(" byte") );
- grid->addMultiCellWidget( hbox, 10, 10, 0, 1 );
+ grid->addMultiCellWidget( hbox, 11, 11, 0, 1 );
connect( mPop.filterOnServerCheck, SIGNAL(toggled(bool)),
mPop.filterOnServerSizeSpin, SLOT(setEnabled(bool)) );
connect( mPop.filterOnServerCheck, SIGNAL( clicked() ),
@@ -688,29 +708,29 @@ void AccountDialog::makePopAccountPage()
mPop.intervalCheck =
new QCheckBox( i18n("Enable &interval mail checking"), page1 );
- grid->addMultiCellWidget( mPop.intervalCheck, 11, 11, 0, 1 );
+ grid->addMultiCellWidget( mPop.intervalCheck, 12, 12, 0, 1 );
connect( mPop.intervalCheck, SIGNAL(toggled(bool)),
this, SLOT(slotEnablePopInterval(bool)) );
mPop.intervalLabel = new QLabel( i18n("Chec&k interval:"), page1 );
- grid->addWidget( mPop.intervalLabel, 12, 0 );
+ grid->addWidget( mPop.intervalLabel, 13, 0 );
mPop.intervalSpin = new KIntNumInput( page1 );
mPop.intervalSpin->setRange( 1, 10000, 1, FALSE );
mPop.intervalSpin->setSuffix( i18n(" min") );
mPop.intervalSpin->setValue( 1 );
mPop.intervalLabel->setBuddy( mPop.intervalSpin );
- grid->addWidget( mPop.intervalSpin, 12, 1 );
+ grid->addWidget( mPop.intervalSpin, 13, 1 );
label = new QLabel( i18n("Des&tination folder:"), page1 );
- grid->addWidget( label, 13, 0 );
+ grid->addWidget( label, 14, 0 );
mPop.folderCombo = new QComboBox( false, page1 );
label->setBuddy( mPop.folderCombo );
- grid->addWidget( mPop.folderCombo, 13, 1 );
+ grid->addWidget( mPop.folderCombo, 14, 1 );
label = new QLabel( i18n("Pre-com&mand:"), page1 );
- grid->addWidget( label, 14, 0 );
+ grid->addWidget( label, 15, 0 );
mPop.precommand = new KLineEdit( page1 );
label->setBuddy(mPop.precommand);
- grid->addWidget( mPop.precommand, 14, 1 );
+ grid->addWidget( mPop.precommand, 15, 1 );
QWidget *page2 = new QWidget( tabWidget );
tabWidget->addTab( page2, i18n("&Extras") );
@@ -1081,9 +1101,18 @@ void AccountDialog::setupSettings()
mPop.usePipeliningCheck->setChecked( ap.usePipelining() );
mPop.storePasswordCheck->setChecked( ap.storePasswd() );
mPop.leaveOnServerCheck->setChecked( ap.leaveOnServer() );
- mPop.deleteAfterDaysCheck->setEnabled( ap.leaveOnServer() );
- mPop.deleteAfterDaysCheck->setChecked( ap.deleteAfterDays() >= 1 );
- mPop.deleteAfterDaysSpin->setValue( QMAX(1, ap.deleteAfterDays()) );
+ mPop.leaveOnServerDaysCheck->setEnabled( ap.leaveOnServer() );
+ mPop.leaveOnServerDaysCheck->setChecked( ap.leaveOnServerDays() >= 1 );
+ mPop.leaveOnServerDaysSpin->setValue( ap.leaveOnServerDays() >= 1 ?
+ ap.leaveOnServerDays() : 7 );
+ mPop.leaveOnServerCountCheck->setEnabled( ap.leaveOnServer() );
+ mPop.leaveOnServerCountCheck->setChecked( ap.leaveOnServerCount() >= 1 );
+ mPop.leaveOnServerCountSpin->setValue( ap.leaveOnServerCount() >= 1 ?
+ ap.leaveOnServerCount() : 100 );
+ mPop.leaveOnServerSizeCheck->setEnabled( ap.leaveOnServer() );
+ mPop.leaveOnServerSizeCheck->setChecked( ap.leaveOnServerSize() >= 1 );
+ mPop.leaveOnServerSizeSpin->setValue( ap.leaveOnServerSize() >= 1 ?
+ ap.leaveOnServerSize() : 10 );
mPop.filterOnServerCheck->setChecked( ap.filterOnServer() );
mPop.filterOnServerSizeSpin->setValue( ap.filterOnServerCheckSize() );
mPop.intervalCheck->setChecked( interval >= 1 );
@@ -1114,8 +1143,12 @@ void AccountDialog::setupSettings()
mPop.authAPOP->setChecked( TRUE );
else mPop.authUser->setChecked( TRUE );
- slotEnableDeleteAfterDays( mPop.deleteAfterDaysCheck->isEnabled() ?
- ap.deleteAfterDays() >= 1 : 0);
+ slotEnableLeaveOnServerDays( mPop.leaveOnServerDaysCheck->isEnabled() ?
+ ap.leaveOnServerDays() >= 1 : 0);
+ slotEnableLeaveOnServerCount( mPop.leaveOnServerCountCheck->isEnabled() ?
+ ap.leaveOnServerCount() >= 1 : 0);
+ slotEnableLeaveOnServerSize( mPop.leaveOnServerSizeCheck->isEnabled() ?
+ ap.leaveOnServerSize() >= 1 : 0);
slotEnablePopInterval( interval >= 1 );
folderCombo = mPop.folderCombo;
}
@@ -1293,15 +1326,25 @@ void AccountDialog::setupSettings()
void AccountDialog::slotLeaveOnServerClicked()
{
- bool enabled = mPop.leaveOnServerCheck->isChecked();
- mPop.deleteAfterDaysCheck->setEnabled( enabled );
- if ( !enabled ) {
- mPop.deleteAfterDaysSpin->setEnabled( false );
- mPop.deleteAfterDaysLabel->setEnabled( false );
- } else if ( mPop.deleteAfterDaysCheck->isChecked() ) {
- mPop.deleteAfterDaysSpin->setEnabled( true );
- mPop.deleteAfterDaysLabel->setEnabled( true );
- }
+ bool state = mPop.leaveOnServerCheck->isChecked();
+ mPop.leaveOnServerDaysCheck->setEnabled( state );
+ mPop.leaveOnServerCountCheck->setEnabled( state );
+ mPop.leaveOnServerSizeCheck->setEnabled( state );
+ if ( state ) {
+ if ( mPop.leaveOnServerDaysCheck->isChecked() ) {
+ slotEnableLeaveOnServerDays( state );
+ }
+ if ( mPop.leaveOnServerCountCheck->isChecked() ) {
+ slotEnableLeaveOnServerCount( state );
+ }
+ if ( mPop.leaveOnServerSizeCheck->isChecked() ) {
+ slotEnableLeaveOnServerSize( state );
+ }
+ } else {
+ slotEnableLeaveOnServerDays( state );
+ slotEnableLeaveOnServerCount( state );
+ slotEnableLeaveOnServerSize( state );
+ }
if ( !( mCurCapa & UIDL ) && mPop.leaveOnServerCheck->isChecked() ) {
KMessageBox::information( topLevelWidget(),
i18n("The server does not seem to support unique "
@@ -1671,8 +1714,15 @@ void AccountDialog::saveSettings()
epa.setStorePasswd( mPop.storePasswordCheck->isChecked() );
epa.setPasswd( mPop.passwordEdit->text(), epa.storePasswd() );
epa.setLeaveOnServer( mPop.leaveOnServerCheck->isChecked() );
- epa.setDeleteAfterDays( mPop.deleteAfterDaysCheck->isChecked() ?
- mPop.deleteAfterDaysSpin->value() : 0 );
+ epa.setLeaveOnServerDays( mPop.leaveOnServerCheck->isChecked() ?
+ ( mPop.leaveOnServerDaysCheck->isChecked() ?
+ mPop.leaveOnServerDaysSpin->value() : -1 ) : 0);
+ epa.setLeaveOnServerCount( mPop.leaveOnServerCheck->isChecked() ?
+ ( mPop.leaveOnServerCountCheck->isChecked() ?
+ mPop.leaveOnServerCountSpin->value() : -1 ) : 0 );
+ epa.setLeaveOnServerSize( mPop.leaveOnServerCheck->isChecked() ?
+ ( mPop.leaveOnServerSizeCheck->isChecked() ?
+ mPop.leaveOnServerSizeSpin->value() : -1 ) : 0 );
epa.setFilterOnServer( mPop.filterOnServerCheck->isChecked() );
epa.setFilterOnServerCheckSize (mPop.filterOnServerSizeSpin->value() );
epa.setPrecommand( mPop.precommand->text() );
@@ -1897,11 +1947,24 @@ void AccountDialog::slotMaildirChooser()
directory = dir;
}
-void AccountDialog::slotEnableDeleteAfterDays( bool state )
+void AccountDialog::slotEnableLeaveOnServerDays( bool state )
+{
+ if ( state && !mPop.leaveOnServerDaysCheck->isEnabled()) return;
+ mPop.leaveOnServerDaysSpin->setEnabled( state );
+}
+
+void AccountDialog::slotEnableLeaveOnServerCount( bool state )
+{
+ if ( state && !mPop.leaveOnServerCountCheck->isEnabled()) return;
+ mPop.leaveOnServerCountSpin->setEnabled( state );
+ return;
+}
+
+void AccountDialog::slotEnableLeaveOnServerSize( bool state )
{
- if ( state && !mPop.deleteAfterDaysCheck->isEnabled()) return;
- mPop.deleteAfterDaysSpin->setEnabled( state );
- mPop.deleteAfterDaysLabel->setEnabled( state );
+ if ( state && !mPop.leaveOnServerSizeCheck->isEnabled()) return;
+ mPop.leaveOnServerSizeSpin->setEnabled( state );
+ return;
}
void AccountDialog::slotEnablePopInterval( bool state )
Index: kmail/accountdialog.h
===================================================================
RCS file: /home/kde/kdepim/kmail/accountdialog.h,v
retrieving revision 1.50
diff -u -p -u -p -r1.50 accountdialog.h
--- kmail/accountdialog.h 2 Apr 2005 02:48:44 -0000 1.50
+++ kmail/accountdialog.h 11 Apr 2005 16:41:26 -0000
@@ -123,9 +123,12 @@ class AccountDialog : public KDialogBase
QCheckBox *usePipeliningCheck;
QCheckBox *storePasswordCheck;
QCheckBox *leaveOnServerCheck;
- QCheckBox *deleteAfterDaysCheck;
- QLabel *deleteAfterDaysLabel;
- KIntNumInput *deleteAfterDaysSpin;
+ QCheckBox *leaveOnServerDaysCheck;
+ KIntNumInput *leaveOnServerDaysSpin;
+ QCheckBox *leaveOnServerCountCheck;
+ KIntNumInput *leaveOnServerCountSpin;
+ QCheckBox *leaveOnServerSizeCheck;
+ KIntNumInput *leaveOnServerSizeSpin;
#if 0
QCheckBox *resourceCheck;
QPushButton *resourceClearButton;
@@ -193,7 +196,9 @@ class AccountDialog : public KDialogBase
void slotEnableMaildirInterval( bool state );
void slotFontChanged();
void slotLeaveOnServerClicked();
- void slotEnableDeleteAfterDays( bool state );
+ void slotEnableLeaveOnServerDays( bool state );
+ void slotEnableLeaveOnServerCount( bool state );
+ void slotEnableLeaveOnServerSize( bool state );
void slotFilterOnServerClicked();
void slotPipeliningClicked();
void slotPopEncryptionChanged(int);
Index: kmail/kmacctexppop.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmacctexppop.cpp,v
retrieving revision 1.180
diff -u -p -u -p -r1.180 kmacctexppop.cpp
--- kmail/kmacctexppop.cpp 5 Apr 2005 11:31:09 -0000 1.180
+++ kmail/kmacctexppop.cpp 11 Apr 2005 16:41:26 -0000
@@ -111,7 +111,9 @@ void KMAcctExpPop::init(void)
mUsePipelining = FALSE;
mLeaveOnServer = FALSE;
- mDeleteAfterDays = -1;
+ mLeaveOnServerDays = -1;
+ mLeaveOnServerCount = -1;
+ mLeaveOnServerSize = -1;
mFilterOnServer = FALSE;
//tz todo
mFilterOnServerCheckSize = 50000;
@@ -127,7 +129,9 @@ void KMAcctExpPop::pseudoAssign( const K
setUsePipelining( p->usePipelining() );
setLeaveOnServer( p->leaveOnServer() );
- setDeleteAfterDays( p->deleteAfterDays() );
+ setLeaveOnServerDays( p->leaveOnServerDays() );
+ setLeaveOnServerCount( p->leaveOnServerCount() );
+ setLeaveOnServerSize( p->leaveOnServerSize() );
setFilterOnServer( p->filterOnServer() );
setFilterOnServerCheckSize( p->filterOnServerCheckSize() );
}
@@ -186,6 +190,7 @@ void KMAcctExpPop::processNewMail(bool _
}
mUidsOfNextSeenMsgsDict.clear();
mTimeOfNextSeenMsgsMap.clear();
+ mSizeOfNextSeenMsgsDict.clear();
interactive = _interactive;
mUidlFinished = FALSE;
@@ -205,7 +210,9 @@ void KMAcctExpPop::readConfig(KConfig& c
mUsePipelining = config.readNumEntry("pipelining", FALSE);
mLeaveOnServer = config.readNumEntry("leave-on-server", FALSE);
- mDeleteAfterDays = config.readNumEntry("delete-after-days", -1);
+ mLeaveOnServerDays = config.readNumEntry("leave-on-server-days", -1);
+ mLeaveOnServerCount = config.readNumEntry("leave-on-server-count", -1);
+ mLeaveOnServerSize = config.readNumEntry("leave-on-server-size", -1);
mFilterOnServer = config.readNumEntry("filter-on-server", FALSE);
mFilterOnServerCheckSize = config.readUnsignedNumEntry("filter-os-check-size", \
50000); }
@@ -218,7 +225,9 @@ void KMAcctExpPop::writeConfig(KConfig&
config.writeEntry("pipelining", mUsePipelining);
config.writeEntry("leave-on-server", mLeaveOnServer);
- config.writeEntry("delete-after-days", mDeleteAfterDays);
+ config.writeEntry("leave-on-server-days", mLeaveOnServerDays);
+ config.writeEntry("leave-on-server-count", mLeaveOnServerCount);
+ config.writeEntry("leave-on-server-size", mLeaveOnServerSize);
config.writeEntry("filter-on-server", mFilterOnServer);
config.writeEntry("filter-os-check-size", mFilterOnServerCheckSize);
}
@@ -237,12 +246,21 @@ void KMAcctExpPop::setLeaveOnServer(bool
}
//-----------------------------------------------------------------------------
-void KMAcctExpPop::setDeleteAfterDays(int days)
+void KMAcctExpPop::setLeaveOnServerDays(int days)
{
- if ( days <= 0 )
- mDeleteAfterDays = 0;
- else
- mDeleteAfterDays = days;
+ mLeaveOnServerDays = days;
+}
+
+//-----------------------------------------------------------------------------
+void KMAcctExpPop::setLeaveOnServerCount(int count)
+{
+ mLeaveOnServerCount = count;
+}
+
+//-----------------------------------------------------------------------------
+void KMAcctExpPop::setLeaveOnServerSize(int size)
+{
+ mLeaveOnServerSize = size;
}
//---------------------------------------------------------------------------
@@ -309,8 +327,7 @@ void KMAcctExpPop::slotProcessPendingMsg
else {
idsOfMsgsToDelete.append( *curId );
mUidsOfNextSeenMsgsDict.insert( *curUid, (const int *)1 );
- mTimeOfNextSeenMsgsMap.insert( *curUid,
- QDateTime::currentDateTime().toTime_t() );
+ mTimeOfNextSeenMsgsMap.insert( *curUid, time(0) );
}
++cur;
++curId;
@@ -482,9 +499,9 @@ void KMAcctExpPop::slotJobFinished() {
//check for mails bigger mFilterOnServerCheckSize
if ( (unsigned int)hids.data() >= mFilterOnServerCheckSize ) {
kdDebug(5006) << "bigger than " << mFilterOnServerCheckSize << endl;
- headersOnServer.append(new KMPopHeaders( hids.key(),
- mUidForIdMap[hids.key()],
- Later));//TODO
+ headersOnServer.append(new KMPopHeaders( hids.key(),
+ mUidForIdMap[hids.key()],
+ Later));//TODO
//set Action if already known
if( mHeaderDeleteUids.contains( headersOnServer.current()->uid() ) ) {
headersOnServer.current()->setAction(Delete);
@@ -605,7 +622,7 @@ void KMAcctExpPop::slotJobFinished() {
(const int *)1 );
idsOfMsgsToDelete.append(headersOnServer.current()->id());
mTimeOfNextSeenMsgsMap.insert( headersOnServer.current()->uid(),
- QDateTime::currentDateTime().toTime_t() );
+ time(0) );
}
else {
mHeaderLaterUids.insert(headersOnServer.current()->uid(), true);
@@ -643,43 +660,72 @@ void KMAcctExpPop::slotJobFinished() {
kmkernel->folderMgr()->syncAllFolders();
KURL url = getUrl();
- if (mLeaveOnServer && mDeleteAfterDays > 0 && !idsOfMsgsToDelete.isEmpty()) {
- // Remove from idsOfMsgsToDelete entries which are newer than the limit
- QDateTime timeLimit = QDateTime::currentDateTime();
- timeLimit = timeLimit.addDays( -mDeleteAfterDays );
- QStringList::Iterator cur = idsOfMsgsToDelete.begin();
- while (cur != idsOfMsgsToDelete.end()) {
- QDateTime msgTime;
- if ( !mTimeOfNextSeenMsgsMap[mUidForIdMap[*cur]] ) {
- cur = idsOfMsgsToDelete.remove( cur );
- }
- else {
- msgTime.setTime_t( mTimeOfNextSeenMsgsMap[mUidForIdMap[*cur]] );
- kdDebug() << "uid: "
- << mUidForIdMap[*cur]
- << " msgTime: " << msgTime
- << ", timeLimit: " << timeLimit << endl;
- if (msgTime >= timeLimit) {
- cur = idsOfMsgsToDelete.remove( cur );
+ QMap< QPair<time_t, QString>, int > idsToSave;
+ idsToSave.clear();
+ // Check if we want to keep any messages
+ if ( !idsOfMsgsToDelete.isEmpty() ) {
+ // Keep all messages on server
+ if ( mLeaveOnServerDays == -1 && mLeaveOnServerCount <= 0 &&
+ mLeaveOnServerSize <= 0)
+ idsOfMsgsToDelete.clear();
+ // Delete old messages
+ else if ( mLeaveOnServerDays > 0 && !mTimeOfNextSeenMsgsMap.isEmpty() ) {
+ time_t timeLimit = time(0) - (86400 * mLeaveOnServerDays);
+ kdDebug() << "timeLimit is " << timeLimit << endl;
+ QStringList::Iterator cur = idsOfMsgsToDelete.begin();
+ for ( ; cur != idsOfMsgsToDelete.end(); ++cur) {
+ time_t msgTime = mTimeOfNextSeenMsgsMap[mUidForIdMap[*cur]];
+ kdDebug() << "id: " << *cur << " msgTime: " << msgTime << endl;
+ if (msgTime >= timeLimit ||
+ !mTimeOfNextSeenMsgsMap[mUidForIdMap[*cur]]) {
+ kdDebug() << "Saving msg id " << *cur << endl;
+ QPair<time_t, QString> msg(msgTime, *cur);
+ idsToSave.insert( msg, 1 );
}
- else {
- ++cur;
+ }
+ }
+ // Delete more old messages if there are more than mLeaveOnServerCount
+ if ( mLeaveOnServerCount > 0 ) {
+ int numToDelete = idsToSave.count() - mLeaveOnServerCount;
+ kdDebug() << "numToDelete is " << numToDelete << endl;
+ if ( numToDelete > 0 && numToDelete < idsToSave.count() ) {
+ QMap< QPair<time_t, QString>, int >::Iterator cur = idsToSave.begin();
+ for ( int deleted = 0; deleted < numToDelete && cur != idsToSave.end()
+ ; deleted++, cur++ ) {
+ kdDebug() << "deleting msg id " << cur.key().second << endl;
+ idsToSave.remove( cur );
}
}
+ else if ( numToDelete > 0 && numToDelete >= idsToSave.count() )
+ idsToSave.clear();
+ }
+ // Delete more old messages until we're under mLeaveOnServerSize MBs
+ if ( mLeaveOnServerSize > 0 ) {
+ double sizeOnServer = 0;
+ QMap< QPair<time_t, QString>, int >::Iterator cur = idsToSave.begin();
+ for ( ; cur != idsToSave.end(); cur++ ) {
+ sizeOnServer +=
+ *mSizeOfNextSeenMsgsDict[ mUidForIdMap[ cur.key().second ] ];
+ }
+ kdDebug() << "sizeOnServer is " << sizeOnServer/(1024*1024) << "MB" << endl;
+ long limitInBytes = mLeaveOnServerSize * ( 1024 * 1024 );
+ for ( cur = idsToSave.begin(); cur != idsToSave.end()
+ && sizeOnServer > limitInBytes; cur++ ) {
+ sizeOnServer -=
+ *mSizeOfNextSeenMsgsDict[ mUidForIdMap[ cur.key().second ] ];
+ idsToSave.remove( cur );
+ }
+ }
+ // Save msgs from deletion
+ QMap< QPair<time_t, QString>, int >::Iterator it = idsToSave.begin();
+ kdDebug() << "Going to save " << idsToSave.count() << endl;
+ for ( ; it != idsToSave.end(); ++it ) {
+ kdDebug() << "saving msg id " << it.key().second << endl;
+ idsOfMsgsToDelete.remove( it.key().second );
}
}
-
- if ((mLeaveOnServer && mDeleteAfterDays <= 0) || idsOfMsgsToDelete.isEmpty()) {
- stage = Quit;
- mMailCheckProgressItem->setStatus(
- i18n( "Fetched 1 message from %1. Terminating transmission...",
- "Fetched %n messages from %1. Terminating transmission...",
- numMsgs )
- .arg( mHost ) );
- url.setPath(QString("/commit"));
- job = KIO::get(url, false, false );
- }
- else {
+ // If there are messages to delete then delete them
+ if ( !idsOfMsgsToDelete.isEmpty() ) {
stage = Dele;
mMailCheckProgressItem->setStatus(
i18n( "Fetched 1 message from %1. Deleting messages from server...",
@@ -688,8 +734,17 @@ void KMAcctExpPop::slotJobFinished() {
.arg( mHost ) );
url.setPath("/remove/" + idsOfMsgsToDelete.join(","));
kdDebug(5006) << "url: " << url.prettyURL() << endl;
- job = KIO::get( url, false, false );
+ } else {
+ stage = Quit;
+ mMailCheckProgressItem->setStatus(
+ i18n( "Fetched 1 message from %1. Terminating transmission...",
+ "Fetched %n messages from %1. Terminating transmission...",
+ numMsgs )
+ .arg( mHost ) );
+ url.setPath(QString("/commit"));
+ kdDebug(5006) << "url: " << url.prettyURL() << endl;
}
+ job = KIO::get( url, false, false );
connectJob();
}
else if (stage == Dele) {
@@ -860,7 +915,11 @@ void KMAcctExpPop::slotData( KIO::Job* j
else { // stage == Uidl
const QString id = qdata.left(spc);
const QString uid = qdata.mid(spc + 1);
+ int *size = new int; //malloc(size_of(int));
+ *size = mMsgsPendingDownload[id];
+ mSizeOfNextSeenMsgsDict.insert( uid, size );
if ( mUidsOfSeenMsgsDict.find( uid ) != 0 ) {
+
if ( mMsgsPendingDownload.contains( id ) ) {
mMsgsPendingDownload.remove( id );
}
@@ -868,11 +927,13 @@ void KMAcctExpPop::slotData( KIO::Job* j
kdDebug(5006) << "KMAcctExpPop::slotData synchronization failure." << \
endl; idsOfMsgsToDelete.append( id );
mUidsOfNextSeenMsgsDict.insert( uid, (const int *)1 );
- if ( mTimeOfSeenMsgsVector.empty() )
+ if ( mTimeOfSeenMsgsVector.empty() ) {
mTimeOfNextSeenMsgsMap.insert( uid, time(0) );
- else
+ }
+ else {
mTimeOfNextSeenMsgsMap.insert( uid,
mTimeOfSeenMsgsVector[(int)mUidsOfSeenMsgsDict[uid] - 1] );
+ }
}
mUidForIdMap.insert( id, uid );
}
Index: kmail/kmacctexppop.h
===================================================================
RCS file: /home/kde/kdepim/kmail/kmacctexppop.h,v
retrieving revision 1.48
diff -u -p -u -p -r1.48 kmacctexppop.h
--- kmail/kmacctexppop.h 5 Apr 2005 00:50:40 -0000 1.48
+++ kmail/kmacctexppop.h 11 Apr 2005 16:41:26 -0000
@@ -44,12 +44,6 @@ public:
*/
bool usePipelining(void) const { return mUsePipelining; }
virtual void setUsePipelining(bool);
-
- /**
- * If value is positive, delete mail from server after that many days.
- */
- int deleteAfterDays(void) const { return mDeleteAfterDays; }
- virtual void setDeleteAfterDays(int);
/**
* Shall messages be left on the server upon retreival (TRUE)
@@ -59,6 +53,24 @@ public:
virtual void setLeaveOnServer(bool);
/**
+ * If value is positive, leave mail on the server for so many days.
+ */
+ int leaveOnServerDays(void) const { return mLeaveOnServerDays; }
+ virtual void setLeaveOnServerDays(int);
+
+ /**
+ * If value is positive, leave so many messages on the server.
+ */
+ int leaveOnServerCount(void) const { return mLeaveOnServerCount; }
+ virtual void setLeaveOnServerCount(int);
+
+ /**
+ * If value is positive, leave so many MBs on the server.
+ */
+ int leaveOnServerSize(void) const { return mLeaveOnServerSize; }
+ virtual void setLeaveOnServerSize(int);
+
+ /**
* Shall messages be filter on the server (TRUE)
* or not (FALSE).
*/
@@ -110,7 +122,9 @@ protected:
bool mUsePipelining;
bool mLeaveOnServer;
- int mDeleteAfterDays;
+ int mLeaveOnServerDays;
+ int mLeaveOnServerCount;
+ int mLeaveOnServerSize;
bool gotMsgs;
bool mFilterOnServer;
unsigned int mFilterOnServerCheckSize;
@@ -127,14 +141,14 @@ protected:
QMap<QString, bool> mHeaderDownUids;
QMap<QString, bool> mHeaderLaterUids;
-
QStringList idsOfMsgs; //used for ids and for count
QValueList<int> lensOfMsgs;
QMap<QString, QString> mUidForIdMap; // maps message ID (i.e. index on the server) \
to UID QDict<int> mUidsOfSeenMsgsDict; // set of UIDs of previously seen messages \
(for fast lookup)
- QValueVector<int> mTimeOfSeenMsgsVector; // list of times of previously seen \
messages QDict<int> mUidsOfNextSeenMsgsDict; // set of UIDs of seen messages (for \
the next check) + QValueVector<int> mTimeOfSeenMsgsVector; // list of times of \
previously seen messages QMap<QString, int> mTimeOfNextSeenMsgsMap; // map of uid to \
times of seen messages + QDict<int> mSizeOfNextSeenMsgsDict;
QStringList idsOfMsgsToDelete;
int indexOfCurrentMsg;
_______________________________________________
kde-pim mailing list
kde-pim@kde.org
https://mail.kde.org/mailman/listinfo/kde-pim
kde-pim home page at http://pim.kde.org/
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic