fix(folders): root shows whole library + sidecar counts recurse
Two paired fixes for the folder tree on the timeline: * +page.svelte: drop the `Path === ''` post-filter for the root entry. PhotoPrism's indexer always nests photos under YYYY/MM, so "photos whose Path is empty" is always the empty set in practice — the root entry looked broken instead of "whole library". Treat `/` as the unscoped view and rely on subfolder selections (now wildcarded via filters.svelte.ts) for narrowing. * sidecar/handlers_folders.go: the per-folder count fan-out used `q=path:<x>`, the same exact-match operator that just got fixed in the web filter. Result: every year-level folder reported count=0 in the sidebar. Switch to `q=path:"<x>*"` so the count reflects the whole subtree (dedupe by UID still in place).
This commit is contained in:
@@ -231,12 +231,20 @@ func handleFolderCounts(pp *ppClient) gin.HandlerFunc {
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
defer func() { <-sem }()
|
||||
// `path:` is non-recursive in PhotoPrism's q-DSL: matches
|
||||
// direct children only. `merged=false` returns one row per
|
||||
// File on disk, so HEIC + companion JPG count twice unless
|
||||
// we dedupe by UID — which is what the old client-side
|
||||
// code did, and what we keep doing here.
|
||||
q := url.QueryEscape("path:" + path)
|
||||
// `path:<x>` is an exact match in PhotoPrism's q-DSL —
|
||||
// it matches only photos whose `photo_path` field equals
|
||||
// <x>, not descendants. The indexer always nests photos
|
||||
// under YYYY/MM, so an internal tree node like `2024` has
|
||||
// zero direct children and reports a count of 0 unless we
|
||||
// recurse. `path:<x>*` is the documented wildcard form and
|
||||
// matches both `<x>` itself (no harm if empty) and every
|
||||
// `<x>/...` descendant.
|
||||
//
|
||||
// `merged=false` still returns one row per File on disk,
|
||||
// so HEIC + companion JPG count twice unless we dedupe by
|
||||
// UID — which is what the old client-side code did, and
|
||||
// what we keep doing here.
|
||||
q := url.QueryEscape(`path:"` + path + `*"`)
|
||||
resp, err := pp.call(c.Request.Context(), http.MethodGet,
|
||||
"/api/v1/photos?count=1000&offset=0&merged=false&q="+q, token, nil)
|
||||
if err != nil || !resp.OK {
|
||||
|
||||
Reference in New Issue
Block a user