v0.5.111: sort streamers by live status then follower count.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
voson
2026-07-30 01:32:01 +08:00
co-authored by Cursor
parent fe1b13b7c1
commit 28858c0703
7 changed files with 36 additions and 17 deletions
+21 -8
View File
@@ -3957,6 +3957,9 @@ function streamerList() {
const rows = streamersData().streamers;
if (!Array.isArray(rows)) return [];
return [...rows].sort((a, b) => {
const la = a && a.is_live === true ? 1 : 0;
const lb = b && b.is_live === true ? 1 : 0;
if (la !== lb) return lb - la;
const fa = Number(a.follower_count);
const fb = Number(b.follower_count);
const na = Number.isFinite(fa) && fa >= 0 ? fa : -1;
@@ -4785,14 +4788,24 @@ function refreshStreamerLiveStatus() {
}
}
if (!changed) return;
// Update rendered cards in place (top-level page + hero detail panel);
// rows already merged, so any later re-render picks up the new state.
document
.querySelectorAll(".streamer-card[data-streamer-id]")
.forEach((card) => {
const row = rows.find((r) => r && r.id === card.dataset.streamerId);
if (row) syncStreamerCardLive(card, row);
});
// Re-render list views so live streamers bubble to the front; otherwise
// sync any leftover cards in place (rows already merged for later paints).
if (state.page === "streamers") {
renderStreamers();
} else if (
state.page === "heroes" &&
state.detailTab === "streamers" &&
state.selectedKey
) {
renderDetail();
} else {
document
.querySelectorAll(".streamer-card[data-streamer-id]")
.forEach((card) => {
const row = rows.find((r) => r && r.id === card.dataset.streamerId);
if (row) syncStreamerCardLive(card, row);
});
}
})
.catch(() => {
/* endpoint missing/unreachable: keep data.json is_live */