void StackedChatWidget::addSession(ChatSessionImpl *session) { if(!m_sessionList->count()) { m_sessionList->setVisible(true); m_chatWidget->setVisible(true); m_stack->addWidget(m_sessionList); m_stack->addWidget(m_chatWidget); } m_sessionList->addSession(session); connect(session,SIGNAL(activated(bool)),SLOT(onSessionActivated(bool))); connect(session,SIGNAL(unreadChanged(qutim_sdk_0_3::MessageList)),SLOT(onUnreadChanged())); }
void SimpleTray::onSessionCreated(qutim_sdk_0_3::ChatSession *session) { connect(session, SIGNAL(unreadChanged(qutim_sdk_0_3::MessageList)), this, SLOT(onUnreadChanged(qutim_sdk_0_3::MessageList))); connect(session, SIGNAL(destroyed()), this, SLOT(onSessionDestroyed())); }
void VLongPollClient::onDataReceived() { QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender()); reply->deleteLater(); QByteArray rawData = reply->readAll(); debug() << Q_FUNC_INFO << rawData; QVariantMap data = Json::parse(rawData).toMap(); if (data.contains("failed")) { requestServer(); return; } else if (data.isEmpty() || reply->error() != QNetworkReply::NoError) { if (m_connection->connectionState() == Connected) QTimer::singleShot(1000, this, SLOT(requestServer())); return; } QVariantList updates = data.value("updates").toList(); for (int i = 0; i < updates.size(); i++) { QVariantList update = updates.at(i).toList(); int updateType = update.value(0, -1).toInt(); switch (updateType) { case MessageAdded: { MessageFlags flags(update.value(2).toInt()); if (flags & MessageOutbox) continue; QString id = update.value(3).toString(); QString messageId = update.value(1).toString(); QString subject = update.value(5).toString(); QString text = update.value(6).toString(); VContact *contact = m_connection->account()->getContact(id, true); qutim_sdk_0_3::Message message; message.setChatUnit(contact); message.setProperty("subject", subject); message.setText(unescape(text)); message.setProperty("mid",messageId); //message.setProperty("html",text); message.setTime(QDateTime::currentDateTime()); message.setIncoming(true); ChatSession *s = ChatLayer::get(contact, true); s->appendMessage(message); connect(s,SIGNAL(unreadChanged(qutim_sdk_0_3::MessageList)),SLOT(onUnreadChanged(qutim_sdk_0_3::MessageList))); m_unread_mess[s].append(message); contact->setChatState(ChatStateActive); break; } case UserOnline: case UserOffline: { // WTF? Why VKontakte sends minus as first char of id? QString id = update.value(1).toString().mid(1); VContact *contact = m_connection->account()->getContact(id, false); if (contact) contact->setOnline(updateType == UserOnline); break; } } } if (m_connection->connectionState() == Connected) requestData(data.value("ts").toString()); }