void KMSearch::stop() { if ( !running() ) { return; } mIncompleteFolders.clear(); QList<QPointer<KMFolder> >::ConstIterator jt; for ( jt = mOpenedFolders.constBegin(); jt != mOpenedFolders.constEnd(); ++jt ) { KMFolder *folder = *jt; if ( !folder ) { continue; } // explicitly stop jobs for this folder as it will not be closed below // when the folder is currently selected if ( folder->folderType() == KMFolderTypeImap ) { KMAcctImap *account = static_cast<KMFolderImap*>( folder->storage() )->account(); account->ignoreJobsForFolder( folder ); } folder->storage()->search( 0 ); mSearchCount += folder->count(); folder->close( "kmsearch" ); } mRemainingFolders = -1; mOpenedFolders.clear(); mFolders.clear(); mLastFolder.clear(); mRunning = false; emit finished(false); }
int KMFilterMgr::process(Q_UINT32 serNum, const KMFilter *filter) { bool stopIt = false; int result = 1; if(!filter) return 1; if(isMatching(serNum, filter)) { KMFolder *folder = 0; int idx = -1; // get the message with the serNum KMMsgDict::instance()->getLocation(serNum, &folder, &idx); if(!folder || (idx == -1) || (idx >= folder->count())) { return 1; } KMFolderOpener openFolder(folder, "filtermgr"); KMMsgBase *msgBase = folder->getMsgBase(idx); bool unGet = !msgBase->isMessage(); KMMessage *msg = folder->getMsg(idx); // do the actual filtering stuff if(!msg || !beginFiltering(msg)) { if(unGet) folder->unGetMsg(idx); return 1; } if(filter->execActions(msg, stopIt) == KMFilter::CriticalError) { if(unGet) folder->unGetMsg(idx); return 2; } KMFolder *targetFolder = MessageProperty::filterFolder(msg); endFiltering(msg); if(targetFolder) { tempOpenFolder(targetFolder); msg->setTransferInProgress(false); result = targetFolder->moveMsg(msg); msg->setTransferInProgress(true); } if(unGet) folder->unGetMsg(idx); } else { result = 1; } return result; }
void MailManagerImpl::Register( const QDBusObjectPath ®istrarPath, uint lastModseq ) { Q_UNUSED( lastModseq ); registrars.append( registrarPath ); QDBusMessage m = QDBusMessage::createMethodCall( message().service(), registrarPath.path(), "org.freedesktop.email.metadata.Registrar", "Cleanup" ); QList<QVariant> args; args.append ( static_cast<uint> ( time( 0 ) ) ); m.setArguments( args ); QDBusConnection::sessionBus().send( m ); QList< QPointer< KMFolder > > folders = kmkernel->allFolders(); QList< QPointer< KMFolder > >::Iterator it = folders.begin(); while ( it != folders.end() ) { uint i = 0; KMFolder *folder = (*it); ++it; folder->open("DBus"); uint fcount = folder->count(); while ( i < fcount ) { QVector<QStringList> predicatesArray; QVector<QStringList> valuesArray; QStringList subjects; uint processed = 0; for ( ; i < fcount; ++i ) { const KMMsgBase *msg = folder->getMsgBase( i ); processMsgBase( msg, subjects, predicatesArray, valuesArray ); processed++; if ( processed >= max_per_dbus_call ) break; } if (!subjects.isEmpty()) { QDBusMessage m = QDBusMessage::createMethodCall( message().service(), registrarPath.path(), "org.freedesktop.email.metadata.Registrar", "SetMany" ); QList<QVariant> args; args.append( subjects ); args.append( qVariantFromValue( predicatesArray ) ); args.append( qVariantFromValue( valuesArray ) ); args.append( static_cast<uint> ( time( 0 ) ) ); m.setArguments( args ); QDBusConnection::sessionBus().send( m ); } } folder->close( "DBus", false ); } }