X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fnetworkinfo.cpp;h=19f4233e9da9f9797e38813ca812cfa5e8b73279;hp=ddc9b81f6a16b3a4c955c87511a36ab88dfbdd1b;hb=b797e5f581b10a517c30f78cb53f813af741e261;hpb=a1f065fb6bba082c6e4edaaea2d2f7fc98a7fde9 diff --git a/src/common/networkinfo.cpp b/src/common/networkinfo.cpp index ddc9b81f..19f4233e 100644 --- a/src/common/networkinfo.cpp +++ b/src/common/networkinfo.cpp @@ -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 +#include #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)); } @@ -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 { @@ -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 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 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: // ==================== @@ -322,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)) { @@ -336,13 +390,13 @@ IrcUser *NetworkInfo::updateNickFromMask(const QString &mask) { void NetworkInfo::ircUserNickChanged(QString newnick) { QString oldnick = _ircUsers.key(qobject_cast(sender())); - + if(oldnick.isNull()) return; + + if(newnick.toLower() != oldnick) _ircUsers[newnick.toLower()] = _ircUsers.take(oldnick); - _ircUsers[newnick.toLower()] = _ircUsers.take(oldnick); - - if(myNick() == oldnick) + if(myNick().toLower() == oldnick) setMyNick(newnick); }