refactor: make fork independent, rename PriorityQueue

This commit is contained in:
2025-07-31 15:57:53 -05:00
parent f01f8dd602
commit 1226867b8e
42 changed files with 74 additions and 67 deletions

View File

@@ -11,7 +11,7 @@ Gome-Assistant is a new library, and I'm opening it up early to get some user fe
### Installation ### Installation
``` ```
go get saml.dev/gome-assistant go get github.com/Xevion/gome-assistant
``` ```
### Generate Entity Constants ### Generate Entity Constants
@@ -21,9 +21,9 @@ You can generate type-safe constants for all your Home Assistant entities using
1. Create a `gen.yaml` file in your project root: 1. Create a `gen.yaml` file in your project root:
```yaml ```yaml
url: "http://192.168.1.123:8123" url: "http://192.168.1.123:8123"
ha_auth_token: "your_auth_token" # Or set HA_AUTH_TOKEN env var ha_auth_token: "your_auth_token" # Or set HA_AUTH_TOKEN env var
home_zone_entity_id: "zone.home" # Optional: defaults to zone.home home_zone_entity_id: "zone.home" # Optional: defaults to zone.home
# Optional: List of domains to include when generating constants # Optional: List of domains to include when generating constants
# If provided, only these domains will be processed # If provided, only these domains will be processed
@@ -37,7 +37,7 @@ exclude_domains: ["device_tracker", "person"]
2. Add a `//go:generate` comment in your project: 2. Add a `//go:generate` comment in your project:
```go ```go
//go:generate go run saml.dev/gome-assistant/cmd/generate //go:generate go run github.com/Xevion/gome-assistant/cmd/generate
``` ```
Optionally use the `-config` flag to customize the file path of the config file. Optionally use the `-config` flag to customize the file path of the config file.
@@ -87,7 +87,7 @@ The general flow is
3. Start app 3. Start app
```go ```go
import ga "saml.dev/gome-assistant" import ga "github.com/Xevion/gome-assistant"
// replace with IP and port of your Home Assistant installation // replace with IP and port of your Home Assistant installation
app, err := ga.NewApp(ga.NewAppRequest{ app, err := ga.NewApp(ga.NewAppRequest{
@@ -107,7 +107,7 @@ app.RegisterIntervals(...)
app.Start() app.Start()
``` ```
A full reference is available on [pkg.go.dev](https://pkg.go.dev/saml.dev/gome-assistant), but all you need to know to get started are the four types of automations in gome-assistant. A full reference is available on [pkg.go.dev](https://pkg.go.dev/github.com/Xevion/gome-assistant), but all you need to know to get started are the four types of automations in gome-assistant.
- [Daily Schedules](#daily-schedule) - [Daily Schedules](#daily-schedule)
- [Entity Listeners](#entity-listener) - [Entity Listeners](#entity-listener)
@@ -205,22 +205,23 @@ app.RegisterEventListeners(eventListener)
Event listeners have other functions to change the behavior. Event listeners have other functions to change the behavior.
| Function | Info | | Function | Info |
| --------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| OnlyBetween("03:00", "14:00") | Only run your function between two specified times of day | | OnlyBetween("03:00", "14:00") | Only run your function between two specified times of day |
| OnlyAfter("03:00") | Only run your function after a specified time of day | | OnlyAfter("03:00") | Only run your function after a specified time of day |
| OnlyBefore("03:00") | Only run your function before a specified time of day | | OnlyBefore("03:00") | Only run your function before a specified time of day |
| Throttle("30s") | Minimum time between function calls | | Throttle("30s") | Minimum time between function calls |
| ExceptionDates(time.Time, ...time.Time) | A one time exception on the given date. Time is ignored, applies to whole day. Functions like a "blocklist" | | ExceptionDates(time.Time, ...time.Time) | A one time exception on the given date. Time is ignored, applies to whole day. Functions like a "blocklist" |
| ExceptionRange(time.Time, time.Time) | A one time exception between the two date/times. Both date and time are considered. Functions like a "blocklist" | | ExceptionRange(time.Time, time.Time) | A one time exception between the two date/times. Both date and time are considered. Functions like a "blocklist" |
The callback function receives three parameters: The callback function receives three parameters:
```go ```go
func myCallback(service *ga.Service, state ga.State, data ga.EventData) { func myCallback(service *ga.Service, state ga.State, data ga.EventData) {
// You can unmarshal the raw JSON into a type-safe struct // You can unmarshal the raw JSON into a type-safe struct
ev := ga.EventZWaveJSValueNotification{} ev := ga.EventZWaveJSValueNotification{}
json.Unmarshal(data.RawEventJSON, &ev) json.Unmarshal(data.RawEventJSON, &ev)
// Handle the event... // Handle the event...
} }
``` ```

8
app.go
View File

@@ -13,10 +13,10 @@ import (
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
sunriseLib "github.com/nathan-osman/go-sunrise" sunriseLib "github.com/nathan-osman/go-sunrise"
"saml.dev/gome-assistant/internal" "github.com/Xevion/gome-assistant/internal"
"saml.dev/gome-assistant/internal/http" "github.com/Xevion/gome-assistant/internal/http"
pq "saml.dev/gome-assistant/internal/priorityqueue" pq "github.com/Xevion/gome-assistant/internal/priority_queue"
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
var ErrInvalidArgs = errors.New("invalid arguments provided") var ErrInvalidArgs = errors.New("invalid arguments provided")

View File

@@ -3,8 +3,8 @@ package gomeassistant
import ( import (
"time" "time"
"github.com/Xevion/gome-assistant/internal"
"github.com/golang-module/carbon" "github.com/golang-module/carbon"
"saml.dev/gome-assistant/internal"
) )
type conditionCheck struct { type conditionCheck struct {

View File

@@ -4,8 +4,8 @@ import (
"errors" "errors"
"testing" "testing"
"github.com/Xevion/gome-assistant/internal"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"saml.dev/gome-assistant/internal"
) )
type MockState struct { type MockState struct {

View File

@@ -9,8 +9,8 @@ import (
"strings" "strings"
"text/template" "text/template"
ga "github.com/Xevion/gome-assistant"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
ga "saml.dev/gome-assistant"
) )
type Config struct { type Config struct {

View File

@@ -7,7 +7,7 @@ import (
"github.com/golang-module/carbon" "github.com/golang-module/carbon"
"saml.dev/gome-assistant/internal" "github.com/Xevion/gome-assistant/internal"
) )
type EntityListener struct { type EntityListener struct {

View File

@@ -7,8 +7,8 @@ import (
"github.com/golang-module/carbon" "github.com/golang-module/carbon"
"saml.dev/gome-assistant/internal" "github.com/Xevion/gome-assistant/internal"
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
type EventListener struct { type EventListener struct {

View File

@@ -8,10 +8,10 @@ import (
// "example/entities" // Optional import generated entities // "example/entities" // Optional import generated entities
ga "saml.dev/gome-assistant" ga "github.com/Xevion/gome-assistant"
) )
//go:generate go run saml.dev/gome-assistant/cmd/generate //go:generate go run github.com/Xevion/gome-assistant/cmd/generate
func main() { func main() {
app, err := ga.NewApp(ga.NewAppRequest{ app, err := ga.NewApp(ga.NewAppRequest{
@@ -24,7 +24,13 @@ func main() {
os.Exit(1) os.Exit(1)
} }
defer app.Cleanup() defer func() {
slog.Info("Shutting down application...")
if err := app.Close(); err != nil {
slog.Error("Error during shutdown", "error", err)
}
slog.Info("Application shutdown complete")
}()
pantryDoor := ga. pantryDoor := ga.
NewEntityListener(). NewEntityListener().

View File

@@ -11,7 +11,7 @@ import (
"github.com/stretchr/testify/suite" "github.com/stretchr/testify/suite"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
ga "saml.dev/gome-assistant" ga "github.com/Xevion/gome-assistant"
) )
type ( type (

View File

@@ -6,7 +6,7 @@ require (
github.com/golang-cz/devslog v0.0.8 github.com/golang-cz/devslog v0.0.8
github.com/stretchr/testify v1.8.4 github.com/stretchr/testify v1.8.4
gopkg.in/yaml.v3 v3.0.1 gopkg.in/yaml.v3 v3.0.1
saml.dev/gome-assistant v0.2.0 github.com/Xevion/gome-assistant v0.2.0
) )
require ( require (

View File

@@ -96,5 +96,5 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
saml.dev/gome-assistant v0.2.0 h1:Clo5DrziTdsYydVUTQfroeBVmToMnNHoObr+k6HhbMY= github.com/Xevion/gome-assistant v0.2.0 h1:Clo5DrziTdsYydVUTQfroeBVmToMnNHoObr+k6HhbMY=
saml.dev/gome-assistant v0.2.0/go.mod h1:jsZUtnxANCP0zB2B7iyy4j7sZohMGop8g+5EB2MER3o= github.com/Xevion/gome-assistant v0.2.0/go.mod h1:jsZUtnxANCP0zB2B7iyy4j7sZohMGop8g+5EB2MER3o=

2
go.mod
View File

@@ -1,4 +1,4 @@
module saml.dev/gome-assistant module github.com/Xevion/gome-assistant
go 1.21 go 1.21

View File

@@ -1,4 +1,4 @@
package priorityqueue package priority_queue
import ( import (
"container/heap" "container/heap"

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
/* Structs */ /* Structs */

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
/* Structs */ /* Structs */

View File

@@ -1,8 +1,8 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
"saml.dev/gome-assistant/types" "github.com/Xevion/gome-assistant/types"
) )
/* Structs */ /* Structs */

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
/* Structs */ /* Structs */

View File

@@ -1,8 +1,8 @@
package services package services
import ( import (
"saml.dev/gome-assistant/internal" "github.com/Xevion/gome-assistant/internal"
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
type Event struct { type Event struct {

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
type HomeAssistant struct { type HomeAssistant struct {

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
/* Structs */ /* Structs */

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
/* Structs */ /* Structs */

View File

@@ -4,7 +4,7 @@ import (
"fmt" "fmt"
"time" "time"
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
/* Structs */ /* Structs */

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
/* Structs */ /* Structs */

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
/* Structs */ /* Structs */

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
/* Structs */ /* Structs */

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
/* Structs */ /* Structs */

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
/* Structs */ /* Structs */

View File

@@ -1,8 +1,8 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
"saml.dev/gome-assistant/types" "github.com/Xevion/gome-assistant/types"
) )
type Notify struct { type Notify struct {

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
type Number struct { type Number struct {

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
/* Structs */ /* Structs */

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
/* Structs */ /* Structs */

View File

@@ -1,8 +1,8 @@
package services package services
import ( import (
"saml.dev/gome-assistant/internal" "github.com/Xevion/gome-assistant/internal"
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
func BuildService[ func BuildService[

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
/* Structs */ /* Structs */

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
/* Structs */ /* Structs */

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
/* Structs */ /* Structs */

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
/* Structs */ /* Structs */

View File

@@ -1,7 +1,7 @@
package services package services
import ( import (
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
/* Structs */ /* Structs */

View File

@@ -16,7 +16,7 @@ import (
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
i "saml.dev/gome-assistant/internal" i "github.com/Xevion/gome-assistant/internal"
) )
var ErrInvalidToken = errors.New("invalid authentication token") var ErrInvalidToken = errors.New("invalid authentication token")

View File

@@ -5,7 +5,7 @@ import (
"log/slog" "log/slog"
"time" "time"
"saml.dev/gome-assistant/internal" "github.com/Xevion/gome-assistant/internal"
) )
type IntervalCallback func(*Service, State) type IntervalCallback func(*Service, State)

View File

@@ -5,8 +5,8 @@ import (
"log/slog" "log/slog"
"time" "time"
"github.com/Xevion/gome-assistant/internal"
"github.com/golang-module/carbon" "github.com/golang-module/carbon"
"saml.dev/gome-assistant/internal"
) )
type ScheduleCallback func(*Service, State) type ScheduleCallback func(*Service, State)

View File

@@ -1,8 +1,8 @@
package gomeassistant package gomeassistant
import ( import (
"saml.dev/gome-assistant/internal/services" "github.com/Xevion/gome-assistant/internal/services"
ws "saml.dev/gome-assistant/internal/websocket" ws "github.com/Xevion/gome-assistant/internal/websocket"
) )
type Service struct { type Service struct {

View File

@@ -8,7 +8,7 @@ import (
"github.com/golang-module/carbon" "github.com/golang-module/carbon"
"saml.dev/gome-assistant/internal/http" "github.com/Xevion/gome-assistant/internal/http"
) )
type State interface { type State interface {