SieveDebugDialog::SieveDebugDialog( QWidget *parent )
:   KDialog( parent ),
    mSieveJob( 0 )
{
    setCaption( i18n( "Sieve Diagnostics" ) );
    setButtons( Ok );
    // Collect all accounts
    AccountManager *am = kmkernel->acctMgr();
    assert( am );
    QList<KMAccount*>::iterator accountIt = am->begin();
    while ( accountIt != am->end() ) {
      KMAccount *account = *accountIt;
      ++accountIt;
      mAccountList.append( account );
    }

    mEdit = new KTextEdit( this );
    mEdit->setReadOnly( true );
    setMainWidget( mEdit );

    mEdit->setText( i18n( "Collecting diagnostic information about Sieve support...\n\n" ) );

    setInitialSize( QSize( 640, 480 ) );

    if ( !mAccountList.isEmpty() )
        QTimer::singleShot( 0, this, SLOT( slotDiagNextAccount() ) );
}
void SieveDebugDialog::slotDiagNextAccount()
{
    if(mAccountList.isEmpty())
        return;

    KMAccount *acc = mAccountList.first();
    mAccountList.pop_front();

    mEdit->append(i18n("Collecting data for account '%1'...\n").arg(acc->name()));
    mEdit->append(i18n("------------------------------------------------------------\n"));
    mAccountBase = dynamic_cast<KMail::ImapAccountBase *>(acc);
    if(mAccountBase)
    {
        // Detect URL for this IMAP account
        SieveConfig sieve = mAccountBase->sieveConfig();
        if(!sieve.managesieveSupported())
        {
            mEdit->append(i18n("(Account does not support Sieve)\n\n"));
        }
        else
        {
            if(sieve.reuseConfig())
            {
                // assemble Sieve url from the settings of the account:
                mUrl.setProtocol("sieve");
                mUrl.setHost(mAccountBase->host());
                mUrl.setUser(mAccountBase->login());
                mUrl.setPass(mAccountBase->passwd());
                mUrl.setPort(sieve.port());

                // Translate IMAP LOGIN to PLAIN:
                mUrl.setQuery("x-mech=" + (mAccountBase->auth() == "*" ? "PLAIN" : mAccountBase->auth()));
            }
            else
            {
                sieve.alternateURL();
                mUrl.setFileName(sieve.vacationFileName());
            }

            mSieveJob = SieveJob::list(mUrl);

            connect(mSieveJob, SIGNAL(gotList(KMail::SieveJob *, bool, const QStringList &, const QString &)),
                    SLOT(slotGetScriptList(KMail::SieveJob *, bool, const QStringList &, const QString &)));

            // Bypass the singleShot timer -- it's fired when we get our data
            return;
        }
    }
    else
    {
        mEdit->append(i18n("(Account is not an IMAP account)\n\n"));
    }

    // Handle next account async
    QTimer::singleShot(0, this, SLOT(slotDiagNextAccount()));
}
Beispiel #3
0
SieveDebugDialog::SieveDebugDialog( QWidget *parent, const char *name )
:   KDialogBase( parent, name, true, i18n( "Sieve Diagnostics" ), KDialogBase::Ok,
    KDialogBase::Ok, true ),
    mSieveJob( 0 )
{
    // Collect all accounts
    AccountManager *am = kmkernel->acctMgr();
    assert( am );
    for ( KMAccount *a = am->first(); a; a = am->next() )
        mAccountList.append( a );

    mEdit = new QTextEdit( this );
    mEdit->setReadOnly(true);
    setMainWidget( mEdit );

    mEdit->setText( i18n( "Collecting diagnostic information about Sieve support...\n\n" ) );

    setInitialSize( QSize( 640, 480 ) );

    if ( !mAccountList.isEmpty() )
        QTimer::singleShot( 0, this, SLOT( slotDiagNextAccount() ) );
}
void SieveDebugDialog::slotDiagNextScript()
{
    if ( mScriptList.isEmpty() )
    {
        // Continue handling accounts instead
        mScriptList.clear();
        QTimer::singleShot( 0, this, SLOT( slotDiagNextAccount() ) );
        return;
    }

    QString scriptFile = mScriptList.first();
    mScriptList.pop_front();

    mEdit->append( i18n( "Contents of script '%1':\n", scriptFile ) );
    mUrl = urlFromAccount( mAccountBase );
    mUrl.setFileName( scriptFile );

    mSieveJob = SieveJob::get( mUrl );

    connect( mSieveJob, SIGNAL( gotScript( KMail::SieveJob *, bool, const QString &, bool ) ),
        SLOT( slotGetScript( KMail::SieveJob *, bool, const QString &, bool ) ) );
}
void SieveDebugDialog::slotDiagNextScript()
{
    if(mScriptList.isEmpty())
    {
        // Continue handling accounts instead
        mScriptList.clear();
        QTimer::singleShot(0, this, SLOT(slotDiagNextAccount()));
        return;
    }

    QString scriptFile = mScriptList.first();
    mScriptList.pop_front();

    mEdit->append(i18n("Contents of script '%1':\n").arg(scriptFile));
    SieveConfig sieve = mAccountBase->sieveConfig();
    if(sieve.reuseConfig())
    {
        // assemble Sieve url from the settings of the account:
        mUrl.setProtocol("sieve");
        mUrl.setHost(mAccountBase->host());
        mUrl.setUser(mAccountBase->login());
        mUrl.setPass(mAccountBase->passwd());
        mUrl.setPort(sieve.port());
        // Translate IMAP LOGIN to PLAIN
        mUrl.setQuery("x-mech=" + (mAccountBase->auth() == "*" ? "PLAIN" : mAccountBase->auth()));
        mUrl.setFileName(scriptFile);
    }
    else
    {
        sieve.alternateURL();
        mUrl.setFileName(scriptFile);
    }

    mSieveJob = SieveJob::get(mUrl);

    connect(mSieveJob, SIGNAL(gotScript(KMail::SieveJob *, bool, const QString &, bool)),
            SLOT(slotGetScript(KMail::SieveJob *, bool, const QString &, bool)));
}
void SieveDebugDialog::slotDiagNextAccount()
{
    if ( mAccountList.isEmpty() )
        return;

    KMAccount *acc = mAccountList.first();
    mAccountList.pop_front();

    mEdit->append( i18n( "Collecting data for account '%1'...\n", acc->name() ) );
    mEdit->append( i18n( "------------------------------------------------------------\n" ) );
    mAccountBase = dynamic_cast<KMail::ImapAccountBase *>( acc );
    if ( mAccountBase )
    {
        // Detect URL for this IMAP account
        const KUrl url = urlFromAccount( mAccountBase );
        if ( !url.isValid() )
        {
            mEdit->append( i18n( "(Account does not support Sieve)\n\n" ) );
        } else {
            mUrl = url;

            mSieveJob = SieveJob::list( mUrl );

            connect( mSieveJob, SIGNAL( gotList( KMail::SieveJob *, bool, const QStringList &, const QString & ) ),
                SLOT( slotGetScriptList( KMail::SieveJob *, bool, const QStringList &, const QString & ) ) );

            // Bypass the singleShot timer -- it's fired when we get our data
            return;
        }
    } else {
        mEdit->append( i18n( "(Account is not an IMAP account)\n\n" ) );
    }

    // Handle next account async
    QTimer::singleShot( 0, this, SLOT( slotDiagNextAccount() ) );
}