#include "Tactility/app/AppRegistration.h" #include "Tactility/app/AppManifest.h" #include #include #include #define TAG "app" namespace tt::app { typedef std::unordered_map> AppManifestMap; static AppManifestMap app_manifest_map; static Mutex hash_mutex(Mutex::Type::Normal); void addApp(const AppManifest& manifest) { TT_LOG_I(TAG, "Registering manifest %s", manifest.appId.c_str()); hash_mutex.lock(); if (app_manifest_map.contains(manifest.appId)) { TT_LOG_W(TAG, "Overwriting existing manifest for %s", manifest.appId.c_str()); } app_manifest_map[manifest.appId] = std::make_shared(manifest); hash_mutex.unlock(); } bool removeApp(const std::string& id) { TT_LOG_I(TAG, "Removing manifest for %s", id.c_str()); auto lock = hash_mutex.asScopedLock(); lock.lock(); return app_manifest_map.erase(id) == 1; } _Nullable std::shared_ptr findAppById(const std::string& id) { hash_mutex.lock(); auto result = app_manifest_map.find(id); hash_mutex.unlock(); if (result != app_manifest_map.end()) { return result->second; } else { return nullptr; } } std::vector> getApps() { std::vector> manifests; hash_mutex.lock(); for (const auto& item: app_manifest_map) { manifests.push_back(item.second); } hash_mutex.unlock(); return manifests; } } // namespace