File indexing completed on 2024-05-12 05:10:49

0001 /*
0002   SPDX-FileCopyrightText: 2001 Cornelius Schumacher <schumacher@kde.org>
0003   SPDX-FileCopyrightText: 2009 Allen Winter <winter@kde.org>
0004 
0005   SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "publishdialog_p.h"
0009 #include <Akonadi/AbstractEmailAddressSelectionDialog>
0010 #include <Akonadi/EmailAddressSelectionDialog>
0011 #include <KCalendarCore/Person>
0012 #include <KEmailAddress>
0013 
0014 #include <KLocalizedString>
0015 #include <KPluginFactory>
0016 #include <QPointer>
0017 #include <QTreeView>
0018 
0019 using namespace KCalendarCore;
0020 using namespace Akonadi;
0021 
0022 PublishDialogPrivate::PublishDialogPrivate(PublishDialog *qq)
0023     : QObject()
0024     , q(qq)
0025 {
0026 }
0027 
0028 void PublishDialogPrivate::addItem()
0029 {
0030     mUI.mNameLineEdit->setEnabled(true);
0031     mUI.mEmailLineEdit->setEnabled(true);
0032     QListWidgetItem *item = mUI.mListWidget->currentItem();
0033     if (item) {
0034         if (!item->text().isEmpty()) {
0035             item = new QListWidgetItem(mUI.mListWidget);
0036             mUI.mListWidget->addItem(item);
0037         }
0038     } else {
0039         item = new QListWidgetItem(mUI.mListWidget);
0040         mUI.mListWidget->addItem(item);
0041     }
0042 
0043     item->setSelected(true);
0044     mUI.mNameLineEdit->setPlaceholderText(i18n("(EmptyName)"));
0045     mUI.mEmailLineEdit->setPlaceholderText(i18n("(EmptyEmail)"));
0046     mUI.mListWidget->setCurrentItem(item);
0047     mUI.mRemove->setEnabled(true);
0048 }
0049 
0050 void PublishDialogPrivate::removeItem()
0051 {
0052     if (mUI.mListWidget->selectedItems().isEmpty()) {
0053         return;
0054     }
0055     QListWidgetItem *item = mUI.mListWidget->selectedItems().at(0);
0056 
0057     int row = mUI.mListWidget->row(item);
0058     mUI.mListWidget->takeItem(row);
0059 
0060     if (!mUI.mListWidget->count()) {
0061         mUI.mNameLineEdit->setText(QString());
0062         mUI.mNameLineEdit->setEnabled(false);
0063         mUI.mEmailLineEdit->setText(QString());
0064         mUI.mEmailLineEdit->setEnabled(false);
0065         mUI.mRemove->setEnabled(false);
0066         return;
0067     }
0068     if (row > 0) {
0069         row--;
0070     }
0071 
0072     mUI.mListWidget->setCurrentRow(row);
0073 }
0074 
0075 void PublishDialogPrivate::insertAddresses(const KContacts::Addressee::List &list)
0076 {
0077     for (const KContacts::Addressee &contact : list) {
0078         mUI.mNameLineEdit->setEnabled(true);
0079         mUI.mEmailLineEdit->setEnabled(true);
0080         auto item = new QListWidgetItem(mUI.mListWidget);
0081         item->setSelected(true);
0082         mUI.mNameLineEdit->setText(contact.name());
0083         mUI.mEmailLineEdit->setText(contact.preferredEmail());
0084         mUI.mListWidget->addItem(item);
0085     }
0086 }
0087 
0088 void PublishDialogPrivate::openAddressbook()
0089 {
0090     QPointer<Akonadi::AbstractEmailAddressSelectionDialog> dialog;
0091 
0092     const KPluginMetaData editWidgetPlugin(QStringLiteral("pim6/akonadi/emailaddressselectionldapdialogplugin"));
0093 
0094     const auto result = KPluginFactory::instantiatePlugin<Akonadi::AbstractEmailAddressSelectionDialog>(editWidgetPlugin, q);
0095     if (result) {
0096         dialog = result.plugin;
0097     } else {
0098         dialog = new Akonadi::EmailAddressSelectionDialog(q);
0099     }
0100 
0101     dialog->view()->view()->setSelectionMode(QAbstractItemView::MultiSelection);
0102     connect(dialog.data(), &Akonadi::AbstractEmailAddressSelectionDialog::insertAddresses, this, &PublishDialogPrivate::insertAddresses);
0103     if (dialog->exec() == QDialog::Accepted) {
0104         const Akonadi::EmailAddressSelection::List selections = dialog->selectedAddresses();
0105         if (!selections.isEmpty()) {
0106             for (const Akonadi::EmailAddressSelection &selection : selections) {
0107                 mUI.mNameLineEdit->setEnabled(true);
0108                 mUI.mEmailLineEdit->setEnabled(true);
0109                 auto item = new QListWidgetItem(mUI.mListWidget);
0110                 item->setSelected(true);
0111                 mUI.mNameLineEdit->setText(selection.name());
0112                 mUI.mEmailLineEdit->setText(KEmailAddress::extractEmailAddress(KEmailAddress::normalizeAddressesAndEncodeIdn(selection.email())));
0113                 mUI.mListWidget->addItem(item);
0114             }
0115 
0116             mUI.mRemove->setEnabled(true);
0117         }
0118     }
0119     delete dialog;
0120 }
0121 
0122 void PublishDialogPrivate::updateItem()
0123 {
0124     if (mUI.mListWidget->selectedItems().isEmpty()) {
0125         return;
0126     }
0127 
0128     Person person(mUI.mNameLineEdit->text(), mUI.mEmailLineEdit->text());
0129     QListWidgetItem *item = mUI.mListWidget->selectedItems().at(0);
0130     item->setText(person.fullName());
0131 }
0132 
0133 void PublishDialogPrivate::updateInput()
0134 {
0135     if (mUI.mListWidget->selectedItems().isEmpty()) {
0136         return;
0137     }
0138 
0139     mUI.mNameLineEdit->setEnabled(true);
0140     mUI.mEmailLineEdit->setEnabled(true);
0141 
0142     QListWidgetItem *item = mUI.mListWidget->selectedItems().at(0);
0143     QString mail;
0144     QString name;
0145     KEmailAddress::extractEmailAddressAndName(item->text(), mail, name);
0146     mUI.mNameLineEdit->setText(name);
0147     mUI.mEmailLineEdit->setText(mail);
0148 }
0149 
0150 #include "moc_publishdialog_p.cpp"