File indexing completed on 2024-05-12 05:46:27

0001 /*
0002  * Copyright (c) 2000 Alex Zepeda <zipzippy@sonic.net>
0003  * All rights reserved.
0004  *
0005  * Redistribution and use in source and binary forms, with or without
0006  * modification, are permitted provided that the following conditions
0007  * are met:
0008  * 1. Redistributions of source code must retain the above copyright
0009  *    notice, this list of conditions and the following disclaimer.
0010  * 2. Redistributions in binary form must reproduce the above copyright
0011  *    notice, this list of conditions and the following disclaimer in the
0012  *    documentation and/or other materials provided with the distribution.
0013  *
0014  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
0015  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0016  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0017  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
0018  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
0019  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
0020  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
0021  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
0022  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
0023  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
0024  * SUCH DAMAGE.
0025  */
0026 
0027 #include "kemailsettings.h"
0028 
0029 #include <kconfig.h>
0030 #include <kconfiggroup.h>
0031 
0032 class KEMailSettingsPrivate
0033 {
0034 public:
0035     KEMailSettingsPrivate() : m_pConfig(nullptr) {}
0036     ~KEMailSettingsPrivate()
0037     {
0038         delete m_pConfig;
0039     }
0040     KConfig *m_pConfig;
0041     QStringList profiles;
0042     QString m_sDefaultProfile, m_sCurrentProfile;
0043 };
0044 
0045 QString KEMailSettings::defaultProfileName() const
0046 {
0047     return p->m_sDefaultProfile;
0048 }
0049 
0050 QString KEMailSettings::getSetting(KEMailSettings::Setting s) const
0051 {
0052     KConfigGroup cg(p->m_pConfig, QLatin1String("PROFILE_") + p->m_sCurrentProfile);
0053     switch (s) {
0054     case ClientProgram: {
0055         return cg.readEntry("EmailClient");
0056     }
0057     case ClientTerminal: {
0058         return cg.readEntry("TerminalClient", QVariant(false)).toString();
0059     }
0060     case RealName: {
0061         return cg.readEntry("FullName");
0062     }
0063     case EmailAddress: {
0064         return cg.readEntry("EmailAddress");
0065     }
0066     case ReplyToAddress: {
0067         return cg.readEntry("ReplyAddr");
0068     }
0069     case Organization: {
0070         return cg.readEntry("Organization");
0071     }
0072     case OutServer: {
0073         return cg.readEntry("OutgoingServer");
0074     }
0075     case OutServerLogin: {
0076         return cg.readEntry("OutgoingUserName");
0077     }
0078     case OutServerPass: {
0079         return cg.readEntry("OutgoingPassword");
0080     }
0081 #if KCONFIGCORE_BUILD_DEPRECATED_SINCE(5, 0)
0082     case OutServerType: {
0083         return cg.readEntry("OutgoingServerType");
0084     }
0085     case OutServerCommand: {
0086         return cg.readEntry("OutgoingCommand");
0087     }
0088     case OutServerTLS: {
0089         return cg.readEntry("OutgoingServerTLS", QVariant(false)).toString();
0090     }
0091 #else
0092     case OutServerType_DEPRECATED_DO_NOT_USE:
0093     case OutServerCommand_DEPRECATED_DO_NOT_USE:
0094     case OutServerTLS_DEPRECATED_DO_NOT_USE:
0095         break;
0096 #endif
0097     case InServer: {
0098         return cg.readEntry("IncomingServer");
0099     }
0100     case InServerLogin: {
0101         return cg.readEntry("IncomingUserName");
0102     }
0103     case InServerPass: {
0104         return cg.readEntry("IncomingPassword");
0105     }
0106 #if KCONFIGCORE_BUILD_DEPRECATED_SINCE(5, 0)
0107     case InServerType: {
0108         return cg.readEntry("IncomingServerType");
0109     }
0110     case InServerMBXType: {
0111         return cg.readEntry("IncomingServerMBXType");
0112     }
0113     case InServerTLS: {
0114         return cg.readEntry("IncomingServerTLS", QVariant(false)).toString();
0115     }
0116 #endif
0117     };
0118     return QString();
0119 }
0120 void KEMailSettings::setSetting(KEMailSettings::Setting s, const QString  &v)
0121 {
0122     KConfigGroup cg(p->m_pConfig, QLatin1String("PROFILE_") + p->m_sCurrentProfile);
0123     switch (s) {
0124     case ClientProgram: {
0125         cg.writePathEntry("EmailClient", v);
0126         break;
0127     }
0128     case ClientTerminal: {
0129         cg.writeEntry("TerminalClient", (v == QLatin1String("true")));
0130         break;
0131     }
0132     case RealName: {
0133         cg.writeEntry("FullName", v);
0134         break;
0135     }
0136     case EmailAddress: {
0137         cg.writeEntry("EmailAddress", v);
0138         break;
0139     }
0140     case ReplyToAddress: {
0141         cg.writeEntry("ReplyAddr", v);
0142         break;
0143     }
0144     case Organization: {
0145         cg.writeEntry("Organization", v);
0146         break;
0147     }
0148     case OutServer: {
0149         cg.writeEntry("OutgoingServer", v);
0150         break;
0151     }
0152     case OutServerLogin: {
0153         cg.writeEntry("OutgoingUserName", v);
0154         break;
0155     }
0156     case OutServerPass: {
0157         cg.writeEntry("OutgoingPassword", v);
0158         break;
0159     }
0160 #if KCONFIGCORE_BUILD_DEPRECATED_SINCE(5, 0)
0161     case OutServerType: {
0162         cg.writeEntry("OutgoingServerType", v);
0163         break;
0164     }
0165     case OutServerCommand: {
0166         cg.writeEntry("OutgoingCommand", v);
0167         break;
0168     }
0169     case OutServerTLS: {
0170         cg.writeEntry("OutgoingServerTLS", (v == QLatin1String("true")));
0171         break;
0172     }
0173 #else
0174     case OutServerType_DEPRECATED_DO_NOT_USE:
0175     case OutServerCommand_DEPRECATED_DO_NOT_USE:
0176     case OutServerTLS_DEPRECATED_DO_NOT_USE:
0177         break;
0178 #endif
0179     case InServer: {
0180         cg.writeEntry("IncomingServer", v);
0181         break;
0182     }
0183     case InServerLogin: {
0184         cg.writeEntry("IncomingUserName", v);
0185         break;
0186     }
0187     case InServerPass: {
0188         cg.writeEntry("IncomingPassword", v);
0189         break;
0190     }
0191 #if KCONFIGCORE_BUILD_DEPRECATED_SINCE(5, 0)
0192     case InServerType: {
0193         cg.writeEntry("IncomingServerType", v);
0194         break;
0195     }
0196     case InServerMBXType: {
0197         cg.writeEntry("IncomingServerMBXType", v);
0198         break;
0199     }
0200     case InServerTLS: {
0201         cg.writeEntry("IncomingServerTLS", (v == QLatin1String("true")));
0202         break;
0203     }
0204 #endif
0205     };
0206     cg.sync();
0207 }
0208 
0209 void KEMailSettings::setDefault(const QString &s)
0210 {
0211     p->m_pConfig->group("Defaults").writeEntry("Profile", s);
0212     p->m_pConfig->sync();
0213     p->m_sDefaultProfile = s;
0214 
0215 }
0216 
0217 void KEMailSettings::setProfile(const QString &s)
0218 {
0219     const QString groupname = QLatin1String("PROFILE_") + s;
0220     p->m_sCurrentProfile = s;
0221     if (!p->m_pConfig->hasGroup(groupname)) { // Create a group if it doesn't exist
0222         KConfigGroup cg(p->m_pConfig, groupname);
0223         cg.writeEntry("ServerType", QString());
0224         p->profiles += s;
0225     }
0226 }
0227 
0228 #if KCONFIGCORE_BUILD_DEPRECATED_SINCE(5, 0)
0229 QString KEMailSettings::currentProfileName() const
0230 {
0231     return p->m_sCurrentProfile;
0232 }
0233 #endif
0234 
0235 QStringList KEMailSettings::profiles() const
0236 {
0237     return p->profiles;
0238 }
0239 
0240 KEMailSettings::KEMailSettings()
0241     : p(new KEMailSettingsPrivate())
0242 {
0243     p->m_sCurrentProfile.clear();
0244 
0245     p->m_pConfig = new KConfig(QStringLiteral("emaildefaults"));
0246 
0247     const QStringList groups = p->m_pConfig->groupList();
0248     for (QStringList::ConstIterator it = groups.begin(); it != groups.end(); ++it) {
0249         if ((*it).startsWith(QLatin1String("PROFILE_"))) {
0250             p->profiles += (*it).mid(8, (*it).length());
0251         }
0252     }
0253 
0254     KConfigGroup cg(p->m_pConfig, "Defaults");
0255     p->m_sDefaultProfile = cg.readEntry("Profile", tr("Default"));
0256     if (!p->m_sDefaultProfile.isNull()) {
0257         if (!p->m_pConfig->hasGroup(QLatin1String("PROFILE_") + p->m_sDefaultProfile)) {
0258             setDefault(tr("Default"));
0259         } else {
0260             setDefault(p->m_sDefaultProfile);
0261         }
0262     } else {
0263         if (!p->profiles.isEmpty()) {
0264             setDefault(p->profiles[0]);
0265         } else {
0266             setDefault(tr("Default"));
0267         }
0268     }
0269     setProfile(defaultProfileName());
0270 }
0271 
0272 KEMailSettings::~KEMailSettings()
0273 {
0274     delete p;
0275 }