File indexing completed on 2024-05-05 17:00:22

0001 /*
0002    SPDX-FileCopyrightText: 2018-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 class QObject;
0012 #include <QUrl>
0013 namespace RocketChatRestApi
0014 {
0015 class LIBROCKETCHATRESTAPI_QT_EXPORT UploadFileJob : public RestApiAbstractJob
0016 {
0017     Q_OBJECT
0018 public:
0019     struct LIBROCKETCHATRESTAPI_QT_EXPORT UploadFileInfo {
0020         QString roomId;
0021         QString description;
0022         QString messageText;
0023         QString threadMessageId;
0024         QUrl filenameUrl;
0025         QString fileName;
0026         bool deleteTemporaryFile = false;
0027         [[nodiscard]] bool isValid() const;
0028     };
0029 
0030     struct LIBROCKETCHATRESTAPI_QT_EXPORT UploadStatusInfo {
0031         qint64 bytesSent = 0;
0032         qint64 bytesTotal = 0;
0033         QString fileName;
0034     };
0035     explicit UploadFileJob(QObject *parent = nullptr);
0036     ~UploadFileJob() override;
0037 
0038     [[nodiscard]] bool start() override;
0039 
0040     [[nodiscard]] bool requireHttpAuthentication() const final;
0041 
0042     [[nodiscard]] QNetworkRequest request() const override;
0043     [[nodiscard]] bool canStart() const override;
0044 
0045     [[nodiscard]] UploadFileInfo uploadFileInfo() const;
0046     void setUploadFileInfo(const UploadFileInfo &uploadFileInfo);
0047 
0048     void abort();
0049 
0050 Q_SIGNALS:
0051     void uploadProgress(const RocketChatRestApi::UploadFileJob::UploadStatusInfo &info);
0052     void uploadFinished();
0053 
0054 private:
0055     Q_DISABLE_COPY(UploadFileJob)
0056     LIBROCKETCHATRESTAPI_QT_NO_EXPORT void slotUploadProgress(qint64 bytesSent, qint64 bytesTotal);
0057     LIBROCKETCHATRESTAPI_QT_NO_EXPORT void slotUploadFinished();
0058     UploadFileInfo mUploadFileInfo;
0059 };
0060 }
0061 Q_DECLARE_METATYPE(RocketChatRestApi::UploadFileJob::UploadFileInfo)
0062 Q_DECLARE_TYPEINFO(RocketChatRestApi::UploadFileJob::UploadFileInfo, Q_MOVABLE_TYPE);
0063 Q_DECLARE_METATYPE(RocketChatRestApi::UploadFileJob::UploadStatusInfo)
0064 Q_DECLARE_TYPEINFO(RocketChatRestApi::UploadFileJob::UploadStatusInfo, Q_MOVABLE_TYPE);