package jellyfin
import (
"net/http"
"strings"
"github.com/navidrome/navidrome/conf"
"github.com/navidrome/navidrome/log"
"github.com/navidrome/navidrome/model/request"
"github.com/navidrome/navidrome/server/jellyfin/dto"
)
func (api *Router) getUserViews(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
u, _ := request.UserFrom(ctx)
libs, err := api.ds.Library().GetAll(ctx)
if err != nil {
api.internalError(w, r, err)
return
}
views := make([]dto.BaseItemDto, 0, len(libs))
for _, lib := range libs {
if u.HasLibraryAccess(lib.ID) {
views = append(views, dto.LibraryToBaseItem(lib))
}
}
api.ok(w, r, dto.QueryResult{Items: views, TotalRecordCount: len(views), StartIndex: 0})
}
func (api *Router) getCurrentUser(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
u, _ := request.UserFrom(ctx)
api.ok(w, r, userToDto(&u, serverName(), api.serverID(ctx)))
}
func (api *Router) getPublicUsers(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
serverID := api.serverID(ctx)
seen := make(map[string]bool)
users := []dto.UserDto{}
for name := range strings.SplitSeq(conf.Server.Jellyfin.ExposedPublicUsers, ",") {
name = strings.TrimSpace(name)
if name == "" {
continue
}
key := strings.ToLower(name)
if seen[key] {
continue
}
seen[key] = true
usr, err := api.ds.User().FindByUsername(ctx, name)
if err != nil {
log.Warn(ctx, "Jellyfin API: configured public user not found", "username", name, err)
continue
}
users = append(users, dto.UserDto{
Name: usr.UserName,
Id: dto.EncodeID(usr.ID),
ServerId: serverID,
HasPassword: true,
})
}
api.ok(w, r, users)
}