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

0001 /*
0002    SPDX-FileCopyrightText: 2022-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "block.h"
0008 #include "ruqola_debug.h"
0009 #include <KLocalizedString>
0010 #include <QJsonObject>
0011 
0012 Block::Block() = default;
0013 
0014 void Block::parseBlock(const QJsonObject &block)
0015 {
0016     // "blocks":[{"appId":"videoconf-core","blockId":"63981f8a4ef3f3baa965a0d8","callId":"63981f8a4ef3f3baa965a0d8","type":"video_conf"}]
0017     mBlockId = block[QLatin1String("blockId")].toString();
0018     mCallId = block[QLatin1String("callId")].toString();
0019     mAppId = block[QLatin1String("appId")].toString();
0020     setBlockTypeStr(block[QLatin1String("type")].toString());
0021     if (mBlockType == Unknown) {
0022         qCWarning(RUQOLA_LOG) << " Unknown type " << block;
0023     }
0024 }
0025 
0026 QString Block::convertEnumToStr(BlockType newBlockType) const
0027 {
0028     switch (newBlockType) {
0029     case Unknown:
0030         return {};
0031     case VideoConf:
0032         return QStringLiteral("video_conf");
0033     }
0034     return {};
0035 }
0036 
0037 Block::BlockType Block::convertBlockTypeToEnum(const QString &typeStr)
0038 {
0039     if (typeStr == QLatin1String("video_conf")) {
0040         return VideoConf;
0041     }
0042     qCWarning(RUQOLA_LOG) << " Invalid BlockType " << typeStr;
0043     return Unknown;
0044 }
0045 
0046 VideoConferenceInfo Block::videoConferenceInfo() const
0047 {
0048     return mVideoConferenceInfo;
0049 }
0050 
0051 void Block::setVideoConferenceInfo(const VideoConferenceInfo &newInfo)
0052 {
0053     mVideoConferenceInfo = newInfo;
0054 }
0055 
0056 QString Block::blockTypeStr() const
0057 {
0058     return mBlockStr;
0059 }
0060 
0061 void Block::setBlockTypeStr(const QString &newBlockStr)
0062 {
0063     if (mBlockStr != newBlockStr) {
0064         mBlockStr = newBlockStr;
0065         mBlockType = convertBlockTypeToEnum(mBlockStr);
0066     }
0067 }
0068 
0069 bool Block::isValid() const
0070 {
0071     return mBlockType != Unknown;
0072 }
0073 
0074 QString Block::title() const
0075 {
0076     switch (mBlockType) {
0077     case Block::BlockType::Unknown:
0078         break;
0079     case Block::BlockType::VideoConf: {
0080         if (mVideoConferenceInfo.isValid()) {
0081             const QString title = mVideoConferenceInfo.title();
0082             if (!title.isEmpty()) {
0083                 return title;
0084             }
0085         }
0086         return i18n("Conference Call");
0087     }
0088     }
0089     return {};
0090 }
0091 
0092 QString Block::blockId() const
0093 {
0094     return mBlockId;
0095 }
0096 
0097 void Block::setBlockId(const QString &newBlockId)
0098 {
0099     mBlockId = newBlockId;
0100 }
0101 
0102 QString Block::callId() const
0103 {
0104     return mCallId;
0105 }
0106 
0107 void Block::setCallId(const QString &newCallId)
0108 {
0109     mCallId = newCallId;
0110 }
0111 
0112 QString Block::appId() const
0113 {
0114     return mAppId;
0115 }
0116 
0117 void Block::setAppId(const QString &newAppId)
0118 {
0119     mAppId = newAppId;
0120 }
0121 
0122 Block::BlockType Block::blockType() const
0123 {
0124     return mBlockType;
0125 }
0126 
0127 void Block::setBlockType(BlockType newBlockType)
0128 {
0129     mBlockType = newBlockType;
0130     mBlockStr = convertEnumToStr(mBlockType);
0131 }
0132 
0133 bool Block::operator==(const Block &other) const
0134 {
0135     return mBlockId == other.blockId() && mCallId == other.callId() && mAppId == other.appId() && mBlockStr == other.blockTypeStr();
0136 }
0137 
0138 QJsonObject Block::serialize(const Block &block)
0139 {
0140     QJsonObject o;
0141     o[QLatin1String("blockId")] = block.blockId();
0142     o[QLatin1String("callId")] = block.callId();
0143     o[QLatin1String("appId")] = block.appId();
0144     o[QLatin1String("type")] = block.blockTypeStr();
0145     if (block.mVideoConferenceInfo.isValid()) {
0146         o[QLatin1String("videoconferenceinfo")] = VideoConferenceInfo::serialize(block.mVideoConferenceInfo);
0147     } else {
0148         qCWarning(RUQOLA_LOG) << "block.mVideoConferenceInfo is invalid " << block.mVideoConferenceInfo;
0149     }
0150     return o;
0151 }
0152 
0153 Block Block::deserialize(const QJsonObject &o)
0154 {
0155     Block block;
0156     block.setBlockId(o[QLatin1String("blockId")].toString());
0157     block.setCallId(o[QLatin1String("callId")].toString());
0158     block.setAppId(o[QLatin1String("appId")].toString());
0159     block.setBlockTypeStr(o[QLatin1String("type")].toString());
0160     const VideoConferenceInfo info = VideoConferenceInfo::deserialize(o[QLatin1String("videoconferenceinfo")].toObject());
0161     if (info.isValid()) {
0162         block.mVideoConferenceInfo = info;
0163     } else {
0164         qCWarning(RUQOLA_LOG) << "info is invalid " << info;
0165     }
0166     return block;
0167 }
0168 
0169 QDebug operator<<(QDebug d, const Block &t)
0170 {
0171     d.space() << "blockId" << t.blockId();
0172     d.space() << "callId" << t.callId();
0173     d.space() << "appId" << t.appId();
0174     d.space() << "blockTypeStr" << t.blockTypeStr();
0175     d.space() << "mBlockType" << t.blockType();
0176     d.space() << "Video conf info" << t.videoConferenceInfo();
0177     return d;
0178 }
0179 
0180 #include "moc_block.cpp"