hyprctl: add json output on hyprctl -j plugins list (#8480)

---------

Co-authored-by: Руслан Новокшонов <r.novokshonov@vk.team>
This commit is contained in:
Ruslan 2024-11-17 02:18:30 +03:00 committed by GitHub
parent 9d37b1b073
commit af83c82513
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1473,16 +1473,39 @@ std::string dispatchPlugin(eHyprCtlOutputFormat format, std::string request) {
g_pPluginSystem->unloadPlugin(PLUGIN); g_pPluginSystem->unloadPlugin(PLUGIN);
} else if (OPERATION == "list") { } else if (OPERATION == "list") {
const auto PLUGINS = g_pPluginSystem->getAllPlugins(); const auto PLUGINS = g_pPluginSystem->getAllPlugins();
std::string result = "";
if (format == eHyprCtlOutputFormat::FORMAT_JSON) {
result += "[";
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) if (PLUGINS.size() == 0)
return "no plugins loaded"; return "no plugins loaded";
std::string list = "";
for (auto const& p : PLUGINS) { 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); 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 { } else {
return "unknown opt"; return "unknown opt";
} }