File indexing completed on 2024-06-02 05:07:07
0001 /* 0002 SPDX-FileCopyrightText: 2018-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "createchanneljob.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 CreateChannelJob::CreateChannelJob(QObject *parent) 0017 : RestApiAbstractJob(parent) 0018 { 0019 } 0020 0021 CreateChannelJob::~CreateChannelJob() = default; 0022 0023 bool CreateChannelJob::start() 0024 { 0025 if (!canStart()) { 0026 deleteLater(); 0027 return false; 0028 } 0029 addStartRestApiInfo("CreateChannelJob::start"); 0030 submitPostRequest(json()); 0031 return true; 0032 } 0033 0034 void CreateChannelJob::onPostRequestResponse(const QString &replyErrorString, const QJsonDocument &replyJson) 0035 { 0036 const QJsonObject replyObject = replyJson.object(); 0037 0038 if (replyObject[QLatin1String("success")].toBool()) { 0039 addLoggerInfo(QByteArrayLiteral("CreateChannelJob success: ") + replyJson.toJson(QJsonDocument::Indented)); 0040 qDebug() << " replyObject : " << replyObject; 0041 Q_EMIT createChannelDone(replyObject); 0042 } else { 0043 emitFailedMessage(replyErrorString, replyObject); 0044 addLoggerWarning(QByteArrayLiteral("CreateChannelJob problem: ") + replyJson.toJson(QJsonDocument::Indented)); 0045 } 0046 } 0047 0048 CreateChannelTeamInfo CreateChannelJob::createChannelInfo() const 0049 { 0050 return mCreateChannelInfo; 0051 } 0052 0053 void CreateChannelJob::setCreateChannelInfo(const CreateChannelTeamInfo &createChannelInfo) 0054 { 0055 mCreateChannelInfo = createChannelInfo; 0056 } 0057 0058 QString CreateChannelJob::errorMessage(const QString &str, const QJsonObject &detail) 0059 { 0060 if (str == QLatin1String("error-duplicate-channel-name")) { 0061 return i18n("A channel with name '%1' exists", detail.value(QStringLiteral("channel_name")).toString()); 0062 } else if (str == QLatin1String("error-invalid-room-name")) { 0063 return i18n("'%1' is not a valid room name", detail.value(QStringLiteral("channel_name")).toString()); 0064 } 0065 0066 return RestApiAbstractJob::errorMessage(str, detail); 0067 } 0068 0069 bool CreateChannelJob::requireHttpAuthentication() const 0070 { 0071 return true; 0072 } 0073 0074 bool CreateChannelJob::canStart() const 0075 { 0076 if (!mCreateChannelInfo.canStart()) { 0077 qCWarning(ROCKETCHATQTRESTAPI_LOG) << "CreateChannelJob: channelname is empty"; 0078 return false; 0079 } 0080 if (!RestApiAbstractJob::canStart()) { 0081 return false; 0082 } 0083 return true; 0084 } 0085 0086 QJsonDocument CreateChannelJob::json() const 0087 { 0088 return mCreateChannelInfo.json(); 0089 } 0090 0091 QNetworkRequest CreateChannelJob::request() const 0092 { 0093 const QUrl url = mRestApiMethod->generateUrl(RestApiUtil::RestApiUrlType::ChannelsCreate); 0094 QNetworkRequest request(url); 0095 addAuthRawHeader(request); 0096 addRequestAttribute(request); 0097 return request; 0098 } 0099 0100 #include "moc_createchanneljob.cpp"