From af83c825138386d269d69b3ef755b844a2eacb22 Mon Sep 17 00:00:00 2001 From: Ruslan Date: Sun, 17 Nov 2024 02:18:30 +0300 Subject: [PATCH] hyprctl: add json output on hyprctl -j plugins list (#8480) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --------- Co-authored-by: Руслан Новокшонов --- src/debug/HyprCtl.cpp | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index c5eba0a7..964a193b 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -1472,17 +1472,40 @@ std::string dispatchPlugin(eHyprCtlOutputFormat format, std::string request) { g_pPluginSystem->unloadPlugin(PLUGIN); } else if (OPERATION == "list") { - const auto PLUGINS = g_pPluginSystem->getAllPlugins(); + const auto PLUGINS = g_pPluginSystem->getAllPlugins(); + std::string result = ""; - if (PLUGINS.size() == 0) - return "no plugins loaded"; + if (format == eHyprCtlOutputFormat::FORMAT_JSON) { + result += "["; - std::string list = ""; - for (auto const& p : PLUGINS) { - list += std::format("\nPlugin {} by {}:\n\tHandle: {:x}\n\tVersion: {}\n\tDescription: {}\n", p->name, p->author, (uintptr_t)p->m_pHandle, p->version, p->description); + if (PLUGINS.size() == 0) + return "[]"; + + for (auto const& p : PLUGINS) { + result += std::format( + R"#( +{{ + "name": "{}", + "author": "{}", + "handle": "{:x}", + "version": "{}", + "description": "{}" +}},)#", + escapeJSONStrings(p->name), escapeJSONStrings(p->author), (uintptr_t)p->m_pHandle, escapeJSONStrings(p->version), escapeJSONStrings(p->description)); + } + trimTrailingComma(result); + result += "]"; + } else { + if (PLUGINS.size() == 0) + return "no plugins loaded"; + + for (auto const& p : PLUGINS) { + result += + std::format("\nPlugin {} by {}:\n\tHandle: {:x}\n\tVersion: {}\n\tDescription: {}\n", p->name, p->author, (uintptr_t)p->m_pHandle, p->version, p->description); + } } - return list; + return result; } else { return "unknown opt"; }