Searching by artists, spike mode

This commit is contained in:
Deluan
2016-03-11 00:37:07 -05:00
parent 29c2925a1c
commit ef31d1aca0
9 changed files with 136 additions and 28 deletions
+8 -3
View File
@@ -3,10 +3,11 @@ package api
import (
"encoding/xml"
"fmt"
"time"
"github.com/astaxie/beego"
"github.com/deluan/gosonic/api/responses"
"github.com/deluan/gosonic/utils"
"time"
)
type BaseAPIController struct{ beego.Controller }
@@ -23,14 +24,18 @@ func (c *BaseAPIController) RequiredParamString(param string, msg string) string
return p
}
func (c *BaseAPIController) ParamString(param string) string {
return c.Input().Get(param)
}
func (c *BaseAPIController) ParamTime(param string) time.Time {
var value int64
c.Ctx.Input.Bind(&value, param)
return utils.ToTime(value)
}
func (c *BaseAPIController) ParamInt(param string) int {
var value int
func (c *BaseAPIController) ParamInt(param string, def int) int {
value := def
c.Ctx.Input.Bind(&value, param)
return value
}
+2 -2
View File
@@ -40,8 +40,8 @@ func (c *GetAlbumListController) Get() {
c.SendError(responses.ERROR_GENERIC, "Not implemented!")
}
offset := c.ParamInt("offset")
size := utils.MinInt(c.ParamInt("size"), 500)
offset := c.ParamInt("offset", 0)
size := utils.MinInt(c.ParamInt("size", 0), 500)
albums, err := method(offset, size)
if err != nil {
+1 -1
View File
@@ -19,7 +19,7 @@ func (c *GetCoverArtController) Prepare() {
func (c *GetCoverArtController) Get() {
id := c.RequiredParamString("id", "id parameter required")
size := c.ParamInt("size")
size := c.ParamInt("size", 0)
err := c.cover.Get(id, size, c.Ctx.ResponseWriter)
+19 -12
View File
@@ -6,18 +6,19 @@ import (
)
type Subsonic struct {
XMLName xml.Name `xml:"http://subsonic.org/restapi subsonic-response" json:"-"`
Status string `xml:"status,attr" json:"status"`
Version string `xml:"version,attr" json:"version"`
Error *Error `xml:"error,omitempty" json:"error,omitempty"`
License *License `xml:"license,omitempty" json:"license,omitempty"`
MusicFolders *MusicFolders `xml:"musicFolders,omitempty" json:"musicFolders,omitempty"`
Indexes *Indexes `xml:"indexes,omitempty" json:"indexes,omitempty"`
Directory *Directory `xml:"directory,omitempty" json:"directory,omitempty"`
User *User `xml:"user,omitempty" json:"user,omitempty"`
AlbumList *AlbumList `xml:"albumList,omitempty" json:"albumList,omitempty"`
Playlists *Playlists `xml:"playlists,omitempty" json:"playlists,omitempty"`
Playlist *PlaylistWithSongs `xml:"playlist,omitempty" json:"playlist,omitempty"`
XMLName xml.Name `xml:"http://subsonic.org/restapi subsonic-response" json:"-"`
Status string `xml:"status,attr" json:"status"`
Version string `xml:"version,attr" json:"version"`
Error *Error `xml:"error,omitempty" json:"error,omitempty"`
License *License `xml:"license,omitempty" json:"license,omitempty"`
MusicFolders *MusicFolders `xml:"musicFolders,omitempty" json:"musicFolders,omitempty"`
Indexes *Indexes `xml:"indexes,omitempty" json:"indexes,omitempty"`
Directory *Directory `xml:"directory,omitempty" json:"directory,omitempty"`
User *User `xml:"user,omitempty" json:"user,omitempty"`
AlbumList *AlbumList `xml:"albumList,omitempty" json:"albumList,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"`
}
type JsonWrapper struct {
@@ -119,6 +120,12 @@ type PlaylistWithSongs struct {
Entry []Child `xml:"entry" json:"entry,omitempty"`
}
type SearchResult2 struct {
Artist []Artist `xml:"artist" json:"artist,omitempty"`
Album []Child `xml:"album" json:"album,omitempty"`
Song []Child `xml:"song" json:"song,omitempty"`
}
type User struct {
Username string `xml:"username,attr" json:"username"`
Email string `xml:"email,attr,omitempty" json:"email,omitempty"`
+43
View File
@@ -0,0 +1,43 @@
package api
import (
"github.com/astaxie/beego"
"github.com/deluan/gosonic/api/responses"
"github.com/deluan/gosonic/engine"
"github.com/deluan/gosonic/utils"
"github.com/karlkfi/inject"
)
type SearchingController struct {
BaseAPIController
search engine.Search
}
func (c *SearchingController) Prepare() {
inject.ExtractAssignable(utils.Graph, &c.search)
}
func (c *SearchingController) Search2() {
query := c.RequiredParamString("query", "Parameter query required")
artistCount := c.ParamInt("artistCount", 20)
artistOffset := c.ParamInt("artistOffset", 0)
//albumCount := c.ParamInt("albumCount", 20)
//albumOffset := c.ParamInt("albumOffset", 0)
//songCount := c.ParamInt("songCount", 20)
//songOffset := c.ParamInt("songOffset", 0)
as, err := c.search.SearchArtist(query, artistOffset, artistCount)
if err != nil {
beego.Error("Error searching for Artists:", err)
c.SendError(responses.ERROR_GENERIC, "Internal Error")
}
response := c.NewEmpty()
searchResult2 := &responses.SearchResult2{}
searchResult2.Artist = make([]responses.Artist, len(*as))
for i, a := range *as {
searchResult2.Artist[i] = responses.Artist{Id: a.Id, Name: a.Name}
}
response.SearchResult2 = searchResult2
c.SendResponse(response)
}
+1 -1
View File
@@ -38,7 +38,7 @@ func (c *StreamController) Prepare() {
// TODO Still getting the "Conn.Write wrote more than the declared Content-Length" error.
// Don't know if this causes any issues
func (c *StreamController) Stream() {
maxBitRate := c.ParamInt("maxBitRate")
maxBitRate := c.ParamInt("maxBitRate", 0)
maxBitRate = utils.MinInt(c.mf.BitRate, maxBitRate)
beego.Debug("Streaming file", c.id, ":", c.mf.Path)