# pylint: disable=C0111,R0903

"""Displays update information per repository for pacman."

Requires the following executables:
    * fakeroot
    * pacman
"""

import os
import bumblebee.input
import bumblebee.output
import bumblebee.engine

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

    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 = "?/?/?/?"
 
        # 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"

# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

# pylint: disable=C0111,R0903

"""Displays update information per repository for pacman."

Requires the following executables:
    * fakeroot
    * pacman
"""

import os
import bumblebee.input
import bumblebee.output
import bumblebee.engine

#list of repositories the last one sould always be other
repos = ["community", "core", "extra", "other"]

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

    def updates(self, widget):
        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:
            try:
                result = bumblebee.util.execute("{}/../../bin/pacman-updates".format(path))

                count = len(repos)*[0]

                for line in result.splitlines():
                    if line.startswith("http"):
                        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)):
                    widgets[0].set(repos[i], count[i])

            except BaseException as a:
                raise a
 
        # TODO: improve this waiting mechanism a bit
        self._count += 1
        self._count = 0 if self._count > 300 else self._count

    def state(self, widget):
        sumUpdates = sum(map(lambda x: widget.get(x,0), repos))
        if sumUpdates > 0:
            return "critical"

# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

Update `pacman.py`