X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fnetworkinfo.cpp;h=e0c3c75d0e714ac7697a3931037d43d347bb9a54;hp=9f87721298796157b330048c5ae15ed505a37ef3;hb=c6df551bf5d6b2f33daa5235d320239fcca37688;hpb=d6b056e936ec441258d291b7a8af7b83f9f53016 diff --git a/src/common/networkinfo.cpp b/src/common/networkinfo.cpp index 9f877212..e0c3c75d 100644 --- a/src/common/networkinfo.cpp +++ b/src/common/networkinfo.cpp @@ -24,6 +24,7 @@ #include "ircchannel.h" #include +#include #include "util.h" @@ -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)); } @@ -75,7 +78,7 @@ bool NetworkInfo::isMyNick(const QString &nick) const { } bool NetworkInfo::isMyNick(IrcUser *ircuser) const { - return (ircuser->nick().toLower() == myNick()); + return (ircuser->nick().toLower() == myNick().toLower()); } bool NetworkInfo::isChannelName(const QString &channelname) const { @@ -163,7 +166,7 @@ QString NetworkInfo::support(const QString ¶m) const { } IrcUser *NetworkInfo::newIrcUser(const QString &hostmask) { - QString nick(nickFromMask(hostmask)); + QString nick(nickFromMask(hostmask).toLower()); if(!_ircUsers.contains(nick)) { IrcUser *ircuser = new IrcUser(hostmask, this); // mark IrcUser as already initialized to keep the SignalProxy from requesting initData @@ -180,7 +183,11 @@ IrcUser *NetworkInfo::newIrcUser(const QString &hostmask) { _ircUsers[nick] = ircuser; emit ircUserAdded(hostmask); } - return _ircUsers[nick]; + return _ircUsers[nick]; +} + +IrcUser *NetworkInfo::newIrcUser(const QByteArray &hostmask) { + return newIrcUser(decodeString(hostmask)); } void NetworkInfo::removeIrcUser(IrcUser *ircuser) { @@ -199,19 +206,24 @@ void NetworkInfo::removeIrcUser(QString nick) { removeIrcUser(ircuser); } -IrcUser *NetworkInfo::ircUser(const QString &nickname) const { +IrcUser *NetworkInfo::ircUser(QString nickname) const { + nickname = nickname.toLower(); if(_ircUsers.contains(nickname)) return _ircUsers[nickname]; else return 0; } +IrcUser *NetworkInfo::ircUser(const QByteArray &nickname) const { + return ircUser(decodeString(nickname)); +} + QList NetworkInfo::ircUsers() const { return _ircUsers.values(); } IrcChannel *NetworkInfo::newIrcChannel(const QString &channelname) { - if(!_ircChannels.contains(channelname)) { + if(!_ircChannels.contains(channelname.toLower())) { IrcChannel *channel = new IrcChannel(channelname, this); // mark IrcUser as already initialized to keep the SignalProxy from requesting initData if(initialized()) @@ -224,24 +236,68 @@ IrcChannel *NetworkInfo::newIrcChannel(const QString &channelname) { connect(channel, SIGNAL(initDone()), this, SIGNAL(ircChannelInitDone())); connect(channel, SIGNAL(destroyed()), this, SLOT(channelDestroyed())); - _ircChannels[channelname] = channel; + _ircChannels[channelname.toLower()] = channel; emit ircChannelAdded(channelname); } - return _ircChannels[channelname]; + return _ircChannels[channelname.toLower()]; } +IrcChannel *NetworkInfo::newIrcChannel(const QByteArray &channelname) { + return newIrcChannel(decodeString(channelname)); +} -IrcChannel *NetworkInfo::ircChannel(const QString &channelname) { +IrcChannel *NetworkInfo::ircChannel(QString channelname) { + channelname = channelname.toLower(); if(_ircChannels.contains(channelname)) return _ircChannels[channelname]; else return 0; } +IrcChannel *NetworkInfo::ircChannel(const QByteArray &channelname) { + return ircChannel(decodeString(channelname)); +} + + QList 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: // ==================== @@ -320,7 +376,7 @@ void NetworkInfo::initSetChannels(const QStringList &channels) { } IrcUser *NetworkInfo::updateNickFromMask(const QString &mask) { - QString nick(nickFromMask(mask)); + QString nick(nickFromMask(mask).toLower()); IrcUser *ircuser; if(_ircUsers.contains(nick)) { @@ -337,10 +393,10 @@ void NetworkInfo::ircUserNickChanged(QString newnick) { if(oldnick.isNull()) return; + + if(newnick.toLower() != oldnick) _ircUsers[newnick.toLower()] = _ircUsers.take(oldnick); - _ircUsers[newnick] = _ircUsers.take(oldnick); - - if(myNick() == oldnick) + if(myNick().toLower() == oldnick) setMyNick(newnick); }