diff options
| author | Joe <bousset.rudy@gmail.com> | 2019-12-03 20:21:09 +0100 | 
|---|---|---|
| committer | Joe <bousset.rudy@gmail.com> | 2019-12-03 20:21:09 +0100 | 
| commit | 89737ad005f4c066234a5282a1a46eb68b2c1ace (patch) | |
| tree | 7b521091227050c84dca220715e20bf1347c39d3 /src | |
| parent | README update (diff) | |
| download | lowbat-gnu-89737ad005f4c066234a5282a1a46eb68b2c1ace.tar.gz lowbat-gnu-89737ad005f4c066234a5282a1a46eb68b2c1ace.tar.bz2 lowbat-gnu-89737ad005f4c066234a5282a1a46eb68b2c1ace.tar.xz lowbat-gnu-89737ad005f4c066234a5282a1a46eb68b2c1ace.tar.zst lowbat-gnu-89737ad005f4c066234a5282a1a46eb68b2c1ace.zip  | |
cpp mode
Diffstat (limited to 'src')
| -rw-r--r-- | src/jo_exec.cpp | 15 | ||||
| -rw-r--r-- | src/jo_notify.cpp | 26 | ||||
| -rw-r--r-- | src/main.cpp | 35 | 
3 files changed, 76 insertions, 0 deletions
diff --git a/src/jo_exec.cpp b/src/jo_exec.cpp new file mode 100644 index 0000000..a97012c --- /dev/null +++ b/src/jo_exec.cpp @@ -0,0 +1,15 @@ +#include <jo_lowbat.hpp> + +string +jo_exec(const char* cmd) { +    array<char, 128> buffer; +    string result; +    unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd, "r"), pclose); +    if (!pipe) { +        throw runtime_error("popen() failed!"); +    } +    while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) { +        result += buffer.data(); +    } +    return result; +} diff --git a/src/jo_notify.cpp b/src/jo_notify.cpp new file mode 100644 index 0000000..1683871 --- /dev/null +++ b/src/jo_notify.cpp @@ -0,0 +1,26 @@ +#include <jo_lowbat.hpp> + +void +jo_notify(const string batlvl) { +	string		str  = nullptr; +	const char	*cmd = nullptr; + +	str = "notify-send \""; +	str += batlvl; +	str += "%\" \"Please plug in computer\" -u critical -t 15000"; + +	cmd = str.c_str(); +	system(cmd); +} + +void +jo_speak(const string msg) { +	string		str  = nullptr; +	const char	*cmd = nullptr; + +	str = "echo \""; +	str += msg; +	str += "\" | espeak"; +	cmd = str.c_str(); +	system(cmd); +} diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..2fe6063 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,35 @@ +#include <jo_lowbat.hpp> + +int main(int argc, const char *argv[]) { +	string			msg       = nullptr; +	string			acstat    = nullptr; +	string			batlvl    = nullptr; +	stringstream	battoint  = nullptr; +	int				batlvlint = 0; + +	if (memcmp(argv[1], "--say", strlen(argv[1]))) +		msg = "beep beep - low battery"; +	else +		msg = argv[2]; + +	while (true) { +		acstat = jo_exec("acpi | awk '{print $3}' | rev | cut -c 2- | rev"); +		batlvl = jo_exec("acpi | awk '{print $4}' | rev | cut -c 3- | rev"); +		battoint = batlvl; +		battoint >> batlvlint; +		if (batlvlint < 15) { +			while (!memcmp(acstat, "Discharging", strlen(acstat))) { +				jo_notify(batlvl); +				if (memcmp(argv[1], "--silent", strlen(argv[1]))) +					jo_speak(msg); +				sleep_for(seconds(20)); +				acstat = jo_exec("acpi | awk '{print $3}' | rev | cut -c 2- | rev"); +				batlvl = jo_exec("acpi | awk '{print $4}' | rev | cut -c 3- | rev"); +				if (!memcmp(acstat, "Charging", strlen(acstat))) +					break ; +			} +		} +		sleep_for(seconds(240)); +	} +	return 0; +}  | 
