diff --git a/api/responses/responses.go b/api/responses/responses.go
index 77ec16b31..b21136bd9 100644
--- a/api/responses/responses.go
+++ b/api/responses/responses.go
@@ -7,9 +7,10 @@ type Subsonic struct {
Status string `xml:"status,attr" json:"status"`
Version string `xml:"version,attr" json:"version"`
Error *Error `xml:",omitempty" json:"error,omitempty"`
- License *License `xml:",omitempty" json:"license,omitempty"`
- MusicFolders *MusicFolders `xml:",omitempty" json:"musicFolders,omitempty"`
- Indexes *Indexes `xml:",omitempty" json:"indexes,omitempty"`
+ License *License `xml:"license,omitempty" json:"license,omitempty"`
+ MusicFolders *MusicFolders `xml:"musicFolders,omitempty" json:"musicFolders,omitempty"`
+ Indexes *Indexes `xml:"indexes,omitempty" json:"indexes,omitempty"`
+ Directory *Directory `xml:"directory,omitempty" json:"directory,omitempty"`
}
type JsonWrapper struct {
@@ -17,42 +18,60 @@ type JsonWrapper struct {
}
type Error struct {
- XMLName xml.Name `xml:"error" json:"-"`
Code int `xml:"code,attr"`
Message string `xml:"message,attr"`
}
type License struct {
- XMLName xml.Name `xml:"license" json:"-"`
Valid bool `xml:"valid,attr" json:"valid"`
}
type MusicFolder struct {
- XMLName xml.Name `xml:"musicFolder" json:"-"`
Id string `xml:"id,attr" json:"id"`
Name string `xml:"name,attr" json:"name"`
}
type MusicFolders struct {
- XMLName xml.Name `xml:"musicFolders" json:"-"`
- Folders []MusicFolder `xml:"musicFolders" json:"musicFolder,omitempty"`
+ Folders []MusicFolder `xml:"musicFolder" json:"musicFolder,omitempty"`
}
type Artist struct {
- XMLName xml.Name `xml:"artist" json:"-"`
Id string `xml:"id,attr" json:"id"`
Name string `xml:"name,attr" json:"name"`
}
type Index struct {
- XMLName xml.Name `xml:"index" json:"-"`
Name string `xml:"name,attr" json:"name"`
- Artists []Artist `xml:"index" json:"artist"`
+ Artists []Artist `xml:"artist" json:"artist"`
}
type Indexes struct {
- XMLName xml.Name `xml:"indexes" json:"-"`
- Index []Index `xml:"indexes" json:"index,omitempty"`
+ Index []Index `xml:"index" json:"index,omitempty"`
LastModified string `xml:"lastModified,attr" json:"lastModified"`
IgnoredArticles string `xml:"ignoredArticles,attr" json:"ignoredArticles"`
}
+
+type Child struct {
+ Id string `xml:"id,attr" json:"id"`
+ IsDir bool `xml:"isDir,attr" json:"isDir"`
+ Title string `xml:"title,attr" json:"title"`
+ Album string `xml:"album,attr" json:"album"`
+ Artist string `xml:"artist,attr" json:"artist"`
+ Track int `xml:"track,attr" json:"track"`
+ Year int `xml:"year,attr" json:"year"`
+ Genre string `xml:"genre,attr" json:"genre"`
+ CoverArt string `xml:"coverArt,attr" json:"coverArt"`
+ Size string `xml:"size,attr" json:"size"`
+ ContentType string `xml:"contentType,attr" json:"contentType"`
+ Suffix string `xml:"suffix,attr" json:"suffix"`
+ TranscodedContentType string `xml:"transcodedContentType,attr" json:"transcodedContentType"`
+ TranscodedSuffix string `xml:"transcodedSuffix,attr" json:"transcodedSuffix"`
+ Duration int `xml:"duration,attr" json:"duration"`
+ BitRate int `xml:"bitRate,attr" json:"bitRate"`
+}
+
+type Directory struct {
+ Child []Child `xml:"child" json:"child,omitempty"`
+ Id string `xml:"id,attr" json:"id"`
+ Name string `xml:"name,attr" json:"name"`
+}
\ No newline at end of file
diff --git a/api/responses/responses_test.go b/api/responses/responses_test.go
index ce45ed123..8d3a81df7 100644
--- a/api/responses/responses_test.go
+++ b/api/responses/responses_test.go
@@ -10,7 +10,7 @@ func TestSubsonicResponses(t *testing.T) {
response := &Subsonic{Status: "ok", Version: "1.0.0"}
- Convey("Subject: Subsonic Responses", t, func(){
+ Convey("Subject: Subsonic Responses", t, func() {
Convey("EmptyResponse", func() {
Convey("XML", func() {
So(response, ShouldMatchXML, ``)
@@ -82,6 +82,34 @@ func TestSubsonicResponses(t *testing.T) {
})
})
+ Convey("Directory", func() {
+ response.Directory = &Directory{Id: "1", Name: "N"}
+ Convey("With data", func() {
+ child := make([]Child, 1)
+ child[0] = Child{
+ Id:"1", IsDir: true, Title: "title", Album: "album", Artist: "artist", Track: 1,
+ Year: 1985, Genre: "Rock", CoverArt: "1", Size: "8421341", ContentType: "audio/flac",
+ Suffix: "flac", TranscodedContentType: "audio/mpeg", TranscodedSuffix: "mp3",
+ Duration: 146, BitRate: 320,
+ }
+ response.Directory.Child = child
+ Convey("XML", func() {
+ So(response, ShouldMatchXML, ``)
+ })
+ Convey("JSON", func() {
+ So(response, ShouldMatchJSON, `{"directory":{"child":[{"album":"album","artist":"artist","bitRate":320,"contentType":"audio/flac","coverArt":"1","duration":146,"genre":"Rock","id":"1","isDir":true,"size":"8421341","suffix":"flac","title":"title","track":1,"transcodedContentType":"audio/mpeg","transcodedSuffix":"mp3","year":1985}],"id":"1","name":"N"},"status":"ok","version":"1.0.0"}`)
+ })
+ })
+ Convey("Without data", func() {
+ Convey("XML", func() {
+ So(response, ShouldMatchXML, ``)
+ })
+ Convey("JSON", func() {
+ So(response, ShouldMatchJSON, `{"directory":{"id":"1","name":"N"},"status":"ok","version":"1.0.0"}`)
+ })
+ })
+ })
+
Reset(func() {
response = &Subsonic{Status: "ok", Version: "1.0.0"}
})