void FolderTreeWidgetItem::updateExpandedState()
{
  // Just trigger an update of the column text, it will all be handled thaere.
  setDataSize( mDataSize );
  setTotalCount( mTotalCount );
  setUnreadCount( mUnreadCount );
}
Ejemplo n.º 2
0
void SessionChildItem::receiveMessage(IrcMessage* message)
{
    AbstractSessionItem::receiveMessage(message);
    if (message->type() == IrcMessage::Private)
    {
        IrcPrivateMessage* privMsg = static_cast<IrcPrivateMessage*>(message);

        QString alertText;
        if (isChannel())
        {
            if (privMsg->message().contains(m_parent->session()->nickName(), Qt::CaseInsensitive))
            {
                setHighlighted(true);
                if (!isCurrent())
                    alertText = tr("%1 on %2:\n%3").arg(privMsg->sender().name()).arg(title()).arg(privMsg->message());
            }
        }
        else
        {
            setHighlighted(true);
            if (!isCurrent())
                alertText = tr("%1 in private:\n%2").arg(privMsg->sender().name()).arg(privMsg->message());
        }

        if (!alertText.isEmpty())
        {
            setAlertText(alertText);
            emit alert(this);
        }

        if (!isCurrent())
            setUnreadCount(unreadCount() + 1);
    }
    else if (message->type() == IrcMessage::Numeric)
    {
        IrcNumericMessage* numMsg = static_cast<IrcNumericMessage*>(message);
        if (isChannel() && numMsg->code() == Irc::RPL_TOPIC)
            setSubtitle(numMsg->parameters().value(2));
        else if (!isChannel() && numMsg->code() == Irc::RPL_WHOISUSER)
            setSubtitle(numMsg->parameters().value(5));
    }
}
Ejemplo n.º 3
0
void SessionChildItem::receiveMessage(IrcMessage* message)
{
    if (m_usermodel)
        m_usermodel->processMessage(message);

    if (message->type() == IrcMessage::Numeric) {
        IrcNumericMessage* numeric = static_cast<IrcNumericMessage*>(message);
        switch (numeric->code()) {
            case Irc::RPL_NAMREPLY:
                if (m_sent.contains(IrcCommand::Names))
                    return;
                break;
            case Irc::RPL_ENDOFNAMES:
                if (m_sent.contains(IrcCommand::Names)) {
                    emit namesReceived(m_usermodel->users());
                    m_sent.remove(IrcCommand::Names);
                    return;
                }
                break;
            case Irc::RPL_TOPIC:
                if (isChannel()) {
                    setSubtitle(message->parameters().value(2));
                    setDescription(IrcUtil::messageToHtml(subtitle()));
                }
                break;
            case Irc::RPL_WHOISUSER:
                if (!isChannel()) {
                    setSubtitle(message->parameters().value(5));
                    setDescription(IrcUtil::messageToHtml(subtitle()));
                }
                if (m_sent.contains(IrcCommand::Whois)) {
                    m_whois.append(tr("Ident: %1").arg(message->parameters().value(2)));
                    m_whois.append(tr("Host: %1").arg(message->parameters().value(3)));
                    m_whois.append(tr("Name: %1").arg(message->parameters().value(5)));
                    return;
                }
                break;
            case Irc::RPL_WHOISSERVER:
                if (m_sent.contains(IrcCommand::Whois)) {
                    m_whois.append(tr("Server: %1 (%2)").arg(message->parameters().value(2), message->parameters().value(3)));
                    return;
                }
                break;
            case Irc::RPL_WHOISOPERATOR:
                if (m_sent.contains(IrcCommand::Whois)) {
                    m_whois.append(tr("IRC operator"));
                    return;
                }
                break;
            case Irc::RPL_WHOISACCOUNT:
                if (m_sent.contains(IrcCommand::Whois)) {
                    m_whois.append(tr("Logged in as: %1").arg(message->parameters().value(2)));
                    return;
                }
                break;
            case Irc::RPL_WHOISREGNICK:
                if (m_sent.contains(IrcCommand::Whois)) {
                    m_whois.append(tr("Registered nick"));
                    return;
                }
                break;
            case Irc::RPL_WHOISSECURE:
                if (m_sent.contains(IrcCommand::Whois)) {
                    m_whois.append(tr("Secure connection"));
                    return;
                }
                break;
            case Irc::RPL_WHOISIDLE:
                if (m_sent.contains(IrcCommand::Whois)) {
                    QDateTime signon = QDateTime::fromTime_t(message->parameters().value(3).toInt());
                    QTime idle = QTime().addSecs(message->parameters().value(2).toInt());
                    m_whois.append(tr("Connected: %1").arg(signon.toString()));
                    m_whois.append(tr("Idle: %1").arg(idle.toString()));
                    return;
                }
                break;
            case Irc::RPL_WHOISCHANNELS:
                if (m_sent.contains(IrcCommand::Whois)) {
                    m_whois.append(tr("Channels: %1").arg(message->parameters().value(2)));
                    return;
                }
                break;
            case Irc::RPL_WHOISHOST:
            case Irc::RPL_WHOISMODES:
                if (m_sent.contains(IrcCommand::Whois)) {
                    return;
                }
                break;
            case Irc::RPL_ENDOFWHOIS:
                if (m_sent.contains(IrcCommand::Whois)) {
                    emit whoisReceived(m_whois);
                    m_sent.remove(IrcCommand::Whois);
                    m_whois.clear();
                }
            case Irc::RPL_WHOISHELPOP:
            case Irc::RPL_WHOISSPECIAL:
                return;
            default:
                break;
        }
    }

    if (message->type() == IrcMessage::Private) {
        IrcPrivateMessage* privMsg = static_cast<IrcPrivateMessage*>(message);

        QString alertText;
        if (isChannel()) {
            if (privMsg->message().contains(m_parent->session()->nickName(), Qt::CaseInsensitive)) {
                setHighlighted(true);
                if (!isCurrent())
                    alertText = tr("%1 on %2:\n%3").arg(privMsg->sender().name()).arg(title()).arg(privMsg->message());
            }
        } else {
            setHighlighted(true);
            if (!isCurrent())
                alertText = tr("%1 in private:\n%2").arg(privMsg->sender().name()).arg(privMsg->message());
        }

        if (!alertText.isEmpty())
            emit alerted(alertText);

        if (!isCurrent())
            setUnreadCount(unreadCount() + 1);
    }

    const QString formatted = messageFormatter()->formatMessage(message, m_usermodel);
    if (!formatted.isEmpty())
        appendMessage(formatted);
}
Ejemplo n.º 4
0
QSharedPointer<VKContainerDialog> VKContainerDialog::fromJson(VKStorage *storage, QJsonObject obj, const QJsonArray users) {
    auto dialog = QSharedPointer<VKContainerDialog>(new VKContainerDialog(storage));
    dialog->beginObjectChange();

    dialog->setUnreadCount(obj.value("unread").toInt());

    QJsonObject message;
    if (obj.contains("message")) {
        message = obj.value("message").toObject();
    } else if (obj.contains("body") && obj.contains("id")) {
        message = obj;
        dialog->setUnreadCount(1);
    } else {
        qDebug()<<"Unknown object for VKContainerDialog";
        qDebug()<<"Keys:";
        for (auto it = message.begin();it != message.end(); ++it) {
            qDebug()<<it.key();
        }
        Q_ASSERT(0);
    }

    if (message.contains("chat_id")) {
        dialog->setIsChat(true);
        dialog->setId(message.value("chat_id").toInt());
    } else {
        dialog->setIsChat(false);
        dialog->setId(message.value("user_id").toInt());
    }

    if (message.value("title").toString() != " ... ") {
        dialog->setChatName(message.value("title").toString());
    } else {
        int user_id = message.value("user_id").toInt();
        bool b = false;
        for (auto e : users) {
            auto el = e.toObject();
            if (el.value("id").toInt() == user_id) {
                dialog->setChatName(QString("%1 %2") .arg(el.value("first_name").toString()) .arg(el.value("last_name").toString()));
                b = true;
                break;
            }
        }
        if (!b) {
            dialog->setChatName(message.value("title").toString());
        }
    }


    auto chatIcon = QSharedPointer<VKContainerChatIcon>(new VKContainerChatIcon(storage));
    if (message.value("photo_100").isString()) {
        chatIcon->add(message.value("photo_100").toString());
    } else {
        for (int i=0;i<4 && i<users.count();i++) {
            auto user = users.at(i).toObject();
            chatIcon->add(user.value("photo_100").toString());
        }
    }
    dialog->setChatIcon(chatIcon);


    auto containerMessage = VKContainerMessage::fromJson(storage, message, users);
    storage->addMessage(containerMessage);

    dialog->endObjectChange();
    dialog->setValid();
    return dialog;
}