From 82576223dca6c978ce80614c40214e11b7c5ede3 Mon Sep 17 00:00:00 2001
From: Deluan <github@deluan.com>
Date: Sun, 27 Mar 2016 23:04:05 -0400
Subject: [PATCH] getAlbumList2.view done

---
 api/album_lists.go         | 23 +++++++++++++++++++++++
 api/base_api_controller.go |  3 +++
 api/responses/responses.go |  1 +
 conf/router.go             |  1 +
 4 files changed, 28 insertions(+)

diff --git a/api/album_lists.go b/api/album_lists.go
index ac35ee16a..1fdcaf2c9 100644
--- a/api/album_lists.go
+++ b/api/album_lists.go
@@ -53,6 +53,29 @@ func (c *AlbumListController) GetAlbumList() {
 	c.SendResponse(response)
 }
 
+func (c *AlbumListController) GetAlbumList2() {
+	typ := c.RequiredParamString("type", "Required string parameter 'type' is not present")
+	method, found := c.types[typ]
+
+	if !found {
+		beego.Error("albumList2 type", typ, "not implemented!")
+		c.SendError(responses.ErrorGeneric, "Not implemented!")
+	}
+
+	offset := c.ParamInt("offset", 0)
+	size := utils.MinInt(c.ParamInt("size", 0), 500)
+
+	albums, err := method(offset, size)
+	if err != nil {
+		beego.Error("Error retrieving albums:", err)
+		c.SendError(responses.ErrorGeneric, "Internal Error")
+	}
+
+	response := c.NewEmpty()
+	response.AlbumList2 = &responses.AlbumList{Album: c.ToAlbums(albums)}
+	c.SendResponse(response)
+}
+
 func (c *AlbumListController) GetStarred() {
 	albums, mediaFiles, err := c.listGen.GetAllStarred()
 	if err != nil {
diff --git a/api/base_api_controller.go b/api/base_api_controller.go
index da3a8d21e..dbb36f2e6 100644
--- a/api/base_api_controller.go
+++ b/api/base_api_controller.go
@@ -154,6 +154,9 @@ func (c *BaseAPIController) ToAlbum(entry engine.Entry) responses.Child {
 	album := c.ToChild(entry)
 	album.Name = album.Title
 	album.Title = ""
+	album.Parent = ""
+	album.Album = ""
+	album.AlbumId = ""
 	return album
 }
 
diff --git a/api/responses/responses.go b/api/responses/responses.go
index d16c58e17..b31ff8c9c 100644
--- a/api/responses/responses.go
+++ b/api/responses/responses.go
@@ -16,6 +16,7 @@ type Subsonic struct {
 	Directory     *Directory         `xml:"directory,omitempty"                           json:"directory,omitempty"`
 	User          *User              `xml:"user,omitempty"                                json:"user,omitempty"`
 	AlbumList     *AlbumList         `xml:"albumList,omitempty"                           json:"albumList,omitempty"`
+	AlbumList2    *AlbumList         `xml:"albumList2,omitempty"                          json:"albumList2,omitempty"`
 	Playlists     *Playlists         `xml:"playlists,omitempty"                           json:"playlists,omitempty"`
 	Playlist      *PlaylistWithSongs `xml:"playlist,omitempty"                            json:"playlist,omitempty"`
 	SearchResult2 *SearchResult2     `xml:"searchResult2,omitempty"                       json:"searchResult2,omitempty"`
diff --git a/conf/router.go b/conf/router.go
index 676529e61..1126034f0 100644
--- a/conf/router.go
+++ b/conf/router.go
@@ -40,6 +40,7 @@ func mapEndpoints() {
 		beego.NSRouter("/setRating.view", &api.MediaAnnotationController{}, "*:SetRating"),
 
 		beego.NSRouter("/getAlbumList.view", &api.AlbumListController{}, "*:GetAlbumList"),
+		beego.NSRouter("/getAlbumList2.view", &api.AlbumListController{}, "*:GetAlbumList2"),
 		beego.NSRouter("/getStarred.view", &api.AlbumListController{}, "*:GetStarred"),
 		beego.NSRouter("/getNowPlaying.view", &api.AlbumListController{}, "*:GetNowPlaying"),