Chat
// Copyright (C) 2023 The Qt Company Ltd. // Copyright (C) 2019 Alexey Edelev <semlanik@gmail.com> // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef SIMPLECHATENGINE_H #define SIMPLECHATENGINE_H #include <QObject> #include <QQmlEngine> #include "simplechat.qpb.h" #include "simplechat_client.grpc.qpb.h" #include "chatmessagemodel.h" class QClipboard; class SimpleChatEngine : public QObject { Q_OBJECT QML_ELEMENT QML_SINGLETON Q_PROPERTY(QString userName READ userName NOTIFY userNameChanged) Q_PROPERTY(ChatMessageModel *messages READ messages CONSTANT) Q_PROPERTY(SimpleChatEngine::ContentType clipBoardContentType READ clipBoardContentType NOTIFY clipBoardContentTypeChanged) Q_PROPERTY(SimpleChatEngine::State state READ state NOTIFY stateChanged) public: enum ContentType { Unknown = qtgrpc::examples::chat::ChatMessage::ContentType::Unknown, Text = qtgrpc::examples::chat::ChatMessage::ContentType::Text, Image = qtgrpc::examples::chat::ChatMessage::ContentType::Image, }; Q_ENUM(ContentType) enum State { Disconnected = 0, Connecting = 1, Connected = 2, }; Q_ENUM(State) explicit SimpleChatEngine(QObject *parent = nullptr); ~SimpleChatEngine() override; Q_INVOKABLE void login(const QString &name, const QString &password); Q_INVOKABLE void sendMessage(const QString &message); Q_INVOKABLE void sendImageFromClipboard(); QString userName() const; ChatMessageModel *messages(); SimpleChatEngine::ContentType clipBoardContentType() const; SimpleChatEngine::State state() const; Q_SIGNALS: void authFailed(); void clipBoardContentTypeChanged(); void userNameChanged(); void stateChanged(); private: void setState(SimpleChatEngine::State state); SimpleChatEngine::State m_state; ChatMessageModel m_messages; qtgrpc::examples::chat::SimpleChat::Client *m_client; QClipboard *m_clipBoard; QString m_userName; }; Q_DECLARE_METATYPE(ChatMessageModel *) #endif // SIMPLECHATENGINE_H