aboutsummaryrefslogtreecommitdiffstats
path: root/src/core/function/CacheManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/function/CacheManager.h')
-rw-r--r--src/core/function/CacheManager.h157
1 files changed, 81 insertions, 76 deletions
diff --git a/src/core/function/CacheManager.h b/src/core/function/CacheManager.h
index 8234de2a..67e7fd75 100644
--- a/src/core/function/CacheManager.h
+++ b/src/core/function/CacheManager.h
@@ -1,5 +1,5 @@
/**
- * Copyright (C) 2021 Saturneric
+ * Copyright (C) 2021 Saturneric <[email protected]>
*
* This file is part of GpgFrontend.
*
@@ -20,94 +20,99 @@
* the gpg4usb project, which is under GPL-3.0-or-later.
*
* All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
+ * Saturneric <[email protected]> starting on May 12, 2021.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
*/
-#ifndef GPGFRONTEND_CACHEMANAGER_H
-#define GPGFRONTEND_CACHEMANAGER_H
+#pragma once
-#include <string>
-
-#include "core/GpgFunctionObject.h"
+#include "core/function/basic/GpgFunctionObject.h"
namespace GpgFrontend {
-template <typename Key, typename Value>
-class ThreadSafeMap {
- public:
- using MapType = std::map<Key, Value>;
- using IteratorType = typename MapType::iterator;
-
- void insert(const Key& key, const Value& value) {
- std::unique_lock lock(mutex_);
- map_[key] = value;
- }
-
- std::optional<Value> get(const Key& key) {
- std::shared_lock lock(mutex_);
- auto it = map_.find(key);
- if (it != map_.end()) {
- return it->second;
- }
- return std::nullopt;
- }
-
- bool exists(const Key& key) {
- std::shared_lock lock(mutex_);
- return map_.count(key) > 0;
- }
-
- IteratorType begin() { return map_mirror_.begin(); }
-
- IteratorType end() { return map_mirror_.end(); }
-
- ThreadSafeMap& mirror() {
- std::shared_lock lock(mutex_);
- map_mirror_ = map_;
- return *this;
- }
-
- private:
- MapType map_mirror_;
- MapType map_;
- mutable std::shared_mutex mutex_;
-};
-
class GPGFRONTEND_CORE_EXPORT CacheManager
- : public QObject,
- public SingletonFunctionObject<CacheManager> {
- Q_OBJECT
+ : public SingletonFunctionObject<CacheManager> {
public:
- CacheManager(int channel = SingletonFunctionObject::GetDefaultChannel());
-
- void SaveCache(std::string key, const nlohmann::json& value,
- bool flush = false);
-
- nlohmann::json LoadCache(std::string key);
-
- nlohmann::json LoadCache(std::string key, nlohmann::json default_value);
+ /**
+ * @brief Construct a new Cache Manager object
+ *
+ * @param channel
+ */
+ explicit CacheManager(
+ int channel = SingletonFunctionObject::GetDefaultChannel());
+
+ /**
+ * @brief Destroy the Cache Manager object
+ *
+ */
+ ~CacheManager() override;
+
+ /**
+ * @brief
+ *
+ * @param key
+ * @param value
+ */
+ void SaveCache(const QString& key, QString value);
+
+ /**
+ * @brief
+ *
+ * @param key
+ * @param value
+ * @param flush
+ */
+ void SaveDurableCache(const QString& key, const QJsonDocument& value,
+ bool flush = false);
+
+ /**
+ * @brief
+ *
+ * @param key
+ * @param value
+ */
+ auto LoadCache(const QString& key) -> QString;
+
+ /**
+ * @brief
+ *
+ * @param key
+ * @return QJsonDocument
+ */
+ auto LoadDurableCache(const QString& key) -> QJsonDocument;
+
+ /**
+ * @brief
+ *
+ * @param key
+ * @param default_value
+ * @return QJsonDocument
+ */
+ auto LoadDurableCache(const QString& key, QJsonDocument default_value)
+ -> QJsonDocument;
+
+ /**
+ * @brief
+ *
+ * @param key
+ * @return auto
+ */
+ void ResetCache(const QString& key);
+
+ /**
+ * @brief
+ *
+ * @param key
+ * @return true
+ * @return false
+ */
+ auto ResetDurableCache(const QString& key) -> bool;
private:
- std::string get_data_object_key(std::string key);
-
- nlohmann::json load_cache_storage(std::string key,
- nlohmann::json default_value);
-
- void load_all_cache_storage();
-
- void flush_cache_storage();
-
- void register_cache_key(std::string key);
-
- ThreadSafeMap<std::string, nlohmann::json> cache_storage_;
- nlohmann::json key_storage_;
- QTimer* m_timer_;
- const std::string drk_key_ = "__cache_manage_data_register_key_list";
+ class Impl;
+ SecureUniquePtr<Impl> p_;
};
} // namespace GpgFrontend
-
-#endif