refactor: move parsing into internal/parse module, move other functions into misc

This commit is contained in:
2025-08-01 16:39:03 -05:00
parent 378bc29e7e
commit 55a390e69c
8 changed files with 44 additions and 33 deletions

3
app.go
View File

@@ -16,6 +16,7 @@ import (
"github.com/Workiva/go-datastructures/queue" "github.com/Workiva/go-datastructures/queue"
"github.com/Xevion/gome-assistant/internal" "github.com/Xevion/gome-assistant/internal"
"github.com/Xevion/gome-assistant/internal/http" "github.com/Xevion/gome-assistant/internal/http"
"github.com/Xevion/gome-assistant/internal/parse"
ws "github.com/Xevion/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
@@ -273,7 +274,7 @@ func (a *App) RegisterIntervals(intervals ...Interval) {
panic(ErrInvalidArgs) panic(ErrInvalidArgs)
} }
i.nextRunTime = internal.ParseTime(string(i.startTime)).Carbon2Time() i.nextRunTime = parse.ParseTime(string(i.startTime)).Carbon2Time()
now := time.Now() now := time.Now()
for i.nextRunTime.Before(now) { for i.nextRunTime.Before(now) {
i.nextRunTime = i.nextRunTime.Add(i.frequency) i.nextRunTime = i.nextRunTime.Add(i.frequency)

View File

@@ -4,6 +4,7 @@ import (
"time" "time"
"github.com/Xevion/gome-assistant/internal" "github.com/Xevion/gome-assistant/internal"
"github.com/Xevion/gome-assistant/internal/parse"
"github.com/golang-module/carbon" "github.com/golang-module/carbon"
) )
@@ -16,8 +17,8 @@ func checkWithinTimeRange(startTime, endTime string) conditionCheck {
// if betweenStart and betweenEnd both set, first account for midnight // if betweenStart and betweenEnd both set, first account for midnight
// overlap, then check if between those times. // overlap, then check if between those times.
if startTime != "" && endTime != "" { if startTime != "" && endTime != "" {
parsedStart := internal.ParseTime(startTime) parsedStart := parse.ParseTime(startTime)
parsedEnd := internal.ParseTime(endTime) parsedEnd := parse.ParseTime(endTime)
// check for midnight overlap // check for midnight overlap
if parsedEnd.Lt(parsedStart) { // example turn on night lights when motion from 23:00 to 07:00 if parsedEnd.Lt(parsedStart) { // example turn on night lights when motion from 23:00 to 07:00
@@ -34,9 +35,9 @@ func checkWithinTimeRange(startTime, endTime string) conditionCheck {
} }
// otherwise just check individual before/after // otherwise just check individual before/after
} else if startTime != "" && internal.ParseTime(startTime).IsFuture() { } else if startTime != "" && parse.ParseTime(startTime).IsFuture() {
cc.fail = true cc.fail = true
} else if endTime != "" && internal.ParseTime(endTime).IsPast() { } else if endTime != "" && parse.ParseTime(endTime).IsPast() {
cc.fail = true cc.fail = true
} }
return cc return cc
@@ -168,7 +169,7 @@ func checkStartEndTime(s TimeString, isStart bool) conditionCheck {
} }
now := time.Now() now := time.Now()
parsedTime := internal.ParseTime(string(s)).Carbon2Time() parsedTime := parse.ParseTime(string(s)).Carbon2Time()
if isStart { if isStart {
if parsedTime.After(now) { if parsedTime.After(now) {
cc.fail = true cc.fail = true

View File

@@ -8,6 +8,7 @@ import (
"github.com/golang-module/carbon" "github.com/golang-module/carbon"
"github.com/Xevion/gome-assistant/internal" "github.com/Xevion/gome-assistant/internal"
"github.com/Xevion/gome-assistant/internal/parse"
) )
type EntityListener struct { type EntityListener struct {
@@ -127,13 +128,13 @@ func (b elBuilder3) ToState(s string) elBuilder3 {
} }
func (b elBuilder3) Duration(s DurationString) elBuilder3 { func (b elBuilder3) Duration(s DurationString) elBuilder3 {
d := internal.ParseDuration(string(s)) d := parse.ParseDuration(string(s))
b.entityListener.delay = d b.entityListener.delay = d
return b return b
} }
func (b elBuilder3) Throttle(s DurationString) elBuilder3 { func (b elBuilder3) Throttle(s DurationString) elBuilder3 {
d := internal.ParseDuration(string(s)) d := parse.ParseDuration(string(s))
b.entityListener.throttle = d b.entityListener.throttle = d
return b return b
} }

View File

@@ -8,6 +8,7 @@ import (
"github.com/golang-module/carbon" "github.com/golang-module/carbon"
"github.com/Xevion/gome-assistant/internal" "github.com/Xevion/gome-assistant/internal"
"github.com/Xevion/gome-assistant/internal/parse"
ws "github.com/Xevion/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
@@ -80,7 +81,7 @@ func (b eventListenerBuilder3) OnlyBefore(end string) eventListenerBuilder3 {
} }
func (b eventListenerBuilder3) Throttle(s DurationString) eventListenerBuilder3 { func (b eventListenerBuilder3) Throttle(s DurationString) eventListenerBuilder3 {
d := internal.ParseDuration(string(s)) d := parse.ParseDuration(string(s))
b.eventListener.throttle = d b.eventListener.throttle = d
return b return b
} }

26
internal/misc.go Normal file
View File

@@ -0,0 +1,26 @@
package internal
import (
"reflect"
"runtime"
"sync/atomic"
)
type EnabledDisabledInfo struct {
Entity string
State string
RunOnError bool
}
var (
id atomic.Int64 // default value is 0
)
func GetId() int64 {
return id.Add(1)
}
// GetFunctionName returns the name of the function that the interface is a pointer to.
func GetFunctionName(i interface{}) string {
return runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name()
}

View File

@@ -1,30 +1,13 @@
package internal package parse
import ( import (
"fmt" "fmt"
"log/slog" "log/slog"
"reflect"
"runtime"
"sync/atomic"
"time" "time"
"github.com/golang-module/carbon" "github.com/golang-module/carbon"
) )
type EnabledDisabledInfo struct {
Entity string
State string
RunOnError bool
}
var (
id atomic.Int64 // default value is 0
)
func GetId() int64 {
return id.Add(1)
}
// Parses a HH:MM string. // Parses a HH:MM string.
func ParseTime(s string) carbon.Carbon { func ParseTime(s string) carbon.Carbon {
t, err := time.Parse("15:04", s) t, err := time.Parse("15:04", s)
@@ -45,7 +28,3 @@ func ParseDuration(s string) time.Duration {
} }
return d return d
} }
func GetFunctionName(i interface{}) string {
return runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name()
}

View File

@@ -6,6 +6,7 @@ import (
"time" "time"
"github.com/Xevion/gome-assistant/internal" "github.com/Xevion/gome-assistant/internal"
"github.com/Xevion/gome-assistant/internal/parse"
) )
type IntervalCallback func(*Service, State) type IntervalCallback func(*Service, State)
@@ -80,7 +81,7 @@ func (ib intervalBuilder) Call(callback IntervalCallback) intervalBuilderCall {
// Takes a DurationString ("2h", "5m", etc) to set the frequency of the interval. // Takes a DurationString ("2h", "5m", etc) to set the frequency of the interval.
func (ib intervalBuilderCall) Every(s DurationString) intervalBuilderEnd { func (ib intervalBuilderCall) Every(s DurationString) intervalBuilderEnd {
d := internal.ParseDuration(string(s)) d := parse.ParseDuration(string(s))
ib.interval.frequency = d ib.interval.frequency = d
return intervalBuilderEnd(ib) return intervalBuilderEnd(ib)
} }

View File

@@ -6,6 +6,7 @@ import (
"time" "time"
"github.com/Xevion/gome-assistant/internal" "github.com/Xevion/gome-assistant/internal"
"github.com/Xevion/gome-assistant/internal/parse"
"github.com/golang-module/carbon" "github.com/golang-module/carbon"
) )
@@ -75,7 +76,7 @@ func (sb scheduleBuilder) Call(callback ScheduleCallback) scheduleBuilderCall {
// At takes a string in 24hr format time like "15:30". // At takes a string in 24hr format time like "15:30".
func (sb scheduleBuilderCall) At(s string) scheduleBuilderEnd { func (sb scheduleBuilderCall) At(s string) scheduleBuilderEnd {
t := internal.ParseTime(s) t := parse.ParseTime(s)
sb.schedule.hour = t.Hour() sb.schedule.hour = t.Hour()
sb.schedule.minute = t.Minute() sb.schedule.minute = t.Minute()
return scheduleBuilderEnd(sb) return scheduleBuilderEnd(sb)