X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fnetworkconnection.h;h=649171dbf048219ca134b91a0efaae3a2c1aa539;hp=9b9c43bb81eee694b3067f0e2f7d6c40de4484f2;hb=236e70030428e5b85309d6ddb97b772fa3efe61a;hpb=6623fd2d46dadd0168e4e28d1db6944c26c2a773 diff --git a/src/core/networkconnection.h b/src/core/networkconnection.h index 9b9c43bb..649171db 100644 --- a/src/core/networkconnection.h +++ b/src/core/networkconnection.h @@ -27,6 +27,7 @@ #include #include +#include "identity.h" #include "message.h" #include "network.h" #include "signalproxy.h" @@ -42,12 +43,13 @@ class NetworkConnection : public QObject { Q_OBJECT public: - NetworkConnection(Network *network, CoreSession *session, const QVariant &previousState = QVariant()); + NetworkConnection(Network *network, CoreSession *session); ~NetworkConnection(); NetworkId networkId() const; QString networkName() const; Network *network() const; + Identity *identity() const; CoreSession *coreSession() const; bool isConnected() const; @@ -57,54 +59,66 @@ public: UserInputHandler *userInputHandler() const; CtcpHandler *ctcpHandler() const; - //! Return data necessary to restore the connection state upon core restart - QVariant state() const; - //! Decode a string using the server (network) decoding. QString serverDecode(const QByteArray &string) const; - //! Decode a string using a buffer-specific encoding if one is set (and use the server encoding else). - QString bufferDecode(const QString &bufferName, const QByteArray &string) const; + //! Decode a string using a channel-specific encoding if one is set (and use the standard encoding else). + QString channelDecode(const QString &channelName, const QByteArray &string) const; - //! Decode a string using a IrcUser specific encoding, if one exists (using the server encoding else). + //! Decode a string using an IrcUser-specific encoding, if one exists (using the standaed encoding else). QString userDecode(const QString &userNick, const QByteArray &string) const; //! Encode a string using the server (network) encoding. QByteArray serverEncode(const QString &string) const; - //! Encode a string using the buffer-specific encoding, if set, and use the server encoding else. - QByteArray bufferEncode(const QString &bufferName, const QString &string) const; + //! Encode a string using the channel-specific encoding, if set, and use the standard encoding else. + QByteArray channelEncode(const QString &channelName, const QString &string) const; - //! Encode a string using the user-specific encoding, if set, and use the server encoding else. + //! Encode a string using the user-specific encoding, if set, and use the standard encoding else. QByteArray userEncode(const QString &userNick, const QString &string) const; + inline QString channelKey(const QString &channel) const { return _channelKeys.value(channel.toLower(), QString()); } + inline QStringList persistentChannels() const { return _channelKeys.keys(); } + public slots: // void setServerOptions(); - void connectToIrc(); - void disconnectFromIrc(); - void userInput(QString buffer, QString msg); + void connectToIrc(bool reconnecting = false); + void disconnectFromIrc(bool requested = true); + void userInput(BufferInfo bufferInfo, QString msg); - void putRawLine(QString input); - void putCmd(QString cmd, QStringList params, QString prefix = 0); + void putRawLine(QByteArray input); + void putCmd(const QString &cmd, const QVariantList ¶ms, const QByteArray &prefix = QByteArray()); + void setChannelJoined(const QString &channel); + void setChannelParted(const QString &channel); + void addChannelKey(const QString &channel, const QString &key); + void removeChannelKey(const QString &channel); private slots: void sendPerform(); + void autoReconnectSettingsChanged(); + void doAutoReconnect(); + void sendWho(); + void nickChanged(const QString &newNick, const QString &oldNick); // this signal is inteded to rename query buffers in the storage backend signals: // #void networkState(QString net, QVariantMap data); void recvRawServerMsg(QString); void displayStatusMsg(QString); //void displayMsg(Message msg); - void displayMsg(Message::Type, QString target, QString text, QString sender = "", quint8 flags = Message::None); + void displayMsg(Message::Type, BufferInfo::Type, QString target, QString text, QString sender = "", quint8 flags = Message::None); void connected(NetworkId networkId); ///< Emitted after receipt of 001 to indicate that we can now send data to the IRC server void disconnected(NetworkId networkId); void connectionStateChanged(Network::ConnectionState); void connectionInitialized(); ///< Emitted after receipt of 001 to indicate that we can now send data to the IRC server void connectionError(const QString &errorMsg); - //void queryRequested(QString network, QString nick); + void quitRequested(NetworkId networkId); + //void queryRequested(QString network, QString nick); + void nickChanged(const NetworkId &networkId, const QString &newNick, const QString &oldNick); // this signal is inteded to rename query buffers in the storage backend + void channelJoined(NetworkId, const QString &channel, const QString &key = QString()); + void channelParted(NetworkId, const QString &channel); private slots: void socketHasData(); @@ -113,7 +127,7 @@ private slots: void socketDisconnected(); void socketStateChanged(QAbstractSocket::SocketState); void setConnectionState(Network::ConnectionState); - void networkInitialized(); + void networkInitialized(const QString ¤tServer); private: QTcpSocket socket; @@ -121,16 +135,22 @@ private: Network *_network; CoreSession *_coreSession; + BufferInfo _statusBufferInfo; IrcServerHandler *_ircServerHandler; UserInputHandler *_userInputHandler; CtcpHandler *_ctcpHandler; - QVariantMap networkSettings; - QVariantMap identity; + QHash _channelKeys; // stores persistent channels and their passwords, if any + + QTimer _autoReconnectTimer; + int _autoReconnectCount; - QVariant _previousState; + QTimer _whoTimer; + bool _previousConnectionAttemptFailed; + int _lastUsedServerlistIndex; + class ParseError : public Exception { public: ParseError(QString cmd, QString prefix, QStringList params); @@ -140,7 +160,6 @@ private: public: UnknownCmdError(QString cmd, QString prefix, QStringList params); }; - }; #endif