1 /* 2 SPDX-FileCopyrightText: 2005 Till Adam <adam@kde.org> 3 4 SPDX-License-Identifier: GPL-2.0-or-later 5 */ 6 7 #include "util.h" 8 #include "akonadiimapsettinginterface.h" 9 #include "imapresourcesettings.h" 10 #include "libksieve_debug.h" 11 #include "sieve-vacation.h" 12 #include "sieveimapinstance/sieveimapinstance.h" 13 #include "sieveimapinstance/sieveimapinstanceinterfacemanager.h" 14 #include "sieveimappasswordprovider.h" 15 #include "util_p.h" 16 #include <PimCommon/PimUtil> 17 18 #include <KMime/KMimeMessage> 19 #include <MailTransport/Transport> 20 21 using namespace KSieveUi; 22 sieveImapResourceNames()23QStringList KSieveUi::Util::sieveImapResourceNames() 24 { 25 const QVector<KSieveUi::SieveImapInstance> lst = KSieveUi::Util::sieveImapInstances(); 26 QStringList resourceNames; 27 resourceNames.reserve(lst.count()); 28 for (const KSieveUi::SieveImapInstance &type : lst) { 29 resourceNames << type.identifier(); 30 } 31 return resourceNames; 32 } 33 sieveImapInstances()34QVector<KSieveUi::SieveImapInstance> KSieveUi::Util::sieveImapInstances() 35 { 36 const QVector<KSieveUi::SieveImapInstance> allInstances = KSieveUi::SieveImapInstanceInterfaceManager::self()->sieveImapInstanceList(); 37 QVector<KSieveUi::SieveImapInstance> relevantInstances; 38 for (const KSieveUi::SieveImapInstance &instance : allInstances) { 39 if (instance.mimeTypes().contains(KMime::Message::mimeType()) && instance.capabilities().contains(QLatin1String("Resource")) 40 && !instance.capabilities().contains(QLatin1String("Virtual"))) { 41 if (PimCommon::Util::isImapResource(instance.identifier())) { 42 relevantInstances << instance; 43 } 44 } 45 } 46 return relevantInstances; 47 } 48 checkOutOfOfficeOnStartup()49bool KSieveUi::Util::checkOutOfOfficeOnStartup() 50 { 51 return VacationSettings::self()->checkOutOfOfficeOnStartup(); 52 } 53 allowOutOfOfficeSettings()54bool KSieveUi::Util::allowOutOfOfficeSettings() 55 { 56 return VacationSettings::self()->allowOutOfOfficeSettings(); 57 } 58 hasKep14CapabilitySupport(const QStringList & sieveCapabilities)59bool Util::hasKep14CapabilitySupport(const QStringList &sieveCapabilities) 60 { 61 const bool hasIncludeCapability = sieveCapabilities.contains(QLatin1String("include")); 62 return hasIncludeCapability; 63 } 64 hasKep14Support(const QStringList & sieveCapabilities,const QStringList & availableScripts,const QString & activeScript)65bool Util::hasKep14Support(const QStringList &sieveCapabilities, const QStringList &availableScripts, const QString &activeScript) 66 { 67 const bool hasIncludeCapability = Util::hasKep14CapabilitySupport(sieveCapabilities); 68 if (!hasIncludeCapability) { 69 return false; 70 } 71 72 bool masterIsActive = !activeScript.isEmpty(); 73 if (masterIsActive) { 74 const QString scriptName = activeScript.split(QLatin1Char('.')).first().toLower(); 75 masterIsActive = (scriptName == QLatin1String("master") || scriptName == QLatin1String("user")); 76 } 77 if (!masterIsActive) { 78 return false; 79 } 80 81 bool hasUserScript = false; 82 for (const QString &script : availableScripts) { 83 if (script.isEmpty()) { 84 continue; 85 } 86 const QString name = script.split(QLatin1Char('.')).first().toLower(); 87 if (name == QLatin1String("user")) { 88 hasUserScript = true; 89 break; 90 } 91 } 92 93 return hasIncludeCapability && masterIsActive && hasUserScript; 94 } 95 isKep14ProtectedName(const QString & name)96bool Util::isKep14ProtectedName(const QString &name) 97 { 98 const QString n = name.split(QLatin1Char('.')).first().toLower(); 99 if (n == QLatin1String("master") || n == QLatin1String("user") || n == QLatin1String("management")) { 100 return true; 101 } 102 return false; 103 } 104 operator <<(QDebug d,const Util::AccountInfo & info)105QDebug Util::operator<<(QDebug d, const Util::AccountInfo &info) 106 { 107 d << "sieveImapAccountSettings " << info.sieveImapAccountSettings; 108 d << "url " << info.sieveUrl.toString(); 109 return d; 110 } 111 operator ==(const Util::AccountInfo & other) const112bool Util::AccountInfo::operator==(const Util::AccountInfo &other) const 113 { 114 const bool result = (other.sieveImapAccountSettings == sieveImapAccountSettings) && (other.sieveUrl == sieveUrl); 115 if (!result) { 116 qCDebug(LIBKSIEVE_LOG) << "actual :" << *this << "\n other :" << other; 117 } 118 return result; 119 } 120