fix: cap automatic playout refreshes
This commit is contained in:
@@ -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
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user