X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fnetwork.h;h=b9a22363e79bd766ada68155bee3c7cee847bd28;hp=6a58d841ad62317e4d47cd1c13730d8c5730150a;hb=5b083e1f67c77ceb7d1d134e976cd6081b70bf12;hpb=d1b6499b0b848d4287efae89107576548533502c diff --git a/src/common/network.h b/src/common/network.h index 6a58d841..b9a22363 100644 --- a/src/common/network.h +++ b/src/common/network.h @@ -37,10 +37,14 @@ class SignalProxy; class IrcUser; class IrcChannel; +// defined below! +struct NetworkInfo; + // TODO: ConnectionInfo to propagate and sync the current state of NetworkConnection, encodings etcpp class Network : public SyncableObject { Q_OBJECT + Q_ENUMS(ConnectionState Network::ConnectionState) Q_PROPERTY(QString networkName READ networkName WRITE setNetworkName STORED false) Q_PROPERTY(QString currentServer READ currentServer WRITE setCurrentServer STORED false) @@ -48,11 +52,15 @@ class Network : public SyncableObject { Q_PROPERTY(QByteArray codecForEncoding READ codecForEncoding WRITE setCodecForEncoding STORED false) Q_PROPERTY(QByteArray codecForDecoding READ codecForDecoding WRITE setCodecForDecoding STORED false) Q_PROPERTY(IdentityId identityId READ identity WRITE setIdentity STORED false) - // Q_PROPERTY(bool isConnected READ isConnected STORED false) + Q_PROPERTY(bool isConnected READ isConnected WRITE setConnected STORED false) + //Q_PROPERTY(Network::ConnectionState connectionState READ connectionState WRITE setConnectionState STORED false) + Q_PROPERTY(int connectionState READ connectionState WRITE setConnectionState STORED false) public: + enum ConnectionState { Disconnected, Connecting, Initializing, Initialized, Disconnecting }; + Network(const NetworkId &networkid, QObject *parent = 0); - //virtual ~Network(); + ~Network(); NetworkId networkId() const; @@ -64,6 +72,10 @@ public: bool isChannelName(const QString &channelname) const; + bool isConnected() const; + //Network::ConnectionState connectionState() const; + int connectionState() const; + QString prefixToMode(const QString &prefix); QString prefixToMode(const QCharRef &prefix); QString modeToPrefix(const QString &mode); @@ -75,7 +87,10 @@ public: IdentityId identity() const; QStringList nicks() const; QStringList channels() const; - QList serverList() const; + QVariantList serverList() const; + + NetworkInfo networkInfo() const; + void setNetworkInfo(const NetworkInfo &); QString prefixes(); QString prefixModes(); @@ -92,8 +107,8 @@ public: IrcChannel *newIrcChannel(const QString &channelname); IrcChannel *newIrcChannel(const QByteArray &channelname); - IrcChannel *ircChannel(QString channelname); - IrcChannel *ircChannel(const QByteArray &channelname); + IrcChannel *ircChannel(QString channelname) const; + IrcChannel *ircChannel(const QByteArray &channelname) const; QList ircChannels() const; quint32 ircChannelCount() const; @@ -108,10 +123,13 @@ public: public slots: void setNetworkName(const QString &networkName); void setCurrentServer(const QString ¤tServer); + void setConnected(bool isConnected); + //void setConnectionState(Network::ConnectionState state); + void setConnectionState(int state); void setMyNick(const QString &mynick); void setIdentity(IdentityId); - void setServerList(const QList &serverList); + void setServerList(const QVariantList &serverList); void setCodecForEncoding(const QByteArray &codecName); void setCodecForDecoding(const QByteArray &codecName); @@ -120,7 +138,8 @@ public slots: void removeSupport(const QString ¶m); inline void addIrcUser(const QString &hostmask) { newIrcUser(hostmask); } - void removeIrcUser(QString nick); + void removeIrcUser(const QString &nick); + void removeIrcChannel(const QString &channel); //init geters QVariantMap initSupports() const; @@ -140,22 +159,31 @@ public slots: // channel lists up to date void ircUserNickChanged(QString newnick); - void requestConnect(); + void requestConnect() const; + void requestDisconnect() const; + + void emitConnectionError(const QString &); private slots: - void ircUserDestroyed(); void channelDestroyed(); void removeIrcUser(IrcUser *ircuser); + void removeIrcChannel(IrcChannel *ircChannel); + void removeChansAndUsers(); void ircUserInitDone(); void ircChannelInitDone(); signals: + void aboutToBeDestroyed(); void networkNameSet(const QString &networkName); void currentServerSet(const QString ¤tServer); + void connectedSet(bool isConnected); + void connectionStateSet(Network::ConnectionState); + void connectionStateSet(int); + void connectionError(const QString &errorMsg); void myNickSet(const QString &mynick); void identitySet(IdentityId); - void serverListSet(const QList &serverList); + void serverListSet(QVariantList serverList); void codecForEncodingSet(const QString &codecName); void codecForDecodingSet(const QString &codecName); @@ -169,6 +197,7 @@ signals: void ircChannelAdded(IrcChannel *); void ircUserRemoved(const QString &nick); + void ircChannelRemoved(const QString &channel); // needed for client sync progress void ircUserRemoved(QObject *); @@ -177,7 +206,8 @@ signals: void ircUserInitDone(IrcUser *); void ircChannelInitDone(IrcChannel *); - void connectRequested(NetworkId = 0); + void connectRequested(NetworkId id = 0) const; + void disconnectRequested(NetworkId id = 0) const; private: NetworkId _networkId; @@ -186,6 +216,8 @@ private: QString _myNick; QString _networkName; QString _currentServer; + bool _connected; + ConnectionState _connectionState; QString _prefixes; QString _prefixModes; @@ -194,10 +226,10 @@ private: QHash _ircChannels; // stores all known channels QHash _supports; // stores results from RPL_ISUPPORT - QList _serverList; + QVariantList _serverList; + QStringList _perform; //QVariantMap networkSettings; - //QVariantMap identity; - + QPointer _proxy; void determinePrefixes(); @@ -206,4 +238,38 @@ private: }; +//! Stores all editable information about a network (as opposed to runtime state). +struct NetworkInfo { + NetworkId networkId; + QString networkName; + IdentityId identity; + + bool useCustomEncodings; + QByteArray codecForEncoding; + QByteArray codecForDecoding; + + // Server entry: QString "Host", uint "Port", QString "Password", bool "UseSSL" + QVariantList serverList; + bool useRandomServer; + + QStringList perform; + + bool useAutoIdentify; + QString autoIdentifyService; + QString autoIdentifyPassword; + + bool useAutoReconnect; + quint32 autoReconnectInterval; + qint16 autoReconnectRetries; // -1 => Unlimited + bool rejoinChannels; + + 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); + +Q_DECLARE_METATYPE(NetworkInfo); + #endif