File indexing completed on 2024-06-02 05:07:16
0001 /* 0002 SPDX-FileCopyrightText: 2020-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "adminroomsjob.h" 0008 #include "restapimethod.h" 0009 #include "rocketchatqtrestapi_debug.h" 0010 #include <QJsonDocument> 0011 #include <QJsonObject> 0012 #include <QNetworkReply> 0013 #include <QUrlQuery> 0014 using namespace RocketChatRestApi; 0015 AdminRoomsJob::AdminRoomsJob(QObject *parent) 0016 : RestApiAbstractJob(parent) 0017 { 0018 } 0019 0020 AdminRoomsJob::~AdminRoomsJob() = default; 0021 0022 bool AdminRoomsJob::requireHttpAuthentication() const 0023 { 0024 return true; 0025 } 0026 0027 bool AdminRoomsJob::start() 0028 { 0029 if (!canStart()) { 0030 qCWarning(ROCKETCHATQTRESTAPI_LOG) << "Impossible to start roomAdmin job"; 0031 deleteLater(); 0032 return false; 0033 } 0034 submitGetRequest(); 0035 0036 addStartRestApiInfo(QByteArrayLiteral("RoomsAdminJob: Ask info about room admin info")); 0037 return true; 0038 } 0039 0040 void AdminRoomsJob::onGetRequestResponse(const QString &replyErrorString, const QJsonDocument &replyJson) 0041 { 0042 const QJsonObject replyObject = replyJson.object(); 0043 if (replyObject[QLatin1String("success")].toBool()) { 0044 addLoggerInfo(QByteArrayLiteral("RoomsAdminJob: success: ") + replyJson.toJson(QJsonDocument::Indented)); 0045 Q_EMIT adminRoomsDone(replyObject); 0046 } else { 0047 emitFailedMessage(replyErrorString, replyObject); 0048 addLoggerWarning(QByteArrayLiteral("RoomsAdminJob: Problem: ") + replyJson.toJson(QJsonDocument::Indented)); 0049 } 0050 } 0051 0052 AdminRoomsJob::AdminRoomsJobInfo AdminRoomsJob::roomsAdminInfo() const 0053 { 0054 return mRoomsAdminInfo; 0055 } 0056 0057 void AdminRoomsJob::setRoomsAdminInfo(const AdminRoomsJobInfo &roomsAdminInfo) 0058 { 0059 mRoomsAdminInfo = roomsAdminInfo; 0060 } 0061 0062 bool AdminRoomsJob::hasQueryParameterSupport() const 0063 { 0064 return true; 0065 } 0066 0067 void AdminRoomsJob::initialUrlParameters(QUrlQuery &urlQuery) const 0068 { 0069 // https://<server>/api/v1/rooms.adminRooms?filter=&types[]=d,p,c,teams&sort={"name":1}&count=25&offset=25 0070 if (!mRoomsAdminInfo.filter.isEmpty()) { 0071 urlQuery.addQueryItem(QStringLiteral("filter"), mRoomsAdminInfo.filter); 0072 } 0073 QStringList types; 0074 if (mRoomsAdminInfo.searchType & AdminRoomSearchType::Direct) { 0075 types << QStringLiteral("d"); 0076 } 0077 if (mRoomsAdminInfo.searchType & AdminRoomSearchType::Private) { 0078 types << QStringLiteral("p"); 0079 } 0080 if (mRoomsAdminInfo.searchType & AdminRoomSearchType::Channel) { 0081 types << QStringLiteral("c"); 0082 } 0083 if (mRoomsAdminInfo.searchType & AdminRoomSearchType::Team) { 0084 types << QStringLiteral("teams"); 0085 } 0086 if (mRoomsAdminInfo.searchType & AdminRoomSearchType::OmniChannel) { 0087 types << QStringLiteral("l"); 0088 } 0089 if (!types.isEmpty()) { 0090 for (const QString &str : std::as_const(types)) { 0091 urlQuery.addQueryItem(QStringLiteral("types[]"), str); 0092 } 0093 } 0094 } 0095 0096 QNetworkRequest AdminRoomsJob::request() const 0097 { 0098 // rooms.adminRooms?filter=&types[]=d,p,c,teams&sort={"name":1}&count=25 0099 QUrl url = mRestApiMethod->generateUrl(RestApiUtil::RestApiUrlType::RoomsAdminRooms); 0100 QUrlQuery queryUrl; 0101 addQueryParameter(queryUrl); 0102 initialUrlParameters(queryUrl); 0103 url.setQuery(queryUrl); 0104 QNetworkRequest request(url); 0105 addAuthRawHeader(request); 0106 addRequestAttribute(request); 0107 return request; 0108 } 0109 0110 #include "moc_adminroomsjob.cpp"