Subsonic: internet radio, chat, bookmarks, play queue, scanner status endpoints
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
package subsonic
|
||||
|
||||
import "git.noroutes.net/NoRoutes/vibetunes/internal/database"
|
||||
|
||||
func init() {
|
||||
register("getBookmarks", handleGetBookmarks)
|
||||
register("createBookmark", handleCreateBookmark)
|
||||
register("deleteBookmark", handleDeleteBookmark)
|
||||
}
|
||||
|
||||
func handleGetBookmarks(rc *Context) *apiError {
|
||||
db := rc.Server.DB
|
||||
bookmarks, err := database.ListBookmarks(db, rc.User.ID)
|
||||
if err != nil {
|
||||
return newError(ErrGeneric, err.Error())
|
||||
}
|
||||
out := &Bookmarks{}
|
||||
for _, b := range bookmarks {
|
||||
song, serr := database.GetSong(db, b.SongID)
|
||||
if serr != nil {
|
||||
continue
|
||||
}
|
||||
mf, merr := database.GetMediaFile(db, song.MediaFileID)
|
||||
if merr != nil {
|
||||
continue
|
||||
}
|
||||
out.Bookmark = append(out.Bookmark, Bookmark{
|
||||
Position: int64(b.PositionMs),
|
||||
Username: rc.User.Username,
|
||||
Comment: b.Comment,
|
||||
Created: isoTime(b.CreatedAt),
|
||||
Changed: isoTime(b.UpdatedAt),
|
||||
Entry: childFromSong(db, song, mf, albumOfSong(db, song), rc.User.ID),
|
||||
})
|
||||
}
|
||||
rc.Response = newResponse()
|
||||
rc.Response.Bookmarks = out
|
||||
return nil
|
||||
}
|
||||
|
||||
func handleCreateBookmark(rc *Context) *apiError {
|
||||
id, aerr := rc.Params.Required("id")
|
||||
if aerr != nil {
|
||||
return aerr
|
||||
}
|
||||
position, perr := rc.Params.RequiredInt("position")
|
||||
if perr != nil {
|
||||
return perr
|
||||
}
|
||||
comment := rc.Params.Get("comment")
|
||||
if _, err := database.GetSong(rc.Server.DB, id); err != nil {
|
||||
return errNotFound("Song")
|
||||
}
|
||||
if err := database.SetBookmark(rc.Server.DB, rc.User.ID, id, position, comment); err != nil {
|
||||
return newError(ErrGeneric, err.Error())
|
||||
}
|
||||
rc.Response = newResponse()
|
||||
return nil
|
||||
}
|
||||
|
||||
func handleDeleteBookmark(rc *Context) *apiError {
|
||||
id, aerr := rc.Params.Required("id")
|
||||
if aerr != nil {
|
||||
return aerr
|
||||
}
|
||||
if err := database.DeleteBookmark(rc.Server.DB, rc.User.ID, id); err != nil {
|
||||
return newError(ErrGeneric, err.Error())
|
||||
}
|
||||
rc.Response = newResponse()
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user