successfully set all fields
This commit is contained in:
parent
0d189c5521
commit
f89089b816
22
cmus.go
22
cmus.go
|
@ -1,9 +1,9 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
|
||||||
"os/exec"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os/exec"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func CmusRemoteOutput() ([]string, error) {
|
func CmusRemoteOutput() ([]string, error) {
|
||||||
|
@ -17,20 +17,22 @@ func CmusRemoteOutput() ([]string, error) {
|
||||||
return resp, err
|
return resp, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func getAttribute(input []string, prefix string) (string, error) {
|
func getAttribute(input []string, prefix ...string) (string, error) {
|
||||||
var attr string
|
var attr string
|
||||||
|
// probably more efficent to simply parse first selected list of prefixes, but i'd prefer it be first prefix in the preferred order
|
||||||
|
for p := range prefix {
|
||||||
for i := range input {
|
for i := range input {
|
||||||
has := strings.HasPrefix(input[i], prefix)
|
has := strings.HasPrefix(input[i], prefix[p])
|
||||||
if has {
|
if has {
|
||||||
attr = input[i]
|
attr = input[i]
|
||||||
}
|
attr, b := strings.CutPrefix(attr, prefix[p])
|
||||||
}
|
|
||||||
|
|
||||||
attr, b := strings.CutPrefix(attr, prefix)
|
|
||||||
if !b {
|
if !b {
|
||||||
return "", fmt.Errorf("did not find prefix \"%v\"", prefix)
|
return "", fmt.Errorf("prefix \"%v\" in \"%v\" does not exist", prefix, attr)
|
||||||
}
|
}
|
||||||
|
|
||||||
return attr, nil
|
return attr, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "", fmt.Errorf("prefixes \"%v\" were not found", prefix)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
BIN
electricboogaloo
BIN
electricboogaloo
Binary file not shown.
|
@ -0,0 +1,59 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"image"
|
||||||
|
_ "image/gif"
|
||||||
|
"image/jpeg"
|
||||||
|
_ "image/png"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"golang.org/x/image/draw"
|
||||||
|
)
|
||||||
|
|
||||||
|
func retrieveArt(path string) ([]byte, error) {
|
||||||
|
|
||||||
|
//streaming PC is primarily flacs, so flacs first, then mp3s, then check for covers in folder, finally just use a default image if none of the above exist.
|
||||||
|
switch {
|
||||||
|
case hasFlacTrackArt(path):
|
||||||
|
return getFlacArt(path)
|
||||||
|
case hasMp3TrackArt(path):
|
||||||
|
return getMP3Art(path)
|
||||||
|
case hasCoverArtFile(path):
|
||||||
|
return getCoverArtFile(path)
|
||||||
|
default:
|
||||||
|
return getDefaultArt()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func writeArtFile(orig []byte) (string, error) {
|
||||||
|
imageSize := 700
|
||||||
|
pathOut := "/run/user/1000/albumcover.jpg"
|
||||||
|
img := make([]byte, 0)
|
||||||
|
imgBuffIn, imgBuffOut := bytes.NewBuffer(orig), bytes.NewBuffer(img)
|
||||||
|
imgOrig, _, err := image.Decode(imgBuffIn)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
f, err := os.Create(pathOut)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
imgOut := image.NewRGBA(image.Rect(0, 0, imageSize, imageSize))
|
||||||
|
|
||||||
|
draw.ApproxBiLinear.Scale(imgOut, imgOut.Rect, imgOrig, imgOrig.Bounds(), draw.Over, nil)
|
||||||
|
|
||||||
|
err = jpeg.Encode(imgBuffOut, imgOut, nil)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = f.Write(imgBuffOut.Bytes())
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return pathOut, nil
|
||||||
|
}
|
26
main.go
26
main.go
|
@ -27,7 +27,7 @@ func main() {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
artist, err := getAttribute(out, "tag artist ")
|
artist, err := getAttribute(out, "tag artist ", "tag albumartist ", "tag composer ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@ -39,30 +39,34 @@ func main() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
path, err := getAttribute(out, "file ")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
art, err := retrieveArt(path)
|
||||||
|
artFile, err := writeArtFile(art)
|
||||||
for i := range scil.SceneItems {
|
for i := range scil.SceneItems {
|
||||||
if scil.SceneItems[i].SourceName == "Artist" {
|
if scil.SceneItems[i].SourceName == "Artist" {
|
||||||
updateTextItem(client, scil.SceneItems[i], artist)
|
updateItem(client, scil.SceneItems[i], artist, "text")
|
||||||
}
|
}
|
||||||
if scil.SceneItems[i].SourceName == "Song" {
|
if scil.SceneItems[i].SourceName == "Song" {
|
||||||
updateTextItem(client, scil.SceneItems[i], title)
|
updateItem(client, scil.SceneItems[i], title, "text")
|
||||||
}
|
}
|
||||||
if scil.SceneItems[i].SourceName == "Album" {
|
if scil.SceneItems[i].SourceName == "Album" {
|
||||||
updateTextItem(client, scil.SceneItems[i], album)
|
updateItem(client, scil.SceneItems[i], album, "text")
|
||||||
|
}
|
||||||
|
if scil.SceneItems[i].SourceName == "Art" {
|
||||||
|
updateItem(client, scil.SceneItems[i], artFile, "file")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func updateItem(client *goobs.Client, sI *typedefs.SceneItem, value string, key string) {
|
||||||
|
|
||||||
func updateTextItem(client *goobs.Client, sI *typedefs.SceneItem, text string) {
|
|
||||||
params := inputs.NewSetInputSettingsParams().WithInputName(sI.SourceName).WithInputUuid(sI.SourceUuid)
|
params := inputs.NewSetInputSettingsParams().WithInputName(sI.SourceName).WithInputUuid(sI.SourceUuid)
|
||||||
params.InputSettings = make(map[string]any)
|
params.InputSettings = make(map[string]any)
|
||||||
params.InputSettings["text"] = text
|
params.InputSettings[key] = value
|
||||||
_, err := client.Inputs.SetInputSettings(params)
|
_, err := client.Inputs.SetInputSettings(params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
6
parse.go
6
parse.go
|
@ -65,8 +65,8 @@ func hasMp3TrackArt(s string) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func hasCoverJpg(s string) bool {
|
func hasCoverArtFile(s string) bool {
|
||||||
exts := []string{".jpg", ".jpeg", ".png", ".gif"} // 'hasCoverJpg' is a misnomer, check all sane image types
|
exts := []string{".jpg", ".jpeg", ".png", ".gif"} // check all sane image types
|
||||||
dir := filepath.Dir(s)
|
dir := filepath.Dir(s)
|
||||||
file, err := os.Open(dir)
|
file, err := os.Open(dir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -117,7 +117,7 @@ func getMP3Art(s string) ([]byte, error) {
|
||||||
return nil, fmt.Errorf("no image found")
|
return nil, fmt.Errorf("no image found")
|
||||||
}
|
}
|
||||||
|
|
||||||
func getCoverJpg(s string) ([]byte, error) {
|
func getCoverArtFile(s string) ([]byte, error) {
|
||||||
exts := []string{".jpg", ".jpeg", ".png", ".gif"}
|
exts := []string{".jpg", ".jpeg", ".png", ".gif"}
|
||||||
dir := filepath.Dir(s)
|
dir := filepath.Dir(s)
|
||||||
file, err := os.Open(dir)
|
file, err := os.Open(dir)
|
||||||
|
|
Loading…
Reference in New Issue