From 0785202860630dfc121bcd0fc24b86dd77ac841c Mon Sep 17 00:00:00 2001 From: Andrew Reisner Date: Sun, 12 Jul 2020 10:52:05 -0600 Subject: [PATCH 1/2] Add simple portage status module. This adds a simple module to display the status of Gentoo portage operations by reading its logfile. --- .../modules/contrib/portage_status.py | 64 +++++++++++++++++++ themes/icons/awesome-fonts.json | 4 ++ 2 files changed, 68 insertions(+) create mode 100644 bumblebee_status/modules/contrib/portage_status.py diff --git a/bumblebee_status/modules/contrib/portage_status.py b/bumblebee_status/modules/contrib/portage_status.py new file mode 100644 index 0000000..507eda3 --- /dev/null +++ b/bumblebee_status/modules/contrib/portage_status.py @@ -0,0 +1,64 @@ +"""Displays the status of Gentoo portage operations. + +Parameters: + * portage_status.logfile: logfile for portage (default is /var/log/emerge.log) +""" + +import os + +import core.module +import core.widget + + +class Module(core.module.Module): + def __init__(self, config, theme): + super().__init__(config, theme, core.widget.Widget(self.output)) + self.__logfile = self.parameter( + "logfile", "/var/log/emerge.log") + self.clear() + + + def clear(self): + self.__action = "" + self.__package = "" + self.__status = "" + + + def output(self, widget): + return " ".join([atom for atom in + (self.__action, self.__package, self.__status) if atom != ""]) + + + def state(self, widgets): + if self.__action == "": + return "idle" + return "active" + + + def update(self): + try: + with open(self.__logfile, "rb") as f: + f.seek(-2, os.SEEK_END) + while f.read(1) != b"\n": + f.seek(-2, os.SEEK_CUR) + last_line = f.readline().decode() + if "===" in last_line: + if "Unmerging..." in last_line: + self.__action = "Unmerging" + package_beg = last_line.find("(") + 1 + package_end = last_line.find("-", last_line.find("/")) - 1 + self.__package = last_line[package_beg:package_end+1] + else: # merging + status_beg = last_line.find("(") + status_end = last_line.find(")") + self.__status = last_line[status_beg:status_end+1] + package_beg = last_line.find('(', status_end) + 1 + package_end = package_beg + last_line[package_beg:].find("-", last_line[package_beg:].find("/")) - 1 + self.__package = last_line[package_beg:package_end+1] + action_beg = status_end + 2 + action_end = package_beg - 3 + self.__action = last_line[action_beg:action_end+1] + else: + self.clear() + except Exception: + self.clear() diff --git a/themes/icons/awesome-fonts.json b/themes/icons/awesome-fonts.json index d0ac2bc..ca8d38f 100644 --- a/themes/icons/awesome-fonts.json +++ b/themes/icons/awesome-fonts.json @@ -35,6 +35,10 @@ "empty": { "prefix": "\uf0e0" }, "items": { "prefix": "\uf0e0" } }, + "portage_status": { + "idle": { "prefix": "" }, + "active": { "prefix": "" } + }, "todo": { "empty": { "prefix": "" }, "items": { "prefix": "" }, From b1bb0fe69064bb9ed741975120bc16d46edba11a Mon Sep 17 00:00:00 2001 From: Andrew Reisner Date: Sun, 12 Jul 2020 11:01:00 -0600 Subject: [PATCH 2/2] Run formatter. --- .../modules/contrib/portage_status.py | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/bumblebee_status/modules/contrib/portage_status.py b/bumblebee_status/modules/contrib/portage_status.py index 507eda3..7b8c897 100644 --- a/bumblebee_status/modules/contrib/portage_status.py +++ b/bumblebee_status/modules/contrib/portage_status.py @@ -13,28 +13,28 @@ import core.widget class Module(core.module.Module): def __init__(self, config, theme): super().__init__(config, theme, core.widget.Widget(self.output)) - self.__logfile = self.parameter( - "logfile", "/var/log/emerge.log") + self.__logfile = self.parameter("logfile", "/var/log/emerge.log") self.clear() - def clear(self): self.__action = "" self.__package = "" self.__status = "" - def output(self, widget): - return " ".join([atom for atom in - (self.__action, self.__package, self.__status) if atom != ""]) - + return " ".join( + [ + atom + for atom in (self.__action, self.__package, self.__status) + if atom != "" + ] + ) def state(self, widgets): if self.__action == "": return "idle" return "active" - def update(self): try: with open(self.__logfile, "rb") as f: @@ -47,17 +47,23 @@ class Module(core.module.Module): self.__action = "Unmerging" package_beg = last_line.find("(") + 1 package_end = last_line.find("-", last_line.find("/")) - 1 - self.__package = last_line[package_beg:package_end+1] - else: # merging + self.__package = last_line[package_beg : package_end + 1] + else: # merging status_beg = last_line.find("(") status_end = last_line.find(")") - self.__status = last_line[status_beg:status_end+1] - package_beg = last_line.find('(', status_end) + 1 - package_end = package_beg + last_line[package_beg:].find("-", last_line[package_beg:].find("/")) - 1 - self.__package = last_line[package_beg:package_end+1] + self.__status = last_line[status_beg : status_end + 1] + package_beg = last_line.find("(", status_end) + 1 + package_end = ( + package_beg + + last_line[package_beg:].find( + "-", last_line[package_beg:].find("/") + ) + - 1 + ) + self.__package = last_line[package_beg : package_end + 1] action_beg = status_end + 2 action_end = package_beg - 3 - self.__action = last_line[action_beg:action_end+1] + self.__action = last_line[action_beg : action_end + 1] else: self.clear() except Exception: