File indexing completed on 2023-09-24 08:52:40
0001 /** 0002 * SPDX-FileCopyrightText: 2018 Simon Redman <simon@ergotech.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "conversationmessage.h" 0008 0009 #include <QVariantMap> 0010 0011 #include "interfaces_conversation_message_debug.h" 0012 0013 ConversationMessage::ConversationMessage(const QVariantMap &args) 0014 : m_eventField(args[QStringLiteral("event")].toInt()) 0015 , m_body(args[QStringLiteral("body")].toString()) 0016 , m_date(args[QStringLiteral("date")].toLongLong()) 0017 , m_type(args[QStringLiteral("type")].toInt()) 0018 , m_read(args[QStringLiteral("read")].toInt()) 0019 , m_threadID(args[QStringLiteral("thread_id")].toLongLong()) 0020 , m_uID(args[QStringLiteral("_id")].toInt()) 0021 { 0022 QVariantList jsonAddresses = args[QStringLiteral("addresses")].toList(); 0023 for (const QVariant &addressField : jsonAddresses) { 0024 const auto &rawAddress = addressField.toMap(); 0025 m_addresses.append(ConversationAddress(rawAddress[QStringLiteral("address")].value<QString>())); 0026 } 0027 QVariantMap::const_iterator subID_it = args.find(QStringLiteral("sub_id")); 0028 m_subID = subID_it == args.end() ? -1 : subID_it->toLongLong(); 0029 0030 if (args.contains(QStringLiteral("attachments"))) { 0031 QVariant attachment = args.value(QStringLiteral("attachments")); 0032 const QVariantList jsonAttachments = attachment.toList(); 0033 for (const QVariant &attachmentField : jsonAttachments) { 0034 const auto &rawAttachment = attachmentField.toMap(); 0035 m_attachments.append(Attachment(rawAttachment[QStringLiteral("part_id")].value<qint64>(), 0036 rawAttachment[QStringLiteral("mime_type")].value<QString>(), 0037 rawAttachment[QStringLiteral("encoded_thumbnail")].value<QString>(), 0038 rawAttachment[QStringLiteral("unique_identifier")].value<QString>())); 0039 } 0040 } 0041 } 0042 0043 ConversationMessage::ConversationMessage(const qint32 &eventField, 0044 const QString &body, 0045 const QList<ConversationAddress> &addresses, 0046 const qint64 &date, 0047 const qint32 &type, 0048 const qint32 &read, 0049 const qint64 &threadID, 0050 const qint32 &uID, 0051 const qint64 &subID, 0052 const QList<Attachment> &attachments) 0053 : m_eventField(eventField) 0054 , m_body(body) 0055 , m_addresses(addresses) 0056 , m_date(date) 0057 , m_type(type) 0058 , m_read(read) 0059 , m_threadID(threadID) 0060 , m_uID(uID) 0061 , m_subID(subID) 0062 , m_attachments(attachments) 0063 { 0064 } 0065 0066 ConversationMessage ConversationMessage::fromDBus(const QDBusVariant &var) 0067 { 0068 QDBusArgument data = var.variant().value<QDBusArgument>(); 0069 ConversationMessage message; 0070 data >> message; 0071 return message; 0072 } 0073 0074 ConversationAddress::ConversationAddress(QString address) 0075 : m_address(address) 0076 { 0077 } 0078 0079 bool ConversationMessage::isOutgoing() const 0080 { 0081 return type() == MessageTypeSent || type() == MessageTypeOutbox || type() == MessageTypeDraft || type() == MessageTypeFailed || type() == MessageTypeQueued; 0082 } 0083 0084 Attachment::Attachment(qint64 partID, QString mimeType, QString base64EncodedFile, QString uniqueIdentifier) 0085 : m_partID(partID) 0086 , m_mimeType(mimeType) 0087 , m_base64EncodedFile(base64EncodedFile) 0088 , m_uniqueIdentifier(uniqueIdentifier) 0089 { 0090 } 0091 0092 void ConversationMessage::registerDbusType() 0093 { 0094 qDBusRegisterMetaType<ConversationMessage>(); 0095 qRegisterMetaType<ConversationMessage>(); 0096 qDBusRegisterMetaType<ConversationAddress>(); 0097 qRegisterMetaType<ConversationAddress>(); 0098 qDBusRegisterMetaType<QList<ConversationAddress>>(); 0099 qRegisterMetaType<QList<ConversationAddress>>(); 0100 qDBusRegisterMetaType<Attachment>(); 0101 qRegisterMetaType<Attachment>(); 0102 }