[core] restructure to allow PIP packaging
OK - so I have to admit I *hate* the fact that PIP seems to require a subdirectory named like the library. But since the PIP package is something really nifty to have (thanks to @tony again!!!), I updated the codebase to hopefully conform with what PIP expects. Testruns so far look promising...
This commit is contained in:
parent
1d25be2059
commit
320827d577
146 changed files with 2509 additions and 2 deletions
113
bumblebee_status/modules/core/redshift.py
Normal file
113
bumblebee_status/modules/core/redshift.py
Normal file
|
@ -0,0 +1,113 @@
|
|||
# pylint: disable=C0111,R0903
|
||||
|
||||
"""Displays the current color temperature of redshift
|
||||
|
||||
Requires the following executable:
|
||||
* redshift
|
||||
|
||||
Parameters:
|
||||
* redshift.location : location provider, either of 'auto' (default), 'geoclue2',
|
||||
'ipinfo' or 'manual'
|
||||
'auto' uses whatever redshift is configured to do
|
||||
* redshift.lat : latitude if location is set to 'manual'
|
||||
* redshift.lon : longitude if location is set to 'manual'
|
||||
* redshift.show_transition: information about the transitions (x% day) defaults to True
|
||||
"""
|
||||
|
||||
import re
|
||||
import threading
|
||||
|
||||
import core.module
|
||||
import core.widget
|
||||
import core.input
|
||||
import core.decorators
|
||||
|
||||
import util.cli
|
||||
import util.format
|
||||
import util.location
|
||||
|
||||
|
||||
def get_redshift_value(module):
|
||||
widget = module.widget()
|
||||
location = module.parameter("location", "auto")
|
||||
lat = module.parameter("lat", None)
|
||||
lon = module.parameter("lon", None)
|
||||
|
||||
# Even if location method is set to manual, if we have no lat or lon,
|
||||
# fall back to the geoclue2 method.
|
||||
if location == "manual" and (lat is None or lon is None):
|
||||
location = "geoclue2"
|
||||
|
||||
command = ["redshift", "-p"]
|
||||
if location == "manual":
|
||||
command.extend(["-l", "{}:{}".format(lat, lon)])
|
||||
if location == "geoclue2":
|
||||
command.extend(["-l", "geoclue2"])
|
||||
|
||||
try:
|
||||
res = util.cli.execute(" ".join(command))
|
||||
except Exception:
|
||||
res = ""
|
||||
widget.set("temp", "n/a")
|
||||
widget.set("transition", "")
|
||||
widget.set("state", "day")
|
||||
for line in res.split("\n"):
|
||||
line = line.lower()
|
||||
if "temperature" in line:
|
||||
widget.set("temp", line.split(" ")[2])
|
||||
if "period" in line:
|
||||
state = line.split(" ")[1]
|
||||
if "day" in state:
|
||||
widget.set("state", "day")
|
||||
elif "night" in state:
|
||||
widget.set("state", "night")
|
||||
else:
|
||||
widget.set("state", "transition")
|
||||
match = re.search(r"(\d+)\.\d+% ([a-z]+)", line)
|
||||
widget.set(
|
||||
"transition", "({}% {})".format(match.group(1), match.group(2))
|
||||
)
|
||||
core.event.trigger("update", [widget.module.id], redraw_only=True)
|
||||
|
||||
|
||||
class Module(core.module.Module):
|
||||
@core.decorators.every(seconds=10)
|
||||
def __init__(self, config, theme):
|
||||
super().__init__(config, theme, core.widget.Widget(self.text))
|
||||
|
||||
self.__thread = None
|
||||
self.show_transition = util.format.asbool(
|
||||
self.parameter("show_transition", True)
|
||||
)
|
||||
|
||||
if self.parameter("location", "") == "ipinfo":
|
||||
# override lon/lat with ipinfo
|
||||
try:
|
||||
location = util.location.coordinates()
|
||||
self.set("lat", location[0])
|
||||
self.set("lon", location[1])
|
||||
self.set("location", "manual")
|
||||
except Exception:
|
||||
# Fall back to geoclue2.
|
||||
self.set("location", "geoclue2")
|
||||
|
||||
self._text = ""
|
||||
|
||||
def text(self, widget):
|
||||
val = widget.get("temp", "n/a")
|
||||
transition = widget.get("transition", "")
|
||||
if transition and self.show_transition:
|
||||
val = "{} {}".format(val, transition)
|
||||
return val
|
||||
|
||||
def update(self):
|
||||
if self.__thread is not None and self.__thread.isAlive():
|
||||
return
|
||||
self.__thread = threading.Thread(target=get_redshift_value, args=(self,))
|
||||
self.__thread.start()
|
||||
|
||||
def state(self, widget):
|
||||
return widget.get("state", None)
|
||||
|
||||
|
||||
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
Loading…
Add table
Add a link
Reference in a new issue