7#include "vacationeditwidget.h"
8#include "vacationmailactionwidget.h"
9#include "vacationmaillineedit.h"
11#include <KDateComboBox>
12#include <KLocalizedString>
13#include <KTimeComboBox>
15#include <QRegularExpressionValidator>
18#include "libksieveui_debug.h"
19#include <KLineEditEventHandler>
20#include <TextCustomEditor/PlainTextEditor>
21#include <TextCustomEditor/PlainTextEditorWidget>
23#include <KMime/HeaderParsing>
25#include <PimCommon/SpellCheckLineEdit>
30using KMime::HeaderParsing::parseAddressList;
31using KMime::Types::AddressList;
32using KMime::Types::AddrSpecList;
34using namespace KSieveUi;
35VacationEditWidget::VacationEditWidget(
QWidget *parent)
41 glay->setContentsMargins({});
42 glay->setColumnStretch(1, 1);
46 auto configureVacationLabel =
new QLabel(
i18nc(
"@label:textbox",
48 "notifications to be sent:"),
50 configureVacationLabel->setObjectName(
QLatin1StringView(
"configureVacationLabel"));
51 glay->addWidget(configureVacationLabel, row, 0, 1, 2);
55 mActiveCheck =
new QCheckBox(
i18nc(
"@option:check",
"&Activate vacation notifications"),
this);
57 glay->addWidget(mActiveCheck, row, 0, 1, 2);
62 glay->setRowStretch(row, 1);
65 glay->addWidget(mTextEdit, row, 0, 1, 2);
75 auto subjectOfVacationLabel =
new QLabel(
i18nc(
"@label:textbox",
"&Subject of the vacation mail:"),
this);
76 subjectOfVacationLabel->setObjectName(
QLatin1StringView(
"subjectOfVacationLabel"));
77 subjectOfVacationLabel->setBuddy(mSubject);
78 glay->addWidget(subjectOfVacationLabel, row, 0);
79 glay->addWidget(mSubject, row, 1);
95 mStartTime->setEnabled(
false);
103 timeLayout->addWidget(mStartDate);
104 timeLayout->addWidget(mStartTimeActive);
105 timeLayout->addWidget(mStartTime);
107 mStartDateLabel =
new QLabel(
i18nc(
"@label:textbox",
"Start date:"),
this);
109 mStartDateLabel->setBuddy(mStartDate);
110 glay->addWidget(mStartDateLabel, row, 0);
111 glay->addLayout(timeLayout, row, 1);
128 mEndTime->setEnabled(
false);
137 mEndDateLabel =
new QLabel(
i18nc(
"@label:textbox",
"End date:"),
this);
139 mEndDateLabel->setBuddy(mEndDate);
140 glay->addWidget(mEndDateLabel, row, 0);
142 timeLayout->addWidget(mEndDate);
143 timeLayout->addWidget(mEndTimeActive);
144 timeLayout->addWidget(mEndTime);
145 glay->addLayout(timeLayout, row, 1);
153 int defDayInterval = 7;
155 mIntervalSpin->setMaximum(356);
156 mIntervalSpin->setMinimum(1);
157 mIntervalSpin->setSingleStep(1);
158 mIntervalSpin->setValue(defDayInterval);
160 mIntervalSpin->setSuffix(
i18np(
" day",
" days", defDayInterval));
162 auto resendNotificationLabel =
new QLabel(
i18nc(
"@label:textbox",
"&Resend notification only after:"),
this);
163 resendNotificationLabel->setObjectName(
QLatin1StringView(
"resendNotificationLabel"));
164 resendNotificationLabel->setBuddy(mIntervalSpin);
165 glay->addWidget(resendNotificationLabel, row, 0);
166 glay->addWidget(mIntervalSpin, row, 1);
170 mMailAliasesEdit =
new KSieveUi::VacationMailLineEdit(
this);
172 mMailAliasesEdit->setClearButtonEnabled(
true);
175 auto sendResponseLabel =
new QLabel(
i18nc(
"@label:textbox",
"&Send responses for these addresses:"),
this);
177 sendResponseLabel->setBuddy(mMailAliasesEdit);
178 glay->addWidget(sendResponseLabel, row, 0);
179 glay->addWidget(mMailAliasesEdit, row, 1);
183 for (
int i = 0; i < 4; ++i) {
184 mMailAction->addItem(KSieveCore::VacationUtils::mailAction(
static_cast<KSieveCore::VacationUtils::MailAction
>(i)));
190 mMailActionRecipient =
new VacationMailActionWidget(
this);
192 connect(mMailActionRecipient, &VacationMailActionWidget::wasChanged,
this, &VacationEditWidget::setWasChanged);
198 hLayout->addWidget(mMailActionRecipient);
201 auto actionIncomingMailsLabel =
new QLabel(
i18nc(
"@label:textbox",
"&Action for incoming mails:"),
this);
202 actionIncomingMailsLabel->setBuddy(mMailAction);
203 actionIncomingMailsLabel->setObjectName(
QLatin1StringView(
"actionIncomingMailsLabel"));
204 glay->addWidget(actionIncomingMailsLabel, row, 0);
205 glay->addLayout(hLayout, row, 1);
209 mSpamCheck =
new QCheckBox(
i18nc(
"@option:check",
"Do not send vacation replies to spam messages"),
this);
211 mSpamCheck->setChecked(
true);
212 glay->addWidget(mSpamCheck, row, 0, 1, 2);
217 mDomainCheck =
new QCheckBox(
i18nc(
"@option:check",
"Only react to mail coming from domain:"),
this);
219 mDomainCheck->setChecked(
false);
225 mDomainEdit->setClearButtonEnabled(
true);
226 mDomainEdit->setEnabled(
false);
228 glay->addWidget(mDomainCheck, row, 0);
229 glay->addWidget(mDomainEdit, row, 1);
234VacationEditWidget::~VacationEditWidget() =
default;
236bool VacationEditWidget::activateVacation()
const
238 return mActiveCheck->isChecked();
241void VacationEditWidget::setActivateVacation(
bool activate)
243 mActiveCheck->setChecked(activate);
246QString VacationEditWidget::messageText()
const
248 return mTextEdit->toPlainText().trimmed();
251void VacationEditWidget::setMessageText(
const QString &text)
253 mTextEdit->setPlainText(text);
254 const int height = (mTextEdit->fontMetrics().lineSpacing() + 1) * 11;
255 mTextEdit->setMinimumHeight(
height);
258int VacationEditWidget::notificationInterval()
const
260 return mIntervalSpin->value();
263void VacationEditWidget::setNotificationInterval(
int days)
265 mIntervalSpin->setValue(days);
268AddrSpecList VacationEditWidget::mailAliases(
bool &ok)
const
270 QByteArray text = mMailAliasesEdit->text().
toLatin1();
271 AddressList addressList;
272 const char *s = text.
cbegin();
273 AddrSpecList addrSpecList;
274 if (parseAddressList(s, text.
cend(), addressList)) {
275 for (
const auto &address : std::as_const(addressList)) {
276 for (
const auto &mail :
address.mailboxList) {
282 qCWarning(LIBKSIEVEUI_LOG) <<
"Impossible to parse email!" << text;
285 mMailAliasesEdit->setInvalidEmail(!ok);
289void VacationEditWidget::setMailAliases(
const AddrSpecList &aliases)
293 for (
const auto &str : aliases) {
296 mMailAliasesEdit->setText(sl.
join(QLatin1StringView(
", ")));
299void VacationEditWidget::setMailAliases(
const QString &aliases)
301 mMailAliasesEdit->setText(aliases);
304void VacationEditWidget::slotIntervalSpinChanged(
int value)
306 mIntervalSpin->setSuffix(
i18np(
" day",
" days", value));
310QString VacationEditWidget::domainName()
const
312 return mDomainCheck->isChecked() ? mDomainEdit->text() : QString();
315void VacationEditWidget::setDomainName(
const QString &domain)
318 mDomainEdit->setText(domain);
319 mDomainCheck->setChecked(
true);
323bool VacationEditWidget::domainCheck()
const
325 return mDomainCheck->isChecked();
328void VacationEditWidget::setDomainCheck(
bool check)
330 mDomainCheck->setChecked(check);
333bool VacationEditWidget::sendForSpam()
const
335 return !mSpamCheck->isChecked();
338void VacationEditWidget::setSendForSpam(
bool enable)
340 mSpamCheck->setChecked(!enable);
343QDate VacationEditWidget::endDate()
const
345 if (mEndDate->isEnabled()) {
346 return mEndDate->date();
352void VacationEditWidget::setEndDate(QDate endDate)
354 mEndDate->setDate(endDate);
357QTime VacationEditWidget::endTime()
const
359 if (mEndTime->isEnabled()) {
360 return mEndTime->time();
366void VacationEditWidget::setEndTime(QTime endTime)
368 mEndTimeActive->setChecked(endTime.isValid());
369 mEndTime->setEnabled(endTime.isValid());
370 mEndTime->setTime(endTime);
373QDate VacationEditWidget::startDate()
const
375 if (mStartDate->isEnabled()) {
376 return mStartDate->date();
382void VacationEditWidget::setStartDate(QDate startDate)
384 mStartDate->setDate(startDate);
387QTime VacationEditWidget::startTime()
const
389 if (mStartTime->isEnabled()) {
390 return mStartTime->time();
396void VacationEditWidget::setStartTime(QTime startTime)
398 mStartTimeActive->setChecked(startTime.isValid());
399 mStartTime->setEnabled(startTime.isValid());
400 mStartTime->setTime(startTime);
403void VacationEditWidget::setSubject(
const QString &subject)
405 mSubject->setText(subject);
408QString VacationEditWidget::subject()
const
410 if (mSubject->isEnabled()) {
411 return mSubject->toPlainText();
417void VacationEditWidget::enableDates(
bool enable)
419 mStartDate->setVisible(enable);
420 mStartDateLabel->setVisible(enable);
421 mEndDate->setVisible(enable);
422 mEndDateLabel->setVisible(enable);
423 mStartTime->setVisible(enable);
424 mStartTimeActive->setVisible(enable);
425 mEndTime->setVisible(enable);
426 mEndTimeActive->setVisible(enable);
429void VacationEditWidget::mailActionChanged(
int action)
431 mMailActionRecipient->mailActionChanged(
static_cast<KSieveCore::VacationUtils::MailAction
>(action));
435void VacationEditWidget::setWasChanged()
440bool VacationEditWidget::changed()
const
445void VacationEditWidget::setChanged(
bool changed)
450void VacationEditWidget::setMailAction(KSieveCore::VacationUtils::MailAction action,
const QString &recipient)
452 mMailAction->setCurrentIndex(action);
453 mMailActionRecipient->setMailAction(action, recipient);
456void VacationEditWidget::setSieveImapAccountSettings(
const KSieveCore::SieveImapAccountSettings &account)
458 mMailActionRecipient->setSieveImapAccountSettings(account);
461KSieveCore::VacationUtils::MailAction VacationEditWidget::mailAction()
const
463 return static_cast<KSieveCore::VacationUtils::MailAction
>(mMailAction->currentIndex());
466QString VacationEditWidget::mailActionRecipient(
bool &valid)
const
468 return mMailActionRecipient->mailActionRecipient(valid);
471void VacationEditWidget::enableDomainAndSendForSpam(
bool enable)
473 mDomainCheck->setEnabled(enable);
474 mDomainEdit->setEnabled(enable && mDomainCheck->isChecked());
475 mSpamCheck->setEnabled(enable);
478void VacationEditWidget::setDefault()
480 setActivateVacation(
true);
481 setMessageText(KSieveCore::VacationUtils::defaultMessageText());
482 setSubject(KSieveCore::VacationUtils::defaultSubject());
483 setNotificationInterval(KSieveCore::VacationUtils::defaultNotificationInterval());
484 setMailAliases(KSieveCore::VacationUtils::defaultMailAliases());
485 setSendForSpam(KSieveCore::VacationUtils::defaultSendForSpam());
486 setDomainName(KSieveCore::VacationUtils::defaultDomainName());
487 setMailAction(KSieveCore::VacationUtils::defaultMailAction(), QString());
488 mStartTimeActive->setChecked(
false);
489 mEndTimeActive->setChecked(
false);
490 mStartTime->setTime(QTime());
491 mEndTime->setTime(QTime());
492 mStartDate->setDate(QDate());
493 mEndDate->setDate(QDate());
494 setDomainCheck(
false);
495 mDomainEdit->clear();
498#include "moc_vacationeditwidget.cpp"
void dateEdited(const QDate &date)
void dateChanged(const QDate &date)
void timeChanged(const QTime &time)
void timeEdited(const QTime &time)
QString i18np(const char *singular, const char *plural, const TYPE &arg...)
QString i18nc(const char *context, const char *text, const TYPE &arg...)
PostalAddress address(const QVariant &location)
void catchReturnKey(QObject *lineEdit)
QAction * mail(const QObject *recvr, const char *slot, QObject *parent)
const_iterator cbegin() const const
const_iterator cend() const const
void currentIndexChanged(int index)
void textChanged(const QString &text)
qsizetype count() const const
void push_back(parameter_type value)
void reserve(qsizetype size)
bool isEmpty() const const
QByteArray toLatin1() const const
QString join(QChar separator) const const
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)