From 12b1002d5103bf53f98c9df3c785c54bc64b04d6 Mon Sep 17 00:00:00 2001
From: Deluan <github@deluan.com>
Date: Mon, 21 Mar 2016 17:37:12 -0400
Subject: [PATCH] More Album List types

---
 api/{album_list.go => album_lists.go}         | 15 +++++++++------
 ...album_list_test.go => album_lists_test.go} |  0
 engine/list_generator.go                      | 19 ++++++++++++++++---
 3 files changed, 25 insertions(+), 9 deletions(-)
 rename api/{album_list.go => album_lists.go} (70%)
 rename api/{album_list_test.go => album_lists_test.go} (100%)

diff --git a/api/album_list.go b/api/album_lists.go
similarity index 70%
rename from api/album_list.go
rename to api/album_lists.go
index 85354c4e9..e6407a379 100644
--- a/api/album_list.go
+++ b/api/album_lists.go
@@ -19,11 +19,14 @@ func (c *AlbumListController) Prepare() {
 	utils.ResolveDependencies(&c.listGen)
 
 	c.types = map[string]strategy{
-		"random":   func(o int, s int) (engine.Entries, error) { return c.listGen.GetRandom(o, s) },
-		"newest":   func(o int, s int) (engine.Entries, error) { return c.listGen.GetNewest(o, s) },
-		"recent":   func(o int, s int) (engine.Entries, error) { return c.listGen.GetRecent(o, s) },
-		"frequent": func(o int, s int) (engine.Entries, error) { return c.listGen.GetFrequent(o, s) },
-		"highest":  func(o int, s int) (engine.Entries, error) { return c.listGen.GetHighest(o, s) },
+		"random":               func(o int, s int) (engine.Entries, error) { return c.listGen.GetRandom(o, s) },
+		"newest":               func(o int, s int) (engine.Entries, error) { return c.listGen.GetNewest(o, s) },
+		"recent":               func(o int, s int) (engine.Entries, error) { return c.listGen.GetRecent(o, s) },
+		"frequent":             func(o int, s int) (engine.Entries, error) { return c.listGen.GetFrequent(o, s) },
+		"highest":              func(o int, s int) (engine.Entries, error) { return c.listGen.GetHighest(o, s) },
+		"alphabeticalByName":   func(o int, s int) (engine.Entries, error) { return c.listGen.GetByName(o, s) },
+		"alphabeticalByArtist": func(o int, s int) (engine.Entries, error) { return c.listGen.GetByArtist(o, s) },
+		"starred":              func(o int, s int) (engine.Entries, error) { return c.listGen.GetStarred(o, s) },
 	}
 }
 
@@ -51,7 +54,7 @@ func (c *AlbumListController) GetAlbumList() {
 }
 
 func (c *AlbumListController) GetStarred() {
-	albums, err := c.listGen.GetStarred()
+	albums, err := c.listGen.GetStarred(0, -1)
 	if err != nil {
 		beego.Error("Error retrieving starred albums:", err)
 		c.SendError(responses.ERROR_GENERIC, "Internal Error")
diff --git a/api/album_list_test.go b/api/album_lists_test.go
similarity index 100%
rename from api/album_list_test.go
rename to api/album_lists_test.go
diff --git a/engine/list_generator.go b/engine/list_generator.go
index 86046a1ce..952a0cb5f 100644
--- a/engine/list_generator.go
+++ b/engine/list_generator.go
@@ -14,7 +14,9 @@ type ListGenerator interface {
 	GetFrequent(offset int, size int) (Entries, error)
 	GetHighest(offset int, size int) (Entries, error)
 	GetRandom(offset int, size int) (Entries, error)
-	GetStarred() (Entries, error)
+	GetByName(offset int, size int) (Entries, error)
+	GetByArtist(offset int, size int) (Entries, error)
+	GetStarred(offset int, size int) (Entries, error)
 	GetNowPlaying() (Entries, error)
 }
 
@@ -56,6 +58,16 @@ func (g listGenerator) GetHighest(offset int, size int) (Entries, error) {
 	return g.query(qo, offset, size)
 }
 
+func (g listGenerator) GetByName(offset int, size int) (Entries, error) {
+	qo := domain.QueryOptions{SortBy: "Name", Alpha: true}
+	return g.query(qo, offset, size)
+}
+
+func (g listGenerator) GetByArtist(offset int, size int) (Entries, error) {
+	qo := domain.QueryOptions{SortBy: "Artist", Alpha: true}
+	return g.query(qo, offset, size)
+}
+
 func (g listGenerator) GetRandom(offset int, size int) (Entries, error) {
 	ids, err := g.albumRepo.GetAllIds()
 	if err != nil {
@@ -76,8 +88,9 @@ func (g listGenerator) GetRandom(offset int, size int) (Entries, error) {
 	return r, nil
 }
 
-func (g listGenerator) GetStarred() (Entries, error) {
-	albums, err := g.albumRepo.GetStarred(domain.QueryOptions{})
+func (g listGenerator) GetStarred(offset int, size int) (Entries, error) {
+	qo := domain.QueryOptions{Offset: offset, Size: size}
+	albums, err := g.albumRepo.GetStarred(qo)
 	if err != nil {
 		return nil, err
 	}