Syncing my current state, Network settings still not fully functional, so don't use...
[quassel.git] / src / common / network.cpp
index 1388060..e899969 100644 (file)
@@ -37,23 +37,26 @@ Network::Network(const NetworkId &networkid, QObject *parent) : SyncableObject(p
     _myNick(QString()),
     _networkName(QString("<not initialized>")),
     _currentServer(QString()),
+    _connected(false),
     _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();
+  }
+}
+*/
 
 NetworkId Network::networkId() const {
   return _networkId;
@@ -86,6 +89,30 @@ bool Network::isChannelName(const QString &channelname) const {
     return QString("#&!+").contains(channelname[0]);
 }
 
+bool Network::isConnected() const {
+  return _connected;
+}
+
+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()) setNetworkName(info.networkName);
+  if(info.identity > 0) setIdentity(info.identity);
+  if(!info.codecForEncoding.isEmpty()) setCodecForEncoding(QTextCodec::codecForName(info.codecForEncoding));
+  if(!info.codecForDecoding.isEmpty()) setCodecForDecoding(QTextCodec::codecForName(info.codecForDecoding));
+  if(info.serverList.count()) setServerList(info.serverList);
+}
+
 QString Network::prefixToMode(const QString &prefix) {
   if(prefixes().contains(prefix))
     return QString(prefixModes()[prefixes().indexOf(prefix)]);
@@ -256,7 +283,7 @@ IrcChannel *Network::newIrcChannel(const QByteArray &channelname) {
   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];
@@ -264,7 +291,7 @@ IrcChannel *Network::ircChannel(QString channelname) {
     return 0;
 }
 
-IrcChannel *Network::ircChannel(const QByteArray &channelname) {
+IrcChannel *Network::ircChannel(const QByteArray &channelname) const {
   return ircChannel(decodeString(channelname));
 }
 
@@ -288,6 +315,7 @@ void Network::setCodecForEncoding(const QByteArray &name) {
 
 void Network::setCodecForEncoding(QTextCodec *codec) {
   _codecForEncoding = codec;
+  emit codecForEncodingSet(codecForEncoding());
 }
 
 QByteArray Network::codecForDecoding() const {
@@ -301,6 +329,7 @@ void Network::setCodecForDecoding(const QByteArray &name) {
 
 void Network::setCodecForDecoding(QTextCodec *codec) {
   _codecForDecoding = codec;
+  emit codecForDecodingSet(codecForDecoding());
 }
 
 QString Network::decodeString(const QByteArray &text) const {
@@ -327,6 +356,11 @@ void Network::setCurrentServer(const QString &currentServer) {
   emit currentServerSet(currentServer);
 }
 
+void Network::setConnected(bool connected) {
+  _connected = connected;
+  emit connectedSet(connected);
+}
+
 void Network::setMyNick(const QString &nickname) {
   _myNick = nickname;
   emit myNickSet(nickname);
@@ -469,6 +503,12 @@ void Network::requestConnect() {
   else emit connectRequested(networkId());  // and this is for CoreSession :)
 }
 
+void Network::requestDisconnect() {
+  if(!proxy()) return;
+  if(proxy()->proxyMode() == SignalProxy::Client) emit disconnectRequested(); // on the client this triggers calling this slot on the core
+  else emit disconnectRequested(networkId());  // and this is for CoreSession :)
+}
+
 // ====================
 //  Private:
 // ====================
@@ -506,3 +546,20 @@ void Network::determinePrefixes() {
   }
 }
 
+/************************************************************************
+ * 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);
+}