mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2025-03-05 20:49:04 -08:00
+ Temporary: Artist & Track work (if spotify_wsl is removed)
This commit is contained in:
parent
9e43d85312
commit
6942548282
|
@ -3,45 +3,38 @@
|
|||
package segments
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strings"
|
||||
|
||||
"github.com/jandedobbeleer/oh-my-posh/src/shell"
|
||||
)
|
||||
|
||||
type Metadata struct {
|
||||
TrackID string `json:"mpris:trackid"`
|
||||
Length uint64 `json:"mpris:length"`
|
||||
ArtURL string `json:"mpris:artUrl"`
|
||||
Album string `json:"xesam:album"`
|
||||
AlbumArtist []string `json:"xesam:albumArtist"`
|
||||
Artist []string `json:"xesam:artist"`
|
||||
AutoRating float64 `json:"xesam:autoRating"`
|
||||
DiscNumber int32 `json:"xesam:discNumber"`
|
||||
Title string `json:"xesam:title"`
|
||||
TrackNumber int32 `json:"xesam:trackNumber"`
|
||||
URL string `json:"xesam:url"`
|
||||
}
|
||||
func (s *Spotify) Enabled() bool {
|
||||
var err error
|
||||
running := s.runLinuxScriptCommand("")
|
||||
|
||||
func (s *Spotify) Enable() bool {
|
||||
|
||||
tlist, _ := s.env.RunCommand("dbus-send", "--print-reply", "--dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:org.mpris.MediaPlayer2.Player string:Metadata")
|
||||
|
||||
// Split the output into lines
|
||||
lines := strings.Split(tlist, "\n")
|
||||
|
||||
// Extract the JSON-formatted data
|
||||
var jsonData string
|
||||
for _, line := range lines {
|
||||
if strings.Contains(line, "variant") {
|
||||
jsonData = strings.TrimSpace(line[len(" variant array ["):])
|
||||
break
|
||||
}
|
||||
if strings.HasPrefix(running, "ERROR") {
|
||||
return false
|
||||
}
|
||||
if strings.Contains(running, "Error.ServiceUnknown") || strings.HasSuffix(running, "-") {
|
||||
s.Status = stopped
|
||||
return false
|
||||
}
|
||||
s.Status = playing
|
||||
if err != nil {
|
||||
s.Status = stopped
|
||||
return false
|
||||
}
|
||||
if s.Status == stopped {
|
||||
return false
|
||||
}
|
||||
|
||||
var metadata []Metadata
|
||||
// Parsing JSON data from the output string
|
||||
if err := json.Unmarshal([]byte(jsonData), &metadata); err != nil {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
s.Artist = s.runLinuxScriptCommand(" | awk -F '\"' 'BEGIN {RS=\"entry\"}; /'xesam:artist'/ {a=$4} END {print a}'")
|
||||
s.Track = s.runLinuxScriptCommand(" | awk -F '\"' 'BEGIN {RS=\"entry\"}; /'xesam:title'/ {t=$4} END {print t}'")
|
||||
s.resolveIcon()
|
||||
return true
|
||||
}
|
||||
|
||||
func (s *Spotify) runLinuxScriptCommand(command string) string {
|
||||
val := s.env.RunShellCommand(shell.BASH, "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:org.mpris.MediaPlayer2.Player string:Metadata"+command)
|
||||
return val
|
||||
}
|
||||
|
|
|
@ -1,61 +1,47 @@
|
|||
//go:build !darwin && !windows
|
||||
//go:build linux && !darwin && !windows
|
||||
|
||||
package segments
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
"github.com/jandedobbeleer/oh-my-posh/src/mock"
|
||||
"github.com/jandedobbeleer/oh-my-posh/src/properties"
|
||||
"github.com/jandedobbeleer/oh-my-posh/src/shell"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestSpotifyLinux(t *testing.T) {
|
||||
cases := []struct {
|
||||
Case string
|
||||
ExpectedString string
|
||||
ExpectedEnabled bool
|
||||
Title string
|
||||
Artist string
|
||||
Track string
|
||||
Error error
|
||||
Running bool
|
||||
Expected string
|
||||
Status string
|
||||
Artist string
|
||||
Track string
|
||||
Error error
|
||||
}{
|
||||
{
|
||||
Case: "Playing",
|
||||
ExpectedString: "Sarah, the Illstrumentalist - Snow in Stockholm",
|
||||
ExpectedEnabled: true,
|
||||
Title: "Snow in Stockholm - Sarah, the Illstrumentalist",
|
||||
Artist: "Sarah, the Illstrumentalist",
|
||||
Track: "Snow in Stockholm",
|
||||
},
|
||||
{
|
||||
Case: "Stopped",
|
||||
ExpectedEnabled: true,
|
||||
ExpectedString: "-",
|
||||
},
|
||||
{Running: false, Expected: "\uE602 -", Error: errors.New("oops")},
|
||||
{Running: true, Expected: "\uE602 Candlemass - Spellbreaker", Status: "playing", Artist: "Candlemass", Track: "Spellbreaker"},
|
||||
{Running: true, Expected: "\uE602 Candlemass - Spellbreaker", Status: "paused", Artist: "Candlemass", Track: "Spellbreaker"},
|
||||
}
|
||||
for _, tc := range cases {
|
||||
env := new(mock.MockedEnvironment)
|
||||
|
||||
env.On("RunCommand", "dbus-send", []string{
|
||||
"--print-reply",
|
||||
"--dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:org.mpris.MediaPlayer2.Player string:Metadata",
|
||||
}).Return(tc.Track+" "+tc.Artist, nil)
|
||||
env.On("IsWsl").Return(false)
|
||||
env.On("RunShellCommand", shell.BASH, "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:org.mpris.MediaPlayer2.Player string:Metadata").Return(tc.Status, nil)
|
||||
env.On("RunShellCommand", shell.BASH, "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:org.mpris.MediaPlayer2.Player string:Metadata | awk -F '\"' 'BEGIN {RS=\"entry\"}; /'xesam:artist'/ {a=$4} END {print a}'").Return(tc.Artist, nil)
|
||||
env.On("RunShellCommand", shell.BASH, "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:org.mpris.MediaPlayer2.Player string:Metadata | awk -F '\"' 'BEGIN {RS=\"entry\"}; /'xesam:title'/ {t=$4} END {print t}'").Return(tc.Track, nil)
|
||||
|
||||
s := &Spotify{
|
||||
env: env,
|
||||
props: properties.Map{},
|
||||
MusicPlayer: MusicPlayer{
|
||||
Artist: tc.Artist,
|
||||
Track: tc.Track,
|
||||
},
|
||||
}
|
||||
enable := s.Enable()
|
||||
enable := s.Enabled()
|
||||
assert.True(t, enable)
|
||||
if tc.ExpectedEnabled {
|
||||
assert.True(t, s.Enable())
|
||||
assert.Equal(t, tc.ExpectedString, renderTemplate(env, s.Template(), s))
|
||||
if tc.Running {
|
||||
assert.True(t, s.Enabled())
|
||||
assert.Equal(t, tc.Expected, renderTemplate(env, s.Template(), s))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue