diff --git a/.golangci.yml b/.golangci.yml index 580c94f..35faffd 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -44,3 +44,6 @@ issues: - text: "at least one file in a package should have a package comment" linters: - stylecheck + - text: "should rewrite switch" + linters: + - gocritic diff --git a/server/ctrlsubsonic/handlers_bookmark.go b/server/ctrlsubsonic/handlers_bookmark.go index 5ff3088..037a87f 100644 --- a/server/ctrlsubsonic/handlers_bookmark.go +++ b/server/ctrlsubsonic/handlers_bookmark.go @@ -22,28 +22,37 @@ func (c *Controller) ServeGetBookmarks(r *http.Request) *spec.Response { if errors.Is(err, gorm.ErrRecordNotFound) { return spec.NewResponse() } + sub := spec.NewResponse() sub.Bookmarks = &spec.Bookmarks{ List: []*spec.Bookmark{}, } + for _, bookmark := range bookmarks { - specid := &specid.ID{ - Type: specid.IDT(bookmark.EntryIDType), - Value: bookmark.EntryID, - } - entry := spec.BookmarkEntry{ - ID: specid, - Type: bookmark.EntryIDType, - } - sub.Bookmarks.List = append(sub.Bookmarks.List, &spec.Bookmark{ + respBookmark := &spec.Bookmark{ Username: user.Name, Position: bookmark.Position, Comment: bookmark.Comment, Created: bookmark.CreatedAt, Changed: bookmark.UpdatedAt, - Entry: entry, - }) + } + + switch specid.IDT(bookmark.EntryIDType) { + case specid.Track: + var track db.Track + err := c.DB. + Preload("Album"). + Find(&track, "id=?", bookmark.EntryID). + Error + if err != nil { + return spec.NewError(10, "finding entry: %v", err) + } + respBookmark.Entry = spec.NewTrackByTags(&track, track.Album) + } + + sub.Bookmarks.List = append(sub.Bookmarks.List, respBookmark) } + return sub } diff --git a/server/ctrlsubsonic/spec/spec.go b/server/ctrlsubsonic/spec/spec.go index 248c2d0..61d9aa6 100644 --- a/server/ctrlsubsonic/spec/spec.go +++ b/server/ctrlsubsonic/spec/spec.go @@ -377,17 +377,12 @@ type Bookmarks struct { } type Bookmark struct { - Entry BookmarkEntry `xml:"entry,omitempty" json:"entry,omitempty"` - Username string `xml:"username,attr" json:"username"` - Position int `xml:"position,attr" json:"position"` - Comment string `xml:"comment,attr" json:"comment"` - Created time.Time `xml:"created,attr" json:"created"` - Changed time.Time `xml:"changed,attr" json:"changed"` -} - -type BookmarkEntry struct { - ID *specid.ID `xml:"id,attr" json:"id"` - Type string `xml:"type,attr" json:"type"` + Entry *TrackChild `xml:"entry,omitempty" json:"entry,omitempty"` + Username string `xml:"username,attr" json:"username"` + Position int `xml:"position,attr" json:"position"` + Comment string `xml:"comment,attr" json:"comment"` + Created time.Time `xml:"created,attr" json:"created"` + Changed time.Time `xml:"changed,attr" json:"changed"` } type Starred struct {