72 lines
1.8 KiB
Go
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
|
|
}
|