AutoHotkey
No Windows, o AutoHotkey transforma qualquer combinação de teclas num botão do cronómetro. O script só precisa do AutoHotkey v2 e da interface HTTP integrada no Windows, sem outras bibliotecas; depois de cada toque, uma notificação mostra-te como estás.
- Em Definições, API e dispositivos, cria um dispositivo do tipo «Outro dispositivo» e copia o token.
- Instala o AutoHotkey v2.
- Guarda o script abaixo como
horaka.ahk(UTF-8) e inicia-o com um duplo clique. Para mais projetos, copia a linha com^!F9e dá-lhe uma tecla e um nome curto próprios. - Para iniciar o script quando inicias sessão, coloca um atalho na pasta de arranque (Windows+R,
shell:startup).
#Requires AutoHotkey v2.0
#SingleInstance Force
Address := "https://api.horaka.com/v1"
Token := "O_TEU_TOKEN"
; Ctrl+Alt+F9: toggle project, Ctrl+Alt+F10: stop, Ctrl+Alt+F11: show status
^!F9::Notify("/track/toggle", '{"project": "PROJETO"}')
^!F10::Notify("/track/stop")
^!F11::Notify()
Horaka(Method, Path, Body := "") {
Request := ComObject("WinHttp.WinHttpRequest.5.1")
Request.Open(Method, Address Path, false)
Request.SetRequestHeader("Authorization", "Bearer " Token)
Request.SetRequestHeader("Content-Type", "application/json; charset=utf-8")
Request.Send(Body)
if (Request.Status != 200)
throw Error("HTTP " Request.Status)
return Request.ResponseText
}
Notify(Path := "", Body := "{}") {
try {
if (Path != "")
Horaka("POST", Path, Body)
TrayTip(Horaka("GET", "/track/status?format=text"), "Horaka")
} catch as Problem {
TrayTip(Problem.Message, "Horaka", "Iconx")
}
}
Em vez de /track/toggle podes usar /track/start e /track/switch com o mesmo corpo; acrescenta "activity" ao lado de "project" para registar uma atividade específica. Depois de cada toque, a notificação mostra as horas de hoje e o cronómetro a correr. «HTTP 401» significa token errado, «HTTP 403» significa que o dispositivo não pode registar neste projeto ou que foi atingido o limite de dispositivos do teu plano.
Em alguns esquemas de teclado, Ctrl+Alt com uma letra equivale a AltGr, por isso o exemplo usa as teclas de função. Cada endpoint está descrito na documentação da API.