summaryrefslogtreecommitdiffstats
path: root/logic/net/CacheDownload.h
diff options
context:
space:
mode:
Diffstat (limited to 'logic/net/CacheDownload.h')
-rw-r--r--logic/net/CacheDownload.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/logic/net/CacheDownload.h b/logic/net/CacheDownload.h
index 49d2d99f..7f95a69d 100644
--- a/logic/net/CacheDownload.h
+++ b/logic/net/CacheDownload.h
@@ -20,6 +20,29 @@
#include <QCryptographicHash>
#include <QSaveFile>
+class INetworkValidator
+{
+public:
+ virtual ~INetworkValidator() {}
+
+ virtual void validate(const QByteArray &data) = 0;
+};
+class JsonValidator : public INetworkValidator
+{
+public:
+ void validate(const QByteArray &data) override;
+};
+class MD5HashValidator : public INetworkValidator
+{
+public:
+ explicit MD5HashValidator(const QByteArray &expected)
+ : m_expected(expected) {}
+ void validate(const QByteArray &data) override;
+
+private:
+ QByteArray m_expected;
+};
+
typedef std::shared_ptr<class CacheDownload> CacheDownloadPtr;
class CacheDownload : public NetAction
{
@@ -33,6 +56,8 @@ private:
/// the hash-as-you-download
QCryptographicHash md5sum;
+ INetworkValidator *m_validator = nullptr;
+
bool wroteAnyData = false;
public:
@@ -46,6 +71,10 @@ public:
{
return m_target_path;
}
+ void setValidator(INetworkValidator *validator)
+ {
+ m_validator = validator;
+ }
protected
slots:
virtual void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);