(defpoll servers_status :initial '[{"online": true,"kind":"Java","players":{"online":0,"max":0,"list":null},"version":{"name":"version","protocol":0},"motd":"Message of the day","ping":0,"address":"ip.addre.ss"}]' :interval "21600s" 'scripts/home/mcstatus') (defvar reveal_mcstatus true) (defwidget mcstatus_revealer [] (revealer-on-press :revealvar reveal_mcstatus :revealvar-name "reveal_mcstatus" (button :width 300 :class "revealer-title" "Minecraft Servers ${reveal_mcstatus ? '' : ''}") (mcstatus :json servers_status))) (defwidget mcstatus [json] (box :class 'minecraft' :orientation 'v' :space-evenly false (box :orientation 'v' :space-evenly false (for server in json (box :class 'server' :orientation 'h' :space-evenly false (box (box :class 'icon' :valign 'center' :width 75 :height {((server.ping!=0.0) ? 75 : 25 )} :style 'background-image: url("${server.icon_path}");' ) ) (box :class 'details' :space-evenly false :orientation 'v' (label :class 'title' :text "${server.address}" ) (label :visible {(server.ping!=0.0)} :xalign 0 :text "${server.players.online}/${server.players.max} players online" ) (label :visible {(server.ping!=0.0)} :class 'motd' :text "${server.motd}" :wrap true :wrap-mode 'word' ; :truncate true ) (label :visible {(server.ping!=0.0)} :xalign 0 :text " ${round(server.ping,0)}ms" ) (label :visible {(server.ping==0.0)} :style "color: red" :xalign 0 :text " offline" ) ) ) ) ) (button :class 'button' :onclick 'eww poll servers_status' :onrightclick 'rm ~/.cache/mc-server-info/cache.json;eww poll servers_status' :tooltip 'right-click to bypass cache' (label :text "reload now" ) ) ) )