summaryrefslogtreecommitdiffstats
path: root/api/logic/meta/BaseEntity.h
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2017-03-18 02:22:36 +0100
committerPetr Mrázek <peterix@gmail.com>2017-04-07 00:20:02 +0200
commite46aba9da584338db8d8a1a8a487bdcc6cf84343 (patch)
tree40deee806e1aa9ad19f438c066aca41737d42af0 /api/logic/meta/BaseEntity.h
parent0060b506257b906d40ef53d1e23404dba76afcee (diff)
downloadMultiMC-e46aba9da584338db8d8a1a8a487bdcc6cf84343.tar
MultiMC-e46aba9da584338db8d8a1a8a487bdcc6cf84343.tar.gz
MultiMC-e46aba9da584338db8d8a1a8a487bdcc6cf84343.tar.lz
MultiMC-e46aba9da584338db8d8a1a8a487bdcc6cf84343.tar.xz
MultiMC-e46aba9da584338db8d8a1a8a487bdcc6cf84343.zip
NOISSUE sanitize loading and downloading of metadata files
Diffstat (limited to 'api/logic/meta/BaseEntity.h')
-rw-r--r--api/logic/meta/BaseEntity.h45
1 files changed, 32 insertions, 13 deletions
diff --git a/api/logic/meta/BaseEntity.h b/api/logic/meta/BaseEntity.h
index 7064e9d2..92a39272 100644
--- a/api/logic/meta/BaseEntity.h
+++ b/api/logic/meta/BaseEntity.h
@@ -15,9 +15,9 @@
#pragma once
-#include <QObject>
-#include <memory>
#include <QJsonObject>
+#include <QObject>
+#include "QObjectPtr.h"
#include "multimc_logic_export.h"
@@ -26,29 +26,48 @@ namespace Meta
{
class MULTIMC_LOGIC_EXPORT BaseEntity
{
+public: /* types */
+ using Ptr = std::shared_ptr<BaseEntity>;
+ enum class LoadStatus
+ {
+ NotLoaded,
+ Local,
+ Remote
+ };
+ enum class UpdateStatus
+ {
+ NotDone,
+ InProgress,
+ Failed,
+ Succeeded
+ };
+
public:
virtual ~BaseEntity();
- using Ptr = std::shared_ptr<BaseEntity>;
-
- virtual std::unique_ptr<Task> remoteUpdateTask() = 0;
- virtual std::unique_ptr<Task> localUpdateTask() = 0;
virtual void merge(const std::shared_ptr<BaseEntity> &other) = 0;
virtual void parse(const QJsonObject &obj) = 0;
virtual QString localFilename() const = 0;
virtual QUrl url() const;
- bool isComplete() const { return m_localLoaded || m_remoteLoaded; }
+ bool isLoaded() const
+ {
+ return m_loadStatus > LoadStatus::NotLoaded;
+ }
+ bool shouldStartRemoteUpdate() const
+ {
+ return m_updateStatus == UpdateStatus::NotDone;
+ }
- bool isLocalLoaded() const { return m_localLoaded; }
- bool isRemoteLoaded() const { return m_remoteLoaded; }
+ void load();
- void notifyLocalLoadComplete();
- void notifyRemoteLoadComplete();
+protected: /* methods */
+ bool loadLocalFile();
private:
- bool m_localLoaded = false;
- bool m_remoteLoaded = false;
+ LoadStatus m_loadStatus = LoadStatus::NotLoaded;
+ UpdateStatus m_updateStatus = UpdateStatus::NotDone;
+ shared_qobject_ptr<Task> m_updateTask;
};
}