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