improve battery support

This commit is contained in:
arcan1s 2015-07-01 01:14:04 +03:00
parent 41deb8ef72
commit aa0a4b417d
3 changed files with 28 additions and 27 deletions

View File

@ -1,6 +1,7 @@
Ver.2.3.2: Ver.2.3.2:
* improve quotes support, e.g. fix plasma crash * improve quotes support, e.g. fix plasma crash
* rewrite main widget to signal-slot update model * rewrite main widget to signal-slot update model
* improve battery calculation for system which has several batteries
Ver.2.3.1: Ver.2.3.1:
- fix bug with no updates from configuration UI - fix bug with no updates from configuration UI

View File

@ -289,9 +289,10 @@ QStringList AWKeys::dictKeys(const bool sorted)
// battery // battery
allKeys.append(QString("ac")); allKeys.append(QString("ac"));
QStringList allBatteryDevices = QDir(QString("/sys/class/power_supply")) QStringList allBatteryDevices = QDir(QString("/sys/class/power_supply"))
.entryList(QDir::Dirs | QDir::NoDotAndDotDot, .entryList(QStringList() << QString("BAT*"),
QDir::Dirs | QDir::NoDotAndDotDot,
QDir::Name); QDir::Name);
for (int i=allBatteryDevices.filter(QRegExp(QString("BAT.*"))).count()-1; i>=0; i--) for (int i=allBatteryDevices.count()-1; i>=0; i--)
allKeys.append(QString("bat%1").arg(i)); allKeys.append(QString("bat%1").arg(i));
allKeys.append(QString("bat")); allKeys.append(QString("bat"));
// player // player

View File

@ -311,34 +311,36 @@ QVariantMap ExtendedSysMon::getBattery(const QString acpiPath)
QVariantMap battery; QVariantMap battery;
battery[QString("ac")] = false; battery[QString("ac")] = false;
battery[QString("bat")] = 0; battery[QString("bat")] = 0;
QFile acFile(acpiPath + QString("/AC/online"));
// adaptor
QFile acFile(QString("%1/AC/online").arg(acpiPath));
if (acFile.open(QIODevice::ReadOnly)) { if (acFile.open(QIODevice::ReadOnly)) {
if (QString(acFile.readLine()).trimmed().toInt() == 1) if (QString(acFile.readLine()).trimmed().toInt() == 1)
battery[QString("ac")] = true; battery[QString("ac")] = true;
} }
acFile.close(); acFile.close();
// batterites // batterites
QStringList allDevices = QDir(acpiPath).entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name); float currentLevel = 0.0;
QStringList batDevices; float fullLevel = 0.0;
QRegExp batRegexp = QRegExp(QString("BAT.*")); QStringList batDevices = QDir(acpiPath).entryList(QStringList() << QString("BAT*"),
for (int i=0; i<allDevices.count(); i++) QDir::Dirs | QDir::NoDotAndDotDot,
if (allDevices[i].contains(batRegexp)) QDir::Name);
batDevices.append(allDevices[i]);
for (int i=0; i<batDevices.count(); i++) { for (int i=0; i<batDevices.count(); i++) {
QFile batFile(QString("%1/%2/capacity").arg(acpiPath).arg(batDevices[i])); QFile currentLevelFile(QString("%1/%2/energy_now").arg(acpiPath).arg(batDevices[i]));
if (batFile.open(QIODevice::ReadOnly)) QFile fullLevelFile(QString("%1/%2/energy_full").arg(acpiPath).arg(batDevices[i]));
battery[QString("bat%1").arg(i)] = QString(batFile.readLine()).trimmed().toInt(); if ((currentLevelFile.open(QIODevice::ReadOnly)) &&
batFile.close(); (fullLevelFile.open(QIODevice::ReadOnly))) {
float batCurrent = QString(currentLevelFile.readLine()).trimmed().toFloat();
float batFull = QString(fullLevelFile.readLine()).trimmed().toFloat();
battery[QString("bat%1").arg(i)] = 100 * batCurrent / batFull;
currentLevel += batCurrent;
fullLevel += batFull;
}
currentLevelFile.close();
fullLevelFile.close();
} }
float number = 0.0; battery[QString("bat")] = 100 * currentLevel / fullLevel;
float average = 0.0;
for (int i=0; i<battery.keys().count(); i++) {
if (battery.keys()[i] == QString("ac")) continue;
if (battery.keys()[i] == QString("bat")) continue;
average += battery[battery.keys()[i]].toInt();
number++;
}
battery[QString("bat")] = int(average / number);
return battery; return battery;
} }
@ -663,11 +665,8 @@ bool ExtendedSysMon::updateSourceEvent(const QString &source)
if (source == QString("battery")) { if (source == QString("battery")) {
QVariantMap battery = getBattery(configuration[QString("ACPIPATH")]); QVariantMap battery = getBattery(configuration[QString("ACPIPATH")]);
setData(source, QString("ac"), battery[QString("ac")].toBool()); for (int i=0; i<battery.keys().count(); i++)
for (int i=0; i<battery.keys().count(); i++) { setData(source, battery.keys()[i], battery[battery.keys()[i]]);
if (battery.keys()[i] == QString("ac")) continue;
setData(source, battery.keys()[i], battery[battery.keys()[i]].toInt());
}
} else if (source == QString("custom")) { } else if (source == QString("custom")) {
for (int i=0; i<externalScripts.count(); i++) for (int i=0; i<externalScripts.count(); i++)
setData(source, externalScripts[i]->tag(), externalScripts[i]->run()); setData(source, externalScripts[i]->tag(), externalScripts[i]->run());