67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
package vlc
|
|
|
|
// https://github.com/CedArctic/go-vlc-ctrl/tree/master
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/rs/zerolog"
|
|
"io"
|
|
"net/http"
|
|
"strconv"
|
|
)
|
|
|
|
// VLC struct represents an http interface enabled VLC instance. Build using NewVLC()
|
|
type VLC struct {
|
|
Host string
|
|
Port int
|
|
Password string
|
|
Path string
|
|
Logger *zerolog.Logger
|
|
}
|
|
|
|
func (vlc *VLC) url() string {
|
|
return fmt.Sprintf("http://%s:%s", vlc.Host, strconv.Itoa(vlc.Port))
|
|
}
|
|
|
|
// RequestMaker make requests to VLC using a urlSegment provided by other functions
|
|
func (vlc *VLC) RequestMaker(urlSegment string) (response string, err error) {
|
|
|
|
// Form a GET Request
|
|
client := &http.Client{}
|
|
request, reqErr := http.NewRequest("GET", vlc.url()+urlSegment, nil)
|
|
if reqErr != nil {
|
|
err = fmt.Errorf("http request error: %s\n", reqErr)
|
|
return
|
|
}
|
|
|
|
// Make a GET request
|
|
request.SetBasicAuth("", vlc.Password)
|
|
reqResponse, resErr := client.Do(request)
|
|
if resErr != nil {
|
|
err = fmt.Errorf("http response error: %s\n", resErr)
|
|
return
|
|
}
|
|
defer func() {
|
|
reqResponse.Body.Close()
|
|
}()
|
|
|
|
// Check HTTP status code and errors
|
|
statusCode := reqResponse.StatusCode
|
|
if !((statusCode >= 200) && (statusCode <= 299)) {
|
|
err = fmt.Errorf("http error code: %d\n", statusCode)
|
|
return "", err
|
|
}
|
|
|
|
// Get byte response and http status code
|
|
byteArr, readErr := io.ReadAll(reqResponse.Body)
|
|
if readErr != nil {
|
|
err = fmt.Errorf("error reading response: %s\n", readErr)
|
|
return
|
|
}
|
|
|
|
// Write response
|
|
response = string(byteArr)
|
|
|
|
return
|
|
}
|