File indexing completed on 2025-02-02 04:51:43
0001 /* 0002 SPDX-FileCopyrightText: 2021-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "directoryjob.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 DirectoryJob::DirectoryJob(QObject *parent) 0016 : RestApiAbstractJob(parent) 0017 { 0018 } 0019 0020 DirectoryJob::~DirectoryJob() = default; 0021 0022 bool DirectoryJob::requireHttpAuthentication() const 0023 { 0024 return true; 0025 } 0026 0027 bool DirectoryJob::start() 0028 { 0029 if (!canStart()) { 0030 deleteLater(); 0031 return false; 0032 } 0033 initialQueryParameters(); 0034 submitGetRequest(); 0035 0036 addStartRestApiInfo(QByteArrayLiteral("DirectoryJob: Ask for search room or users or teams")); 0037 return true; 0038 } 0039 0040 void DirectoryJob::initialQueryParameters() 0041 { 0042 QueryParameters parameters = queryParameters(); 0043 QMap<QString, QString> map; 0044 switch (mDirectoryInfo.searchType) { 0045 case Unknown: 0046 qCWarning(ROCKETCHATQTRESTAPI_LOG) << "mDirectoryInfo.searchType is undefined"; 0047 break; 0048 case Rooms: 0049 map.insert(QStringLiteral("type"), QStringLiteral("channels")); 0050 break; 0051 case Users: 0052 map.insert(QStringLiteral("type"), QStringLiteral("users")); 0053 break; 0054 case Teams: 0055 map.insert(QStringLiteral("type"), QStringLiteral("teams")); // Verify 0056 break; 0057 } 0058 0059 map.insert(QStringLiteral("text"), mDirectoryInfo.pattern); 0060 map.insert(QStringLiteral("workspace"), QStringLiteral("local")); 0061 parameters.setCustom(map); 0062 setQueryParameters(parameters); 0063 } 0064 0065 void DirectoryJob::onGetRequestResponse(const QString &replyErrorString, const QJsonDocument &replyJson) 0066 { 0067 const QJsonObject replyObject = replyJson.object(); 0068 0069 if (replyObject[QLatin1String("success")].toBool()) { 0070 addLoggerInfo(QByteArrayLiteral("DirectoryJob: success: ") + replyJson.toJson(QJsonDocument::Indented)); 0071 Q_EMIT directoryDone(replyObject); 0072 } else { 0073 emitFailedMessage(replyErrorString, replyObject); 0074 addLoggerWarning(QByteArrayLiteral("DirectoryJob: Problem: ") + replyJson.toJson(QJsonDocument::Indented)); 0075 } 0076 } 0077 0078 DirectoryJob::DirectoryInfo DirectoryJob::directoryInfo() const 0079 { 0080 return mDirectoryInfo; 0081 } 0082 0083 void DirectoryJob::setDirectoryInfo(const DirectoryInfo &directoryInfo) 0084 { 0085 mDirectoryInfo = directoryInfo; 0086 } 0087 0088 bool DirectoryJob::hasQueryParameterSupport() const 0089 { 0090 return true; 0091 } 0092 0093 QNetworkRequest DirectoryJob::request() const 0094 { 0095 QUrl url = mRestApiMethod->generateUrl(RestApiUtil::RestApiUrlType::Directory); 0096 QUrlQuery queryUrl; 0097 addQueryParameter(queryUrl); 0098 url.setQuery(queryUrl); 0099 QNetworkRequest request(url); 0100 addAuthRawHeader(request); 0101 addRequestAttribute(request, false); 0102 return request; 0103 } 0104 0105 bool DirectoryJob::canStart() const 0106 { 0107 if (!RestApiAbstractJob::canStart()) { 0108 return false; 0109 } 0110 if (!mDirectoryInfo.canStart()) { 0111 qCWarning(ROCKETCHATQTRESTAPI_LOG) << "DirectoryJob: mSearchType is undefined"; 0112 return false; 0113 } 0114 return true; 0115 } 0116 0117 bool DirectoryJob::DirectoryInfo::canStart() const 0118 { 0119 return searchType != SearchType::Unknown; 0120 } 0121 0122 bool DirectoryJob::DirectoryInfo::operator==(const DirectoryJob::DirectoryInfo &other) const 0123 { 0124 return other.searchType == searchType && other.pattern == pattern; 0125 } 0126 0127 #include "moc_directoryjob.cpp"