diff --git a/controllers/get_music_folders.go b/controllers/get_music_folders.go index 3863b0d90..e47ebfd66 100644 --- a/controllers/get_music_folders.go +++ b/controllers/get_music_folders.go @@ -3,6 +3,7 @@ package controllers import ( "github.com/astaxie/beego" "github.com/deluan/gosonic/controllers/responses" + "github.com/deluan/gosonic/repositories" ) type GetMusicFoldersController struct{ beego.Controller } @@ -10,7 +11,17 @@ type GetMusicFoldersController struct{ beego.Controller } // @router /rest/getMusicFolders.view [get] func (this *GetMusicFoldersController) Get() { validate(this) - response := responses.NewError(responses.ERROR_GENERIC) + + repository := new(repositories.MediaFolderRepository) + mediaFolderList := repository.GetAll() + folders := make([]responses.MusicFolder, len(mediaFolderList)) + i := 0 + for _, f := range mediaFolderList { + folders[i].Id = f.Id + folders[i].Name = f.Name + } + musicFolders := &responses.MusicFolders{Folders: folders} + response := responses.NewXML(musicFolders) this.Ctx.Output.Body(response) } diff --git a/controllers/responses/media_folders.go b/controllers/responses/media_folders.go new file mode 100644 index 000000000..868dc8f8b --- /dev/null +++ b/controllers/responses/media_folders.go @@ -0,0 +1,14 @@ +package responses + +import "encoding/xml" + +type MusicFolder struct { + XMLName xml.Name `xml:"musicFolder"` + Id string `xml:"id,attr"` + Name string `xml:"name,attr"` +} + +type MusicFolders struct { + XMLName xml.Name `xml:"musicFolders"` + Folders []MusicFolder `xml:"musicFolders"` +} \ No newline at end of file diff --git a/models/media_folder.go b/models/media_folder.go new file mode 100644 index 000000000..a1f723341 --- /dev/null +++ b/models/media_folder.go @@ -0,0 +1,7 @@ +package models + +type MediaFolder struct { + Id string + Name string + Path string +} \ No newline at end of file diff --git a/repositories/media_folders_repository.go b/repositories/media_folders_repository.go index c7a835b14..cd0172678 100644 --- a/repositories/media_folders_repository.go +++ b/repositories/media_folders_repository.go @@ -1,3 +1,15 @@ package repositories +import ( + "github.com/deluan/gosonic/models" + "github.com/astaxie/beego" +) +type MediaFolderRepository struct {} + +func (*MediaFolderRepository) GetAll() []*models.MediaFolder { + mediaFolder := models.MediaFolder{Id: "1", Name: "iTunes Library", Path: beego.AppConfig.String("musicFolder")} + result := make([]*models.MediaFolder, 1) + result[0] = &mediaFolder + return result +} \ No newline at end of file diff --git a/tests/controllers/get_music_folders_test.go b/tests/controllers/get_music_folders_test.go index 1aee7bd50..edc3a4f42 100644 --- a/tests/controllers/get_music_folders_test.go +++ b/tests/controllers/get_music_folders_test.go @@ -6,6 +6,7 @@ import ( . "github.com/deluan/gosonic/tests" . "github.com/smartystreets/goconvey/convey" + "encoding/xml" ) func TestGetMusicFolders(t *testing.T) { @@ -15,6 +16,12 @@ func TestGetMusicFolders(t *testing.T) { Convey("Status code should be 200", func() { So(w.Code, ShouldEqual, 200) }) + Convey("The response should include the default folder", func() { + v := new(string) + err := xml.Unmarshal(w.Body.Bytes(), &v) + So(err, ShouldBeNil) + So(w.Body.String(), ShouldContainSubstring, `musicFolder id="1" name="iTunes Library"`) + }) }) }