File indexing completed on 2024-05-12 16:25:58

0001 /*
0002    SPDX-FileCopyrightText: 2022-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "libruqolacore_export.h"
0010 #include "user.h"
0011 #include <QDebug>
0012 #include <QVector>
0013 
0014 class LIBRUQOLACORE_EXPORT VideoConferenceInfo
0015 {
0016     Q_GADGET
0017 public:
0018     enum VideoConferenceType {
0019         Unknown,
0020         Direct,
0021         Conference,
0022     };
0023     Q_ENUM(VideoConferenceType)
0024 
0025     VideoConferenceInfo();
0026     ~VideoConferenceInfo();
0027     void parse(const QJsonObject &content);
0028 
0029     [[nodiscard]] QString url() const;
0030     void setUrl(const QString &newUrl);
0031 
0032     [[nodiscard]] int status() const;
0033     void setStatus(int newStatus);
0034 
0035     [[nodiscard]] bool ringing() const;
0036     void setRinging(bool newRinging);
0037 
0038     [[nodiscard]] QString roomId() const;
0039     void setRoomId(const QString &newRoomId);
0040 
0041     [[nodiscard]] qint64 createdAtDateTime() const;
0042     void setCreatedAtDateTime(qint64 newCreatedAtDateTime);
0043 
0044     [[nodiscard]] qint64 endedAtDateTime() const;
0045     void setEndedAtDateTime(qint64 newEndedAtDateTime);
0046 
0047     [[nodiscard]] VideoConferenceType conferenceType() const;
0048     void setConferenceType(VideoConferenceType newConferenceType);
0049 
0050     [[nodiscard]] QString providerName() const;
0051     void setProviderName(const QString &newProviderName);
0052 
0053     [[nodiscard]] bool operator==(const VideoConferenceInfo &other) const;
0054 
0055     [[nodiscard]] QVector<User> users() const;
0056     void setUsers(const QVector<User> &newUsers);
0057 
0058     [[nodiscard]] QString statusInformation() const;
0059 
0060     [[nodiscard]] QString messageId() const;
0061     void setMessageId(const QString &newMessageId);
0062 
0063     [[nodiscard]] QString blockId() const;
0064     void setBlockId(const QString &newBlockId);
0065 
0066     [[nodiscard]] bool isValid() const;
0067 
0068     [[nodiscard]] bool canJoin() const;
0069 
0070     [[nodiscard]] QString title() const;
0071 
0072     static QJsonObject serialize(const VideoConferenceInfo &videoConfInfo);
0073     static VideoConferenceInfo deserialize(const QJsonObject &o);
0074 
0075     [[nodiscard]] static QString convertEnumToString(const VideoConferenceInfo &info);
0076 
0077 private:
0078     [[nodiscard]] LIBRUQOLACORE_NO_EXPORT VideoConferenceInfo::VideoConferenceType convertTypeToEnum(const QString &str) const;
0079     QVector<User> mUsers;
0080     QString mBlockId;
0081     QString mUrl;
0082     QString mRoomId;
0083     QString mProviderName;
0084     QString mMessageId;
0085     VideoConferenceType mConferenceType = Unknown;
0086     qint64 mCreatedAtDateTime = -1;
0087     qint64 mEndedAtDateTime = -1;
0088     int mStatus = -1;
0089     bool mRinging = false;
0090 };
0091 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
0092 Q_DECLARE_METATYPE(VideoConferenceInfo)
0093 #endif
0094 Q_DECLARE_TYPEINFO(VideoConferenceInfo, Q_MOVABLE_TYPE);
0095 LIBRUQOLACORE_EXPORT QDebug operator<<(QDebug d, const VideoConferenceInfo &t);