File indexing completed on 2024-05-19 05:03:20
0001 /* 0002 SPDX-FileCopyrightText: 2019-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "channelmembersjob.h" 0008 0009 #include "restapimethod.h" 0010 #include "rocketchatqtrestapi_debug.h" 0011 #include <KLocalizedString> 0012 #include <QJsonDocument> 0013 #include <QJsonObject> 0014 #include <QNetworkReply> 0015 using namespace RocketChatRestApi; 0016 ChannelMembersJob::ChannelMembersJob(QObject *parent) 0017 : ChannelGroupBaseJob(parent) 0018 { 0019 } 0020 0021 ChannelMembersJob::~ChannelMembersJob() = default; 0022 0023 bool ChannelMembersJob::start() 0024 { 0025 if (!canStart()) { 0026 deleteLater(); 0027 return false; 0028 } 0029 addStartRestApiInfo("ChannelMembersJob::start: "); 0030 submitGetRequest(); 0031 return true; 0032 } 0033 0034 void ChannelMembersJob::onGetRequestResponse(const QString &replyErrorString, const QJsonDocument &replyJson) 0035 { 0036 const QJsonObject replyObject = replyJson.object(); 0037 if (replyObject[QLatin1String("success")].toBool()) { 0038 addLoggerInfo(QByteArrayLiteral("channelMembersDone success: ") + replyJson.toJson(QJsonDocument::Indented)); 0039 Q_EMIT channelMembersDone(replyObject, channelGroupInfo()); 0040 } else { 0041 emitFailedMessage(replyErrorString, replyObject); 0042 addLoggerWarning(QByteArrayLiteral("channelMembersDone problem: ") + replyJson.toJson(QJsonDocument::Indented)); 0043 } 0044 } 0045 0046 QString ChannelMembersJob::generateErrorMessage(const QString &errorStr) const 0047 { 0048 if (errorStr == QLatin1String("unauthorized")) { 0049 return i18n("Get Members not authorized in this room"); 0050 } 0051 return ChannelGroupBaseJob::generateErrorMessage(errorStr); 0052 } 0053 0054 ChannelMembersJob::ChannelType ChannelMembersJob::channelType() const 0055 { 0056 return mChannelType; 0057 } 0058 0059 void ChannelMembersJob::setChannelType(ChannelType channelType) 0060 { 0061 mChannelType = channelType; 0062 } 0063 0064 bool ChannelMembersJob::hasQueryParameterSupport() const 0065 { 0066 return true; 0067 } 0068 0069 bool ChannelMembersJob::requireHttpAuthentication() const 0070 { 0071 return true; 0072 } 0073 0074 bool ChannelMembersJob::canStart() const 0075 { 0076 if (!hasIdentifier()) { 0077 qCWarning(ROCKETCHATQTRESTAPI_LOG) << "ChannelMembersJob: RoomId and RoomName are empty"; 0078 return false; 0079 } 0080 if (mChannelType == ChannelMembersJob::Unknown) { 0081 qCWarning(ROCKETCHATQTRESTAPI_LOG) << "ChannelMembersJob: Channel type is unknown."; 0082 return false; 0083 } 0084 if (!RestApiAbstractJob::canStart()) { 0085 return false; 0086 } 0087 return true; 0088 } 0089 0090 QNetworkRequest ChannelMembersJob::request() const 0091 { 0092 QUrl url; 0093 switch (mChannelType) { 0094 case Channel: 0095 url = mRestApiMethod->generateUrl(RestApiUtil::RestApiUrlType::ChannelsMembers); 0096 break; 0097 case Groups: 0098 url = mRestApiMethod->generateUrl(RestApiUtil::RestApiUrlType::GroupsMembers); 0099 break; 0100 case Direct: 0101 url = mRestApiMethod->generateUrl(RestApiUtil::RestApiUrlType::ImMembers); 0102 break; 0103 case Unknown: 0104 qCWarning(ROCKETCHATQTRESTAPI_LOG) << "ChannelMembersJob: Type is not defined"; 0105 break; 0106 } 0107 addQueryItem(url); 0108 QNetworkRequest request(url); 0109 addAuthRawHeader(request); 0110 addRequestAttribute(request, false); 0111 0112 return request; 0113 } 0114 0115 #include "moc_channelmembersjob.cpp"