From 828c895615abcd727c439ece77c75e487dffd5fd Mon Sep 17 00:00:00 2001 From: ale <ale@incal.net> Date: Sat, 13 Apr 2019 22:51:21 +0100 Subject: [PATCH] Fix reading the "quality" parameter in the icecast JSON status It's a float encoded as a string. --- node/icecast/status.go | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/node/icecast/status.go b/node/icecast/status.go index 07493409..8a9a7717 100644 --- a/node/icecast/status.go +++ b/node/icecast/status.go @@ -9,6 +9,7 @@ import ( "log" "net/http" "net/url" + "strconv" "time" "git.autistici.org/ale/autoradio" @@ -22,20 +23,20 @@ var ( // TODO: deserialize properly the time format used by Icecast. type icecastMountStatus struct { - Artist string `json:"artist"` - BitRate int32 `json:"audio_bitrate"` - Channels int32 `json:"audio_channels"` - AudioInfo string `json:"audio_info"` - SampleRate int32 `json:"audio_samplerate"` - Genre string `json:"genre"` - Listeners int32 `json:"listeners"` - ListenURL string `json:"listenurl"` - Quality float32 `json:"quality"` - Description string `json:"server_description"` - Name string `json:"server_name"` - Type string `json:"server_type"` - Subtype string `json:"subtype"` - Title string `json:"title"` + Artist string `json:"artist"` + BitRate int32 `json:"audio_bitrate"` + Channels int32 `json:"audio_channels"` + AudioInfo string `json:"audio_info"` + SampleRate int32 `json:"audio_samplerate"` + Genre string `json:"genre"` + Listeners int32 `json:"listeners"` + ListenURL string `json:"listenurl"` + Quality string `json:"quality"` + Description string `json:"server_description"` + Name string `json:"server_name"` + Type string `json:"server_type"` + Subtype string `json:"subtype"` + Title string `json:"title"` //StreamStart time.Time `json:"stream_start_iso8601"` } @@ -99,13 +100,16 @@ func convertIcecastStatus(status []icecastMountStatus) []*pb.IcecastMount { Listeners: m.Listeners, BitRate: m.BitRate, SampleRate: m.SampleRate, - Quality: m.Quality, Channels: m.Channels, Name: m.Name, Description: m.Description, Title: m.Title, Artist: m.Artist, } + // For whatever reason, quality is a string in Icecast's JSON. + if q, err := strconv.ParseFloat(m.Quality, 32); err == nil { + outm.Quality = float32(q) + } out = append(out, &outm) } return out -- GitLab