feat: 更新自动运行状态逻辑,调整手动运行计数输入的行为

This commit is contained in:
QLHazyCoder
2026-05-01 01:27:07 +08:00
parent bb53142ccb
commit 0a4acffb00
2 changed files with 90 additions and 6 deletions
+10 -6
View File
@@ -3845,7 +3845,13 @@ function applyAutoRunStatus(payload = currentAutoRun) {
setSettingsCardLocked(settingsCardLocked);
inputRunCount.disabled = currentAutoRun.autoRunning || shouldLockRunCountToEmailPool();
const lockedRunCount = getLockedRunCountFromEmailPool();
const shouldSyncAutoRunTotalRuns = currentAutoRun.autoRunning
|| locked
|| paused
|| scheduled;
inputRunCount.disabled = currentAutoRun.autoRunning || lockedRunCount > 0;
btnAutoRun.disabled = currentAutoRun.autoRunning;
btnFetchEmail.disabled = locked
|| isCustomMailProvider()
@@ -3853,7 +3859,9 @@ function applyAutoRunStatus(payload = currentAutoRun) {
inputEmail.disabled = locked;
inputAutoSkipFailures.disabled = scheduled;
if (currentAutoRun.totalRuns > 0) {
if (lockedRunCount > 0) {
inputRunCount.value = String(lockedRunCount);
} else if (shouldSyncAutoRunTotalRuns && currentAutoRun.totalRuns > 0) {
inputRunCount.value = String(currentAutoRun.totalRuns);
}
@@ -4273,10 +4281,6 @@ function applySettingsState(state) {
if (typeof updateHeroSmsRuntimeDisplay === 'function') {
updateHeroSmsRuntimeDisplay(state);
}
if (state?.autoRunTotalRuns) {
inputRunCount.value = String(state.autoRunTotalRuns);
}
applyAutoRunStatus(state);
markSettingsDirty(false);
updateAutoDelayInputState();
+80
View File
@@ -77,6 +77,86 @@ return {
assert.equal(api.getRunCountValue(), 1);
});
test('sidepanel idle auto-run status does not reset manual run count input', () => {
const source = fs.readFileSync('sidepanel/sidepanel.js', 'utf8');
const bundle = [
extractFunction(source, 'hasOwnStateValue'),
extractFunction(source, 'readAutoRunStateValue'),
extractFunction(source, 'syncAutoRunState'),
extractFunction(source, 'isAutoRunLockedPhase'),
extractFunction(source, 'isAutoRunPausedPhase'),
extractFunction(source, 'isAutoRunScheduledPhase'),
extractFunction(source, 'applyAutoRunStatus'),
].join('\n');
const api = new Function(`
let currentAutoRun = {
autoRunning: false,
phase: 'idle',
currentRun: 0,
totalRuns: 1,
attemptRun: 0,
scheduledAt: null,
countdownAt: null,
countdownTitle: '',
countdownNote: '',
};
let lockedRunCount = 0;
const inputRunCount = { value: '8', disabled: false };
const btnAutoRun = { disabled: false, innerHTML: '' };
const btnFetchEmail = { disabled: false };
const inputEmail = { disabled: false };
const inputAutoSkipFailures = { disabled: false };
const autoContinueBar = { style: { display: '' } };
function setSettingsCardLocked() {}
function getAutoRunLabel() { return ''; }
function getLockedRunCountFromEmailPool() { return lockedRunCount; }
function isCustomMailProvider() { return false; }
function usesCustomEmailPoolGenerator() { return false; }
function setDefaultAutoRunButton() {}
function updateAutoDelayInputState() {}
function updateFallbackThreadIntervalInputState() {}
function syncScheduledCountdownTicker() {}
function updateStopButtonState() {}
function getStepStatuses() { return {}; }
function updateConfigMenuControls() {}
function renderContributionMode() {}
${bundle}
return {
applyAutoRunStatus,
getValue() {
return inputRunCount.value;
},
isDisabled() {
return inputRunCount.disabled;
},
setValue(value) {
inputRunCount.value = value;
},
setLockedRunCount(value) {
lockedRunCount = value;
},
};
`)();
api.applyAutoRunStatus({ autoRunning: false, autoRunPhase: 'idle', autoRunTotalRuns: 1 });
assert.equal(api.getValue(), '8');
assert.equal(api.isDisabled(), false);
api.applyAutoRunStatus({ autoRunPhase: 'running', autoRunTotalRuns: 4 });
assert.equal(api.getValue(), '4');
assert.equal(api.isDisabled(), true);
api.setValue('9');
api.setLockedRunCount(2);
api.applyAutoRunStatus({ autoRunning: false, autoRunPhase: 'idle', autoRunTotalRuns: 1 });
assert.equal(api.getValue(), '2');
assert.equal(api.isDisabled(), true);
});
test('background normalizeRunCount no longer clamps values to 50', () => {
const source = fs.readFileSync('background.js', 'utf8');
const bundle = extractFunction(source, 'normalizeRunCount');