70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
#!/usr/bin/env python
|
|
# -*- encoding: utf-8 -*-
|
|
from PyQt4.QtCore import Qt, pyqtSignature
|
|
from PyQt4 import QtCore
|
|
from PyQt4.QtGui import QGraphicsLinearLayout, QIcon
|
|
from PyKDE4.plasma import Plasma
|
|
from PyKDE4 import plasmascript
|
|
from urllib2 import urlopen, URLError, HTTPError
|
|
import json
|
|
|
|
|
|
INTERVAL = 15
|
|
|
|
LABEL_TEMPLATE = """\
|
|
{users}
|
|
unknown: {unknown}\
|
|
"""
|
|
|
|
class HelloPython(plasmascript.Applet):
|
|
|
|
def init(self):
|
|
self.setHasConfigurationInterface(False)
|
|
self.setAspectRatioMode(Plasma.IgnoreAspectRatio)
|
|
|
|
self.theme = Plasma.Svg(self)
|
|
self.theme.setImagePath("widgets/background")
|
|
self.setBackgroundHints(Plasma.Applet.DefaultBackground)
|
|
|
|
self.layout = QGraphicsLinearLayout(Qt.Horizontal, self.applet)
|
|
|
|
hs_button = Plasma.ToolButton();
|
|
hs_button.setIcon(QIcon(self.package().path() + "contents/images/syrenka-small.png"))
|
|
QtCore.QObject.connect(hs_button, QtCore.SIGNAL('clicked()'), self.update_list)
|
|
|
|
self.at_list = Plasma.Label(self.applet)
|
|
self.layout.addItem(self.at_list)
|
|
self.layout.addItem(hs_button)
|
|
self.applet.setLayout(self.layout)
|
|
|
|
self.connect_to_engine()
|
|
self.resize(125, 125)
|
|
|
|
def get_user_list(self):
|
|
try:
|
|
api_content = urlopen("https://at.hackerspace.pl/api").read()
|
|
except (URLError, HTTPError):
|
|
pass # TODO:
|
|
json_dict = json.loads(api_content)
|
|
users = json_dict["users"]
|
|
unknown = json_dict["unknown"]
|
|
return (x["login"] for x in users), unknown
|
|
|
|
def connect_to_engine(self):
|
|
self.timeEngine = self.dataEngine("time")
|
|
self.timeEngine.connectSource("Local",
|
|
self, INTERVAL*6000, Plasma.AlignToMinute)
|
|
|
|
def update_list(self):
|
|
users, unknown = self.get_user_list()
|
|
users = "\n".join(users)
|
|
self.at_list.setText(LABEL_TEMPLATE.format(users=users, unknown=unknown))
|
|
|
|
@pyqtSignature("dataUpdated(const QString &, const Plasma::DataEngine::Data &)")
|
|
def dataUpdated(self, sourceName, data):
|
|
self.update_list()
|
|
|
|
|
|
def CreateApplet(parent):
|
|
return HelloPython(parent)
|