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; }
MessageCopyHelper::MessageCopyHelper( const QList<quint32> & msgs, KMFolder * dest, bool move, QObject * parent ) : QObject( parent ) { if ( msgs.isEmpty() || !dest ) return; KMFolder *f = 0; int index; QList<KMMsgBase*> list; for ( QList<quint32>::ConstIterator it = msgs.constBegin(); it != msgs.constEnd(); ++it ) { KMMsgDict::instance()->getLocation( *it, &f, &index ); if ( !f ) // not found continue; if ( f == dest ) continue; // already there if ( !mOpenFolders.contains( f ) ) {// not yet opened f->open( "messagecopy" ); mOpenFolders.insert( f, 0 ); } KMMsgBase *msgBase = f->getMsgBase( index ); if ( msgBase ) list.append( msgBase ); } if ( list.isEmpty() ) return; // nothing to do KMCommand *command; if ( move ) { command = new KMMoveCommand( dest, list ); } else { command = new KMCopyCommand( dest, list ); } connect( command, SIGNAL(completed(KMCommand*)), SLOT(copyCompleted(KMCommand*)) ); command->start(); }
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 ); } }