mirror of
				https://github.com/rad4day/Waybar.git
				synced 2025-11-04 09:42:42 +01:00 
			
		
		
		
	feat: execNoRead
This commit is contained in:
		@@ -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 {
 | 
			
		||||
  } else if (config_["exec"].isString()) {
 | 
			
		||||
    continuousWorker();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  } else {
 | 
			
		||||
    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) {
 | 
			
		||||
      if (config_["exec"].isString()) {
 | 
			
		||||
        output_ = util::command::exec(config_["exec"].asString());
 | 
			
		||||
      }
 | 
			
		||||
      dp.emit();
 | 
			
		||||
    }
 | 
			
		||||
    thread_.sleep_for(interval_);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user