diff --git a/bumblebee/modules/pacman.py b/bumblebee/modules/pacman.py index 4fd0cd8..a7780a8 100644 --- a/bumblebee/modules/pacman.py +++ b/bumblebee/modules/pacman.py @@ -8,57 +8,63 @@ Requires the following executables: """ import os +import threading + import bumblebee.input import bumblebee.output import bumblebee.engine +#list of repositories. +#the last one sould always be other +repos = ["core", "extra", "community", "multilib", "testing", "other"] + +def get_pacman_info(widget, path): + try: + result = bumblebee.util.execute("{}/../../bin/pacman-updates".format(path)) + except: + pass + + count = len(repos)*[0] + + for line in result.splitlines(): + if line.startswith(("http", "rsync")): + for i in range(len(repos)-1): + if "/" + repos[i] + "/" in line: + count[i] += 1 + break + else: + result[-1] += 1 + + for i in range(len(repos)): + widget.set(repos[i], count[i]) + + class Module(bumblebee.engine.Module): def __init__(self, engine, config): super(Module, self).__init__(engine, config, bumblebee.output.Widget(full_text=self.updates) ) self._count = 0 - self._out = "" def updates(self, widget): - return self._out + return '/'.join(map(lambda x: str(widget.get(x,0)), repos)) def update(self, widgets): path = os.path.dirname(os.path.abspath(__file__)) if self._count == 0: - self._out = "?/?/?/?" - try: - result = bumblebee.util.execute("{}/../../bin/pacman-updates".format(path)) - self._community = 0 - self._core = 0 - self._extra = 0 - self._other = 0 - - for line in result.splitlines(): - if line.startswith("http"): - if "community" in line: - self._community += 1 - continue - if "core" in line: - self._core += 1; - continue - if "extra" in line: - self._extra += 1 - continue - self._other += 1 - self._out = str(self._core)+"/"+str(self._extra)+"/"+str(self._community)+"/"+str(self._other) - except RuntimeError: - self._out = "?/?/?/?" + thread = threading.Thread(target=get_pacman_info, args=(widgets[0],path)) + thread.start() # TODO: improve this waiting mechanism a bit self._count += 1 self._count = 0 if self._count > 300 else self._count - def sumUpdates(self): - return self._core + self._community + self._extra + self._other - def state(self, widget): - if self.sumUpdates() > 0: - return "critical" + weightedCount = sum(map(lambda x: (len(repos)-x[0]) * widget.get(x[1],0), enumerate(repos))) + + if weightedCount < 10: + return "good" + + return self.threshold_state(weightedCount, 100, 150) # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 diff --git a/themes/icons/awesome-fonts.json b/themes/icons/awesome-fonts.json index 8d6610c..69dd60f 100644 --- a/themes/icons/awesome-fonts.json +++ b/themes/icons/awesome-fonts.json @@ -9,6 +9,7 @@ "cpu": { "prefix": "" }, "disk": { "prefix": "" }, "dnf": { "prefix": "" }, + "pacman": { "prefix": "" }, "brightness": { "prefix": "" }, "load": { "prefix": "" }, "layout": { "prefix": "" }, diff --git a/themes/solarized-powerline.json b/themes/solarized-powerline.json index cb9049b..e1fbe1d 100644 --- a/themes/solarized-powerline.json +++ b/themes/solarized-powerline.json @@ -21,6 +21,12 @@ "bg": "#859900" } }, + "pacman": { + "good": { + "fg": "#002b36", + "bg": "#859900" + } + }, "battery": { "charged": { "fg": "#002b36",