kdeconnect-kde/interfaces/conversationmessage.h

124 lines
3.7 KiB
C
Raw Normal View History

(WIP) Upgrade Telephony plugin to read SMS history (KDE side) Summary: For real usecases of SMS support, we will almost always need access to the message history in some way Specifically resolve T8338 Incidentally resolve T6651 since Telephony shall no longer create a notification Test Plan: Setup: - Build corresponding Android-side diff (D11698) - Build this diff Step 1: Does anything at all work? - Put a breakpoint in the handleBatchMessages method of the telephony plugin, ideally after constructing a Message object - Use DBus to poke /modules/kdeconnect/devices/<deviceID>/telephony.requestAllConversations() - Verify that the constructed Message is one you sent or received and that it is the most recent in the corresponding conversation Step 2: DBus - Open the Interface org.kde.kdeconnect.device.conversations of /modules/kdeconnect/devices/<deviceId> - Poke activeConversations and verify an empty array is returned - Poke requestAllConversationThreads - Poke activeConversations and verify that a list of numbers has been returned. These are conversationIds - Use a conversationId to call getFirstFromConversation - Verify that the returned Message object is one which you recognize - Note that if the message is an MMS it will be blank and meaningless. Try a different conversationId. MMS support "coming soon!" Step 3: SMS App - Use ccmake (or similar) to set SMSAPP_ENABLE to ON - Build the project - Run ./bin/kdeconnect-sms - Verify that the app shows a list of everyone you have an SMS conversation with (MMS messages are stripped out) - If you have the Contacts plugin working, verify that most contacts have their name and photo instead of their phone number Reviewers: #kde_connect, nicolasfella, apol Reviewed By: #kde_connect, nicolasfella, apol Subscribers: andyholmes, apol, nicolasfella, #kde_connect Tags: #kde_connect Maniphest Tasks: T8338, T6651 Differential Revision: https://phabricator.kde.org/D11854
2018-05-25 15:21:56 +01:00
/**
* Copyright 2018 Simon Redman <simon@ergotech.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef PLUGINS_TELEPHONY_CONVERSATIONMESSAGE_H_
#define PLUGINS_TELEPHONY_CONVERSATIONMESSAGE_H_
#include <QObject>
#include <QDBusMetaType>
#include <QDBusArgument>
#include <QVariantMap>
#include "interfaces/kdeconnectinterfaces_export.h"
class KDECONNECTINTERFACES_EXPORT ConversationMessage
: public QObject {
Q_OBJECT
Q_CLASSINFO("D-Bus Interface", "org.kde.kdeconnect.device.telephony.messages")
Q_PROPERTY(QString body READ body)
Q_PROPERTY(QString address READ address)
Q_PROPERTY(qint64 date READ date)
Q_PROPERTY(qint32 type READ type)
Q_PROPERTY(qint32 read READ read)
Q_PROPERTY(qint32 threadID READ threadID)
Q_PROPERTY(qint32 uID READ uID)
public:
// TYPE field values from Android
enum Types
{
MessageTypeAll = 0,
MessageTypeInbox = 1,
MessageTypeSent = 2,
MessageTypeDraft = 3,
MessageTypeOutbox = 4,
MessageTypeFailed = 5,
MessageTypeQueued = 6,
};
Q_ENUM(Types);
/**
* Build a new message from a keyword argument dictionary
*
* @param args mapping of field names to values as might be contained in a network packet containing a message
*/
ConversationMessage(const QVariantMap& args = QVariantMap(), QObject* parent = Q_NULLPTR);
ConversationMessage(const QString& body, const QString& address, const qint64& date,
const qint32& type, const qint32& read, const qint32& threadID,
const qint32& uID,
QObject* parent = Q_NULLPTR);
ConversationMessage(const ConversationMessage& other, QObject* parent = Q_NULLPTR);
~ConversationMessage();
ConversationMessage& operator=(const ConversationMessage& other);
static void registerDbusType();
QString body() const { return m_body; }
QString address() const { return m_address; }
qint64 date() const { return m_date; }
qint32 type() const { return m_type; }
qint32 read() const { return m_read; }
qint32 threadID() const { return m_threadID; }
qint32 uID() const { return m_uID; }
QVariantMap toVariant() const;
protected:
/**
* Body of the message
*/
QString m_body;
/**
* Remote-side address of the message. Most likely a phone number, but may be an email address
*/
QString m_address;
/**
* Date stamp (Unix epoch millis) associated with the message
*/
qint64 m_date;
/**
* Type of the message. See the message.type enum
*/
qint32 m_type;
/**
* Whether we have a read report for this message
*/
qint32 m_read;
/**
* Tag which binds individual messages into a thread
*/
qint32 m_threadID;
/**
* Value which uniquely identifies a message
*/
qint32 m_uID;
};
Q_DECLARE_METATYPE(ConversationMessage);
#endif /* PLUGINS_TELEPHONY_CONVERSATIONMESSAGE_H_ */