void MorseTextChannel::sentMessageDeliveryStatusChanged(const QString &phone, quint64 messageId, TelegramNamespace::MessageDeliveryStatus status) { // We are connected to broadcast signal, so have to select only needed calls if (phone != m_targetID) { return; } Tp::DeliveryStatus statusFlag; switch (status) { case TelegramNamespace::MessageDeliveryStatusSent: statusFlag = Tp::DeliveryStatusAccepted; break; case TelegramNamespace::MessageDeliveryStatusRead: statusFlag = Tp::DeliveryStatusRead; break; default: return; } const QString token = QString::number(messageId); Tp::MessagePartList partList; Tp::MessagePart header; header[QLatin1String("message-sender")] = QDBusVariant(m_targetHandle); header[QLatin1String("message-sender-id")] = QDBusVariant(m_targetID); header[QLatin1String("message-type")] = QDBusVariant(Tp::ChannelTextMessageTypeDeliveryReport); header[QLatin1String("delivery-status")] = QDBusVariant(statusFlag); header[QLatin1String("delivery-token")] = QDBusVariant(token); partList << header; addReceivedMessage(partList); }
void MorseTextChannel::whenMessageReceived(const TelegramNamespace::Message &message, uint senderHandle) { QString contactID; if (m_targetHandleType == Tp::HandleTypeContact) { contactID = m_targetID; } else { #if TP_QT_VERSION >= TP_QT_VERSION_CHECK(0, 9, 7) contactID = m_groupIface->memberIdentifiers().value(senderHandle); #else return; #endif } Tp::MessagePartList body; Tp::MessagePart text; text[QLatin1String("content-type")] = QDBusVariant(QLatin1String("text/plain")); if (message.type == TelegramNamespace::MessageTypeText) { text[QLatin1String("content")] = QDBusVariant(message.text); } else { text[QLatin1String("content")] = QDBusVariant(tr("Telepathy-Morse doesn't support multimedia messages yet.")); } body << text; Tp::MessagePartList partList; Tp::MessagePart header; const QString token = QString::number(message.id); header[QLatin1String("message-token")] = QDBusVariant(token); header[QLatin1String("message-type")] = QDBusVariant(Tp::ChannelTextMessageTypeNormal); header[QLatin1String("message-sent")] = QDBusVariant(message.timestamp); if (message.flags & TelegramNamespace::MessageFlagOut) { header[QLatin1String("message-sender")] = QDBusVariant(m_selfHandle); header[QLatin1String("message-sender-id")] = QDBusVariant(m_selfID); partList << header << body; m_messagesIface->messageSent(partList, 0, token); } else { uint currentTimestamp = QDateTime::currentMSecsSinceEpoch() / 1000; header[QLatin1String("message-received")] = QDBusVariant(currentTimestamp); header[QLatin1String("message-sender")] = QDBusVariant(senderHandle); if (!contactID.isEmpty()) { header[QLatin1String("message-sender-id")] = QDBusVariant(contactID); } partList << header << body; addReceivedMessage(partList); } }
void MorseTextChannel::processReceivedMessage(uint contactHandle, QString contactID, const QString &message, quint32 messageId, quint32 flags, uint timestamp) { qDebug() << Q_FUNC_INFO << message; Tp::MessagePartList body; Tp::MessagePart text; text[QLatin1String("content-type")] = QDBusVariant(QLatin1String("text/plain")); text[QLatin1String("content")] = QDBusVariant(message); body << text; Tp::MessagePartList partList; Tp::MessagePart header; const QString token = QString::number(messageId); header[QLatin1String("message-token")] = QDBusVariant(token); header[QLatin1String("message-type")] = QDBusVariant(Tp::ChannelTextMessageTypeNormal); header[QLatin1String("message-sent")] = QDBusVariant(timestamp); if (flags & TelegramNamespace::MessageFlagOut) { header[QLatin1String("message-sender")] = QDBusVariant(m_selfHandle); header[QLatin1String("message-sender-id")] = QDBusVariant(m_selfID); partList << header << body; m_messagesIface->messageSent(partList, 0, token); } else { uint currentTimestamp = QDateTime::currentMSecsSinceEpoch() / 1000; header[QLatin1String("message-received")] = QDBusVariant(currentTimestamp); header[QLatin1String("message-sender")] = QDBusVariant(contactHandle); if (!contactID.isEmpty()) { header[QLatin1String("message-sender-id")] = QDBusVariant(contactID); } partList << header << body; addReceivedMessage(partList); } }