added a module to monitor the current status of SABnzbd (#589)
* added a module to monitor the current status of SABnzbd * added the ability to open SABnzbd inside a browser by rightclicking * added some error handling * minor cleanup
This commit is contained in:
parent
c6f9202380
commit
1874f3dda8
111
i3pystatus/sabnzbd.py
Normal file
111
i3pystatus/sabnzbd.py
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
from i3pystatus import IntervalModule
|
||||||
|
from urllib.request import urlopen
|
||||||
|
from urllib.error import HTTPError, URLError
|
||||||
|
|
||||||
|
import json
|
||||||
|
import webbrowser
|
||||||
|
|
||||||
|
|
||||||
|
class sabnzbd(IntervalModule):
|
||||||
|
"""
|
||||||
|
Displays the current status of SABnzbd.
|
||||||
|
|
||||||
|
A leftclick pauses/resumes downloading.
|
||||||
|
A rightclick opens SABnzbd inside a browser.
|
||||||
|
|
||||||
|
.. rubric:: Available formatters
|
||||||
|
|
||||||
|
* All the first-level parameters from
|
||||||
|
https://sabnzbd.org/wiki/advanced/api#queue
|
||||||
|
(e.g. status, speed, timeleft, spaceleft, eta ...)
|
||||||
|
"""
|
||||||
|
|
||||||
|
format = "{speed} - {timeleft}"
|
||||||
|
format_paused = "{status}"
|
||||||
|
host = "127.0.0.1"
|
||||||
|
port = 8080
|
||||||
|
api_key = ""
|
||||||
|
url = "http://{host}:{port}/sabnzbd/api?output=json&apikey={api_key}"
|
||||||
|
color = "#FFFFFF"
|
||||||
|
color_paused = "#FF0000"
|
||||||
|
color_downloading = "#00FF00"
|
||||||
|
|
||||||
|
settings = (
|
||||||
|
("format", "format string used for output"),
|
||||||
|
("format_paused", "format string used if SABnzbd is paused"),
|
||||||
|
("host", "address of the server running SABnzbd"),
|
||||||
|
("port", "port that SABnzbd is running on"),
|
||||||
|
("api_key", "api key of SABnzbd"),
|
||||||
|
("color", "default color"),
|
||||||
|
("color_paused", "color if SABnzbd is paused"),
|
||||||
|
("color_downloading", "color if downloading"),
|
||||||
|
)
|
||||||
|
|
||||||
|
on_leftclick = "pause_resume"
|
||||||
|
on_rightclick = "open_browser"
|
||||||
|
|
||||||
|
def init(self):
|
||||||
|
"""Initialize the URL used to connect to SABnzbd."""
|
||||||
|
self.url = self.url.format(host=self.host, port=self.port,
|
||||||
|
api_key=self.api_key)
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
"""Connect to SABnzbd and get the data."""
|
||||||
|
try:
|
||||||
|
answer = urlopen(self.url + "&mode=queue").read().decode()
|
||||||
|
except (HTTPError, URLError) as error:
|
||||||
|
self.output = {
|
||||||
|
"full_text": str(error.reason),
|
||||||
|
"color": "#FF0000"
|
||||||
|
}
|
||||||
|
return
|
||||||
|
|
||||||
|
answer = json.loads(answer)
|
||||||
|
|
||||||
|
# if answer["status"] exists and is False, an error occured
|
||||||
|
if not answer.get("status", True):
|
||||||
|
self.output = {
|
||||||
|
"full_text": answer["error"],
|
||||||
|
"color": "#FF0000"
|
||||||
|
}
|
||||||
|
return
|
||||||
|
|
||||||
|
queue = answer["queue"]
|
||||||
|
self.status = queue["status"]
|
||||||
|
|
||||||
|
if self.is_paused():
|
||||||
|
color = self.color_paused
|
||||||
|
elif self.is_downloading():
|
||||||
|
color = self.color_downloading
|
||||||
|
else:
|
||||||
|
color = self.color
|
||||||
|
|
||||||
|
if self.is_downloading():
|
||||||
|
full_text = self.format.format(**queue)
|
||||||
|
else:
|
||||||
|
full_text = self.format_paused.format(**queue)
|
||||||
|
|
||||||
|
self.output = {
|
||||||
|
"full_text": full_text,
|
||||||
|
"color": color
|
||||||
|
}
|
||||||
|
|
||||||
|
def pause_resume(self):
|
||||||
|
"""Toggle between pausing or resuming downloading."""
|
||||||
|
if self.is_paused():
|
||||||
|
urlopen(self.url + "&mode=resume")
|
||||||
|
else:
|
||||||
|
urlopen(self.url + "&mode=pause")
|
||||||
|
|
||||||
|
def is_paused(self):
|
||||||
|
"""Return True if downloads are currently paused."""
|
||||||
|
return self.status == "Paused"
|
||||||
|
|
||||||
|
def is_downloading(self):
|
||||||
|
"""Return True if downloads are running."""
|
||||||
|
return self.status == "Downloading"
|
||||||
|
|
||||||
|
def open_browser(self):
|
||||||
|
"""Open the URL of SABnzbd inside a browser."""
|
||||||
|
webbrowser.open(
|
||||||
|
"http://{host}:{port}/".format(host=self.host, port=self.port))
|
Loading…
Reference in New Issue
Block a user