From 58e7e7a4e375a5c167b9a444d3f500604c18cc79 Mon Sep 17 00:00:00 2001 From: Kris Moore Date: Wed, 20 Jan 2016 13:26:38 -0500 Subject: [PATCH] Add new API call for batteryinfo Will return battery:"true/false" if one exists If one exists, it will also return "level":"1-99" and "status":"offline/charging/backup/unknown" REST Request: ------------------------------- PUT /sysadm/systeminfo { "action" : "batteryinfo" } REST Response: ------------------------------- { "args": { "batteryinfo": { "battery": "false" } } } WebSocket Request: ------------------------------- { "namespace" : "sysadm", "name" : "systeminfo", "id" : "fooid", "args" : { "action" : "batteryinfo" } } WebSocket Response: ------------------------------- { "args": { "batteryinfo": { "battery": "false" } }, "id": "fooid", "name": "response", "namespace": "sysadm" } --- src/library/sysadm-systeminfo.cpp | 36 ++++++++++++++++++++++++++++++- src/library/sysadm-systeminfo.h | 3 ++- src/server/WebBackend.cpp | 6 +++++- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/library/sysadm-systeminfo.cpp b/src/library/sysadm-systeminfo.cpp index b0ae88d..c6d14de 100644 --- a/src/library/sysadm-systeminfo.cpp +++ b/src/library/sysadm-systeminfo.cpp @@ -12,8 +12,42 @@ using namespace sysadm; //PLEASE: Keep the functions in the same order as listed in pcbsd-general.h + +//Battery Availability +QJsonObject SysInfo::batteryInfo(){ + QJsonObject retObject; + bool ok; + + int val = General::RunCommand("apm -l").toInt(&ok); + if ( ok && (val >= 0 && val <= 100) ) { + retObject.insert("battery", "true"); + } else { + retObject.insert("battery", "false"); + return retObject; + } + + // We have a battery, return info about it + //Battery Charge Level + QString tmp; + tmp.setNum(val); + retObject.insert("level", tmp); + + //Battery Charging State + int state = General::RunCommand("apm -a").toInt(&ok); + if ( ok && state == 0 ) + retObject.insert("status", "offline"); + else if ( ok && state == 1 ) + retObject.insert("status", "charging"); + else if ( ok && state == 2 ) + retObject.insert("status", "backup"); + else + retObject.insert("status", "unknown"); + + return retObject; +} + // ==== ExternalDevicePaths() ==== -QJsonObject SysInfo::ExternalDevicePaths() { +QJsonObject SysInfo::externalDevicePaths() { QJsonObject retObject; //Returns: QStringList[::::::::] diff --git a/src/library/sysadm-systeminfo.h b/src/library/sysadm-systeminfo.h index 47322bc..b090134 100644 --- a/src/library/sysadm-systeminfo.h +++ b/src/library/sysadm-systeminfo.h @@ -14,7 +14,8 @@ namespace sysadm{ class SysInfo{ public: - static QJsonObject ExternalDevicePaths(); + static QJsonObject batteryInfo(); + static QJsonObject externalDevicePaths(); }; } //end of pcbsd namespace diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index 6b28d2e..70f344c 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -257,7 +257,11 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmSystemInfoRequest(const QJso QString act = JsonValueToString(in_args.toObject().value("action")); if(act=="externalmounts"){ ok = true; - out->insert("externalmounts", sysadm::SysInfo::ExternalDevicePaths()); + out->insert("externalmounts", sysadm::SysInfo::externalDevicePaths()); + } + if(act=="batteryinfo"){ + ok = true; + out->insert("batteryinfo", sysadm::SysInfo::batteryInfo()); } } //end of "action" key usage