fix(custom): close endless scripts
parent
7befd27059
commit
1b13f9e38c
|
@ -12,6 +12,7 @@ namespace waybar::modules {
|
||||||
class Custom : public ALabel {
|
class Custom : public ALabel {
|
||||||
public:
|
public:
|
||||||
Custom(const std::string, const Json::Value&);
|
Custom(const std::string, const Json::Value&);
|
||||||
|
~Custom();
|
||||||
auto update() -> void;
|
auto update() -> void;
|
||||||
private:
|
private:
|
||||||
void delayWorker();
|
void delayWorker();
|
||||||
|
@ -27,6 +28,7 @@ class Custom : public ALabel {
|
||||||
waybar::util::SleeperThread thread_;
|
waybar::util::SleeperThread thread_;
|
||||||
waybar::util::command::res output_;
|
waybar::util::command::res output_;
|
||||||
waybar::util::JsonParser parser_;
|
waybar::util::JsonParser parser_;
|
||||||
|
FILE* fp_;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
waybar::modules::Custom::Custom(const std::string name,
|
waybar::modules::Custom::Custom(const std::string name,
|
||||||
const Json::Value& config)
|
const Json::Value& config)
|
||||||
: ALabel(config, "{}"), name_(name)
|
: ALabel(config, "{}"), name_(name), fp_(nullptr)
|
||||||
{
|
{
|
||||||
if (config_["exec"].isString()) {
|
if (config_["exec"].isString()) {
|
||||||
if (interval_.count() > 0) {
|
if (interval_.count() > 0) {
|
||||||
|
@ -15,6 +15,14 @@ waybar::modules::Custom::Custom(const std::string name,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
waybar::modules::Custom::~Custom()
|
||||||
|
{
|
||||||
|
if (fp_) {
|
||||||
|
pclose(fp_);
|
||||||
|
fp_ = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void waybar::modules::Custom::delayWorker()
|
void waybar::modules::Custom::delayWorker()
|
||||||
{
|
{
|
||||||
thread_ = [this] {
|
thread_ = [this] {
|
||||||
|
@ -38,15 +46,16 @@ void waybar::modules::Custom::delayWorker()
|
||||||
void waybar::modules::Custom::continuousWorker()
|
void waybar::modules::Custom::continuousWorker()
|
||||||
{
|
{
|
||||||
auto cmd = config_["exec"].asString();
|
auto cmd = config_["exec"].asString();
|
||||||
FILE* fp(popen(cmd.c_str(), "r"));
|
fp_ = popen(cmd.c_str(), "r");
|
||||||
if (!fp) {
|
if (!fp_) {
|
||||||
throw std::runtime_error("Unable to open " + cmd);
|
throw std::runtime_error("Unable to open " + cmd);
|
||||||
}
|
}
|
||||||
thread_ = [this, fp] {
|
thread_ = [this] {
|
||||||
char* buff = nullptr;
|
char* buff = nullptr;
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
if (getline(&buff, &len, fp) == -1) {
|
if (getline(&buff, &len, fp_) == -1) {
|
||||||
pclose(fp);
|
pclose(fp_);
|
||||||
|
fp_ = nullptr;
|
||||||
thread_.stop();
|
thread_.stop();
|
||||||
output_ = { 1, "" };
|
output_ = { 1, "" };
|
||||||
std::cerr << name_ + " just stopped, is it endless?" << std::endl;
|
std::cerr << name_ + " just stopped, is it endless?" << std::endl;
|
||||||
|
|
Loading…
Reference in New Issue