summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNico Schlömer <nico.schloemer@gmail.com>2022-09-03 11:44:29 +0200
committerNico Schlömer <nico.schloemer@gmail.com>2022-09-03 11:44:29 +0200
commita4ded5107a4e4f63301f63b437b8c19f3f479d07 (patch)
treec1a52b3c1be2278ef3be1af42628a263ed2a7f41
parent238dcfdcdcb7e91edb989243f175bb799d458f95 (diff)
put battery in top bar
-rw-r--r--src/tiptop/_app.py67
-rw-r--r--src/tiptop/_info.py27
2 files changed, 41 insertions, 53 deletions
diff --git a/src/tiptop/_app.py b/src/tiptop/_app.py
index e0f9014..8db479a 100644
--- a/src/tiptop/_app.py
+++ b/src/tiptop/_app.py
@@ -3,11 +3,9 @@ from __future__ import annotations
import argparse
from sys import version_info
-import psutil
from textual.app import App
from .__about__ import __version__
-from ._battery import Battery
from ._cpu import CPU
from ._disk import Disk
from ._info import InfoLine
@@ -75,51 +73,26 @@ def run(argv=None):
grid.add_column(fraction=55, name="left")
grid.add_column(fraction=34, name="right")
- if psutil.sensors_battery() is None:
- grid.add_row(size=1, name="r0")
- grid.add_row(fraction=1, name="r1")
- grid.add_row(fraction=1, name="r2")
- grid.add_row(fraction=1, name="r3")
- grid.add_areas(
- area0="left-start|right-end,r0",
- area1="left,r1",
- area2a="right,r1",
- area2b="right,r2",
- area2c="right,r3",
- area3="left,r2-start|r3-end",
- )
- grid.place(
- area0=InfoLine(),
- area1=CPU(),
- area2a=Mem(),
- area2b=Disk(),
- area2c=Net(args.net),
- area3=ProcsList(),
- )
- else:
- grid.add_row(size=1, name="r0")
- grid.add_row(fraction=17, name="r1")
- grid.add_row(fraction=4, name="r2")
- grid.add_row(fraction=15, name="r3")
- grid.add_row(fraction=15, name="r4")
- grid.add_areas(
- area0="left-start|right-end,r0",
- area1="left,r1",
- area2a="right,r1",
- area2b="right,r2",
- area2c="right,r3",
- area2d="right,r4",
- area3="left,r2-start|r4-end",
- )
- grid.place(
- area0=InfoLine(),
- area1=CPU(),
- area2a=Mem(),
- area2b=Battery(),
- area2c=Disk(),
- area2d=Net(args.net),
- area3=ProcsList(),
- )
+ grid.add_row(size=1, name="r0")
+ grid.add_row(fraction=1, name="r1")
+ grid.add_row(fraction=1, name="r2")
+ grid.add_row(fraction=1, name="r3")
+ grid.add_areas(
+ area0="left-start|right-end,r0",
+ area1="left,r1",
+ area2a="right,r1",
+ area2b="right,r2",
+ area2c="right,r3",
+ area3="left,r2-start|r3-end",
+ )
+ grid.place(
+ area0=InfoLine(),
+ area1=CPU(),
+ area2a=Mem(),
+ area2b=Disk(),
+ area2c=Net(args.net),
+ area3=ProcsList(),
+ )
async def on_load(self, _):
await self.bind("q", "quit", "quit")
diff --git a/src/tiptop/_info.py b/src/tiptop/_info.py
index 36cd37d..fe2cf4a 100644
--- a/src/tiptop/_info.py
+++ b/src/tiptop/_info.py
@@ -42,9 +42,24 @@ class InfoLine(Widget):
self.boot_time = psutil.boot_time()
def render(self):
- uptime_s = time.time() - self.boot_time
- d, h, m = days_hours_minutes(timedelta(seconds=uptime_s))
- right = [f"up {d}d, {h}:{m:02d}h"]
+ uptime = timedelta(seconds=time.time() - self.boot_time)
+ h, m = seconds_to_h_m(uptime.seconds)
+
+ right = [f"up {uptime.days}d, {h}:{m:02d}h"]
+
+ bat = psutil.sensors_battery()
+ if bat is not None:
+ # hh, mm = seconds_to_h_m(bat.secsleft)
+ bat_string = f"bat {bat.percent:.1f}%"
+ if bat.power_plugged:
+ bat_string = "[green]" + bat_string + "[/]"
+ elif bat.percent < 10:
+ bat_string = "[red reverse bold]" + bat_string + "[/]"
+ elif bat.percent < 15:
+ bat_string = "[red]" + bat_string + "[/]"
+ elif bat.percent < 20:
+ bat_string = "[yellow]" + bat_string + "[/]"
+ right.append(bat_string)
table = Table(show_header=False, expand=True, box=None, padding=0)
if self.width < 100:
@@ -56,7 +71,7 @@ class InfoLine(Widget):
table.add_column(justify="center", no_wrap=True, ratio=1)
table.add_column(justify="right", no_wrap=True, ratio=1)
table.add_row(
- self.left_string, datetime.now().strftime("%c"), ", ".join(right)
+ self.left_string, datetime.now().strftime("%c"), " ".join(right)
)
return table
@@ -65,5 +80,5 @@ class InfoLine(Widget):
self.height = event.height
-def days_hours_minutes(td):
- return td.days, td.seconds // 3600, (td.seconds // 60) % 60
+def seconds_to_h_m(seconds):
+ return seconds // 3600, (seconds // 60) % 60