mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-23 18:32:49 +00:00
kutils: send mail from thread in KEMailDialog so it does not block
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
b8f4e8f820
commit
7ddaa71a32
5 changed files with 97 additions and 34 deletions
|
@ -68,12 +68,12 @@ QByteArray KEMailPrivate::makeData(const QString &subject, const QString &messag
|
|||
|
||||
QByteArray subjectbytes("Subject: ");
|
||||
subjectbytes.append(subject.toAscii());
|
||||
subjectbytes.append("\r\n\r\n");
|
||||
subjectbytes.append("\n\n");
|
||||
|
||||
QByteArray result = subjectbytes;
|
||||
result.append(message.toAscii());
|
||||
result.append("\n");
|
||||
result.replace('\n', "\r\n");
|
||||
result.append("\r\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -82,7 +82,7 @@ size_t KEMailPrivate::curlReadCallback(char *ptr, size_t size, size_t nmemb, voi
|
|||
KEMailPrivate* kemailprivate = static_cast<KEMailPrivate*>(userdata);
|
||||
Q_ASSERT(kemailprivate);
|
||||
Q_ASSERT(size == 1);
|
||||
QByteArray kemailmessage = kemailprivate->m_data.left(qMin(int(nmemb), kemailprivate->m_data.size()));
|
||||
const QByteArray kemailmessage = kemailprivate->m_data.left(qMin(int(nmemb), kemailprivate->m_data.size()));
|
||||
if (kemailmessage.size() <= 0) {
|
||||
kDebug() << "Message has been sent";
|
||||
return 0;
|
||||
|
|
|
@ -29,6 +29,7 @@ class KEMailPrivate;
|
|||
|
||||
/*!
|
||||
Class to send e-mail.
|
||||
|
||||
Example:
|
||||
\code
|
||||
KEMail kemail;
|
||||
|
@ -37,7 +38,7 @@ class KEMailPrivate;
|
|||
kemail.setPassword("mypass");
|
||||
kemail.setFrom("myuser@myhost.com");
|
||||
kemail.setTo(QStringList() << "otheruser@otherhost.com");
|
||||
qDebug() << kemail.send("hello");
|
||||
qDebug() << kemail.send("hello", "hi");
|
||||
\endcode
|
||||
|
||||
@since 4.22
|
||||
|
|
|
@ -23,14 +23,32 @@
|
|||
|
||||
#include "ui_kemaildialog.h"
|
||||
|
||||
class KEMailDialogPrivate
|
||||
#include <QThread>
|
||||
#include <QProcess>
|
||||
|
||||
class KEMailDialogPrivate : public QThread
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
KEMailDialogPrivate();
|
||||
~KEMailDialogPrivate();
|
||||
|
||||
KEMail* m_kemail;
|
||||
Ui::KEMailDialogUI ui;
|
||||
|
||||
void sendMail(const QString &subject, const QString &message, const QStringList &attach);
|
||||
|
||||
Q_SIGNALS:
|
||||
void sent();
|
||||
void error(const QString &errorstring);
|
||||
|
||||
protected:
|
||||
void run() final;
|
||||
|
||||
private:
|
||||
QString m_subject;
|
||||
QString m_message;
|
||||
QStringList m_attach;
|
||||
};
|
||||
|
||||
KEMailDialogPrivate::KEMailDialogPrivate()
|
||||
|
@ -44,6 +62,25 @@ KEMailDialogPrivate::~KEMailDialogPrivate()
|
|||
delete m_kemail;
|
||||
}
|
||||
|
||||
void KEMailDialogPrivate::sendMail(const QString &subject, const QString &message, const QStringList &attach)
|
||||
{
|
||||
m_subject = subject;
|
||||
m_message = message;
|
||||
m_attach = attach;
|
||||
start();
|
||||
}
|
||||
|
||||
void KEMailDialogPrivate::run()
|
||||
{
|
||||
const bool result = m_kemail->send(m_subject, m_message, m_attach);
|
||||
if (result) {
|
||||
emit sent();
|
||||
} else {
|
||||
emit error(m_kemail->errorString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
KEMailDialog::KEMailDialog(QWidget *parent, Qt::WindowFlags flags)
|
||||
: KDialog(parent, flags),
|
||||
d(new KEMailDialogPrivate())
|
||||
|
@ -52,7 +89,10 @@ KEMailDialog::KEMailDialog(QWidget *parent, Qt::WindowFlags flags)
|
|||
d->ui.fromlineedit->setText(d->m_kemail->from());
|
||||
d->ui.userlineedit->setText(d->m_kemail->user());
|
||||
d->ui.passlineedit->setText(d->m_kemail->password());
|
||||
// TODO: connect(d->ui.settingslabel)
|
||||
connect(d->ui.settingslabel, SIGNAL(leftClickedUrl()), this, SLOT(_slotSettings()));
|
||||
|
||||
connect(d, SIGNAL(sent()), this, SLOT(_slotSent()));
|
||||
connect(d, SIGNAL(error(QString)), this, SLOT(_slotError(QString)));
|
||||
}
|
||||
|
||||
KEMailDialog::~KEMailDialog()
|
||||
|
@ -60,11 +100,6 @@ KEMailDialog::~KEMailDialog()
|
|||
delete d;
|
||||
}
|
||||
|
||||
KEMail* KEMailDialog::kemail() const
|
||||
{
|
||||
return d->m_kemail;
|
||||
}
|
||||
|
||||
void KEMailDialog::slotButtonClicked(int button)
|
||||
{
|
||||
if (button == KDialog::Ok) {
|
||||
|
@ -88,16 +123,32 @@ void KEMailDialog::slotButtonClicked(int button)
|
|||
KMessageBox::error(this, i18n("No message specified"));
|
||||
return;
|
||||
}
|
||||
// TODO: do it in thread
|
||||
const bool result = d->m_kemail->send(
|
||||
d->sendMail(
|
||||
d->ui.sibjectlineedit->text(),
|
||||
d->ui.messagetextedit->textOrHtml(),
|
||||
d->ui.attachlistwidget->items()
|
||||
);
|
||||
if (!result) {
|
||||
KMessageBox::error(this, d->m_kemail->errorString());
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
KDialog::slotButtonClicked(button);
|
||||
}
|
||||
|
||||
void KEMailDialog::_slotSettings()
|
||||
{
|
||||
QProcess::startDetached(
|
||||
QString::fromLatin1("kcmshell4"),
|
||||
QStringList() << QString::fromLatin1("useraccount")
|
||||
);
|
||||
}
|
||||
|
||||
void KEMailDialog::_slotSent()
|
||||
{
|
||||
KDialog::slotButtonClicked(KDialog::Ok);
|
||||
}
|
||||
|
||||
void KEMailDialog::_slotError(const QString &errorstring)
|
||||
{
|
||||
KMessageBox::error(this, errorstring);
|
||||
}
|
||||
|
||||
#include "kemaildialog.moc"
|
||||
|
|
|
@ -52,11 +52,14 @@ public:
|
|||
KEMailDialog(QWidget *parent = nullptr, Qt::WindowFlags flags = 0);
|
||||
~KEMailDialog();
|
||||
|
||||
KEMail* kemail() const;
|
||||
|
||||
protected Q_SLOTS:
|
||||
virtual void slotButtonClicked(int button);
|
||||
|
||||
private Q_SLOTS:
|
||||
void _slotSettings();
|
||||
void _slotSent();
|
||||
void _slotError(const QString &errorstring);
|
||||
|
||||
private:
|
||||
Q_DISABLE_COPY(KEMailDialog);
|
||||
KEMailDialogPrivate *d;
|
||||
|
|
|
@ -21,7 +21,11 @@
|
|||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_6">
|
||||
<item row="0" column="1">
|
||||
<widget class="KLineEdit" name="sibjectlineedit"/>
|
||||
<widget class="KLineEdit" name="sibjectlineedit">
|
||||
<property name="placeholderText">
|
||||
<string>Cannot be empty</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
|
@ -46,7 +50,11 @@
|
|||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="1">
|
||||
<widget class="KLineEdit" name="fromlineedit"/>
|
||||
<widget class="KLineEdit" name="fromlineedit">
|
||||
<property name="placeholderText">
|
||||
<string>Cannot be empty</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="KLineEdit" name="userlineedit"/>
|
||||
|
@ -103,30 +111,30 @@
|
|||
</item>
|
||||
<item row="0" column="1" rowspan="3">
|
||||
<layout class="QGridLayout" name="gridLayout_5">
|
||||
<item row="0" column="0">
|
||||
<item row="1" column="0">
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="title">
|
||||
<string>Attachments</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="3" column="0">
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
<property name="title">
|
||||
<string>Recipients</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="0" column="0">
|
||||
<widget class="KEditListWidget" name="recipientslistwidget"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="KEditListWidget" name="attachlistwidget"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
<property name="title">
|
||||
<string>Recipients</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="0" column="0">
|
||||
<widget class="KEditListWidget" name="recipientslistwidget"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
|
|
Loading…
Add table
Reference in a new issue