示例#1
0
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);
}
示例#2
0
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);
    }
}
示例#3
0
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);
    }
}