A folder's playback state is missing its counts #74
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
A folder's playback state is missing its counts, and three keys disagree.
/Items?Recursive=true— 3 items:Two things in one field:
PlayedPercentageandUnplayedItemCountare absent here for aSeries.Upstream reports how much of a folder has been watched.
Keyfalls back to the guid where upstream has the external id — the sameshape as #66, which fixed it for the containers
/Items/Latestreports. Thesethree come through a plain query instead, so whatever loads the provider rows
for a by-id read is not reached.
Only 3 of 21,895 items, because only these have both an external id and enough
playback state to notice.
Fixed — and one half of this issue was my reporting error.
PlayedPercentage/UnplayedItemCountnever differed. The report was anartifact of comparing
0against0.0before number spelling was normalised.Folder.FillUserDataDtoValuesis already modelled here, gated the same way. Nochange was needed and none was made.
UserData.Keyis real.UserDataManager.Mapreportsdto.CustomDataKey—the key the stored row was written with — and
ResolveUserDataRowfalls backto the first candidate when none of the item's current keys match. A derived key
is used only where the user has no row for the item at all. This port derived it
every time.
UserDataWhat this issue could not have achieved, and why it matters for "identical".
The key upstream reports for an item with no stored row is not a function of its
database.
UserDataManager's cache is per user and item and is only ever readonce filled, and
/Items/Latestresolves its containers through a by-id readthat loads provider rows where a plain query does not. So whichever route
touches an item first, for that user, decides what every later route reports.
That makes two of the harness's numbers mutually exclusive on a warm upstream:
browsingreaching 0 implies the external keys are cached, which implies theplain listing then disagrees, and the other way round. Verified against a user
upstream had not cached — cold, this port agrees with it on both routes.
crates/jellyfin-harness/README.mdalready records this hazard. It is the limitof what replaying against a long-lived instance can settle.