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);