Exemple #1
0
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 &registrarPath, 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 );
  }
}