mirror of
https://github.com/rad4day/Waybar.git
synced 2023-12-21 10:22:59 +01:00
feat: execNoRead
This commit is contained in:
parent
6ca4e14b29
commit
9b9d13ab0d
@ -34,6 +34,8 @@ inline int close(FILE* fp, pid_t pid) {
|
||||
|
||||
fclose(fp);
|
||||
do {
|
||||
waitpid(pid, &stat, WCONTINUED | WUNTRACED);
|
||||
|
||||
if (WIFEXITED(stat)) {
|
||||
spdlog::debug("%s exited with code %d", WEXITSTATUS(stat));
|
||||
} else if (WIFSIGNALED(stat)) {
|
||||
@ -83,6 +85,14 @@ inline struct res exec(std::string cmd) {
|
||||
return {WEXITSTATUS(stat), output};
|
||||
}
|
||||
|
||||
inline struct res execNoRead(std::string cmd) {
|
||||
int pid;
|
||||
auto fp = command::open(cmd, pid);
|
||||
if (!fp) return {-1, ""};
|
||||
auto stat = command::close(fp, pid);
|
||||
return {WEXITSTATUS(stat), ""};
|
||||
}
|
||||
|
||||
inline int32_t forkExec(std::string cmd) {
|
||||
if (cmd == "") return -1;
|
||||
|
||||
|
@ -4,14 +4,13 @@
|
||||
waybar::modules::Custom::Custom(const std::string& name, const std::string& id,
|
||||
const Json::Value& config)
|
||||
: ALabel(config, "custom-" + name, id, "{}"), name_(name), fp_(nullptr), pid_(-1) {
|
||||
if (config_["exec"].isString()) {
|
||||
if (interval_.count() > 0) {
|
||||
delayWorker();
|
||||
} else {
|
||||
continuousWorker();
|
||||
}
|
||||
if (interval_.count() > 0) {
|
||||
delayWorker();
|
||||
} else if (config_["exec"].isString()) {
|
||||
continuousWorker();
|
||||
} else {
|
||||
dp.emit();
|
||||
}
|
||||
dp.emit();
|
||||
}
|
||||
|
||||
waybar::modules::Custom::~Custom() {
|
||||
@ -25,14 +24,16 @@ void waybar::modules::Custom::delayWorker() {
|
||||
thread_ = [this] {
|
||||
bool can_update = true;
|
||||
if (config_["exec-if"].isString()) {
|
||||
auto res = util::command::exec(config_["exec-if"].asString());
|
||||
if (res.exit_code != 0) {
|
||||
output_ = util::command::execNoRead(config_["exec-if"].asString());
|
||||
if (output_.exit_code != 0) {
|
||||
can_update = false;
|
||||
event_box_.hide();
|
||||
}
|
||||
}
|
||||
if (can_update) {
|
||||
output_ = util::command::exec(config_["exec"].asString());
|
||||
if (config_["exec"].isString()) {
|
||||
output_ = util::command::exec(config_["exec"].asString());
|
||||
}
|
||||
dp.emit();
|
||||
}
|
||||
thread_.sleep_for(interval_);
|
||||
|
Loading…
Reference in New Issue
Block a user