File indexing completed on 2024-09-22 04:47:56

0001 /*
0002     SPDX-FileCopyrightText: 2006-2007 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "transportmgr.h"
0008 
0009 #include "transport.h"
0010 #include "transportjob.h"
0011 #include "transportmanager.h"
0012 #include "widgets/transportmanagementwidget.h"
0013 #include <QVBoxLayout>
0014 
0015 #include <QApplication>
0016 #include <QDebug>
0017 #include <QLineEdit>
0018 
0019 #include <QPlainTextEdit>
0020 #include <QPushButton>
0021 
0022 using namespace MailTransport;
0023 
0024 TransportMgr::TransportMgr()
0025     : mCurrentJob(nullptr)
0026 {
0027     auto vbox = new QVBoxLayout(this);
0028 
0029     vbox->addWidget(new TransportManagementWidget(this));
0030     mComboBox = new TransportComboBox(this);
0031     mComboBox->setEditable(true);
0032     vbox->addWidget(mComboBox);
0033     auto b = new QPushButton(QStringLiteral("&Edit"), this);
0034     vbox->addWidget(b);
0035     connect(b, &QPushButton::clicked, this, &TransportMgr::editBtnClicked);
0036     b = new QPushButton(QStringLiteral("&Remove all transports"), this);
0037     vbox->addWidget(b);
0038     connect(b, &QPushButton::clicked, this, &TransportMgr::removeAllBtnClicked);
0039     mSenderEdit = new QLineEdit(this);
0040     mSenderEdit->setPlaceholderText(QStringLiteral("Sender"));
0041     vbox->addWidget(mSenderEdit);
0042     mToEdit = new QLineEdit(this);
0043     mToEdit->setPlaceholderText(QStringLiteral("To"));
0044     vbox->addWidget(mToEdit);
0045     mCcEdit = new QLineEdit(this);
0046     mCcEdit->setPlaceholderText(QStringLiteral("Cc"));
0047     vbox->addWidget(mCcEdit);
0048     mBccEdit = new QLineEdit(this);
0049     mBccEdit->setPlaceholderText(QStringLiteral("Bcc"));
0050     vbox->addWidget(mBccEdit);
0051     mMailEdit = new QPlainTextEdit(this);
0052     mMailEdit->setLineWrapMode(QPlainTextEdit::NoWrap);
0053     vbox->addWidget(mMailEdit);
0054     b = new QPushButton(QStringLiteral("&Send"), this);
0055     connect(b, &QPushButton::clicked, this, &TransportMgr::sendBtnClicked);
0056     vbox->addWidget(b);
0057     b = new QPushButton(QStringLiteral("&Cancel"), this);
0058     connect(b, &QPushButton::clicked, this, &TransportMgr::cancelBtnClicked);
0059     vbox->addWidget(b);
0060 }
0061 
0062 void TransportMgr::removeAllBtnClicked()
0063 {
0064     MailTransport::TransportManager *manager = MailTransport::TransportManager::self();
0065     const QList<Transport *> transports = manager->transports();
0066     for (int i = 0; i < transports.count(); i++) {
0067         MailTransport::Transport *transport = transports.at(i);
0068         qDebug() << transport->host();
0069         manager->removeTransport(transport->id());
0070     }
0071 }
0072 
0073 void TransportMgr::editBtnClicked()
0074 {
0075     const int index = mComboBox->currentTransportId();
0076     if (index < 0) {
0077         return;
0078     }
0079     const auto transport = TransportManager::self()->transportById(index);
0080     TransportManager::self()->configureTransport(transport->identifier(), transport, this);
0081 }
0082 
0083 void TransportMgr::sendBtnClicked()
0084 {
0085     TransportJob *job = TransportManager::self()->createTransportJob(mComboBox->currentTransportId());
0086     if (!job) {
0087         qDebug() << "Invalid transport!";
0088         return;
0089     }
0090     job->setSender(mSenderEdit->text());
0091     job->setTo(mToEdit->text().isEmpty() ? QStringList() : mToEdit->text().split(QLatin1Char(',')));
0092     job->setCc(mCcEdit->text().isEmpty() ? QStringList() : mCcEdit->text().split(QLatin1Char(',')));
0093     job->setBcc(mBccEdit->text().isEmpty() ? QStringList() : mBccEdit->text().split(QLatin1Char(',')));
0094     job->setData(mMailEdit->toPlainText().toLatin1());
0095     connect(job, &KJob::result, this, &TransportMgr::jobResult);
0096     connect(job, &TransportJob::percentChanged, this, &TransportMgr::jobPercent);
0097     connect(job, &KJob::infoMessage, this, &TransportMgr::jobInfoMessage);
0098     mCurrentJob = job;
0099     TransportManager::self()->schedule(job);
0100 }
0101 
0102 void TransportMgr::cancelBtnClicked()
0103 {
0104     if (mCurrentJob) {
0105         qDebug() << "kill success:" << mCurrentJob->kill();
0106     }
0107     mCurrentJob = nullptr;
0108 }
0109 
0110 int main(int argc, char **argv)
0111 {
0112     QApplication app(argc, argv);
0113     app.setApplicationName(QStringLiteral("transportmgr"));
0114 
0115     auto t = new TransportMgr();
0116     t->show();
0117     app.exec();
0118     delete t;
0119 }
0120 
0121 void TransportMgr::jobResult(KJob *job)
0122 {
0123     qDebug() << job->error() << job->errorText();
0124     mCurrentJob = nullptr;
0125 }
0126 
0127 void TransportMgr::jobPercent(KJob *job, unsigned long percent)
0128 {
0129     Q_UNUSED(job)
0130     qDebug() << percent << "%";
0131 }
0132 
0133 void TransportMgr::jobInfoMessage(KJob *job, const QString &info)
0134 {
0135     Q_UNUSED(job)
0136     qDebug() << info;
0137 }
0138 
0139 #include "moc_transportmgr.cpp"