Files
vibesonic/internal/subsonic/bookmarks.go
T

72 lines
1.8 KiB
Go

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
}