navidrome/api/searching.go

58 lines
1.6 KiB
Go
Raw Normal View History

2016-03-11 06:37:07 +01:00
package api
import (
"github.com/astaxie/beego"
"github.com/deluan/gosonic/api/responses"
"github.com/deluan/gosonic/engine"
"github.com/deluan/gosonic/utils"
)
type SearchingController struct {
BaseAPIController
search engine.Search
}
func (c *SearchingController) Prepare() {
2016-03-11 21:16:17 +01:00
utils.ResolveDependencies(&c.search)
2016-03-11 06:37:07 +01:00
}
func (c *SearchingController) Search2() {
query := c.RequiredParamString("query", "Parameter query required")
artistCount := c.ParamInt("artistCount", 20)
artistOffset := c.ParamInt("artistOffset", 0)
2016-03-11 16:03:33 +01:00
albumCount := c.ParamInt("albumCount", 20)
albumOffset := c.ParamInt("albumOffset", 0)
songCount := c.ParamInt("songCount", 20)
songOffset := c.ParamInt("songOffset", 0)
2016-03-11 06:37:07 +01:00
as, err := c.search.SearchArtist(query, artistOffset, artistCount)
if err != nil {
beego.Error("Error searching for Artists:", err)
}
2016-03-11 16:03:33 +01:00
als, err := c.search.SearchAlbum(query, albumOffset, albumCount)
if err != nil {
beego.Error("Error searching for Albums:", err)
}
mfs, err := c.search.SearchSong(query, songOffset, songCount)
if err != nil {
beego.Error("Error searching for MediaFiles:", err)
}
2016-03-11 06:37:07 +01:00
response := c.NewEmpty()
searchResult2 := &responses.SearchResult2{}
searchResult2.Artist = make([]responses.Artist, len(as))
for i, e := range as {
2016-03-11 16:03:33 +01:00
searchResult2.Artist[i] = responses.Artist{Id: e.Id, Name: e.Title}
}
searchResult2.Album = make([]responses.Child, len(als))
for i, e := range als {
2016-03-11 16:03:33 +01:00
searchResult2.Album[i] = c.ToChild(e)
}
searchResult2.Song = make([]responses.Child, len(mfs))
for i, e := range mfs {
2016-03-11 16:03:33 +01:00
searchResult2.Song[i] = c.ToChild(e)
2016-03-11 06:37:07 +01:00
}
response.SearchResult2 = searchResult2
c.SendResponse(response)
}