v4: a playlist's dump count is of the dumps the viewer may see — it counted every dump in the playlist, so a card said "3 dumps" over a page listing two, and told everyone how many private dumps a playlist held. The lists (/playlists, a profile's playlists and followed ones, the search, a dump's playlists, the add-to-playlist panel) now count by isMemberVisibleTo's rule, in SQL as VISIBLE_DUMP_COUNT (lib/playlist-members.ts): the public dumps, and for the owner their own private ones. GET /api/playlists and /api/users/:key/follow/playlists read the optional sign-in for it. The community page and the digests count the public dumps, their figures being the same for every reader. Live, playlist_created and playlist_updated carry each socket's own count: broadcastChange builds the owner's message and the others' apart. playlist_dumps_updated loses its dumpCount, a client counting the dumps it is sent.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -43,9 +43,25 @@ test("communityStatsOf: the period's top public dumps, members, public playlists
|
||||
insertPlaylist({ userId: ann.id, title: "Small" });
|
||||
const full = insertPlaylist({ userId: bob.id, title: "Full" });
|
||||
insertPlaylist({ userId: bob.id, title: "Hidden", isPublic: false });
|
||||
// Bob's private dump isn't counted: every reader gets the same figures.
|
||||
const secret = insertDump({
|
||||
userId: bob.id,
|
||||
title: "Secret",
|
||||
isPrivate: true,
|
||||
});
|
||||
db.prepare(
|
||||
`INSERT INTO playlist_dumps (playlist_id, dump_id, position, added_at) VALUES (?, ?, 0, ?), (?, ?, 1, ?);`,
|
||||
).run(full.id, hit.id, ago(0), full.id, tie.id, ago(0));
|
||||
`INSERT INTO playlist_dumps (playlist_id, dump_id, position, added_at) VALUES (?, ?, 0, ?), (?, ?, 1, ?), (?, ?, 2, ?);`,
|
||||
).run(
|
||||
full.id,
|
||||
hit.id,
|
||||
ago(0),
|
||||
full.id,
|
||||
tie.id,
|
||||
ago(0),
|
||||
full.id,
|
||||
secret.id,
|
||||
ago(0),
|
||||
);
|
||||
|
||||
const stats = communityStatsOf(...week());
|
||||
assertEquals(stats.top.map((d) => d.title), ["Hit", "Newer", "Tie"]);
|
||||
|
||||
Reference in New Issue
Block a user