#pragma once #include #include #include "tools/Logger.h" #include "tools/Property.h" #include "tools/QmlUtils.h" namespace phonations::transfer { class AbstractAsset : public QObject, protected tools::Logger { Q_OBJECT PH_QML_NAMED_ELEMENT(Asset) public: enum Direction { Download, Upload, }; Q_ENUM(Direction) PH_PROPERTY_CONSTANT_REF(url, QUrl) PH_PROPERTY_CONSTANT_REF(fileName, QString) PH_PROPERTY_CONSTANT(totalSize, qint64) PH_PROPERTY_READONLY(transferedSize, qint64, 0) PH_PROPERTY_PROTECTED(progressSize, qint64, 0) PH_PROPERTY_ENUM_PROTECTED(status, Status, Idle, InProgress, Ready, Errored) PH_PROPERTY_ENUM_PROTECTED(errorCode, ErrorCode, NoError, Malformed, Forbidden, NotFound, IOError, UnknownError) public: explicit AbstractAsset(const QUrl &url, const QString &fileName, int initialSize, int totalSize, const QString &identifier); virtual ~AbstractAsset(); virtual void start(QNetworkAccessManager &networkAccessManager) = 0; void cancel(); signals: void finished(); protected slots: void onProgress(qint64 bytesTransfered, qint64 bytesTotal); void onTransferFinished(); virtual void finalize(bool success) = 0; void handleError(QNetworkReply *reply); protected: int _initialSize; QNetworkReply *_reply = nullptr; }; }