diff --git a/kutils/kemail/kemail.cpp b/kutils/kemail/kemail.cpp index f9900573..0dd28097 100644 --- a/kutils/kemail/kemail.cpp +++ b/kutils/kemail/kemail.cpp @@ -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(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; diff --git a/kutils/kemail/kemail.h b/kutils/kemail/kemail.h index cee984ce..cbc3fe70 100644 --- a/kutils/kemail/kemail.h +++ b/kutils/kemail/kemail.h @@ -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 diff --git a/kutils/kemail/kemaildialog.cpp b/kutils/kemail/kemaildialog.cpp index 4adb5b02..d08f64f1 100644 --- a/kutils/kemail/kemaildialog.cpp +++ b/kutils/kemail/kemaildialog.cpp @@ -23,14 +23,32 @@ #include "ui_kemaildialog.h" -class KEMailDialogPrivate +#include +#include + +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" diff --git a/kutils/kemail/kemaildialog.h b/kutils/kemail/kemaildialog.h index 0253dc91..f03e46da 100644 --- a/kutils/kemail/kemaildialog.h +++ b/kutils/kemail/kemaildialog.h @@ -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; diff --git a/kutils/kemail/kemaildialog.ui b/kutils/kemail/kemaildialog.ui index 20eeea7e..75d36d34 100644 --- a/kutils/kemail/kemaildialog.ui +++ b/kutils/kemail/kemaildialog.ui @@ -21,7 +21,11 @@ - + + + Cannot be empty + + @@ -46,7 +50,11 @@ - + + + Cannot be empty + + @@ -103,30 +111,30 @@ - + Attachments - - - - Recipients - - - - - - - - + + + + Recipients + + + + + + + +