59 lines
1.4 KiB
C++
59 lines
1.4 KiB
C++
//
|
|
// Created by grimmauld on 08.03.24.
|
|
//
|
|
|
|
#ifndef SWAYMUX_SWAYOUTPUTS_H
|
|
#define SWAYMUX_SWAYOUTPUTS_H
|
|
|
|
#include <string>
|
|
#include <nlohmann/json.hpp>
|
|
#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<SwayOutput> 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
|