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"