Add pyload module

This commit is contained in:
enkore 2013-04-11 20:11:18 +02:00
parent d3c310e885
commit 5371ab4276
2 changed files with 121 additions and 0 deletions

View File

@ -315,6 +315,34 @@ __Settings:__
### pyload
Shows pyLoad status
Available formatters:
* captcha (see captcha_true and captcha_false, which are the values filled in for this formatter)
* progress (average over all running downloads)
* progress_all (percentage of completed files/links in queue)
* speed (kilobytes/s)
* download (downloads enabled, also see download_true and download_false)
* total (number of downloads)
* free_space (free space in download directory in gigabytes)
__Settings:__
* `address` — Address of pyLoad webinterface (default: `http://127.0.0.1:8000`)
* `format` — (default: `{captcha} {progress_all:.1f}% {speed:.1f} kb/s`)
* `captcha_true` — (default: `Captcha waiting`)
* `captcha_false` — (default: ``)
* `download_true` — (default: `Downloads enabled`)
* `download_false` — (default: `Downloads disabled`)
* `username` — (required)
* `password` — (required)
### regex
@ -395,6 +423,18 @@ __Settings:__
### xrandr
Do Not Publish, private hack of it's own
__Settings:__
## Contribute

81
i3pystatus/pyload.py Normal file
View File

@ -0,0 +1,81 @@
import urllib.request, urllib.parse, urllib.error
import http.cookiejar
import webbrowser
import json
from i3pystatus import IntervalModule
class pyLoad(IntervalModule):
"""
Shows pyLoad status
Available formatters:
* captcha (see captcha_true and captcha_false, which are the values filled in for this formatter)
* progress (average over all running downloads)
* progress_all (percentage of completed files/links in queue)
* speed (kilobytes/s)
* download (downloads enabled, also see download_true and download_false)
* total (number of downloads)
* free_space (free space in download directory in gigabytes)
"""
interval = 5
settings = (
("address", "Address of pyLoad webinterface"),
"format",
"captcha_true", "captcha_false",
"download_true", "download_false",
"username", "password"
)
required = ("username", "password")
address = "http://127.0.0.1:8000"
format = "{captcha} {progress_all:.1f}% {speed:.1f} kb/s"
captcha_true = "Captcha waiting"
captcha_false = ""
download_true = "Downloads enabled"
download_false = "Downloads disabled"
def _rpc_call(self, method, data=None):
if not data:
data = {}
urlencoded = urllib.parse.urlencode(data).encode("ascii")
return json.loads(self.opener.open("{address}/api/{method}/".format(address=self.address, method=method), urlencoded).read().decode("utf-8"))
def init(self):
self.cj = http.cookiejar.CookieJar()
self.opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(self.cj))
def login(self):
return self._rpc_call("login", {
"username": self.username,
"password": self.password,
})
def run(self):
self.login()
server_status = self._rpc_call("statusServer")
downloads_status = self._rpc_call("statusDownloads")
if downloads_status:
progress = sum(dl["percent"] for dl in downloads_status) / len(downloads_status) * 100
else:
progress = 100.0
fdict = {
"download": self.download_true if server_status["download"] else self.download_false,
"speed": server_status["speed"] / 1024,
"progress": progress,
"progress_all": sum(pkg["linksdone"] for pkg in self._rpc_call("getQueue")) / server_status["total"] * 100,
"captcha": self.captcha_true if self._rpc_call("isCaptchaWaiting") else self.captcha_false,
"free_space": self._rpc_call("freeSpace") / (1024 ** 3),
}
self.output = {
"full_text": self.format.format(**fdict).strip(),
"instance": self.address,
}
def on_leftclick(self):
webbrowser.open_new_tab(self.address)