SignalProxy now only allows syncing for classes derived from the new
[quassel.git] / src / common / networkinfo.cpp
index 89e88cc..19f4233 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-07 by the Quassel IRC Team                         *
+ *   Copyright (C) 2005-08 by the Quassel Project                          *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -24,6 +24,7 @@
 #include "ircchannel.h"
 
 #include <QDebug>
+#include <QTextCodec>
 
 #include "util.h"
 
@@ -31,7 +32,7 @@
 //  Public:
 // ====================
 NetworkInfo::NetworkInfo(const uint &networkid, QObject *parent)
-  : QObject(parent),
+  : SyncableObject(parent),
     _networkId(networkid),
     _initialized(false),
     _myNick(QString()),
@@ -39,7 +40,9 @@ NetworkInfo::NetworkInfo(const uint &networkid, QObject *parent)
     _currentServer(QString()),
     _prefixes(QString()),
     _prefixModes(QString()),
-    _proxy(NULL)
+    _proxy(0),
+    _codecForEncoding(0),
+    _codecForDecoding(0)
 {
   setObjectName(QString::number(networkid));
 }
@@ -183,6 +186,10 @@ IrcUser *NetworkInfo::newIrcUser(const QString &hostmask) {
   return _ircUsers[nick];
 }
 
+IrcUser *NetworkInfo::newIrcUser(const QByteArray &hostmask) {
+  return newIrcUser(decodeString(hostmask));
+}
+
 void NetworkInfo::removeIrcUser(IrcUser *ircuser) {
   QString nick = _ircUsers.key(ircuser);
   if(nick.isNull())
@@ -207,6 +214,10 @@ IrcUser *NetworkInfo::ircUser(QString nickname) const {
     return 0;
 }
 
+IrcUser *NetworkInfo::ircUser(const QByteArray &nickname) const {
+  return ircUser(decodeString(nickname));
+}
+
 QList<IrcUser *> NetworkInfo::ircUsers() const {
   return _ircUsers.values();
 }
@@ -231,6 +242,9 @@ IrcChannel *NetworkInfo::newIrcChannel(const QString &channelname) {
   return _ircChannels[channelname.toLower()];
 }
 
+IrcChannel *NetworkInfo::newIrcChannel(const QByteArray &channelname) {
+  return newIrcChannel(decodeString(channelname));
+}
 
 IrcChannel *NetworkInfo::ircChannel(QString channelname) {
   channelname = channelname.toLower();
@@ -240,10 +254,50 @@ IrcChannel *NetworkInfo::ircChannel(QString channelname) {
     return 0;
 }
 
+IrcChannel *NetworkInfo::ircChannel(const QByteArray &channelname) {
+  return ircChannel(decodeString(channelname));
+}
+
+
 QList<IrcChannel *> NetworkInfo::ircChannels() const {
   return _ircChannels.values();
 }
 
+QTextCodec *NetworkInfo::codecForEncoding() const {
+  return _codecForEncoding;
+}
+
+void NetworkInfo::setCodecForEncoding(const QString &name) {
+  setCodecForEncoding(QTextCodec::codecForName(name.toAscii()));
+}
+
+void NetworkInfo::setCodecForEncoding(QTextCodec *codec) {
+  _codecForEncoding = codec;
+}
+
+QTextCodec *NetworkInfo::codecForDecoding() const {
+  return _codecForDecoding;
+}
+
+void NetworkInfo::setCodecForDecoding(const QString &name) {
+  setCodecForDecoding(QTextCodec::codecForName(name.toAscii()));
+}
+
+void NetworkInfo::setCodecForDecoding(QTextCodec *codec) {
+  _codecForDecoding = codec;
+}
+
+QString NetworkInfo::decodeString(const QByteArray &text) const {
+  return ::decodeString(text, _codecForDecoding);
+}
+
+QByteArray NetworkInfo::encodeString(const QString string) const {
+  if(_codecForEncoding) {
+    return _codecForEncoding->fromUnicode(string);
+  }
+  return string.toAscii();
+}
+
 // ====================
 //  Public Slots:
 // ====================