X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fclientsettings.cpp;h=f525e3df8553d9e2bc5a10f4404e32c108918334;hp=55df8c45311e2c02bd28b816a0bfec8515b074bd;hb=1f21c1f9613031ae263eeed0c4883bfcd5488343;hpb=e10200137c6829b7a0bab2968394d99f3c796290 diff --git a/src/client/clientsettings.cpp b/src/client/clientsettings.cpp index 55df8c45..f525e3df 100644 --- a/src/client/clientsettings.cpp +++ b/src/client/clientsettings.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-09 by the Quassel Project * + * Copyright (C) 2005-2019 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -15,281 +15,374 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#include - - #include "clientsettings.h" +#include + #include +#include #ifdef HAVE_SSL -#include +# include #endif - #include "client.h" #include "quassel.h" -ClientSettings::ClientSettings(QString g) : Settings(g, Quassel::buildInfo().clientApplicationName) { -} - -ClientSettings::~ClientSettings() { -} +ClientSettings::ClientSettings(QString g) + : Settings(g, Quassel::buildInfo().clientApplicationName) +{} /***********************************************************************************************/ -CoreAccountSettings::CoreAccountSettings(const QString &subgroup) - : ClientSettings("CoreAccounts"), - _subgroup(subgroup) -{ -} +CoreAccountSettings::CoreAccountSettings(QString subgroup) + : ClientSettings("CoreAccounts") + , _subgroup(std::move(subgroup)) +{} -void CoreAccountSettings::notify(const QString &key, QObject *receiver, const char *slot) { - ClientSettings::notify(QString("%1/%2/%3").arg(Client::currentCoreAccount().accountId().toInt()).arg(_subgroup).arg(key), receiver, slot); +QString CoreAccountSettings::keyForNotify(const QString& key) const +{ + return QString{"%1/%2/%3"}.arg(Client::currentCoreAccount().accountId().toInt()).arg(_subgroup).arg(key); } -QList CoreAccountSettings::knownAccounts() { - QList ids; - foreach(const QString &key, localChildGroups()) { - AccountId acc = key.toInt(); - if(acc.isValid()) - ids << acc; - } - return ids; +QList CoreAccountSettings::knownAccounts() const +{ + QList ids; + foreach (const QString& key, localChildGroups()) { + AccountId acc = key.toInt(); + if (acc.isValid()) + ids << acc; + } + return ids; } -AccountId CoreAccountSettings::lastAccount() { - return localValue("LastAccount", 0).toInt(); +AccountId CoreAccountSettings::lastAccount() const +{ + return localValue("LastAccount", 0).toInt(); } -void CoreAccountSettings::setLastAccount(AccountId account) { - setLocalValue("LastAccount", account.toInt()); +void CoreAccountSettings::setLastAccount(AccountId account) +{ + setLocalValue("LastAccount", account.toInt()); } -AccountId CoreAccountSettings::autoConnectAccount() { - return localValue("AutoConnectAccount", 0).toInt(); +AccountId CoreAccountSettings::autoConnectAccount() const +{ + return localValue("AutoConnectAccount", 0).toInt(); } -void CoreAccountSettings::setAutoConnectAccount(AccountId account) { - setLocalValue("AutoConnectAccount", account.toInt()); +void CoreAccountSettings::setAutoConnectAccount(AccountId account) +{ + setLocalValue("AutoConnectAccount", account.toInt()); } -bool CoreAccountSettings::autoConnectOnStartup() { - return localValue("AutoConnectOnStartup", false).toBool(); +bool CoreAccountSettings::autoConnectOnStartup() const +{ + return localValue("AutoConnectOnStartup", false).toBool(); } -void CoreAccountSettings::setAutoConnectOnStartup(bool b) { - setLocalValue("AutoConnectOnStartup", b); +void CoreAccountSettings::setAutoConnectOnStartup(bool b) +{ + setLocalValue("AutoConnectOnStartup", b); } -bool CoreAccountSettings::autoConnectToFixedAccount() { - return localValue("AutoConnectToFixedAccount", false).toBool(); +bool CoreAccountSettings::autoConnectToFixedAccount() const +{ + return localValue("AutoConnectToFixedAccount", false).toBool(); } -void CoreAccountSettings::setAutoConnectToFixedAccount(bool b) { - setLocalValue("AutoConnectToFixedAccount", b); +void CoreAccountSettings::setAutoConnectToFixedAccount(bool b) +{ + setLocalValue("AutoConnectToFixedAccount", b); } -void CoreAccountSettings::storeAccountData(AccountId id, const QVariantMap &data) { - QString base = QString::number(id.toInt()); - foreach(const QString &key, data.keys()) { - setLocalValue(base + "/" + key, data.value(key)); - } +void CoreAccountSettings::storeAccountData(AccountId id, const QVariantMap& data) +{ + QString base = QString::number(id.toInt()); + foreach (const QString& key, data.keys()) { + setLocalValue(base + "/" + key, data.value(key)); + } - // FIXME Migration from 0.5 -> 0.6 - removeLocalKey(QString("%1/Connection").arg(base)); + // FIXME Migration from 0.5 -> 0.6 + removeLocalKey(QString("%1/Connection").arg(base)); } -QVariantMap CoreAccountSettings::retrieveAccountData(AccountId id) { - QVariantMap map; - QString base = QString::number(id.toInt()); - foreach(const QString &key, localChildKeys(base)) { - map[key] = localValue(base + "/" + key); - } - - // FIXME Migration from 0.5 -> 0.6 - if(!map.contains("Uuid") && map.contains("Connection")) { - QVariantMap oldmap = map.value("Connection").toMap(); - map["AccountName"] = oldmap.value("AccountName"); - map["HostName"] = oldmap.value("Host"); - map["Port"] = oldmap.value("Port"); - map["User"] = oldmap.value("User"); - map["Password"] = oldmap.value("Password"); - map["StorePassword"] = oldmap.value("RememberPasswd"); - map["UseSSL"] = oldmap.value("useSsl"); - map["UseProxy"] = oldmap.value("useProxy"); - map["ProxyHostName"] = oldmap.value("proxyHost"); - map["ProxyPort"] = oldmap.value("proxyPort"); - map["ProxyUser"] = oldmap.value("proxyUser"); - map["ProxyPassword"] = oldmap.value("proxyPassword"); - map["ProxyType"] = oldmap.value("proxyType"); - - map["AccountId"] = id.toInt(); - map["Uuid"] = QUuid::createUuid().toString(); - } +QVariantMap CoreAccountSettings::retrieveAccountData(AccountId id) const +{ + QVariantMap map; + QString base = QString::number(id.toInt()); + foreach (const QString& key, localChildKeys(base)) { + map[key] = localValue(base + "/" + key); + } + + // FIXME Migration from 0.5 -> 0.6 + if (!map.contains("Uuid") && map.contains("Connection")) { + QVariantMap oldmap = map.value("Connection").toMap(); + map["AccountName"] = oldmap.value("AccountName"); + map["HostName"] = oldmap.value("Host"); + map["Port"] = oldmap.value("Port"); + map["User"] = oldmap.value("User"); + map["Password"] = oldmap.value("Password"); + map["StorePassword"] = oldmap.value("RememberPasswd"); + map["UseSSL"] = oldmap.value("useSsl"); + map["UseProxy"] = oldmap.value("useProxy"); + map["ProxyHostName"] = oldmap.value("proxyHost"); + map["ProxyPort"] = oldmap.value("proxyPort"); + map["ProxyUser"] = oldmap.value("proxyUser"); + map["ProxyPassword"] = oldmap.value("proxyPassword"); + map["ProxyType"] = oldmap.value("proxyType"); + map["Internal"] = oldmap.value("InternalAccount"); + + map["AccountId"] = id.toInt(); + map["Uuid"] = QUuid::createUuid().toString(); + } + + return map; +} + +void CoreAccountSettings::setAccountValue(const QString& key, const QVariant& value) +{ + if (!Client::currentCoreAccount().isValid()) + return; + setLocalValue(QString("%1/%2/%3").arg(Client::currentCoreAccount().accountId().toInt()).arg(_subgroup).arg(key), value); +} - return map; +QVariant CoreAccountSettings::accountValue(const QString& key, const QVariant& def) const +{ + if (!Client::currentCoreAccount().isValid()) + return QVariant(); + return localValue(QString("%1/%2/%3").arg(Client::currentCoreAccount().accountId().toInt()).arg(_subgroup).arg(key), def); } -void CoreAccountSettings::setAccountValue(const QString &key, const QVariant &value) { - if(!Client::currentCoreAccount().isValid()) - return; - setLocalValue(QString("%1/%2/%3").arg(Client::currentCoreAccount().accountId().toInt()).arg(_subgroup).arg(key), value); +void CoreAccountSettings::setJumpKeyMap(const QHash& keyMap) +{ + QVariantMap variants; + QHash::const_iterator mapIter = keyMap.constBegin(); + while (mapIter != keyMap.constEnd()) { + variants[QString::number(mapIter.key())] = QVariant::fromValue(mapIter.value()); + ++mapIter; + } + setAccountValue("JumpKeyMap", variants); } -QVariant CoreAccountSettings::accountValue(const QString &key, const QVariant &def) { - if(!Client::currentCoreAccount().isValid()) - return QVariant(); - return localValue(QString("%1/%2/%3").arg(Client::currentCoreAccount().accountId().toInt()).arg(_subgroup).arg(key), def); +QHash CoreAccountSettings::jumpKeyMap() const +{ + QHash keyMap; + QVariantMap variants = accountValue("JumpKeyMap", QVariant()).toMap(); + QVariantMap::const_iterator mapIter = variants.constBegin(); + while (mapIter != variants.constEnd()) { + keyMap[mapIter.key().toInt()] = mapIter.value().value(); + ++mapIter; + } + return keyMap; } -void CoreAccountSettings::setJumpKeyMap(const QHash &keyMap) { - QVariantMap variants; - QHash::const_iterator mapIter = keyMap.constBegin(); - while(mapIter != keyMap.constEnd()) { - variants[QString::number(mapIter.key())] = qVariantFromValue(mapIter.value()); - ++mapIter; - } - setAccountValue("JumpKeyMap", variants); +void CoreAccountSettings::setBufferViewOverlay(const QSet& viewIds) +{ + QVariantList variants; + foreach (int viewId, viewIds) { + variants << QVariant::fromValue(viewId); + } + setAccountValue("BufferViewOverlay", variants); } -QHash CoreAccountSettings::jumpKeyMap() { - QHash keyMap; - QVariantMap variants = accountValue("JumpKeyMap", QVariant()).toMap(); - QVariantMap::const_iterator mapIter = variants.constBegin(); - while(mapIter != variants.constEnd()) { - keyMap[mapIter.key().toInt()] = mapIter.value().value(); - ++mapIter; - } - return keyMap; +QSet CoreAccountSettings::bufferViewOverlay() const +{ + QSet viewIds; + QVariantList variants = accountValue("BufferViewOverlay").toList(); + for (QVariantList::const_iterator iter = variants.constBegin(); iter != variants.constEnd(); ++iter) { + viewIds << iter->toInt(); + } + return viewIds; } -void CoreAccountSettings::removeAccount(AccountId id) { - removeLocalKey(QString("%1").arg(id.toInt())); +void CoreAccountSettings::removeAccount(AccountId id) +{ + removeLocalKey(QString("%1").arg(id.toInt())); } +void CoreAccountSettings::clearAccounts() +{ + foreach (const QString& key, localChildGroups()) + removeLocalKey(key); +} /***********************************************************************************************/ -// NotificationSettings: +// CoreConnectionSettings: -NotificationSettings::NotificationSettings() : ClientSettings("Notification") { +CoreConnectionSettings::CoreConnectionSettings() + : ClientSettings("CoreConnection") +{} + +void CoreConnectionSettings::setNetworkDetectionMode(NetworkDetectionMode mode) +{ + setLocalValue("NetworkDetectionMode", mode); +} + +CoreConnectionSettings::NetworkDetectionMode CoreConnectionSettings::networkDetectionMode() const +{ + auto mode = localValue("NetworkDetectionMode", UseQNetworkConfigurationManager).toInt(); + if (mode == 0) + mode = UseQNetworkConfigurationManager; // UseSolid is gone, map that to the new default + return static_cast(mode); } -void NotificationSettings::setHighlightList(const QVariantList &highlightList) { - setLocalValue("Highlights/CustomList", highlightList); +void CoreConnectionSettings::setAutoReconnect(bool autoReconnect) +{ + setLocalValue("AutoReconnect", autoReconnect); } -QVariantList NotificationSettings::highlightList() { - return localValue("Highlights/CustomList").toList(); +bool CoreConnectionSettings::autoReconnect() const +{ + return localValue("AutoReconnect", true).toBool(); } -void NotificationSettings::setHighlightNick(NotificationSettings::HighlightNickType highlightNickType) { - setLocalValue("Highlights/HighlightNick", highlightNickType); +void CoreConnectionSettings::setPingTimeoutInterval(int interval) +{ + setLocalValue("PingTimeoutInterval", interval); } -NotificationSettings::HighlightNickType NotificationSettings::highlightNick() { - return (NotificationSettings::HighlightNickType) localValue("Highlights/HighlightNick", CurrentNick).toInt(); +int CoreConnectionSettings::pingTimeoutInterval() const +{ + return localValue("PingTimeoutInterval", 60).toInt(); } -void NotificationSettings::setNicksCaseSensitive(bool cs) { - setLocalValue("Highlights/NicksCaseSensitive", cs); +void CoreConnectionSettings::setReconnectInterval(int interval) +{ + setLocalValue("ReconnectInterval", interval); } -bool NotificationSettings::nicksCaseSensitive() { - return localValue("Highlights/NicksCaseSensitive", false).toBool(); +int CoreConnectionSettings::reconnectInterval() const +{ + return localValue("ReconnectInterval", 60).toInt(); } +/***********************************************************************************************/ +// NotificationSettings: -// ======================================== -// KnownHostsSettings -// ======================================== -KnownHostsSettings::KnownHostsSettings() - : ClientSettings("KnownHosts") +NotificationSettings::NotificationSettings() + : ClientSettings("Notification") +{} + +void NotificationSettings::setValue(const QString& key, const QVariant& data) { + setLocalValue(key, data); } -QByteArray KnownHostsSettings::knownDigest(const QHostAddress &address) { - return localValue(address.toString(), QByteArray()).toByteArray(); +QVariant NotificationSettings::value(const QString& key, const QVariant& def) const +{ + return localValue(key, def); } -void KnownHostsSettings::saveKnownHost(const QHostAddress &address, const QByteArray &certDigest) { - setLocalValue(address.toString(), certDigest); +void NotificationSettings::remove(const QString& key) +{ + removeLocalKey(key); } -bool KnownHostsSettings::isKnownHost(const QHostAddress &address, const QByteArray &certDigest) { - return certDigest == localValue(address.toString(), QByteArray()).toByteArray(); +void NotificationSettings::setHighlightList(const QVariantList& highlightList) +{ + setLocalValue("Highlights/CustomList", highlightList); } -#ifdef HAVE_SSL -QByteArray KnownHostsSettings::knownDigest(const QSslSocket *socket) { - return knownDigest(socket->peerAddress()); +QVariantList NotificationSettings::highlightList() const +{ + return localValue("Highlights/CustomList").toList(); } -void KnownHostsSettings::saveKnownHost(const QSslSocket *socket) { - Q_ASSERT(socket); - saveKnownHost(socket->peerAddress(), socket->peerCertificate().digest()); +void NotificationSettings::setHighlightNick(NotificationSettings::HighlightNickType highlightNickType) +{ + setLocalValue("Highlights/HighlightNick", highlightNickType); } -bool KnownHostsSettings::isKnownHost(const QSslSocket *socket) { - Q_ASSERT(socket); - return isKnownHost(socket->peerAddress(), socket->peerCertificate().digest()); +NotificationSettings::HighlightNickType NotificationSettings::highlightNick() const +{ + return (NotificationSettings::HighlightNickType)localValue("Highlights/HighlightNick", CurrentNick).toInt(); } -#endif +void NotificationSettings::setNicksCaseSensitive(bool cs) +{ + setLocalValue("Highlights/NicksCaseSensitive", cs); +} + +bool NotificationSettings::nicksCaseSensitive() const +{ + return localValue("Highlights/NicksCaseSensitive", false).toBool(); +} // ======================================== // TabCompletionSettings // ======================================== -TabCompletionSettings::TabCompletionSettings() : ClientSettings("TabCompletion") { +TabCompletionSettings::TabCompletionSettings() + : ClientSettings("TabCompletion") +{} + +void TabCompletionSettings::setCompletionSuffix(const QString& suffix) +{ + setLocalValue("CompletionSuffix", suffix); +} + +QString TabCompletionSettings::completionSuffix() const +{ + return localValue("CompletionSuffix", ": ").toString(); } -void TabCompletionSettings::setCompletionSuffix(const QString &suffix) { - setLocalValue("CompletionSuffix", suffix); +void TabCompletionSettings::setAddSpaceMidSentence(bool space) +{ + setLocalValue("AddSpaceMidSentence", space); } -QString TabCompletionSettings::completionSuffix() { - return localValue("CompletionSuffix", ": ").toString(); +bool TabCompletionSettings::addSpaceMidSentence() const +{ + return localValue("AddSpaceMidSentence", false).toBool(); } -void TabCompletionSettings::setSortMode(SortMode mode) { - setLocalValue("SortMode", mode); +void TabCompletionSettings::setSortMode(SortMode mode) +{ + setLocalValue("SortMode", mode); } -TabCompletionSettings::SortMode TabCompletionSettings::sortMode() { - return static_cast(localValue("SortMode"), LastActivity); +TabCompletionSettings::SortMode TabCompletionSettings::sortMode() const +{ + return static_cast(localValue("SortMode"), LastActivity); } -void TabCompletionSettings::setCaseSensitivity(Qt::CaseSensitivity cs) { - setLocalValue("CaseSensitivity", cs); +void TabCompletionSettings::setCaseSensitivity(Qt::CaseSensitivity cs) +{ + setLocalValue("CaseSensitivity", cs); } -Qt::CaseSensitivity TabCompletionSettings::caseSensitivity() { - return (Qt::CaseSensitivity)localValue("CaseSensitivity", Qt::CaseInsensitive).toInt(); +Qt::CaseSensitivity TabCompletionSettings::caseSensitivity() const +{ + return (Qt::CaseSensitivity)localValue("CaseSensitivity", Qt::CaseInsensitive).toInt(); } -void TabCompletionSettings::setUseLastSpokenTo(bool use) { - setLocalValue("UseLastSpokenTo", use); +void TabCompletionSettings::setUseLastSpokenTo(bool use) +{ + setLocalValue("UseLastSpokenTo", use); } -bool TabCompletionSettings::useLastSpokenTo() { - return localValue("UseLastSpokenTo", false).toBool(); +bool TabCompletionSettings::useLastSpokenTo() const +{ + return localValue("UseLastSpokenTo", false).toBool(); } // ======================================== // ItemViewSettings // ======================================== -ItemViewSettings::ItemViewSettings(const QString &group) : ClientSettings(group) { - -} +ItemViewSettings::ItemViewSettings(const QString& group) + : ClientSettings(group) +{} -bool ItemViewSettings::displayTopicInTooltip() { - return localValue("DisplayTopicInTooltip", false).toBool(); +bool ItemViewSettings::displayTopicInTooltip() const +{ + return localValue("DisplayTopicInTooltip", false).toBool(); } -bool ItemViewSettings::mouseWheelChangesBuffer() { - return localValue("MouseWheelChangesBuffer", false).toBool(); +bool ItemViewSettings::mouseWheelChangesBuffer() const +{ + return localValue("MouseWheelChangesBuffer", false).toBool(); }