]> git.sur5r.net Git - i3/i3status/blobdiff - src/print_battery_info.c
Moved translation of wireless status code to text from multiple places into single...
[i3/i3status] / src / print_battery_info.c
index 29d703cdffab5d6117293f930d943e4abeedad37..f6f238c8c0da46d61dcb386d97c440df832597aa 100644 (file)
 #include <machine/apmvar.h>
 #endif
 
+#define BATT_STATUS_NAME(status) \
+    (status == CS_CHARGING ? "CHR" : \
+        (status == CS_DISCHARGING ? "BAT" : "FULL"))
 /*
  * Get battery information from /sys. Note that it uses the design capacity to
  * calculate the percentage, not the last full capacity, so you can see how
  * worn off your battery is.
  *
  */
-void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char *path, const char *format, bool last_full_capacity) {
+void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char *path, const char *format, int threshold, bool last_full_capacity) {
         time_t empty_time;
         struct tm *empty_tm;
         char buf[1024];
@@ -92,12 +95,12 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
                 }
         }
 
-        if ((full_design == 1) || (remaining == -1))
+        if ((full_design == -1) || (remaining == -1)) {
+                OUTPUT_FULL_TEXT("No battery");
                 return;
+        }
 
-        (void)snprintf(statusbuf, sizeof(statusbuf), "%s",
-                        (status == CS_CHARGING ? "CHR" :
-                         (status == CS_DISCHARGING ? "BAT" : "FULL")));
+        (void)snprintf(statusbuf, sizeof(statusbuf), "%s", BATT_STATUS_NAME(status));
 
         (void)snprintf(percentagebuf, sizeof(percentagebuf), "%.02f%%",
                        (((float)remaining / (float)full_design) * 100));
@@ -118,6 +121,9 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
                 minutes = seconds / 60;
                 seconds -= (minutes * 60);
 
+                if (threshold > 0 && seconds_remaining < 60 * threshold)
+                        START_COLOR("color_bad");
+
                 (void)snprintf(remainingbuf, sizeof(remainingbuf), "%02d:%02d:%02d",
                         max(hours, 0), max(minutes, 0), max(seconds, 0));
 
@@ -127,6 +133,8 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
 
                 (void)snprintf(emptytimebuf, sizeof(emptytimebuf), "%02d:%02d:%02d",
                         max(empty_tm->tm_hour, 0), max(empty_tm->tm_min, 0), max(empty_tm->tm_sec, 0));
+
+                END_COLOR;
         }
 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
         int state;
@@ -134,19 +142,19 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
         size_t sysctl_size = sizeof(sysctl_rslt);
 
         if (sysctlbyname(BATT_LIFE, &sysctl_rslt, &sysctl_size, NULL, 0) != 0) {
-                printf("No battery");
+                OUTPUT_FULL_TEXT("No battery");
                 return;
         }
 
         present_rate = sysctl_rslt;
         if (sysctlbyname(BATT_TIME, &sysctl_rslt, &sysctl_size, NULL, 0) != 0) {
-                printf("No battery");
+                OUTPUT_FULL_TEXT("No battery");
                 return;
         }
 
         remaining = sysctl_rslt;
         if (sysctlbyname(BATT_STATE, &sysctl_rslt, &sysctl_size, NULL,0) != 0) {
-                printf("No battery");
+                OUTPUT_FULL_TEXT("No battery");
                 return;
         }
 
@@ -160,9 +168,7 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
 
         full_design = sysctl_rslt;
 
-        (void)snprintf(statusbuf, sizeof(statusbuf), "%s",
-                        (status == CS_CHARGING ? "CHR" :
-                         (status == CS_DISCHARGING ? "BAT" : "FULL")));
+        (void)snprintf(statusbuf, sizeof(statusbuf), "%s", BATT_STATUS_NAME(status));
 
         (void)snprintf(percentagebuf, sizeof(percentagebuf), "%02d%%",
                        present_rate);
@@ -214,10 +220,7 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
                break;
        }
 
-       (void)snprintf(statusbuf, sizeof(statusbuf), "%s",
-                      (ac_status == CS_CHARGING ? "CHR" :
-                       (ac_status == CS_DISCHARGING ? "BAT" : "FULL")));
-
+       (void)snprintf(statusbuf, sizeof(statusbuf), "%s", BATT_STATUS_NAME(status));
         (void)snprintf(percentagebuf, sizeof(percentagebuf), "%02d%%", apm_info.battery_life);
 
        /* Can't give a meaningful value for remaining minutes if we're charging. */