File indexing completed on 2024-10-06 12:53:58
0001 // SPDX-FileCopyrightText: 2020 Carl Schwan <carlschwan@kde.org> 0002 // SPDX-License-Identifier: GPL-3.0-or-later 0003 0004 #pragma once 0005 0006 #include <QObject> 0007 0008 #include <Quotient/events/roommessageevent.h> 0009 0010 #include "neochatroom.h" 0011 0012 class CustomEmojiModel; 0013 class NeoChatRoom; 0014 0015 /** 0016 * @class ActionsHandler 0017 * 0018 * This class handles chat messages ready for posting to a room. 0019 * 0020 * Everything that needs to be done to prepare the message for posting in a room 0021 * including: 0022 * - File handling 0023 * - User mentions 0024 * - Quick edits 0025 * - Chat actions 0026 * - Custom emojis 0027 * 0028 * @note A chat action is a message starting with /, resulting in something other 0029 * than a normal message being sent (e.g. /me, /join). 0030 * 0031 * @sa ActionsModel, NeoChatRoom 0032 */ 0033 class ActionsHandler : public QObject 0034 { 0035 Q_OBJECT 0036 0037 /** 0038 * @brief The room that messages will be sent to. 0039 */ 0040 Q_PROPERTY(NeoChatRoom *room READ room WRITE setRoom NOTIFY roomChanged) 0041 0042 public: 0043 explicit ActionsHandler(QObject *parent = nullptr); 0044 0045 [[nodiscard]] NeoChatRoom *room() const; 0046 void setRoom(NeoChatRoom *room); 0047 0048 Q_SIGNALS: 0049 void roomChanged(); 0050 void showEffect(const QString &effect); 0051 0052 public Q_SLOTS: 0053 0054 /** 0055 * @brief Pre-process text and send message. 0056 */ 0057 void handleNewMessage(); 0058 0059 /** 0060 * @brief Pre-process text and send edit. 0061 */ 0062 void handleEdit(); 0063 0064 private: 0065 NeoChatRoom *m_room = nullptr; 0066 void checkEffects(const QString &text); 0067 0068 QString handleMentions(QString handledText, const bool &isEdit = false); 0069 void handleMessage(const QString &text, QString handledText, const bool &isEdit = false); 0070 };