fix: cap automatic playout refreshes

This commit is contained in:
2026-07-12 19:28:15 +09:00
parent 6e00955f1b
commit df60e09884
16 changed files with 603 additions and 37 deletions

View File

@@ -77,6 +77,41 @@
return !refreshFaulted && error?.isRefreshFault === true;
}
function normalizeRefreshBudget(payload) {
const completed = Number.isSafeInteger(payload?.refreshCompletedCount) &&
payload.refreshCompletedCount >= 0 &&
payload.refreshCompletedCount <= 2147483647
? payload.refreshCompletedCount
: 0;
const maximum = Number.isSafeInteger(payload?.refreshMaximumCount) &&
payload.refreshMaximumCount >= 0 &&
payload.refreshMaximumCount <= 1000000
? payload.refreshMaximumCount
: null;
return {
completed,
maximum,
limitReached: maximum !== null && completed >= maximum &&
payload?.refreshLimitReached === true &&
payload?.refreshActive !== true &&
payload?.playCompletionPending !== true &&
payload?.refreshFaulted !== true
};
}
function formatRefreshBudgetState(payload, nextLabel = "WAIT") {
const budget = normalizeRefreshBudget(payload);
const count = budget.maximum === null
? String(budget.completed)
: `${budget.completed}/${budget.maximum}`;
if (payload?.refreshFaulted === true) return "FAULT";
if (budget.limitReached) return `CAPPED · ${count}`;
if (payload?.refreshActive === true) return `ACTIVE · ${count} · ${nextLabel}`;
return budget.maximum === null && budget.completed === 0
? "STOPPED"
: `STOPPED · ${count}`;
}
function isNewerDatabaseStatusSequence(latestSequence, incomingSequence) {
const latest = Number.isSafeInteger(latestSequence) && latestSequence >= 0
? latestSequence
@@ -107,6 +142,8 @@
canClearCommandError,
playlistSnapshotLocked,
shouldClearRefreshError,
normalizeRefreshBudget,
formatRefreshBudgetState,
isNewerDatabaseStatusSequence,
resolveStoredCatalogIndex
};