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 }