void NickView::startQuery(const QModelIndex &index) { if (index.data(NetworkModel::ItemTypeRole) != NetworkModel::IrcUserItemType) return; IrcUser *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>()); NetworkId networkId = index.data(NetworkModel::NetworkIdRole).value<NetworkId>(); if (!ircUser || !networkId.isValid()) return; Client::bufferModel()->switchToOrStartQuery(networkId, ircUser->nick()); }
QString NetworkModelController::nickName(const QModelIndex &index) const { IrcUser *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>()); if (ircUser) return ircUser->nick(); BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>(); if (!bufferInfo.isValid()) return QString(); if (bufferInfo.type() != BufferInfo::QueryBuffer) return QString(); return bufferInfo.bufferName(); // FIXME this might break with merged queries maybe }
void IrcChannel::joinIrcUsers(const QList<IrcUser *> &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<IrcUser *> newUsers; IrcUser *ircuser; for (int i = 0; i < users.count(); i++) { ircuser = users[i]; if (!ircuser || _userModes.contains(ircuser)) { addUserMode(ircuser, modes[i]); continue; } _userModes[ircuser] = modes[i]; ircuser->joinChannel(this); 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 newNicks << ircuser->nick(); newModes << modes[i]; newUsers << ircuser; } if (newNicks.isEmpty()) return; SYNC_OTHER(joinIrcUsers, ARG(newNicks), ARG(newModes)); emit ircUsersJoined(newUsers); }