AutoHotkey
Onder Windows maakt AutoHotkey van elke toetscombinatie een timerknop. Het script heeft niets nodig behalve AutoHotkey v2 en de HTTP-interface die in Windows is ingebouwd, geen andere bibliotheken; na elke druk toont een melding hoe je ervoor staat.
- Maak onder Instellingen, API en apparaten een apparaat aan van de soort "Ander apparaat" en kopieer de token.
- Installeer AutoHotkey v2.
- Sla het script hieronder op als
horaka.ahk(UTF-8) en start het met een dubbelklik. Voor meer projecten kopieer je de regel met^!F9en geef je die een eigen toets en korte naam. - Wil je het script starten als je inlogt, zet dan een snelkoppeling in de map Opstarten (Windows+R,
shell:startup).
#Requires AutoHotkey v2.0
#SingleInstance Force
Address := "https://api.horaka.com/v1"
Token := "JOUW_TOKEN"
; Ctrl+Alt+F9: toggle project, Ctrl+Alt+F10: stop, Ctrl+Alt+F11: show status
^!F9::Notify("/track/toggle", '{"project": "PROJECT"}')
^!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")
}
}
In plaats van /track/toggle kun je /track/start en /track/switch gebruiken met dezelfde body; zet "activity" naast "project" om op een bepaalde activiteit te boeken. Na elke druk toont de melding de uren van vandaag en de lopende timer. "HTTP 401" betekent een verkeerde token, "HTTP 403" betekent dat het apparaat niet op dit project mag boeken of dat de apparaatgrens van je plan is bereikt.
Op sommige toetsenbordindelingen is Ctrl+Alt met een letter hetzelfde als AltGr, daarom gebruikt het voorbeeld de functietoetsen. Elk endpoint staat beschreven in de API-documentatie.