Release v0.2.36

This commit is contained in:
ponzischeme89
2026-08-09 12:53:25 +12:00
parent add8aa831c
commit 574826dc03
13 changed files with 193 additions and 63 deletions
+29 -6
View File
@@ -45,21 +45,38 @@ type genrePage struct {
}
func (s *Server) handleGenreItems(w http.ResponseWriter, r *http.Request, sess store.Session) {
ctx := r.Context()
genre := strings.TrimSpace(r.PathValue("genre"))
if genre == "" {
writeError(w, http.StatusBadRequest, "a genre is required")
return
}
s.handleBrowseItems(w, r, sess, genre)
}
func (s *Server) handleLibraryItems(w http.ResponseWriter, r *http.Request, sess store.Session) {
s.handleBrowseItems(w, r, sess, "")
}
func (s *Server) handleBrowseItems(
w http.ResponseWriter,
r *http.Request,
sess store.Session,
genre string,
) {
ctx := r.Context()
limit := queryInt(r, "limit", genrePageSize, genrePageMax)
offset := queryOffset(r, "offset")
itemType, ok := genreItemType(r.URL.Query().Get("type"))
if !ok {
if !ok || (genre == "" && itemType == "Movie,Series") {
writeError(w, http.StatusBadRequest, "type must be Movie or Series")
return
}
key := cache.UserKey(sess.EmbyUserID, "genre:"+itemType+":"+genre+":"+itoa(offset)+":"+itoa(limit))
filterKey := "all"
if genre != "" {
filterKey = "genre:" + genre
}
key := cache.UserKey(sess.EmbyUserID, "browse:"+itemType+":"+filterKey+":"+itoa(offset)+":"+itoa(limit))
if raw, err := s.cache.Get(ctx, key); err == nil {
w.Header().Set("X-Memby-Cache", "hit")
writeRaw(w, http.StatusOK, raw)
@@ -67,7 +84,6 @@ func (s *Server) handleGenreItems(w http.ResponseWriter, r *http.Request, sess s
}
params := rowParams(url.Values{
"Genres": {genre},
"IncludeItemTypes": {itemType},
"Recursive": {"true"},
"StartIndex": {itoa(offset)},
@@ -79,6 +95,9 @@ func (s *Server) handleGenreItems(w http.ResponseWriter, r *http.Request, sess s
"SortBy": {"PremiereDate,SortName"},
"SortOrder": {"Descending"},
}, fieldsRow)
if genre != "" {
params.Set("Genres", genre)
}
// rowParams turns this off for the home rows, which never page. Here it is the number
// the scroll stops on.
params.Set("EnableTotalRecordCount", "true")
@@ -98,10 +117,14 @@ func (s *Server) handleGenreItems(w http.ResponseWriter, r *http.Request, sess s
// The first page is somebody opening a genre, which is a navigation event worth the
// log; the pages after it are one viewer scrolling and would bury it.
if offset == 0 {
if offset == 0 && genre != "" {
s.loggerFor(ctx).Info("genre browsed", "genre", genre, "results", len(items), "total", total)
} else {
} else if offset == 0 {
s.loggerFor(ctx).Info("library browsed", "type", itemType, "results", len(items), "total", total)
} else if genre != "" {
s.loggerFor(ctx).Debug("genre page", "genre", genre, "offset", offset, "results", len(items))
} else {
s.loggerFor(ctx).Debug("library page", "type", itemType, "offset", offset, "results", len(items))
}
body, err := json.Marshal(genrePage{