X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcorenetwork.h;h=99e5fc2539410f2c60eed4f2d0992489a2d4e5b7;hp=86fc4ab94fbee815b7e21db728814a7524f3279c;hb=1ccf9666ade9a46880ffb68feeac81b7c39e570b;hpb=b33ea3ad0598e43621f3923e0fbc01e87b9b0031 diff --git a/src/core/corenetwork.h b/src/core/corenetwork.h index 86fc4ab9..99e5fc25 100644 --- a/src/core/corenetwork.h +++ b/src/core/corenetwork.h @@ -57,7 +57,8 @@ class CoreNetwork : public Network public: CoreNetwork(const NetworkId &networkid, CoreSession *session); - ~CoreNetwork(); + virtual ~CoreNetwork(); + inline virtual const QMetaObject *syncMetaObject() const { return &Network::staticMetaObject; } inline CoreIdentity *identityPtr() const { return coreSession()->identity(identity()); } @@ -90,7 +91,16 @@ public: inline QByteArray readChannelCipherKey(const QString &channel) const { return _cipherKeys.value(channel.toLower()); } inline void storeChannelCipherKey(const QString &channel, const QByteArray &key) { _cipherKeys[channel.toLower()] = key; } - inline bool isAutoWhoInProgress(const QString &channel) const { return _autoWhoPending.value(channel.toLower(), 0); } + /** + * Checks if the given target has an automatic WHO in progress + * + * @param name Channel or nickname + * @return True if an automatic WHO is in progress, otherwise false + */ + inline bool isAutoWhoInProgress(const QString &name) const + { + return _autoWhoPending.value(name.toLower(), 0); + } inline UserId userId() const { return _coreSession->user(); } @@ -220,6 +230,13 @@ public slots: */ void setPongTimestampValid(bool validTimestamp); + /** + * Indicates that the CoreSession is shutting down. + * + * Disconnects the network if connected, and sets a flag that prevents reconnections. + */ + void shutdown(); + void connectToIrc(bool reconnecting = false); /** * Disconnect from the IRC server. @@ -229,16 +246,14 @@ public slots: * @param requested If true, user requested this disconnect; don't try to reconnect * @param reason Reason for quitting, defaulting to the user-configured quit reason * @param withReconnect Reconnect to the network after disconnecting (e.g. ping timeout) - * @param forceImmediate Immediately disconnect from network, skipping queue of other commands */ - void disconnectFromIrc(bool requested = true, const QString &reason = QString(), - bool withReconnect = false, bool forceImmediate = false); + void disconnectFromIrc(bool requested = true, const QString &reason = QString(), bool withReconnect = false); /** * Forcibly close the IRC server socket, waiting for it to close. * * Call CoreNetwork::disconnectFromIrc() first, allow the event loop to run, then if you need to - * be sure the network's disconencted (e.g. clean-up), call this. + * be sure the network's disconnected (e.g. clean-up), call this. * * @param msecs Maximum time to wait for socket to close, in milliseconds. * @return True if socket closes successfully; false if error occurs or timeout reached @@ -388,23 +403,17 @@ public slots: * When 'away-notify' is enabled, this will trigger an immediate AutoWho since regular * who-cycles are disabled as per IRCv3 specifications. * - * @param[in] channelOrNick Channel or nickname to WHO + * @param[in] name Channel or nickname */ - void queueAutoWhoOneshot(const QString &channelOrNick); + void queueAutoWhoOneshot(const QString &name); /** - * Removes the given channel/nick from AutoWho queue for when it stops existing - * - * If not already in queue, nothing happens. This should only be used for nicknames and - * channels that have suddenly stopped existing (e.g. nick joins then quits). + * Checks if the given target has an automatic WHO in progress, and sets it as done if so * - * For when a periodic channel AutoWho finishes, see CoreNetwork::setAutoWhoDone() - * - * @param channelOrNick Channel or nickname to WHO + * @param name Channel or nickname + * @return True if an automatic WHO is in progress (and should be silenced), otherwise false */ - void cancelAutoWhoOneshot(const QString &channelOrNick); - - bool setAutoWhoDone(const QString &channel); + bool setAutoWhoDone(const QString &name); void updateIssuedModes(const QString &requestedModes); void updatePersistentModes(QString addModes, QString removeModes); @@ -453,7 +462,7 @@ private slots: void socketHasData(); void socketError(QAbstractSocket::SocketError); void socketInitialized(); - inline void socketCloseTimeout() { socket.abort(); } + void socketCloseTimeout(); void socketDisconnected(); void socketStateChanged(QAbstractSocket::SocketState); void networkInitialized(); @@ -524,6 +533,8 @@ private: // This avoids logging a spurious RemoteHostClosedError whenever disconnect is called without // specifying a permanent (saved to core session) disconnect. + bool _shuttingDown{false}; ///< If true, we're shutting down and ignore requests to (dis)connect networks + bool _previousConnectionAttemptFailed; int _lastUsedServerIndex;