#include "src/capability_manager.h"
#include <glib.h>
+#include <json/json.h>
#include <pkgmgr-info.h>
#include <iostream>
return true;
}
+std::string CapabilityManager::PackCapabilities() {
+ Json::Value root;
+ Json::Value caps;
+ for (const auto& cap : list_)
+ caps.append(cap.Serialize());
+ root["capabilities"] = caps;
+ Json::FastWriter writer;
+ return writer.write(root);
+}
+
+std::vector<Capability> CapabilityManager::UnpackCapabilities(
+ const std::string& caps_str) {
+ Json::Reader reader;
+ Json::Value root;
+
+ if (!reader.parse(caps_str, root)) {
+ LOG(ERROR) << "Failed to parse JSON string of capabilities";
+ return {};
+ }
+
+ std::vector<Capability> list;
+ const Json::Value caps = root["capabilities"];
+ for (unsigned int i = 0; i < caps.size(); ++i) {
+ Capability cap(caps[i].asString());
+ if (!cap.IsValid()) {
+ LOG(ERROR) << "Invalid capability! Ignore it";
+ continue;
+ }
+ list.emplace_back(caps[i].asString());
+ }
+
+ return list;
+}
+
void CapabilityManager::HandlePackageEvent(const std::string& pkgid,
PackageEventListener::EventType event_type) {
LOG(DEBUG) << "Event received: " << pkgid << " "
bool AddCapability(const Capability& capability);
bool ListCapabilities();
bool LoadCapabilities();
+ std::string PackCapabilities();
+ std::vector<Capability> UnpackCapabilities(const std::string& caps_str);
private:
void HandlePackageEvent(const std::string& pkgid,