воскресенье, 9 ноября 2014 г.

Вывод статуса pintask в панель awesome.

Не знаете что такое pintask?

Это такой канбан, типа trello, но сильно улучшенный.

Во первых, учёт времени, по доскам/карточкам/спискам.

Во вторых расширения из собственных скриптов.

И третье и самое важное, это очень отзывчивая команда разработчиков, которая буквально что угодно допилит, если сможете объяснить зачем и как.

Я к ним приставал с кучей улучшений, и практически все они реализовали.

Например, из последнего, захотелсь мне видеть прямо в панели своего awesome статус учета времени в pintask — запущен ли, и какая задача на выполнении.

Попросил у разработчиков ресурс, откуда с помощью curl можно эти данные можно запросить,  и они реализовали.

Теперь создадим крошечный модуль для awesome в стиле хренак-хренак-и-в-продакшен:


local io = io
local string=string
module("pintask")

function Start()
    local g = io.popen("/usr/bin/curl -m 15 https://pintask.me/api/v1/ваш_ключ/timetracking/set/on")
    local mute = g:read()
    g:close()
end
   
function Stop()
    local g = io.popen("/usr/bin/curl -m 15 https://pintask.me/api/v1/ваш_ключ/timetracking/set/off")
    local mute = g:read()
    g:close()
end
   
function Status()
    local g = io.popen("/usr/bin/curl -s -m 15  https://pintask.me/api/v1/ваш_ключ/timetracking/status | jq .paused")
    local mute = g:read()
    g:close()
    if mute=="false" then
        local b = io.popen("/usr/bin/curl -s -m 15  https://pintask.me/api/v1/ваш_ключ/timetracking/status | jq .card.name")
        local name = b:read()
        b:close()
        return  "[ " .. string.sub(name,1,15) .. " \"]"
    else
        return " STP "
   end 
end
Два запроса в функции статус, потому как я в jq не умею это реализовать в одну команду, научите?

 Ну, и можно добавлять в основной конфиг файл:
require("pintask")
...
--- pintask
    pintaskwidget0 = widget({
        type = "textbox",
        name = "pintaskwidget0",
        align = "right"
    })

    pintaskwidget0:buttons(awful.util.table.join(
      awful.button({ }, 1, function()  pintask.Start(); pintaskwidget0.text = pintask.Status() end),
      awful.button({ }, 3, function()  pintask.Stop() ; pintaskwidget0.text = pintask.Status() end)
    ))

--    pintaskwidget0.text = " --- "
    pintaskwidget0.text = pintask.Status();

В итоге видим в трее, первые 15 символов выполняемой задачи, и можем включать/выключать учёт времени левым и соотвественно правым кликом мышкой без переключения на браузер.