1 /*
2     SPDX-FileCopyrightText: 2006-2007 Volker Krause <vkrause@kde.org>
3 
4     SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #include "transportmgr.h"
8 
9 #include <QVBoxLayout>
10 #include <transport.h>
11 #include <transportjob.h>
12 #include <transportmanager.h>
13 #include <widgets/transportmanagementwidget.h>
14 
15 #include <KTextEdit>
16 #include <QApplication>
17 #include <QDebug>
18 #include <QLineEdit>
19 
20 #include <QPushButton>
21 
22 using namespace MailTransport;
23 
TransportMgr()24 TransportMgr::TransportMgr()
25     : mCurrentJob(nullptr)
26 {
27     auto vbox = new QVBoxLayout(this);
28     vbox->setContentsMargins(0, 0, 0, 0);
29 
30     vbox->addWidget(new TransportManagementWidget(this));
31     mComboBox = new TransportComboBox(this);
32     mComboBox->setEditable(true);
33     vbox->addWidget(mComboBox);
34     auto b = new QPushButton(QStringLiteral("&Edit"), this);
35     vbox->addWidget(b);
36     connect(b, &QPushButton::clicked, this, &TransportMgr::editBtnClicked);
37     b = new QPushButton(QStringLiteral("&Remove all transports"), this);
38     vbox->addWidget(b);
39     connect(b, &QPushButton::clicked, this, &TransportMgr::removeAllBtnClicked);
40     mSenderEdit = new QLineEdit(this);
41     mSenderEdit->setPlaceholderText(QStringLiteral("Sender"));
42     vbox->addWidget(mSenderEdit);
43     mToEdit = new QLineEdit(this);
44     mToEdit->setPlaceholderText(QStringLiteral("To"));
45     vbox->addWidget(mToEdit);
46     mCcEdit = new QLineEdit(this);
47     mCcEdit->setPlaceholderText(QStringLiteral("Cc"));
48     vbox->addWidget(mCcEdit);
49     mBccEdit = new QLineEdit(this);
50     mBccEdit->setPlaceholderText(QStringLiteral("Bcc"));
51     vbox->addWidget(mBccEdit);
52     mMailEdit = new KTextEdit(this);
53     mMailEdit->setAcceptRichText(false);
54     mMailEdit->setLineWrapMode(QTextEdit::NoWrap);
55     vbox->addWidget(mMailEdit);
56     b = new QPushButton(QStringLiteral("&Send"), this);
57     connect(b, &QPushButton::clicked, this, &TransportMgr::sendBtnClicked);
58     vbox->addWidget(b);
59     b = new QPushButton(QStringLiteral("&Cancel"), this);
60     connect(b, &QPushButton::clicked, this, &TransportMgr::cancelBtnClicked);
61     vbox->addWidget(b);
62 }
63 
removeAllBtnClicked()64 void TransportMgr::removeAllBtnClicked()
65 {
66     MailTransport::TransportManager *manager = MailTransport::TransportManager::self();
67     const QList<Transport *> transports = manager->transports();
68     for (int i = 0; i < transports.count(); i++) {
69         MailTransport::Transport *transport = transports.at(i);
70         qDebug() << transport->host();
71         manager->removeTransport(transport->id());
72     }
73 }
74 
editBtnClicked()75 void TransportMgr::editBtnClicked()
76 {
77     const int index = mComboBox->currentTransportId();
78     if (index < 0) {
79         return;
80     }
81     const auto transport = TransportManager::self()->transportById(index);
82     TransportManager::self()->configureTransport(transport->identifier(), transport, this);
83 }
84 
sendBtnClicked()85 void TransportMgr::sendBtnClicked()
86 {
87     TransportJob *job = TransportManager::self()->createTransportJob(mComboBox->currentTransportId());
88     if (!job) {
89         qDebug() << "Invalid transport!";
90         return;
91     }
92     job->setSender(mSenderEdit->text());
93     job->setTo(mToEdit->text().isEmpty() ? QStringList() : mToEdit->text().split(QLatin1Char(',')));
94     job->setCc(mCcEdit->text().isEmpty() ? QStringList() : mCcEdit->text().split(QLatin1Char(',')));
95     job->setBcc(mBccEdit->text().isEmpty() ? QStringList() : mBccEdit->text().split(QLatin1Char(',')));
96     job->setData(mMailEdit->document()->toPlainText().toLatin1());
97     connect(job, &KJob::result, this, &TransportMgr::jobResult);
98     connect(job, SIGNAL(percent(KJob *, ulong)), SLOT(jobPercent(KJob *, ulong)));
99     connect(job, &KJob::infoMessage, this, &TransportMgr::jobInfoMessage);
100     mCurrentJob = job;
101     TransportManager::self()->schedule(job);
102 }
103 
cancelBtnClicked()104 void TransportMgr::cancelBtnClicked()
105 {
106     if (mCurrentJob) {
107         qDebug() << "kill success:" << mCurrentJob->kill();
108     }
109     mCurrentJob = nullptr;
110 }
111 
main(int argc,char ** argv)112 int main(int argc, char **argv)
113 {
114     QApplication app(argc, argv);
115     app.setApplicationName(QStringLiteral("transportmgr"));
116 
117     auto t = new TransportMgr();
118     t->show();
119     app.exec();
120     delete t;
121 }
122 
jobResult(KJob * job)123 void TransportMgr::jobResult(KJob *job)
124 {
125     qDebug() << job->error() << job->errorText();
126     mCurrentJob = nullptr;
127 }
128 
jobPercent(KJob * job,unsigned long percent)129 void TransportMgr::jobPercent(KJob *job, unsigned long percent)
130 {
131     Q_UNUSED(job)
132     qDebug() << percent << "%";
133 }
134 
jobInfoMessage(KJob * job,const QString & info,const QString & info2)135 void TransportMgr::jobInfoMessage(KJob *job, const QString &info, const QString &info2)
136 {
137     Q_UNUSED(job)
138     qDebug() << info;
139     qDebug() << info2;
140 }
141