Fix battery percentage calculations if charge isn't available but energy is.
authorAndriy Grytsenko <andrej@rep.kiev.ua>
Fri, 25 Nov 2016 00:06:39 +0000 (02:06 +0200)
committerAndriy Grytsenko <andrej@rep.kiev.ua>
Fri, 25 Nov 2016 00:13:44 +0000 (02:13 +0200)
Should fix https://bugs.debian.org/845555 bug.

ChangeLog
plugins/batt/batt_sys.c

index 0abe16b..f4e4f61 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,6 @@
-* Fixed battery selection, it appears incompatible with 0.7.2 behavior.
+* Fixed battery selection if battery detached but another is available.
+* Fixed battery percentage calculations if charge isn't available but
+    energy is, it appears broken in 0.9.0.
 
 0.9.1
 -------------------------------------------------------------------------
index 2482c6f..bd01e08 100644 (file)
@@ -167,6 +167,7 @@ static gboolean battery_inserted(gchar* path)
 battery* battery_update(battery *b)
 {
     gchar *gctmp;
+    int promille;
 
     if (b == NULL)
         return NULL;
@@ -253,16 +254,18 @@ battery* battery_update(battery *b)
     }
 #endif
 
-    if (b->charge_full < MIN_CAPACITY)
-        b->percentage = 0;
-    else {
-        int promille = (b->charge_now * 1000) / b->charge_full;
-        b->percentage = (promille + 5) / 10; /* round properly */
-    }
+    if (b->charge_now != -1 && b->charge_full != -1)
+        promille = (b->charge_now * 1000) / b->charge_full;
+    else if (b->energy_full != -1 && b->energy_now != -1)
+        /* no charge data, let try energy instead */
+        promille = (b->energy_now * 1000) / b->energy_full;
+    else
+        promille = 0;
+
+    b->percentage = (promille + 5) / 10; /* round properly */
     if (b->percentage > 100)
         b->percentage = 100;
 
-
     if (b->current_now == -1) {
         //b->poststr = "rate information unavailable";
         b->seconds = -1;