File indexing completed on 2024-04-21 04:56:47

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 }