File indexing completed on 2024-05-19 15:58:56
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 "videoconferencemanager.h" 0008 #include "connection.h" 0009 #include "rocketchataccount.h" 0010 #include "ruqola_videoconference_core_debug.h" 0011 #include "video-conference/videoconferencejoinjob.h" 0012 #include "videoconferencenotificationjob.h" 0013 #include <QDesktopServices> 0014 #include <QJsonObject> 0015 0016 VideoConferenceManager::VideoConferenceManager(RocketChatAccount *account, QObject *parent) 0017 : QObject{parent} 0018 , mRocketChatAccount(account) 0019 { 0020 } 0021 0022 VideoConferenceManager::~VideoConferenceManager() = default; 0023 0024 void VideoConferenceManager::parseVideoConference(const QJsonArray &contents) 0025 { 0026 for (const QJsonValue ¤t : contents) { 0027 const QJsonObject videoConfObject = current.toObject(); 0028 VideoConference videoConference; 0029 videoConference.parseVideoConference(videoConfObject); 0030 if (videoConference.isValid()) { 0031 if (!mVideoConferenceList.contains(videoConference)) { 0032 mVideoConferenceList.append(std::move(videoConference)); 0033 0034 switch (videoConference.action()) { 0035 case VideoConference::Unknown: 0036 break; 0037 case VideoConference::IncomingCall: 0038 showNotification(videoConference); 0039 break; 0040 case VideoConference::Accepted: 0041 Q_EMIT videoConferenceCallAccepted(videoConference); 0042 break; 0043 case VideoConference::Canceled: 0044 Q_EMIT videoConferenceCallCanceled(videoConference); 0045 break; 0046 case VideoConference::Confirmed: 0047 Q_EMIT videoConferenceCallConfirmed(videoConference); 0048 break; 0049 case VideoConference::Rejected: 0050 Q_EMIT videoConferenceCallRejected(videoConference); 0051 break; 0052 } 0053 } 0054 } 0055 } 0056 } 0057 0058 void VideoConferenceManager::showNotification(const VideoConference &videoConference) 0059 { 0060 auto job = new VideoConferenceNotificationJob(this); 0061 connect(job, &VideoConferenceNotificationJob::acceptVideoConference, this, [this, videoConference]() { 0062 // Send info about accept video conf. 0063 mRocketChatAccount->ddp()->videoConferenceAccepted(videoConference.roomId(), videoConference.callId(), mRocketChatAccount->userId()); 0064 0065 auto conferenceJoinJob = new RocketChatRestApi::VideoConferenceJoinJob(this); 0066 RocketChatRestApi::VideoConferenceJoinJob::VideoConferenceJoinInfo joinInfo; 0067 QJsonObject obj; 0068 joinInfo.callId = videoConference.callId(); 0069 // TODO joinInfo.useCamera = callInfo.useCamera; 0070 // TODO joinInfo.useMicro = callInfo.useMic; 0071 conferenceJoinJob->setInfo(joinInfo); 0072 mRocketChatAccount->restApi()->initializeRestApiJob(conferenceJoinJob); 0073 connect(conferenceJoinJob, &RocketChatRestApi::VideoConferenceJoinJob::videoConferenceJoinDone, this, [videoConference, this](const QJsonObject &obj) { 0074 // qDebug() << " join info " << obj; 0075 QDesktopServices::openUrl(QUrl(obj[QLatin1String("url")].toString())); 0076 mVideoConferenceList.removeAll(videoConference); 0077 }); 0078 if (!conferenceJoinJob->start()) { 0079 qCWarning(RUQOLA_VIDEO_CONFERENCE_LOG) << "Impossible to start VideoConferenceJoinJob job"; 0080 } 0081 }); 0082 connect(job, &VideoConferenceNotificationJob::rejectVideoConference, this, [this, videoConference]() { 0083 // Send info about reject video conf. 0084 mRocketChatAccount->ddp()->videoConferenceRejected(videoConference.roomId(), videoConference.callId(), mRocketChatAccount->userId()); 0085 mVideoConferenceList.removeAll(videoConference); 0086 }); 0087 job->setRocketChatAccount(mRocketChatAccount); 0088 job->setVideoConference(videoConference); 0089 job->start(); 0090 } 0091 0092 #include "moc_videoconferencemanager.cpp"