diff options
author | Nico Schlömer <nico.schloemer@gmail.com> | 2022-09-03 11:44:29 +0200 |
---|---|---|
committer | Nico Schlömer <nico.schloemer@gmail.com> | 2022-09-03 11:44:29 +0200 |
commit | a4ded5107a4e4f63301f63b437b8c19f3f479d07 (patch) | |
tree | c1a52b3c1be2278ef3be1af42628a263ed2a7f41 | |
parent | 238dcfdcdcb7e91edb989243f175bb799d458f95 (diff) |
put battery in top bar
-rw-r--r-- | src/tiptop/_app.py | 67 | ||||
-rw-r--r-- | src/tiptop/_info.py | 27 |
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 |