modernize: Prefer default member init over ctor init
[quassel.git] / src / common / network.h
index 8a81021..1275436 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2016 by the Quassel Project                        *
+ *   Copyright (C) 2005-2018 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -18,8 +18,9 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
-#ifndef NETWORK_H
-#define NETWORK_H
+#pragma once
+
+#include "common-export.h"
 
 #include <QString>
 #include <QStringList>
@@ -30,6 +31,7 @@
 #include <QPointer>
 #include <QMutex>
 #include <QByteArray>
+#include <utility>
 
 #include "types.h"
 #include "util.h"
@@ -47,10 +49,11 @@ struct NetworkInfo;
 
 // TODO: ConnectionInfo to propagate and sync the current state of NetworkConnection, encodings etcpp
 
-class Network : public SyncableObject
+class COMMON_EXPORT Network : public SyncableObject
 {
-    SYNCABLE_OBJECT
     Q_OBJECT
+    SYNCABLE_OBJECT
+
     Q_ENUMS(ConnectionState)
 
     Q_PROPERTY(QString networkName READ networkName WRITE setNetworkName)
@@ -114,37 +117,36 @@ public :
 
     struct Server {
         QString host;
-        uint port;
+        uint port{6667};
         QString password;
-        bool useSsl;
-        bool sslVerify;     /// If true, validate SSL certificates
-        int sslVersion;
+        bool useSsl{false};
+        bool sslVerify{true};     /// If true, validate SSL certificates
+        int sslVersion{0};
 
-        bool useProxy;
-        int proxyType;
+        bool useProxy{false};
+        int proxyType{QNetworkProxy::Socks5Proxy};
         QString proxyHost;
-        uint proxyPort;
+        uint proxyPort{8080};
         QString proxyUser;
         QString proxyPass;
 
         // sslVerify only applies when useSsl is true.  sslVerify should be enabled by default,
         // so enabling useSsl offers a more secure default.
-        Server() : port(6667), useSsl(false), sslVerify(true), sslVersion(0), useProxy(false),
-            proxyType(QNetworkProxy::Socks5Proxy), proxyHost("localhost"), proxyPort(8080) {}
+        Server() :  proxyHost("localhost") {}
 
-        Server(const QString &host, uint port, const QString &password, bool useSsl,
+        Server(QString host, uint port, QString password, bool useSsl,
                bool sslVerify)
-            : host(host), port(port), password(password), useSsl(useSsl), sslVerify(sslVerify),
-              sslVersion(0), useProxy(false), proxyType(QNetworkProxy::Socks5Proxy),
+            : host(std::move(host)), port(port), password(std::move(password)), useSsl(useSsl), sslVerify(sslVerify),
+               proxyType(QNetworkProxy::Socks5Proxy),
               proxyHost("localhost"), proxyPort(8080) {}
 
         bool operator==(const Server &other) const;
         bool operator!=(const Server &other) const;
     };
-    typedef QList<Server> ServerList;
+    using ServerList = QList<Server>;
 
-    Network(const NetworkId &networkid, QObject *parent = 0);
-    ~Network();
+    Network(const NetworkId &networkid, QObject *parent = nullptr);
+    ~Network() override;
 
     inline NetworkId networkId() const { return _networkId; }
 
@@ -204,6 +206,41 @@ public :
     }
     /**@}*/
 
+    /**
+     * Sorts the user channelmodes according to priority set by PREFIX
+     *
+     * Given a list of channel modes, sorts according to the order of PREFIX, putting the highest
+     * modes first.  Any unknown modes are moved to the end in no given order.
+     *
+     * If prefix modes cannot be determined from the network, no changes will be made.
+     *
+     * @param modes User channelmodes
+     * @return Priority-sorted user channelmodes
+     */
+    QString sortPrefixModes(const QString &modes) const;
+
+    /**@{*/
+    /**
+     * Sorts the list of users' channelmodes according to priority set by PREFIX
+     *
+     * Maintains order of the modes list.
+     *
+     * @seealso Network::sortPrefixModes()
+     *
+     * @param modesList List of users' channel modes
+     * @return Priority-sorted list of users' channel modes
+     */
+    inline QStringList sortPrefixModes(const QStringList &modesList) const {
+        QStringList sortedModesList;
+        // Sort each individual mode string, appending back
+        // Must maintain the order received!
+        for (QString modes : modesList) {
+            sortedModesList << sortPrefixModes(modes);
+        }
+        return sortedModesList;
+    }
+    /**@}*/
+
     ChannelModeType channelModeType(const QString &mode);
     inline ChannelModeType channelModeType(const QCharRef &mode) { return channelModeType(QString(mode)); }
 
@@ -295,7 +332,7 @@ public :
      *
      * These results aren't valid if the network is disconnected or capability negotiation hasn't
      * happened, and some servers might not correctly advertise capabilities.  Don't treat this as
-     * a guarentee.
+     * a guarantee.
      *
      * @param[in] capability Name of capability
      * @returns True if connected and advertised by the server, otherwise false
@@ -723,56 +760,52 @@ private:
 
 
 //! Stores all editable information about a network (as opposed to runtime state).
-struct NetworkInfo {
-    // set some default values, note that this does not initialize e.g. name and id
-    NetworkInfo();
-
-    NetworkId networkId;
+struct COMMON_EXPORT NetworkInfo
+{
     QString networkName;
-    IdentityId identity;
-
-    bool useCustomEncodings; // not used!
-    QByteArray codecForServer;
-    QByteArray codecForEncoding;
-    QByteArray codecForDecoding;
 
     Network::ServerList serverList;
-    bool useRandomServer;
-
     QStringList perform;
 
-    bool useAutoIdentify;
-    QString autoIdentifyService;
+    QString autoIdentifyService{"NickServ"};
     QString autoIdentifyPassword;
 
-    bool useSasl;
     QString saslAccount;
     QString saslPassword;
 
-    bool useAutoReconnect;
-    quint32 autoReconnectInterval;
-    quint16 autoReconnectRetries;
-    bool unlimitedReconnectRetries;
-    bool rejoinChannels;
+    QByteArray codecForServer;
+    QByteArray codecForEncoding;
+    QByteArray codecForDecoding;
 
-    // Custom rate limiting
-    bool useCustomMessageRate;         /// If true, use custom rate limits, otherwise use defaults
-    quint32 messageRateBurstSize;      /// Maximum number of messages to send without any delays
-    quint32 messageRateDelay;          /// Delay in ms. for messages when max. burst messages sent
-    bool unlimitedMessageRate;         /// If true, disable rate limiting, otherwise apply limits
+    NetworkId networkId {0};
+    IdentityId identity {1};
 
+    quint32 messageRateBurstSize {5};     ///< Maximum number of messages to send without any delays
+    quint32 messageRateDelay     {2200};  ///< Delay in ms. for messages when max. burst messages sent
+
+    quint32 autoReconnectInterval {60};
+    quint16 autoReconnectRetries  {20};
+
+    bool rejoinChannels            {true};
+    bool useRandomServer           {false};
+    bool useAutoIdentify           {false};
+    bool useSasl                   {false};
+    bool useAutoReconnect          {true};
+    bool unlimitedReconnectRetries {false};
+    bool useCustomMessageRate      {false};  ///< If true, use custom rate limits, otherwise use defaults
+    bool unlimitedMessageRate      {false};  ///< If true, disable rate limiting, otherwise apply limits
+
+public:
     bool operator==(const NetworkInfo &other) const;
     bool operator!=(const NetworkInfo &other) const;
 };
 
-QDataStream &operator<<(QDataStream &out, const NetworkInfo &info);
-QDataStream &operator>>(QDataStream &in, NetworkInfo &info);
-QDebug operator<<(QDebug dbg, const NetworkInfo &i);
+COMMON_EXPORT QDataStream &operator<<(QDataStream &out, const NetworkInfo &info);
+COMMON_EXPORT QDataStream &operator>>(QDataStream &in, NetworkInfo &info);
+COMMON_EXPORT QDebug operator<<(QDebug dbg, const NetworkInfo &i);
 Q_DECLARE_METATYPE(NetworkInfo)
 
-QDataStream &operator<<(QDataStream &out, const Network::Server &server);
-QDataStream &operator>>(QDataStream &in, Network::Server &server);
-QDebug operator<<(QDebug dbg, const Network::Server &server);
+COMMON_EXPORT QDataStream &operator<<(QDataStream &out, const Network::Server &server);
+COMMON_EXPORT QDataStream &operator>>(QDataStream &in, Network::Server &server);
+COMMON_EXPORT QDebug operator<<(QDebug dbg, const Network::Server &server);
 Q_DECLARE_METATYPE(Network::Server)
-
-#endif