navidrome/api/searching.go

92 lines
2.5 KiB
Go
Raw Normal View History

2016-03-11 06:37:07 +01:00
package api
import (
2016-03-24 02:06:39 +01:00
"fmt"
2016-03-11 06:37:07 +01:00
"github.com/astaxie/beego"
"github.com/deluan/gosonic/api/responses"
"github.com/deluan/gosonic/engine"
"github.com/deluan/gosonic/utils"
)
type SearchingController struct {
BaseAPIController
2016-03-28 16:01:43 +02:00
search engine.Search
query string
artistCount int
artistOffset int
albumCount int
albumOffset int
songCount int
songOffset int
2016-03-11 06:37:07 +01:00
}
func (c *SearchingController) Prepare() {
2016-03-11 21:16:17 +01:00
utils.ResolveDependencies(&c.search)
2016-03-11 06:37:07 +01:00
}
2016-03-28 16:01:43 +02:00
func (c *SearchingController) getParams() {
c.query = c.RequiredParamString("query", "Parameter query required")
c.artistCount = c.ParamInt("artistCount", 20)
c.artistOffset = c.ParamInt("artistOffset", 0)
c.albumCount = c.ParamInt("albumCount", 20)
c.albumOffset = c.ParamInt("albumOffset", 0)
c.songCount = c.ParamInt("songCount", 20)
c.songOffset = c.ParamInt("songOffset", 0)
}
func (c *SearchingController) searchAll() (engine.Entries, engine.Entries, engine.Entries) {
as, err := c.search.SearchArtist(c.query, c.artistOffset, c.artistCount)
2016-03-11 06:37:07 +01:00
if err != nil {
beego.Error("Error searching for Artists:", err)
}
2016-03-28 16:01:43 +02:00
als, err := c.search.SearchAlbum(c.query, c.albumOffset, c.albumCount)
2016-03-11 16:03:33 +01:00
if err != nil {
beego.Error("Error searching for Albums:", err)
}
2016-03-28 16:01:43 +02:00
mfs, err := c.search.SearchSong(c.query, c.songOffset, c.songCount)
2016-03-11 16:03:33 +01:00
if err != nil {
beego.Error("Error searching for MediaFiles:", err)
}
2016-03-11 06:37:07 +01:00
2016-03-28 16:01:43 +02:00
beego.Debug(fmt.Sprintf("Searching for [%s] resulted in %d songs, %d albums and %d artists", c.query, len(mfs), len(als), len(as)))
return mfs, als, as
}
func (c *SearchingController) Search2() {
c.getParams()
mfs, als, as := c.searchAll()
2016-03-24 02:06:39 +01:00
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 = c.ToChildren(als)
searchResult2.Song = c.ToChildren(mfs)
2016-03-11 06:37:07 +01:00
response.SearchResult2 = searchResult2
c.SendResponse(response)
}
2016-03-28 16:01:43 +02:00
func (c *SearchingController) Search3() {
c.getParams()
mfs, als, as := c.searchAll()
response := c.NewEmpty()
searchResult3 := &responses.SearchResult3{}
searchResult3.Artist = make([]responses.ArtistID3, len(as))
for i, e := range as {
searchResult3.Artist[i] = responses.ArtistID3{
Id: e.Id,
Name: e.Title,
CoverArt: e.CoverArt,
AlbumCount: e.AlbumCount,
}
}
searchResult3.Album = c.ToAlbums(als)
searchResult3.Song = c.ToChildren(mfs)
response.SearchResult3 = searchResult3
c.SendResponse(response)
}