1 /* 2 SPDX-FileCopyrightText: 2020-2021 Laurent Montel <montel@kde.org> 3 4 SPDX-License-Identifier: LGPL-2.0-or-later 5 */ 6 7 #include "roomsexportjob.h" 8 9 #include "restapimethod.h" 10 #include "rocketchatqtrestapi_debug.h" 11 #include <QJsonArray> 12 #include <QJsonDocument> 13 #include <QJsonObject> 14 #include <QNetworkReply> 15 using namespace RocketChatRestApi; RoomsExportJob(QObject * parent)16RoomsExportJob::RoomsExportJob(QObject *parent) 17 : RestApiAbstractJob(parent) 18 { 19 } 20 21 RoomsExportJob::~RoomsExportJob() = default; 22 start()23bool RoomsExportJob::start() 24 { 25 if (!canStart()) { 26 deleteLater(); 27 return false; 28 } 29 addStartRestApiInfo("RoomsExportJob::start"); 30 submitPostRequest(json()); 31 32 return true; 33 } 34 onPostRequestResponse(const QJsonDocument & replyJson)35void RoomsExportJob::onPostRequestResponse(const QJsonDocument &replyJson) 36 { 37 const QJsonObject replyObject = replyJson.object(); 38 if (replyObject[QStringLiteral("success")].toBool()) { 39 addLoggerInfo(QByteArrayLiteral("RoomsExportJob: success: ") + replyJson.toJson(QJsonDocument::Indented)); 40 Q_EMIT roomExportDone(); 41 } else { 42 emitFailedMessage(replyObject); 43 addLoggerWarning(QByteArrayLiteral("RoomsExportJob: problem: ") + replyJson.toJson(QJsonDocument::Indented)); 44 } 45 } 46 requireHttpAuthentication() const47bool RoomsExportJob::requireHttpAuthentication() const 48 { 49 return true; 50 } 51 canStart() const52bool RoomsExportJob::canStart() const 53 { 54 if (!mRoomExportInfo.isValid()) { 55 qCWarning(ROCKETCHATQTRESTAPI_LOG) << "mRoomExportInfo: mRoomExportInfo is not valid."; 56 return false; 57 } 58 59 if (!RestApiAbstractJob::canStart()) { 60 return false; 61 } 62 return true; 63 } 64 json() const65QJsonDocument RoomsExportJob::json() const 66 { 67 QJsonObject jsonObj; 68 69 jsonObj[QLatin1String("rid")] = mRoomExportInfo.roomId; 70 switch (mRoomExportInfo.exportAs) { 71 case RoomsExportInfo::ExportAs::Unknown: 72 // Nothing it's a bug here. 73 break; 74 case RoomsExportInfo::ExportAs::File: 75 jsonObj[QLatin1String("type")] = QStringLiteral("file"); 76 createJsonForFile(jsonObj); 77 break; 78 case RoomsExportInfo::ExportAs::Email: 79 jsonObj[QLatin1String("type")] = QStringLiteral("email"); 80 createJsonForEmail(jsonObj); 81 break; 82 } 83 const QJsonDocument postData = QJsonDocument(jsonObj); 84 // qDebug() << " postData**************** " << postData; 85 return postData; 86 } 87 createJsonForFile(QJsonObject & jsonObj) const88void RoomsExportJob::createJsonForFile(QJsonObject &jsonObj) const 89 { 90 switch (mRoomExportInfo.fileFormat) { 91 case RoomsExportInfo::FileFormat::Unknown: 92 // It's a bug 93 break; 94 case RoomsExportInfo::FileFormat::Html: 95 jsonObj[QLatin1String("format")] = QStringLiteral("html"); 96 break; 97 case RoomsExportInfo::FileFormat::Json: 98 jsonObj[QLatin1String("format")] = QStringLiteral("json"); 99 break; 100 } 101 jsonObj[QLatin1String("dateTo")] = mRoomExportInfo.dateTo.toString(Qt::ISODateWithMs); 102 jsonObj[QLatin1String("dateFrom")] = mRoomExportInfo.dateFrom.toString(Qt::ISODateWithMs); 103 } 104 createJsonForEmail(QJsonObject & jsonObj) const105void RoomsExportJob::createJsonForEmail(QJsonObject &jsonObj) const 106 { 107 jsonObj[QLatin1String("toUsers")] = QJsonArray::fromStringList(mRoomExportInfo.toUsers); 108 jsonObj[QLatin1String("toEmails")] = QJsonArray::fromStringList(mRoomExportInfo.toEmails); 109 jsonObj[QLatin1String("subject")] = mRoomExportInfo.subject; 110 jsonObj[QLatin1String("messages")] = mRoomExportInfo.messages; 111 } 112 roomExportInfo() const113RoomsExportJob::RoomsExportInfo RoomsExportJob::roomExportInfo() const 114 { 115 return mRoomExportInfo; 116 } 117 setRoomExportInfo(const RoomsExportJob::RoomsExportInfo & roomExportInfo)118void RoomsExportJob::setRoomExportInfo(const RoomsExportJob::RoomsExportInfo &roomExportInfo) 119 { 120 mRoomExportInfo = roomExportInfo; 121 } 122 request() const123QNetworkRequest RoomsExportJob::request() const 124 { 125 const QUrl url = mRestApiMethod->generateUrl(RestApiUtil::RestApiUrlType::RoomsExport); 126 QNetworkRequest request(url); 127 addAuthRawHeader(request); 128 addRequestAttribute(request); 129 return request; 130 } 131 operator <<(QDebug d,const RocketChatRestApi::RoomsExportJob::RoomsExportInfo & t)132QDebug operator<<(QDebug d, const RocketChatRestApi::RoomsExportJob::RoomsExportInfo &t) 133 { 134 d << "roomId " << t.roomId; 135 d << "toUsers " << t.toUsers; 136 d << "toEmails " << t.toEmails; 137 d << "subject " << t.subject; 138 d << "messages " << t.messages; 139 d << "dateFrom " << t.dateFrom; 140 d << "dateTo " << t.dateTo; 141 d << "fileFormat " << static_cast<int>(t.fileFormat); 142 d << "exportAs " << static_cast<int>(t.exportAs); 143 return d; 144 } 145 isValid() const146bool RoomsExportJob::RoomsExportInfo::isValid() const 147 { 148 // Check from exportas type 149 return fileFormat != RoomsExportInfo::FileFormat::Unknown && exportAs != RoomsExportInfo::ExportAs::Unknown && !roomId.isEmpty(); 150 } 151