[dnf] simplify threading

use framework threading to simplify the dnf module

see #692
This commit is contained in:
tobi-wan-kenobi 2020-08-27 20:06:33 +02:00
parent 38e54a7c81
commit db41792afb

View file

@ -5,13 +5,8 @@
Requires the following executable: Requires the following executable:
* dnf * dnf
Parameters:
* dnf.interval: Time in minutes between two consecutive update checks (defaults to 30 minutes)
""" """
import threading
import core.event import core.event
import core.module import core.module
import core.widget import core.widget
@ -20,46 +15,13 @@ import core.decorators
import util.cli import util.cli
def get_dnf_info(widget):
res = util.cli.execute("dnf updateinfo", ignore_errors=True)
security = 0
bugfixes = 0
enhancements = 0
other = 0
for line in res.split("\n"):
if not line.startswith(" "):
continue
elif "ecurity" in line:
for s in line.split():
if s.isdigit():
security += int(s)
elif "ugfix" in line:
for s in line.split():
if s.isdigit():
bugfixes += int(s)
elif "hancement" in line:
for s in line.split():
if s.isdigit():
enhancements += int(s)
else:
for s in line.split():
if s.isdigit():
other += int(s)
widget.set("security", security)
widget.set("bugfixes", bugfixes)
widget.set("enhancements", enhancements)
widget.set("other", other)
core.event.trigger("update", [widget.module.id], redraw_only=True)
class Module(core.module.Module): class Module(core.module.Module):
@core.decorators.every(minutes=30) @core.decorators.every(minutes=30)
def __init__(self, config, theme): def __init__(self, config, theme):
super().__init__(config, theme, core.widget.Widget(self.updates)) super().__init__(config, theme, core.widget.Widget(self.updates))
self.background = True
def updates(self, widget): def updates(self, widget):
result = [] result = []
for t in ["security", "bugfixes", "enhancements", "other"]: for t in ["security", "bugfixes", "enhancements", "other"]:
@ -67,8 +29,37 @@ class Module(core.module.Module):
return "/".join(result) return "/".join(result)
def update(self): def update(self):
thread = threading.Thread(target=get_dnf_info, args=(self.widget(),)) res = util.cli.execute("dnf updateinfo", ignore_errors=True)
thread.start()
security = 0
bugfixes = 0
enhancements = 0
other = 0
for line in res.split("\n"):
if not line.startswith(" "):
continue
elif "ecurity" in line:
for s in line.split():
if s.isdigit():
security += int(s)
elif "ugfix" in line:
for s in line.split():
if s.isdigit():
bugfixes += int(s)
elif "hancement" in line:
for s in line.split():
if s.isdigit():
enhancements += int(s)
else:
for s in line.split():
if s.isdigit():
other += int(s)
widget.set("security", security)
widget.set("bugfixes", bugfixes)
widget.set("enhancements", enhancements)
widget.set("other", other)
def state(self, widget): def state(self, widget):
cnt = 0 cnt = 0