Code refactoring for streams HandleFunc

This commit is contained in:
Alex X
2024-06-14 12:48:29 +03:00
parent 1ac9d54dab
commit ecfe802065
15 changed files with 53 additions and 93 deletions
+3 -9
View File
@@ -7,13 +7,7 @@ import (
) )
func Init() { func Init() {
streams.HandleFunc("bubble", handle) streams.HandleFunc("bubble", func(source string) (core.Producer, error) {
} return bubble.Dial(source)
})
func handle(url string) (core.Producer, error) {
conn := bubble.NewClient(url)
if err := conn.Dial(); err != nil {
return nil, err
}
return conn, nil
} }
-8
View File
@@ -2,16 +2,8 @@ package debug
import ( import (
"github.com/AlexxIT/go2rtc/internal/api" "github.com/AlexxIT/go2rtc/internal/api"
"github.com/AlexxIT/go2rtc/internal/streams"
"github.com/AlexxIT/go2rtc/pkg/core"
) )
func Init() { func Init() {
api.HandleFunc("api/stack", stackHandler) api.HandleFunc("api/stack", stackHandler)
streams.HandleFunc("null", nullHandler)
}
func nullHandler(string) (core.Producer, error) {
return nil, nil
} }
+1 -10
View File
@@ -10,25 +10,16 @@ import (
"github.com/AlexxIT/go2rtc/internal/api" "github.com/AlexxIT/go2rtc/internal/api"
"github.com/AlexxIT/go2rtc/internal/streams" "github.com/AlexxIT/go2rtc/internal/streams"
"github.com/AlexxIT/go2rtc/pkg/core"
"github.com/AlexxIT/go2rtc/pkg/dvrip" "github.com/AlexxIT/go2rtc/pkg/dvrip"
) )
func Init() { func Init() {
streams.HandleFunc("dvrip", handle) streams.HandleFunc("dvrip", dvrip.Dial)
// DVRIP client autodiscovery // DVRIP client autodiscovery
api.HandleFunc("api/dvrip", apiDvrip) api.HandleFunc("api/dvrip", apiDvrip)
} }
func handle(url string) (core.Producer, error) {
client, err := dvrip.Dial(url)
if err != nil {
return nil, err
}
return client, nil
}
const Port = 34569 // UDP port number for dvrip discovery const Port = 34569 // UDP port number for dvrip discovery
func apiDvrip(w http.ResponseWriter, r *http.Request) { func apiDvrip(w http.ResponseWriter, r *http.Request) {
+3 -5
View File
@@ -10,15 +10,13 @@ import (
) )
func Init() { func Init() {
streams.HandleFunc("gopro", handleGoPro) streams.HandleFunc("gopro", func(source string) (core.Producer, error) {
return gopro.Dial(source)
})
api.HandleFunc("api/gopro", apiGoPro) api.HandleFunc("api/gopro", apiGoPro)
} }
func handleGoPro(rawURL string) (core.Producer, error) {
return gopro.Dial(rawURL)
}
func apiGoPro(w http.ResponseWriter, r *http.Request) { func apiGoPro(w http.ResponseWriter, r *http.Request) {
var items []*api.Source var items []*api.Source
+2 -7
View File
@@ -45,14 +45,9 @@ func Init() {
return "", nil return "", nil
}) })
streams.HandleFunc("hass", func(url string) (core.Producer, error) { streams.HandleFunc("hass", func(source string) (core.Producer, error) {
// support hass://supervisor?entity_id=camera.driveway_doorbell // support hass://supervisor?entity_id=camera.driveway_doorbell
client, err := hass.NewClient(url) return hass.NewClient(source)
if err != nil {
return nil, err
}
return client, nil
}) })
// load static entries from Hass config // load static entries from Hass config
+3 -12
View File
@@ -7,16 +7,7 @@ import (
) )
func Init() { func Init() {
streams.HandleFunc("isapi", handle) streams.HandleFunc("isapi", func(source string) (core.Producer, error) {
} return isapi.Dial(source)
})
func handle(url string) (core.Producer, error) {
conn, err := isapi.NewClient(url)
if err != nil {
return nil, err
}
if err = conn.Dial(); err != nil {
return nil, err
}
return conn, nil
} }
+2 -8
View File
@@ -4,16 +4,10 @@ import (
"github.com/AlexxIT/go2rtc/internal/streams" "github.com/AlexxIT/go2rtc/internal/streams"
"github.com/AlexxIT/go2rtc/pkg/core" "github.com/AlexxIT/go2rtc/pkg/core"
"github.com/AlexxIT/go2rtc/pkg/ivideon" "github.com/AlexxIT/go2rtc/pkg/ivideon"
"strings"
) )
func Init() { func Init() {
streams.HandleFunc("ivideon", func(url string) (core.Producer, error) { streams.HandleFunc("ivideon", func(source string) (core.Producer, error) {
id := strings.Replace(url[8:], "/", ":", 1) return ivideon.Dial(source)
prod := ivideon.NewClient(id)
if err := prod.Dial(); err != nil {
return nil, err
}
return prod, nil
}) })
} }
+3 -9
View File
@@ -10,19 +10,13 @@ import (
) )
func Init() { func Init() {
streams.HandleFunc("nest", streamNest) streams.HandleFunc("nest", func(source string) (core.Producer, error) {
return nest.Dial(source)
})
api.HandleFunc("api/nest", apiNest) api.HandleFunc("api/nest", apiNest)
} }
func streamNest(url string) (core.Producer, error) {
client, err := nest.NewClient(url)
if err != nil {
return nil, err
}
return client, nil
}
func apiNest(w http.ResponseWriter, r *http.Request) { func apiNest(w http.ResponseWriter, r *http.Request) {
query := r.URL.Query() query := r.URL.Query()
cliendID := query.Get("client_id") cliendID := query.Get("client_id")
+3 -12
View File
@@ -11,22 +11,13 @@ import (
) )
func Init() { func Init() {
streams.HandleFunc("roborock", handle) streams.HandleFunc("roborock", func(source string) (core.Producer, error) {
return roborock.Dial(source)
})
api.HandleFunc("api/roborock", apiHandle) api.HandleFunc("api/roborock", apiHandle)
} }
func handle(url string) (core.Producer, error) {
conn := roborock.NewClient(url)
if err := conn.Dial(); err != nil {
return nil, err
}
if err := conn.Connect(); err != nil {
return nil, err
}
return conn, nil
}
var Auth struct { var Auth struct {
UserData *roborock.UserInfo `json:"user_data"` UserData *roborock.UserInfo `json:"user_data"`
BaseURL string `json:"base_url"` BaseURL string `json:"base_url"`
+4 -4
View File
@@ -8,11 +8,11 @@ import (
) )
func Init() { func Init() {
streams.HandleFunc("kasa", func(url string) (core.Producer, error) { streams.HandleFunc("kasa", func(source string) (core.Producer, error) {
return kasa.Dial(url) return kasa.Dial(source)
}) })
streams.HandleFunc("tapo", func(url string) (core.Producer, error) { streams.HandleFunc("tapo", func(source string) (core.Producer, error) {
return tapo.Dial(url) return tapo.Dial(source)
}) })
} }
+6 -2
View File
@@ -43,8 +43,12 @@ type Client struct {
recv int recv int
} }
func NewClient(url string) *Client { func Dial(rawURL string) (*Client, error) {
return &Client{url: url} client := &Client{url: rawURL}
if err := client.Dial(); err != nil {
return nil, err
}
return client, nil
} }
const ( const (
+6 -2
View File
@@ -23,7 +23,7 @@ type Client struct {
send int send int
} }
func NewClient(rawURL string) (*Client, error) { func Dial(rawURL string) (*Client, error) {
// check if url is valid url // check if url is valid url
u, err := url.Parse(rawURL) u, err := url.Parse(rawURL)
if err != nil { if err != nil {
@@ -33,7 +33,11 @@ func NewClient(rawURL string) (*Client, error) {
u.Scheme = "http" u.Scheme = "http"
u.Path = "" u.Path = ""
return &Client{url: u.String()}, nil client := &Client{url: u.String()}
if err = client.Dial(); err != nil {
return nil, err
}
return client, err
} }
func (c *Client) Dial() (err error) { func (c *Client) Dial() (err error) {
+7 -2
View File
@@ -46,8 +46,13 @@ type Client struct {
recv int recv int
} }
func NewClient(id string) *Client { func Dial(source string) (*Client, error) {
return &Client{ID: id} id := strings.Replace(source[8:], "/", ":", 1)
client := &Client{ID: id}
if err := client.Dial(); err != nil {
return nil, err
}
return client, nil
} }
func (c *Client) Dial() (err error) { func (c *Client) Dial() (err error) {
+1 -1
View File
@@ -14,7 +14,7 @@ type Client struct {
api *API api *API
} }
func NewClient(rawURL string) (*Client, error) { func Dial(rawURL string) (*Client, error) {
u, err := url.Parse(rawURL) u, err := url.Parse(rawURL)
if err != nil { if err != nil {
return nil, err return nil, err
+9 -2
View File
@@ -34,8 +34,15 @@ type Client struct {
backchannel bool backchannel bool
} }
func NewClient(url string) *Client { func Dial(rawURL string) (*Client, error) {
return &Client{url: url} client := &Client{url: rawURL}
if err := client.Dial(); err != nil {
return nil, err
}
if err := client.Connect(); err != nil {
return nil, err
}
return client, nil
} }
func (c *Client) Dial() error { func (c *Client) Dial() error {