AutoHotkey
En Windows, AutoHotkey convierte cualquier combinación de teclas en un botón del temporizador. El script solo necesita AutoHotkey v2 y la interfaz HTTP integrada en Windows, sin más bibliotecas; tras cada pulsación, una notificación te muestra cómo vas.
- En Ajustes, API y dispositivos, añade un dispositivo del tipo «Otro dispositivo» y copia el token.
- Instala AutoHotkey v2.
- Guarda el script de abajo como
horaka.ahk(UTF-8) y ejecútalo con doble clic. Para más proyectos, copia la línea con^!F9y dale su propia tecla y su alias. - Para que el script arranque al iniciar sesión, pon un acceso directo en la carpeta de inicio (Windows+R,
shell:startup).
#Requires AutoHotkey v2.0
#SingleInstance Force
Address := "https://api.horaka.com/v1"
Token := "TU_TOKEN"
; Ctrl+Alt+F9: toggle project, Ctrl+Alt+F10: stop, Ctrl+Alt+F11: show status
^!F9::Notify("/track/toggle", '{"project": "PROYECTO"}')
^!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")
}
}
En lugar de /track/toggle puedes usar /track/start y /track/switch con el mismo cuerpo; añade "activity" junto a "project" para registrar una actividad concreta. Tras cada pulsación, la notificación muestra las horas de hoy y el temporizador en marcha. «HTTP 401» significa un token incorrecto; «HTTP 403», que el dispositivo no puede registrar en este proyecto o que se ha alcanzado el límite de dispositivos de tu plan.
En algunas distribuciones de teclado, Ctrl+Alt con una letra equivale a AltGr; por eso el ejemplo usa las teclas de función. Todos los endpoints se describen en la documentación de la API.