_myNick(QString()),
_networkName(QString("<not initialized>")),
_currentServer(QString()),
+ _connected(false),
+ _connectionState(Disconnected),
_prefixes(QString()),
_prefixModes(QString()),
_proxy(0),
_codecForEncoding(0),
_codecForDecoding(0)
{
- setObjectName(QString::number(networkid));
+ setObjectName(QString::number(networkid.toInt()));
}
// I think this is unnecessary since IrcUsers have us as their daddy :)
-//Network::~Network() {
-// QHashIterator<QString, IrcUser *> ircuser(_ircUsers);
-// while (ircuser.hasNext()) {
-// ircuser.next();
-// delete ircuser.value();
-// }
-//}
+
+Network::~Network() {
+// QHashIterator<QString, IrcUser *> ircuser(_ircUsers);
+// while (ircuser.hasNext()) {
+// ircuser.next();
+// delete ircuser.value();
+// }
+// qDebug() << "Destroying net" << networkName() << networkId();
+}
+
NetworkId Network::networkId() const {
return _networkId;
return QString("#&!+").contains(channelname[0]);
}
+bool Network::isConnected() const {
+ return _connected;
+}
+
+//Network::ConnectionState Network::connectionState() const {
+int Network::connectionState() const {
+ return _connectionState;
+}
+
+NetworkInfo Network::networkInfo() const {
+ NetworkInfo info;
+ info.networkName = networkName();
+ info.networkId = networkId();
+ info.identity = identity();
+ info.codecForEncoding = codecForEncoding();
+ info.codecForDecoding = codecForDecoding();
+ info.serverList = serverList();
+ return info;
+}
+
+void Network::setNetworkInfo(const NetworkInfo &info) {
+ // we don't set our ID!
+ if(!info.networkName.isEmpty() && info.networkName != networkName()) setNetworkName(info.networkName);
+ if(info.identity > 0 && info.identity != identity()) setIdentity(info.identity);
+ if(!info.codecForEncoding.isEmpty() && info.codecForEncoding != codecForEncoding())
+ setCodecForEncoding(QTextCodec::codecForName(info.codecForEncoding));
+ if(!info.codecForDecoding.isEmpty() && info.codecForDecoding != codecForDecoding())
+ setCodecForDecoding(QTextCodec::codecForName(info.codecForDecoding));
+ if(info.serverList.count()) setServerList(info.serverList); // FIXME compare components
+}
+
QString Network::prefixToMode(const QString &prefix) {
if(prefixes().contains(prefix))
return QString(prefixModes()[prefixes().indexOf(prefix)]);
return _ircChannels.keys();
}
-QList<QVariantMap> Network::serverList() const {
+QVariantList Network::serverList() const {
return _serverList;
}
return newIrcChannel(decodeString(channelname));
}
-IrcChannel *Network::ircChannel(QString channelname) {
+IrcChannel *Network::ircChannel(QString channelname) const {
channelname = channelname.toLower();
if(_ircChannels.contains(channelname))
return _ircChannels[channelname];
return 0;
}
-IrcChannel *Network::ircChannel(const QByteArray &channelname) {
+IrcChannel *Network::ircChannel(const QByteArray &channelname) const {
return ircChannel(decodeString(channelname));
}
void Network::setCodecForEncoding(QTextCodec *codec) {
_codecForEncoding = codec;
+ emit codecForEncodingSet(codecForEncoding());
}
QByteArray Network::codecForDecoding() const {
void Network::setCodecForDecoding(QTextCodec *codec) {
_codecForDecoding = codec;
+ emit codecForDecodingSet(codecForDecoding());
}
QString Network::decodeString(const QByteArray &text) const {
emit currentServerSet(currentServer);
}
+void Network::setConnected(bool connected) {
+ _connected = connected;
+ emit connectedSet(connected);
+}
+
+//void Network::setConnectionState(ConnectionState state) {
+void Network::setConnectionState(int state) {
+ _connectionState = (ConnectionState)state;
+ //qDebug() << "netstate" << networkId() << networkName() << state;
+ emit connectionStateSet(state);
+ emit connectionStateSet(_connectionState);
+}
+
void Network::setMyNick(const QString &nickname) {
_myNick = nickname;
emit myNickSet(nickname);
emit identitySet(id);
}
-void Network::setServerList(const QList<QVariantMap> &serverList) {
+void Network::setServerList(const QVariantList &serverList) {
_serverList = serverList;
emit serverListSet(serverList);
}
}
QVariantList Network::initServerList() const {
- QList<QVariant> list;
- foreach(QVariantMap serverdata, serverList()) list << QVariant(serverdata);
- return list;
+ return serverList();
}
QStringList Network::initIrcUsers() const {
}
void Network::initSetServerList(const QVariantList & serverList) {
- QList<QVariantMap> slist;
- foreach(QVariant v, serverList) slist << v.toMap();
- setServerList(slist);
+ setServerList(serverList);
}
void Network::initSetIrcUsers(const QStringList &hostmasks) {
_ircChannels.remove(_ircChannels.key(channel));
}
-void Network::requestConnect() {
+void Network::requestConnect() const {
if(!proxy()) return;
if(proxy()->proxyMode() == SignalProxy::Client) emit connectRequested(); // on the client this triggers calling this slot on the core
- else emit connectRequested(networkId()); // and this is for CoreSession :)
+ else {
+ if(connectionState() != Disconnected) {
+ qWarning() << "Requesting connect while not being disconnected!";
+ return;
+ }
+ emit connectRequested(networkId()); // and this is for CoreSession :)
+ }
+}
+
+void Network::requestDisconnect() const {
+ if(!proxy()) return;
+ if(proxy()->proxyMode() == SignalProxy::Client) emit disconnectRequested(); // on the client this triggers calling this slot on the core
+ else {
+ if(connectionState() == Disconnected) {
+ qWarning() << "Requesting disconnect while not being connected!";
+ return;
+ }
+ emit disconnectRequested(networkId()); // and this is for CoreSession :)
+ }
+}
+
+void Network::emitConnectionError(const QString &errorMsg) {
+ emit connectionError(errorMsg);
}
// ====================
}
}
+/************************************************************************
+ * NetworkInfo
+ ************************************************************************/
+
+bool NetworkInfo::operator==(const NetworkInfo &other) const {
+ if(networkId != other.networkId) return false;
+ if(networkName != other.networkName) return false;
+ if(identity != other.identity) return false;
+ if(codecForEncoding != other.codecForEncoding) return false;
+ if(codecForDecoding != other.codecForDecoding) return false;
+ if(serverList != other.serverList) return false;
+ return true;
+}
+
+bool NetworkInfo::operator!=(const NetworkInfo &other) const {
+ return !(*this == other);
+}
+
+QDataStream &operator<<(QDataStream &out, const NetworkInfo &info) {
+ QVariantMap i;
+ i["NetworkId"] = QVariant::fromValue<NetworkId>(info.networkId);
+ i["NetworkName"] = info.networkName;
+ i["Identity"] = QVariant::fromValue<IdentityId>(info.identity);
+ i["CodecForEncoding"] = info.codecForEncoding;
+ i["CodecForDecoding"] = info.codecForDecoding;
+ i["ServerList"] = info.serverList;
+ out << i;
+ return out;
+}
+
+QDataStream &operator>>(QDataStream &in, NetworkInfo &info) {
+ QVariantMap i;
+ in >> i;
+ info.networkId = i["NetworkId"].value<NetworkId>();
+ info.networkName = i["NetworkName"].toString();
+ info.identity = i["Identity"].value<IdentityId>();
+ info.codecForEncoding = i["CodecForEncoding"].toByteArray();
+ info.codecForDecoding = i["CodecForDecoding"].toByteArray();
+ info.serverList = i["ServerList"].toList();
+ return in;
+}