File indexing completed on 2024-05-12 05:20:46
0001 /* 0002 SPDX-FileCopyrightText: 2005 Till Adam <adam@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "util.h" 0008 0009 #include "job/handleclickedurljob.h" 0010 #include <MessageComposer/MessageHelper> 0011 #include <MessageCore/StringUtil> 0012 0013 #include "kmail_debug.h" 0014 #include <KLocalizedString> 0015 #include <KMime/KMimeMessage> 0016 0017 #include <QAction> 0018 #include <QStandardPaths> 0019 0020 using namespace MailCommon; 0021 using namespace KMail; 0022 KMime::Types::Mailbox::List KMail::Util::mailingListsFromMessage(const Akonadi::Item &item) 0023 { 0024 KMime::Types::Mailbox::List addresses; 0025 // determine the mailing list posting address 0026 Akonadi::Collection parentCollection = item.parentCollection(); 0027 if (parentCollection.isValid()) { 0028 const QSharedPointer<FolderSettings> fd = FolderSettings::forCollection(parentCollection, false); 0029 if (fd->isMailingListEnabled() && !fd->mailingListPostAddress().isEmpty()) { 0030 KMime::Types::Mailbox mailbox; 0031 mailbox.fromUnicodeString(fd->mailingListPostAddress()); 0032 addresses << mailbox; 0033 } 0034 } 0035 0036 return addresses; 0037 } 0038 0039 Akonadi::Item::Id KMail::Util::putRepliesInSameFolder(const Akonadi::Item &item) 0040 { 0041 Akonadi::Collection parentCollection = item.parentCollection(); 0042 if (parentCollection.isValid()) { 0043 const QSharedPointer<FolderSettings> fd = FolderSettings::forCollection(parentCollection, false); 0044 if (fd->putRepliesInSameFolder()) { 0045 return parentCollection.id(); 0046 } 0047 } 0048 return -1; 0049 } 0050 0051 bool KMail::Util::handleClickedURL(const QUrl &url, const QSharedPointer<MailCommon::FolderSettings> &folder, const Akonadi::Collection &collection) 0052 { 0053 if (url.scheme() == QLatin1StringView("mailto")) { 0054 auto job = new HandleClickedUrlJob; 0055 job->setUrl(url); 0056 job->setFolder(folder); 0057 job->setCurrentCollection(collection); 0058 job->start(); 0059 return true; 0060 } else { 0061 qCWarning(KMAIL_LOG) << "Can't handle URL:" << url; 0062 return false; 0063 } 0064 } 0065 0066 bool KMail::Util::mailingListsHandleURL(const QList<QUrl> &lst, const QSharedPointer<MailCommon::FolderSettings> &folder, const Akonadi::Collection &collection) 0067 { 0068 const QString handler = (folder->mailingList().handler() == MailingList::KMail) ? QStringLiteral("mailto") : QStringLiteral("https"); 0069 0070 QUrl urlToHandle; 0071 QList<QUrl>::ConstIterator end(lst.constEnd()); 0072 for (QList<QUrl>::ConstIterator itr = lst.constBegin(); itr != end; ++itr) { 0073 if (handler == (*itr).scheme()) { 0074 urlToHandle = *itr; 0075 break; 0076 } 0077 } 0078 if (urlToHandle.isEmpty() && !lst.empty()) { 0079 urlToHandle = lst.constFirst(); 0080 } 0081 0082 if (!urlToHandle.isEmpty()) { 0083 return Util::handleClickedURL(urlToHandle, folder, collection); 0084 } else { 0085 qCWarning(KMAIL_LOG) << "Can't handle url"; 0086 return false; 0087 } 0088 } 0089 0090 bool KMail::Util::mailingListPost(const QSharedPointer<MailCommon::FolderSettings> &fd, const Akonadi::Collection &col) 0091 { 0092 if (fd) { 0093 return KMail::Util::mailingListsHandleURL(fd->mailingList().postUrls(), fd, col); 0094 } 0095 return false; 0096 } 0097 0098 bool KMail::Util::mailingListSubscribe(const QSharedPointer<MailCommon::FolderSettings> &fd, const Akonadi::Collection &col) 0099 { 0100 if (fd) { 0101 return KMail::Util::mailingListsHandleURL(fd->mailingList().subscribeUrls(), fd, col); 0102 } 0103 return false; 0104 } 0105 0106 bool KMail::Util::mailingListUnsubscribe(const QSharedPointer<MailCommon::FolderSettings> &fd, const Akonadi::Collection &col) 0107 { 0108 if (fd) { 0109 return KMail::Util::mailingListsHandleURL(fd->mailingList().unsubscribeUrls(), fd, col); 0110 } 0111 return false; 0112 } 0113 0114 bool KMail::Util::mailingListArchives(const QSharedPointer<MailCommon::FolderSettings> &fd, const Akonadi::Collection &col) 0115 { 0116 if (fd) { 0117 return KMail::Util::mailingListsHandleURL(fd->mailingList().archiveUrls(), fd, col); 0118 } 0119 return false; 0120 } 0121 0122 bool KMail::Util::mailingListHelp(const QSharedPointer<MailCommon::FolderSettings> &fd, const Akonadi::Collection &col) 0123 { 0124 if (fd) { 0125 return KMail::Util::mailingListsHandleURL(fd->mailingList().helpUrls(), fd, col); 0126 } 0127 return false; 0128 } 0129 0130 void KMail::Util::lastEncryptAndSignState(bool &lastEncrypt, bool &lastSign, const KMime::Message::Ptr &msg) 0131 { 0132 lastSign = KMime::isSigned(msg.data()); 0133 lastEncrypt = KMime::isEncrypted(msg.data()); 0134 } 0135 0136 void KMail::Util::addQActionHelpText(QAction *action, const QString &text) 0137 { 0138 action->setStatusTip(text); 0139 action->setToolTip(text); 0140 if (action->whatsThis().isEmpty()) { 0141 action->setWhatsThis(text); 0142 } 0143 } 0144 0145 void KMail::Util::setActionTrashOrDelete(QAction *action, bool isInTrashFolder) 0146 { 0147 if (action) { 0148 action->setText(isInTrashFolder ? i18nc("@action Hard delete, bypassing trash", "&Delete") : i18n("&Move to Trash")); 0149 action->setIcon(isInTrashFolder ? QIcon::fromTheme(QStringLiteral("edit-delete-shred")) : QIcon::fromTheme(QStringLiteral("edit-delete"))); 0150 // Use same text as in Text property. Change it in kf5 0151 action->setToolTip(isInTrashFolder ? i18nc("@action Hard delete, bypassing trash", "Delete") : i18n("Move to Trash")); 0152 } 0153 }