X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fircchannel.cpp;h=eb63dd57da467f2cd6fbeda8081d2b683ca3f863;hp=38959aa935ed389f02b5f51d0307d41c589a4dae;hb=56607f81246f04db3a0e71c9a8757d7f75d6cfcf;hpb=e2e5327ccade6baf433598b1b25dfe99cb360028 diff --git a/src/common/ircchannel.cpp b/src/common/ircchannel.cpp index 38959aa9..eb63dd57 100644 --- a/src/common/ircchannel.cpp +++ b/src/common/ircchannel.cpp @@ -33,18 +33,18 @@ #include -IrcChannel::IrcChannel(const QString &channelname, Network *network) - : SyncableObject(network), +IrcChannel::IrcChannel(const QString &channelname, Network *network) : SyncableObject(network), _initialized(false), _name(channelname), _topic(QString()), - network(network) + network(network), + _codecForEncoding(0), + _codecForDecoding(0) { setObjectName(QString::number(network->networkId().toInt()) + "/" + channelname); } IrcChannel::~IrcChannel() { - } // ==================== @@ -73,18 +73,6 @@ bool IrcChannel::isValidChannelUserMode(const QString &mode) const { return isvalid; } -QString IrcChannel::name() const { - return _name; -} - -QString IrcChannel::topic() const { - return _topic; -} - -QList IrcChannel::ircUsers() const { - return _userModes.keys(); -} - QString IrcChannel::userModes(IrcUser *ircuser) const { if(_userModes.contains(ircuser)) return _userModes[ircuser]; @@ -96,10 +84,6 @@ QString IrcChannel::userModes(const QString &nick) const { return userModes(network->ircUser(nick)); } -QTextCodec *IrcChannel::codecForEncoding() const { - return _codecForEncoding; -} - void IrcChannel::setCodecForEncoding(const QString &name) { setCodecForEncoding(QTextCodec::codecForName(name.toAscii())); } @@ -108,10 +92,6 @@ void IrcChannel::setCodecForEncoding(QTextCodec *codec) { _codecForEncoding = codec; } -QTextCodec *IrcChannel::codecForDecoding() const { - return _codecForDecoding; -} - void IrcChannel::setCodecForDecoding(const QString &name) { setCodecForDecoding(QTextCodec::codecForName(name.toAscii())); } @@ -125,7 +105,7 @@ QString IrcChannel::decodeString(const QByteArray &text) const { return ::decodeString(text, _codecForDecoding); } -QByteArray IrcChannel::encodeString(const QString string) const { +QByteArray IrcChannel::encodeString(const QString &string) const { if(codecForEncoding()) { return _codecForEncoding->fromUnicode(string); } @@ -140,27 +120,73 @@ void IrcChannel::setTopic(const QString &topic) { emit topicSet(topic); } -void IrcChannel::join(IrcUser *ircuser) { - if(!_userModes.contains(ircuser) && ircuser) { - _userModes[ircuser] = QString(); - ircuser->joinChannel(name()); +void IrcChannel::setPassword(const QString &password) { + _password = password; + emit passwordSet(password); +} + +void IrcChannel::joinIrcUsers(const QList &users, const QStringList &modes) { + if(users.isEmpty()) + return; + + if(users.count() != modes.count()) { + qWarning() << "IrcChannel::addUsers(): number of nicks does not match number of modes!"; + return; + } + + QStringList newNicks; + QStringList newModes; + QList newUsers; + + IrcUser *ircuser; + for(int i = 0; i < users.count(); i++) { + ircuser = users[i]; + if(!ircuser || _userModes.contains(ircuser)) + continue; + + _userModes[ircuser] = modes[i]; + ircuser->joinChannel(this); //qDebug() << "JOIN" << name() << ircuser->nick() << ircUsers().count(); connect(ircuser, SIGNAL(nickSet(QString)), this, SLOT(ircUserNickSet(QString))); connect(ircuser, SIGNAL(destroyed()), this, SLOT(ircUserDestroyed())); // if you wonder why there is no counterpart to ircUserJoined: // the joines are propagted by the ircuser. the signal ircUserJoined is only for convenience - emit ircUserJoined(ircuser); + + newNicks << ircuser->nick(); + newModes << modes[i]; + newUsers << ircuser; } + + if(newNicks.isEmpty()) + return; + + emit ircUsersJoined(newUsers); + emit ircUsersJoined(newNicks, newModes); +} + +void IrcChannel::joinIrcUsers(const QStringList &nicks, const QStringList &modes) { + QList users; + foreach(QString nick, nicks) + users << network->newIrcUser(nick); + joinIrcUsers(users, modes); +} + +void IrcChannel::joinIrcUsers(IrcUser *ircuser) { + QList users; + users << ircuser; + QStringList modes; + modes << QString(); + joinIrcUsers(users, modes); } -void IrcChannel::join(const QString &nick) { - join(network->ircUser(nick)); +void IrcChannel::joinIrcUsers(const QString &nick) { + joinIrcUsers(network->newIrcUser(nick)); } void IrcChannel::part(IrcUser *ircuser) { if(isKnownUser(ircuser)) { _userModes.remove(ircuser); - ircuser->partChannel(name()); + ircuser->partChannel(this); //qDebug() << "PART" << name() << ircuser->nick() << ircUsers().count(); // if you wonder why there is no counterpart to ircUserParted: // the joines are propagted by the ircuser. the signal ircUserParted is only for convenience @@ -242,12 +268,11 @@ void IrcChannel::initSetUserModes(const QVariantMap &usermodes) { } void IrcChannel::ircUserDestroyed() { - qDebug() << "IrcChannel::ircUserDestroyed()"; IrcUser *ircUser = static_cast(sender()); Q_ASSERT(ircUser); _userModes.remove(ircUser); - emit ircUserParted(ircUser); - //qDebug() << "DEST" << name() << ircUsers().count(); + // no further propagation. + // this leads only to fuck ups. } void IrcChannel::ircUserNickSet(QString nick) {