♻️ Improve chill code

This commit is contained in:
Dan Jones 2024-11-06 11:05:41 -06:00
commit 0272aa3b22

View file

@ -14,33 +14,43 @@ var MaxTemp int = 72500
var Sleep = time.Second * 10
var ErrChilledOut = errors.New("temperature dropped below threshold")
func getCurrentTemp() (o int, err error) {
var by []byte
by, err = os.ReadFile(TempFile)
if err != nil {
return
}
by = bytes.TrimSpace(by)
o, err = strconv.Atoi(string(by))
return
}
func Chill(baseCtx context.Context) context.Context {
ctx, cancel := context.WithCancelCause(baseCtx)
ret := func(e error) context.Context {
cancel(e)
return ctx
}
current, err := getCurrentTemp()
if err != nil {
return ret(err)
}
if current < MaxTemp {
return ret(ErrChilledOut)
}
go func() {
var by []byte
var err error
current := MaxTemp + 1
for current >= MaxTemp {
by, err = os.ReadFile(TempFile)
if err != nil {
cancel(err)
return
}
by = bytes.TrimSpace(by)
current, err = strconv.Atoi(string(by))
if err != nil {
cancel(err)
return
}
if current < MaxTemp {
break
}
for current >= MaxTemp && err == nil {
time.Sleep(Sleep)
current, err = getCurrentTemp()
}
cancel(ErrChilledOut)
if err == nil {
err = ErrChilledOut
}
cancel(err)
}()
return ctx