2022-04-28 21:58:40 +02:00
|
|
|
import base
|
2022-02-12 16:19:43 +01:00
|
|
|
import strutils
|
|
|
|
import std/os
|
|
|
|
|
|
|
|
proc battery_exists(): bool =
|
|
|
|
let state = strip(readFile("/sys/class/power_supply/BAT0/present"))
|
|
|
|
if state == "1":
|
|
|
|
return true
|
|
|
|
return false
|
|
|
|
|
|
|
|
proc is_charging(): bool =
|
|
|
|
let state = strip(readFile("/sys/class/power_supply/BAT0/status"))
|
|
|
|
case state:
|
|
|
|
of "Charging":
|
|
|
|
return true
|
|
|
|
else:
|
|
|
|
return false
|
|
|
|
|
|
|
|
proc get_charge(): int =
|
|
|
|
var charge = 0
|
|
|
|
let chg = strip(readFile("/sys/class/power_supply/BAT0/capacity"))
|
|
|
|
if chg != "":
|
|
|
|
charge = parseInt(chg)
|
|
|
|
return charge
|
|
|
|
|
2022-04-28 16:52:45 +02:00
|
|
|
proc get_design(charge: int, state: bool): (string, string, string, string, string) =
|
2022-02-12 16:19:43 +01:00
|
|
|
var icon = " "
|
|
|
|
var icon_colour = lightgreen
|
|
|
|
var col = foreground
|
|
|
|
var bg = black
|
|
|
|
var border = lightgreen
|
|
|
|
if is_charging():
|
|
|
|
icon = " "
|
|
|
|
else:
|
|
|
|
case charge:
|
|
|
|
of 0..5:
|
|
|
|
icon_colour = black
|
|
|
|
col = black
|
|
|
|
bg = red
|
|
|
|
of 6..19:
|
|
|
|
icon_colour = alert
|
|
|
|
border = alert
|
|
|
|
of 20..39:
|
|
|
|
icon_colour = yellow
|
|
|
|
border = yellow
|
|
|
|
icon = " "
|
|
|
|
of 40..59:
|
|
|
|
icon_colour = green
|
|
|
|
border= green
|
|
|
|
icon = " "
|
|
|
|
of 60..79:
|
|
|
|
icon_colour = green
|
|
|
|
border= green
|
|
|
|
icon = " "
|
|
|
|
of 80..100:
|
|
|
|
icon_colour = lightgreen
|
|
|
|
border = lightgreen
|
|
|
|
icon = " "
|
|
|
|
else:
|
|
|
|
icon = "x "
|
|
|
|
|
2022-04-28 16:52:45 +02:00
|
|
|
let main_text = icon & " " & $charge & "%"
|
2022-02-12 16:19:43 +01:00
|
|
|
let text = "<span foreground=\"" & icon_colour & "\">" & icon & "</span>" & $charge & "%"
|
2022-04-28 16:52:45 +02:00
|
|
|
return (text,main_text, col, bg, border)
|
2022-02-12 16:19:43 +01:00
|
|
|
|
2022-04-28 21:58:40 +02:00
|
|
|
proc get_output(charge: int, state: bool): Info =
|
2022-04-28 16:52:45 +02:00
|
|
|
let (text,main_text,col,bg_col,bord_col) = get_design(charge, state)
|
2022-04-28 21:58:40 +02:00
|
|
|
let data = Info(
|
2022-04-28 16:52:45 +02:00
|
|
|
title: "Battery : ",
|
|
|
|
full_text: main_text,
|
|
|
|
html_text: text,
|
2022-02-12 16:19:43 +01:00
|
|
|
color: col,
|
|
|
|
border: bord_col,
|
2022-04-28 21:58:40 +02:00
|
|
|
background: bg_col,
|
|
|
|
selected_background: bord_col,
|
|
|
|
selected_color: black
|
2022-02-12 16:19:43 +01:00
|
|
|
)
|
|
|
|
return data
|
|
|
|
|
|
|
|
|
|
|
|
proc get_battery_info() =
|
2022-04-28 13:34:09 +02:00
|
|
|
var last_charge = -1
|
2022-02-12 16:19:43 +01:00
|
|
|
var last_state = false
|
|
|
|
while true:
|
|
|
|
let charge = get_charge()
|
|
|
|
let state = is_charging()
|
|
|
|
if charge != last_charge or state != last_state:
|
|
|
|
let data = get_output(charge, state)
|
|
|
|
outputJSON(data)
|
|
|
|
last_charge = charge
|
|
|
|
last_state = state
|
2022-04-28 16:52:45 +02:00
|
|
|
if stoploop:
|
|
|
|
break
|
2022-02-12 16:19:43 +01:00
|
|
|
sleep(1000)
|
|
|
|
|
|
|
|
proc main() =
|
|
|
|
if battery_exists():
|
|
|
|
get_battery_info()
|
|
|
|
|
|
|
|
main()
|
|
|
|
|