diff options
author | Pavel Makhov <pmakhov@theoctavegroup.com> | 2019-09-22 22:44:50 -0400 |
---|---|---|
committer | Pavel Makhov <pmakhov@theoctavegroup.com> | 2019-09-22 22:44:50 -0400 |
commit | 7403bdb0f662305a78adb6b9cc0c4bbec855ff94 (patch) | |
tree | 1d6480a5291b2f8cdfbfed4c059898703b2905da /gerrit-widget | |
parent | 504a051f085e24fd3b1238cfbaa7958d57f77982 (diff) |
gerrit widget
Diffstat (limited to 'gerrit-widget')
-rw-r--r-- | gerrit-widget/gerrit.lua | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/gerrit-widget/gerrit.lua b/gerrit-widget/gerrit.lua new file mode 100644 index 0000000..3dae3ba --- /dev/null +++ b/gerrit-widget/gerrit.lua @@ -0,0 +1,84 @@ +------------------------------------------------- +-- Gerrit Widget for Awesome Window Manager +-- Shows the number of currently assigned reviews +-- More details could be found here: +-- https://github.com/streetturtle/awesome-wm-widgets/tree/master/gerrit-widget + +-- @author Pavel Makhov +-- @copyright 2019 Pavel Makhov +------------------------------------------------- + +local wibox = require("wibox") +local watch = require("awful.widget.watch") +local json = require("json") +local spawn = require("awful.spawn") +local naughty = require("naughty") + +local path_to_icons = "/usr/share/icons/Arc/status/symbolic/" +--local CMD = [[bash -c "curl -s --request GET --netrc https://%s/a/changes/\\?q\\=%s | tail -n +2 | jq ' . | length'"]] +local CMD = [[bash -c "curl -s --request GET --netrc https://%s/a/changes/\\?q\\=%s | tail -n +2"]] + +local gerrit_widget = {} + +local function worker(args) + + local args = args or {} + + local host = args.host or naughty.notify{preset = naughty.config.presets.critical, text = 'Gerrit host is unknown'} + local query = args.query or 'status:open+AND+NOT+is:wip+AND+is:reviewer' + + local reviews + local notification_text = '' + + gerrit_widget = wibox.widget{ + --font = 'Play 12', + widget = wibox.widget.textbox + } + + local get_size = function (T) + local count = 0 + for _ in pairs(T) do count = count + 1 end + return count + end + + local update_graphic = function(widget, stdout, _, _, _) + reviews = json.decode(stdout) + widget.text = get_size(reviews) + + + for i in pairs(reviews)do + notification_text = notification_text .. '\n' .. reviews[i].subject + i = i + 1 + end + + end + + local function urlencode(url) + if url == nil then + return + end + url = url:gsub(" ", "+") + return url + end + + query_escaped = urlencode(query) + watch(string.format(CMD, host, query_escaped), 10, update_graphic, gerrit_widget) + + local notification + gerrit_widget:connect_signal("mouse::enter", function() + notification = naughty.notify{ + text = notification_text, + timeout = 5, hover_timeout = 10, + position = position, + width = (500) + } + end) + + gerrit_widget:connect_signal("mouse::leave", function() + naughty.destroy(notification) + end) + + return gerrit_widget +end + +return setmetatable(gerrit_widget, { __call = function(_, ...) return worker(...) end }) |