File indexing completed on 2025-02-02 04:51:45

0001 /*
0002    SPDX-FileCopyrightText: 2020-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "librocketchatrestapi-qt_export.h"
0010 #include "restapiabstractjob.h"
0011 #include <QDateTime>
0012 #include <QDebug>
0013 namespace RocketChatRestApi
0014 {
0015 class LIBROCKETCHATRESTAPI_QT_EXPORT RoomsExportJob : public RestApiAbstractJob
0016 {
0017     Q_OBJECT
0018 public:
0019     struct LIBROCKETCHATRESTAPI_QT_EXPORT RoomsExportInfo {
0020         enum class FileFormat {
0021             Unknown,
0022             Html,
0023             Json,
0024         };
0025         enum class ExportAs {
0026             Unknown,
0027             File,
0028             Email,
0029         };
0030 
0031         [[nodiscard]] bool isValid() const;
0032         QString roomId;
0033         QStringList toUsers;
0034         QStringList toEmails;
0035         QString subject;
0036         QString messages;
0037         FileFormat fileFormat = FileFormat::Unknown;
0038         ExportAs exportAs = ExportAs::Unknown;
0039         QDateTime dateFrom;
0040         QDateTime dateTo;
0041     };
0042     explicit RoomsExportJob(QObject *parent = nullptr);
0043     ~RoomsExportJob() override;
0044 
0045     [[nodiscard]] bool start() override;
0046     [[nodiscard]] bool requireHttpAuthentication() const override;
0047     [[nodiscard]] bool canStart() const override;
0048 
0049     [[nodiscard]] QNetworkRequest request() const override;
0050 
0051     [[nodiscard]] QJsonDocument json() const;
0052 
0053     [[nodiscard]] RoomsExportInfo roomExportInfo() const;
0054     void setRoomExportInfo(const RoomsExportInfo &roomExportInfo);
0055 
0056 Q_SIGNALS:
0057     void roomExportDone();
0058 
0059 private:
0060     Q_DISABLE_COPY(RoomsExportJob)
0061     LIBROCKETCHATRESTAPI_QT_NO_EXPORT void onPostRequestResponse(const QString &replyErrorString, const QJsonDocument &replyJson) override;
0062     LIBROCKETCHATRESTAPI_QT_NO_EXPORT void createJsonForFile(QJsonObject &jsonObj) const;
0063     LIBROCKETCHATRESTAPI_QT_NO_EXPORT void createJsonForEmail(QJsonObject &jsonObj) const;
0064     RoomsExportInfo mRoomExportInfo;
0065 };
0066 }
0067 Q_DECLARE_METATYPE(RocketChatRestApi::RoomsExportJob::RoomsExportInfo::FileFormat)
0068 Q_DECLARE_TYPEINFO(RocketChatRestApi::RoomsExportJob::RoomsExportInfo, Q_RELOCATABLE_TYPE);
0069 LIBROCKETCHATRESTAPI_QT_EXPORT QDebug operator<<(QDebug d, const RocketChatRestApi::RoomsExportJob::RoomsExportInfo &t);