mirror of
https://github.com/navidrome/navidrome.git
synced 2026-08-01 07:21:17 +00:00
Mechanical cleanups, no behavior change: - 15 copies of the same id-extraction loop collapse to slice.Map (5 repo mocks, the scanner's track sweep, 4 wantIDs assertions) and slice.ToMap (6 index-by-id loops in the hydration specs). - disc.go built a map[string]bool purely to dedup folder ids and then walked it back into a slice; slice.Unique says that directly. - folders_artist.go's image filter is slice.Filter over model.IsImageFile. - mock_artwork_repo deleted from a map while ranging it; maps.DeleteFunc states the intent. - sort.Slice -> slices.SortFunc + cmp.Or; math.Min/Max -> builtin min/max; make+copy -> bytes.Clone; strings.Split -> SplitSeq on a per-request path; three-clause pixel loops -> for range. - Reuse utils.BaseName where a stem was recomputed by hand. Not at playlist_cover.go:27: that path is a full OS path and utils.BaseName uses path.Base, which does not split backslashes. - Drop a dead nil-guard in agents.go: getAgent returns a bare nil interface, and a type assertion on nil already yields ok == false. cmp.Or was rejected for the gate fallback (func types are not comparable, does not compile) and for ItemArtwork.AttemptedAt (cmp.Or compares time.Time with ==, which includes loc; IsZero does not).
43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
package nativeapi
|
|
|
|
import (
|
|
"net/http"
|
|
"slices"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
"github.com/navidrome/navidrome/core/artwork"
|
|
"github.com/navidrome/navidrome/log"
|
|
"github.com/navidrome/navidrome/model"
|
|
)
|
|
|
|
var refreshableArtworkKinds = []model.Kind{
|
|
model.KindAlbumArtwork,
|
|
model.KindArtistArtwork,
|
|
model.KindPlaylistArtwork,
|
|
model.KindRadioArtwork,
|
|
model.KindMediaFileArtwork,
|
|
}
|
|
|
|
func (api *Router) addArtworkRoute(r chi.Router) {
|
|
r.Post("/artwork/{kind}/{id}/refresh", api.refreshArtwork())
|
|
}
|
|
|
|
// State is deliberately cleared so a wrong pick disappears immediately (placeholder until re-resolved).
|
|
func (api *Router) refreshArtwork() http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
ctx := r.Context()
|
|
kind, _ := model.ParseKind(chi.URLParam(r, "kind"))
|
|
id := chi.URLParam(r, "id")
|
|
if !slices.Contains(refreshableArtworkKinds, kind) {
|
|
http.Error(w, "invalid artwork kind", http.StatusBadRequest)
|
|
return
|
|
}
|
|
if err := artwork.Refresh(ctx, api.ds, kind, id); err != nil {
|
|
log.Error(ctx, "Error refreshing artwork", "kind", kind, "id", id, err)
|
|
http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
w.WriteHeader(http.StatusNoContent)
|
|
}
|
|
}
|