quintodrome/api/get_indexes.go

68 lines
1.7 KiB
Go
Raw Normal View History

package api
import (
"github.com/astaxie/beego"
"github.com/deluan/gosonic/api/responses"
"github.com/deluan/gosonic/consts"
2016-03-02 05:07:24 -09:00
"github.com/deluan/gosonic/domain"
2016-03-02 09:18:39 -09:00
"github.com/deluan/gosonic/utils"
"github.com/karlkfi/inject"
"strconv"
)
type GetIndexesController struct {
BaseAPIController
2016-03-02 05:07:24 -09:00
repo domain.ArtistIndexRepository
properties domain.PropertyRepository
}
func (c *GetIndexesController) Prepare() {
inject.ExtractAssignable(utils.Graph, &c.repo)
inject.ExtractAssignable(utils.Graph, &c.properties)
}
2016-03-01 14:01:12 -09:00
// TODO: Shortcuts amd validate musicFolder parameter
func (c *GetIndexesController) Get() {
2016-03-01 12:05:49 -09:00
var err error
ifModifiedSince := c.Input().Get("ifModifiedSince")
if ifModifiedSince == "" {
ifModifiedSince = "0"
}
2016-03-01 12:05:49 -09:00
res := responses.Indexes{}
2016-03-01 12:05:49 -09:00
res.IgnoredArticles = beego.AppConfig.String("ignoredArticles")
2016-03-01 12:05:49 -09:00
res.LastModified, err = c.properties.DefaultGet(consts.LastScan, "-1")
if err != nil {
beego.Error("Error retrieving LastScan property:", err)
c.SendError(responses.ERROR_GENERIC, "Internal Error")
}
2016-03-01 12:05:49 -09:00
i, _ := strconv.Atoi(ifModifiedSince)
l, _ := strconv.Atoi(res.LastModified)
2016-03-02 09:18:39 -09:00
if l > i {
2016-03-01 12:05:49 -09:00
indexes, err := c.repo.GetAll()
if err != nil {
beego.Error("Error retrieving Indexes:", err)
c.SendError(responses.ERROR_GENERIC, "Internal Error")
}
2016-03-01 12:05:49 -09:00
res.Index = make([]responses.Index, len(indexes))
2016-03-01 12:05:49 -09:00
for i, idx := range indexes {
res.Index[i].Name = idx.Id
res.Index[i].Artists = make([]responses.Artist, len(idx.Artists))
2016-03-01 12:05:49 -09:00
for j, a := range idx.Artists {
res.Index[i].Artists[j].Id = a.ArtistId
res.Index[i].Artists[j].Name = a.Artist
}
}
}
response := c.NewEmpty()
response.Indexes = &res
c.SendResponse(response)
}