File indexing completed on 2024-04-28 05:26:03
0001 // SPDX-FileCopyrightText: 2021 Michael Lang <criticaltemp@protonmail.com> 0002 // 0003 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0004 0005 #pragma once 0006 0007 #include <QObject> 0008 0009 #include <optional> 0010 0011 #include "ecurl.h" 0012 #include "modemcontroller.h" 0013 #include <database.h> 0014 #include <mms.h> 0015 0016 #include "qcorotask.h" 0017 0018 constexpr std::array<QStringView, 6> TAPBACK_KEYS = {u"♥️", u"👍", u"👎", u"😂", u"‼️", u"❓"}; 0019 constexpr std::array<QStringView, 6> TAPBACK_REMOVED = {u"Removed a heart from “", 0020 u"Removed a like from “", 0021 u"Removed a dislike from “", 0022 u"Removed a laugh from “", 0023 u"Removed an exclamation from “", 0024 u"Removed a question mark from “"}; 0025 0026 constexpr std::array<QStringView, 6> TAPBACK_ADDED = {u"Loved “", u"Liked “", u"Disliked “", u"Laughed at “", u"Emphasized “", u"Questioned “"}; 0027 0028 class ChannelLogger : public QObject 0029 { 0030 Q_OBJECT 0031 Q_CLASSINFO("D-Bus Interface", "org.kde.spacebar.Daemon") 0032 0033 public: 0034 explicit ChannelLogger(std::optional<QString> &modemPath, QObject *parent = nullptr); 0035 0036 // QString argument since this needs to be called from DBus 0037 Q_SCRIPTABLE void disableNotificationsForNumber(const QString &numbers); 0038 Q_SCRIPTABLE void manualDownload(const QString &id, const QString &url, const QDateTime &expires); 0039 Q_SCRIPTABLE void sendMessage(const QString &numbers, const QString &id, const QString &text, const QStringList &files, const qint64 &totalSize); 0040 Q_SCRIPTABLE void sendTapback(const QString &numbers, const QString &id, const QString &tapback, const bool &isRemoved); 0041 Q_SCRIPTABLE void syncSettings(); 0042 Q_SCRIPTABLE QString ownNumber(); 0043 Q_SCRIPTABLE QString countryCode(); 0044 0045 private: 0046 void checkMessages(); 0047 void handleIncomingMessage(ModemManager::Sms::Ptr msg); 0048 void createDownloadNotification(const MmsMessage &mmsMessage); 0049 QCoro::Task<void> addMessage(const Message &message); 0050 void updateMessage(const Message &message); 0051 QCoro::Task<void> saveMessage(const PhoneNumberList &phoneNumberList, 0052 const QDateTime &datetime, 0053 const QString &text = QString(), 0054 const QString &attachments = QString(), 0055 const QString &smil = QString(), 0056 const QString &fromNumber = QString(), 0057 const QString &messageId = QString(), 0058 const bool pendingDownload = false, 0059 const QString &contentLocation = QString(), 0060 const QDateTime &expires = QDateTime(), 0061 const int size = 0); 0062 QCoro::Task<QString> sendMessageSMS(const PhoneNumber &phoneNumber, const QString &id, const QString &text); 0063 QCoro::Task<QString> 0064 sendMessageMMS(const PhoneNumberList &phoneNumberList, const QString &id, const QString &text, const QStringList &files, const qint64 totalSize); 0065 QCoro::Task<void> sendCancelResponse(const QString &transactionId); 0066 QCoro::Task<void> sendDeliveryAcknowledgement(const QString &transactionId); 0067 QCoro::Task<void> sendNotifyResponse(const QString &transactionId, const QString &status); 0068 QCoro::Task<void> sendReadReport(const QString &messageId); 0069 QCoro::Task<QByteArray> uploadMessage(const QByteArray &data); 0070 QCoro::Task<void> downloadMessage(const MmsMessage message); 0071 void handleDownloadedMessage(const QByteArray &response, const QString &url, const QDateTime &expires); 0072 void createNotification(Message &message); 0073 QCoro::Task<bool> handleTapbackReaction(Message &message, const QString &reactNumber); 0074 QCoro::Task<bool> saveTapback(Message &message, 0075 const QString &reactNumber, 0076 const QStringView &tapback, 0077 std::span<const QStringView> list, 0078 const bool &isAdd, 0079 const bool &isImage); 0080 QCoro::Task<void> sendTapbackHandler(const QString &numbers, const QString &id, const QString &tapback, const bool &isRemoved); 0081 0082 Database m_database; 0083 0084 Mms m_mms; 0085 0086 ECurl m_curl; 0087 0088 PhoneNumberList m_disabledNotificationNumber; 0089 0090 PhoneNumber m_ownNumber; 0091 0092 bool m_dataConnected; 0093 0094 QStringList m_deferredIndicators; 0095 0096 Q_SIGNALS: 0097 Q_SCRIPTABLE void messageAdded(const QString &phoneNumber, const QString &id); 0098 Q_SCRIPTABLE void messageUpdated(const QString &phoneNumber, const QString &id); 0099 Q_SCRIPTABLE void manualDownloadFinished(const QString &id, const bool isEmpty); 0100 };