ObserveEndOfFile implemented

This commit is contained in:
milarin 2024-01-10 21:56:00 +01:00
parent 4b0dd8e5a6
commit 82652060a7
2 changed files with 30 additions and 6 deletions

View File

@ -7,6 +7,18 @@ import (
"git.milar.in/milarin/channel" "git.milar.in/milarin/channel"
) )
func ObserveEndOfFile(ctx context.Context, socket string) (<-chan string, error) {
ch, err := ObserveEvent[any](ctx, socket, "end-file")
if err != nil {
return nil, err
}
getReason := func(e Event[any]) string { return e.Reason }
notEmpty := func(str string) bool { return str != "" }
reasons := channel.Filter(channel.MapSuccessive(ch, getReason), notEmpty)
return reasons, nil
}
func ObserveDisplayNames(ctx context.Context, socket string) (<-chan []string, error) { func ObserveDisplayNames(ctx context.Context, socket string) (<-chan []string, error) {
return ObserveProperty[[]string](ctx, socket, "display-names") return ObserveProperty[[]string](ctx, socket, "display-names")
} }

View File

@ -5,6 +5,8 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"net" "net"
"git.milar.in/milarin/channel"
) )
type Command struct { type Command struct {
@ -22,6 +24,7 @@ type Event[T any] struct {
ID int `json:"id"` ID int `json:"id"`
Name string `json:"name"` Name string `json:"name"`
Error string `json:"error"` Error string `json:"error"`
Reason string `json:"reason"`
} }
func SendCommand[T any](socket string, cmd *Command) (*Response[T], error) { func SendCommand[T any](socket string, cmd *Command) (*Response[T], error) {
@ -72,7 +75,16 @@ func SetProperty[T any](socket string, propertyName string, propertyValue T) err
} }
func ObserveProperty[T any](ctx context.Context, socket string, propertyName string) (<-chan T, error) { func ObserveProperty[T any](ctx context.Context, socket string, propertyName string) (<-chan T, error) {
out := make(chan T, 10) ch, err := ObserveEvent[T](ctx, socket, propertyName)
if err != nil {
return nil, err
}
return channel.MapSuccessive(ch, func(e Event[T]) T { return e.Data }), nil
}
func ObserveEvent[T any](ctx context.Context, socket string, propertyName string) (<-chan Event[T], error) {
out := make(chan Event[T], 10)
conn, err := net.Dial("unix", socket) conn, err := net.Dial("unix", socket)
if err != nil { if err != nil {
@ -113,7 +125,7 @@ func ObserveProperty[T any](ctx context.Context, socket string, propertyName str
if err := dec.Decode(&event); err != nil { if err := dec.Decode(&event); err != nil {
break break
} }
out <- event.Data out <- event
} }
}() }()