// // Created by grimmauld on 08.03.24. // #ifndef SWAYMUX_SWAYOUTPUTS_H #define SWAYMUX_SWAYOUTPUTS_H #include #include #include "Sway.h" #include "../tree/swaytree.h" using json = nlohmann::json; struct SwayOutput { explicit SwayOutput() : id(0), name("none"), active(false), power(false) {}; explicit SwayOutput(const json &rep) : id(rep["id"]), name(rep["name"].is_null() ? "none" : rep["name"]), active(rep["active"]), power(rep["power"]) {}; const std::string name; int id; const bool active; const bool power; [[nodiscard]] bool isValid() const { return active && power; } }; class SwayOutputList { public: explicit SwayOutputList(const json &rep) { for (const auto &o: rep) { outputs.emplace_back(o); } } std::vector outputs; explicit SwayOutputList(const Sway &sway) : SwayOutputList(json::parse(sway.sendIPC(SWAY_GET_OUTPUTS).msg)) {}; [[nodiscard]] bool isOutputValid(const SwayTreeNode *test) { if (test == nullptr) return false; if (test->node.type != NodeType::output) return false; return std::ranges::any_of(outputs.begin(), outputs.end(), [test](const auto &o) { return o.name == test->node.name && o.isValid(); }); } }; #endif //SWAYMUX_SWAYOUTPUTS_H