修复延迟时区为固定北京时间,修复线程间隔逻辑
This commit is contained in:
+56
-2
@@ -48,6 +48,7 @@ const HOTMAIL_SERVICE_MODE_LOCAL = 'local';
|
|||||||
const DEFAULT_HOTMAIL_REMOTE_BASE_URL = '';
|
const DEFAULT_HOTMAIL_REMOTE_BASE_URL = '';
|
||||||
const DEFAULT_HOTMAIL_LOCAL_BASE_URL = 'http://127.0.0.1:17373';
|
const DEFAULT_HOTMAIL_LOCAL_BASE_URL = 'http://127.0.0.1:17373';
|
||||||
const HOTMAIL_LOCAL_HELPER_TIMEOUT_MS = 45000;
|
const HOTMAIL_LOCAL_HELPER_TIMEOUT_MS = 45000;
|
||||||
|
const DISPLAY_TIMEZONE = 'Asia/Shanghai';
|
||||||
|
|
||||||
initializeSessionStorageAccess();
|
initializeSessionStorageAccess();
|
||||||
|
|
||||||
@@ -2328,6 +2329,7 @@ async function invalidateDownstreamAfterStepRestart(step, options = {}) {
|
|||||||
|
|
||||||
function clearStopRequest() {
|
function clearStopRequest() {
|
||||||
stopRequested = false;
|
stopRequested = false;
|
||||||
|
autoRunCountdownSkipRequested = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getRunningSteps(statuses = {}) {
|
function getRunningSteps(statuses = {}) {
|
||||||
@@ -2424,6 +2426,7 @@ function isAutoRunScheduledState(state) {
|
|||||||
function formatAutoRunScheduleTime(timestamp) {
|
function formatAutoRunScheduleTime(timestamp) {
|
||||||
return new Date(timestamp).toLocaleString('zh-CN', {
|
return new Date(timestamp).toLocaleString('zh-CN', {
|
||||||
hour12: false,
|
hour12: false,
|
||||||
|
timeZone: DISPLAY_TIMEZONE,
|
||||||
month: '2-digit',
|
month: '2-digit',
|
||||||
day: '2-digit',
|
day: '2-digit',
|
||||||
hour: '2-digit',
|
hour: '2-digit',
|
||||||
@@ -2767,6 +2770,7 @@ async function broadcastStopToContentScripts() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let stopRequested = false;
|
let stopRequested = false;
|
||||||
|
let autoRunCountdownSkipRequested = false;
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// Message Handler (central router)
|
// Message Handler (central router)
|
||||||
@@ -2907,6 +2911,15 @@ async function handleMessage(message, sender) {
|
|||||||
return { ok: true };
|
return { ok: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'SKIP_AUTO_RUN_COUNTDOWN': {
|
||||||
|
clearStopRequest();
|
||||||
|
const skipped = await skipAutoRunCountdown();
|
||||||
|
if (!skipped) {
|
||||||
|
throw new Error('当前没有可立即开始的倒计时。');
|
||||||
|
}
|
||||||
|
return { ok: true };
|
||||||
|
}
|
||||||
|
|
||||||
case 'RESUME_AUTO_RUN': {
|
case 'RESUME_AUTO_RUN': {
|
||||||
clearStopRequest();
|
clearStopRequest();
|
||||||
if (message.payload.email) {
|
if (message.payload.email) {
|
||||||
@@ -4067,11 +4080,52 @@ async function sleepWithAutoRunCountdown(waitMs, payload = {}) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await broadcastAutoRunStatus('waiting_interval', {
|
autoRunCountdownSkipRequested = false;
|
||||||
|
const countdownPayload = {
|
||||||
...payload,
|
...payload,
|
||||||
countdownAt: Date.now() + waitMs,
|
countdownAt: Date.now() + waitMs,
|
||||||
|
};
|
||||||
|
await broadcastAutoRunStatus('waiting_interval', countdownPayload);
|
||||||
|
|
||||||
|
const start = Date.now();
|
||||||
|
try {
|
||||||
|
while (Date.now() - start < waitMs) {
|
||||||
|
throwIfStopped();
|
||||||
|
if (autoRunCountdownSkipRequested) {
|
||||||
|
autoRunCountdownSkipRequested = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, Math.min(100, waitMs - (Date.now() - start))));
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (!stopRequested) {
|
||||||
|
await broadcastAutoRunStatus('waiting_interval', {
|
||||||
|
...payload,
|
||||||
|
countdownAt: null,
|
||||||
|
countdownTitle: '',
|
||||||
|
countdownNote: '',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function skipAutoRunCountdown() {
|
||||||
|
const state = await getState();
|
||||||
|
if (!autoRunActive || state.autoRunPhase !== 'waiting_interval') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
autoRunCountdownSkipRequested = true;
|
||||||
|
await addLog('已手动跳过当前倒计时,自动流程将立即继续。', 'info');
|
||||||
|
await broadcastAutoRunStatus('waiting_interval', {
|
||||||
|
currentRun: state.autoRunCurrentRun,
|
||||||
|
totalRuns: state.autoRunTotalRuns,
|
||||||
|
attemptRun: state.autoRunAttemptRun,
|
||||||
|
countdownAt: null,
|
||||||
|
countdownTitle: '',
|
||||||
|
countdownNote: '',
|
||||||
});
|
});
|
||||||
await sleepWithStop(waitMs);
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function waitBetweenAutoRunRounds(targetRun, totalRuns, roundSummary) {
|
async function waitBetweenAutoRunRounds(targetRun, totalRuns, roundSummary) {
|
||||||
|
|||||||
+28
-3
@@ -145,6 +145,7 @@ const AUTO_RUN_FALLBACK_RISK_WARNING_MIN_RUNS = 15;
|
|||||||
const AUTO_RUN_FALLBACK_RISK_RECOMMENDED_THREAD_INTERVAL_MINUTES = 5;
|
const AUTO_RUN_FALLBACK_RISK_RECOMMENDED_THREAD_INTERVAL_MINUTES = 5;
|
||||||
const HOTMAIL_SERVICE_MODE_REMOTE = 'remote';
|
const HOTMAIL_SERVICE_MODE_REMOTE = 'remote';
|
||||||
const HOTMAIL_SERVICE_MODE_LOCAL = 'local';
|
const HOTMAIL_SERVICE_MODE_LOCAL = 'local';
|
||||||
|
const DISPLAY_TIMEZONE = 'Asia/Shanghai';
|
||||||
|
|
||||||
let latestState = null;
|
let latestState = null;
|
||||||
let currentAutoRun = {
|
let currentAutoRun = {
|
||||||
@@ -183,6 +184,8 @@ const getHotmailBulkActionLabel = window.HotmailUtils?.getHotmailBulkActionLabel
|
|||||||
const getHotmailListToggleLabel = window.HotmailUtils?.getHotmailListToggleLabel;
|
const getHotmailListToggleLabel = window.HotmailUtils?.getHotmailListToggleLabel;
|
||||||
const HOTMAIL_LIST_EXPANDED_STORAGE_KEY = 'multipage-hotmail-list-expanded';
|
const HOTMAIL_LIST_EXPANDED_STORAGE_KEY = 'multipage-hotmail-list-expanded';
|
||||||
const sidepanelUpdateService = window.SidepanelUpdateService;
|
const sidepanelUpdateService = window.SidepanelUpdateService;
|
||||||
|
|
||||||
|
btnAutoCancelSchedule?.remove();
|
||||||
const MAIL_PROVIDER_LOGIN_CONFIGS = {
|
const MAIL_PROVIDER_LOGIN_CONFIGS = {
|
||||||
'163': {
|
'163': {
|
||||||
label: '163 邮箱',
|
label: '163 邮箱',
|
||||||
@@ -745,6 +748,7 @@ function formatCountdown(remainingMs) {
|
|||||||
function formatScheduleTime(timestamp) {
|
function formatScheduleTime(timestamp) {
|
||||||
return new Date(timestamp).toLocaleString('zh-CN', {
|
return new Date(timestamp).toLocaleString('zh-CN', {
|
||||||
hour12: false,
|
hour12: false,
|
||||||
|
timeZone: DISPLAY_TIMEZONE,
|
||||||
month: '2-digit',
|
month: '2-digit',
|
||||||
day: '2-digit',
|
day: '2-digit',
|
||||||
hour: '2-digit',
|
hour: '2-digit',
|
||||||
@@ -793,6 +797,13 @@ function renderScheduledAutoRunInfo() {
|
|||||||
|
|
||||||
const remainingMs = countdown.at - Date.now();
|
const remainingMs = countdown.at - Date.now();
|
||||||
autoScheduleBar.style.display = 'flex';
|
autoScheduleBar.style.display = 'flex';
|
||||||
|
if (btnAutoRunNow) {
|
||||||
|
btnAutoRunNow.hidden = false;
|
||||||
|
btnAutoRunNow.textContent = currentAutoRun.phase === 'waiting_interval' ? '立即继续' : '立即开始';
|
||||||
|
}
|
||||||
|
if (btnAutoCancelSchedule) {
|
||||||
|
btnAutoCancelSchedule.hidden = true;
|
||||||
|
}
|
||||||
autoScheduleTitle.textContent = countdown.title;
|
autoScheduleTitle.textContent = countdown.title;
|
||||||
autoScheduleMeta.textContent = remainingMs > 0
|
autoScheduleMeta.textContent = remainingMs > 0
|
||||||
? `${countdown.note ? `${countdown.note},` : ''}剩余 ${formatCountdown(remainingMs)}`
|
? `${countdown.note ? `${countdown.note},` : ''}剩余 ${formatCountdown(remainingMs)}`
|
||||||
@@ -1707,7 +1718,10 @@ function formatDateTime(timestamp) {
|
|||||||
if (!Number.isFinite(value) || value <= 0) {
|
if (!Number.isFinite(value) || value <= 0) {
|
||||||
return '未使用';
|
return '未使用';
|
||||||
}
|
}
|
||||||
return new Date(value).toLocaleString('zh-CN', { hour12: false });
|
return new Date(value).toLocaleString('zh-CN', {
|
||||||
|
hour12: false,
|
||||||
|
timeZone: DISPLAY_TIMEZONE,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function getHotmailAvailabilityLabel(account) {
|
function getHotmailAvailabilityLabel(account) {
|
||||||
@@ -2067,7 +2081,10 @@ function updateStatusDisplay(state) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function appendLog(entry) {
|
function appendLog(entry) {
|
||||||
const time = new Date(entry.timestamp).toLocaleTimeString('zh-CN', { hour12: false });
|
const time = new Date(entry.timestamp).toLocaleTimeString('zh-CN', {
|
||||||
|
hour12: false,
|
||||||
|
timeZone: DISPLAY_TIMEZONE,
|
||||||
|
});
|
||||||
const levelLabel = LOG_LEVEL_LABELS[entry.level] || entry.level;
|
const levelLabel = LOG_LEVEL_LABELS[entry.level] || entry.level;
|
||||||
const line = document.createElement('div');
|
const line = document.createElement('div');
|
||||||
line.className = `log-line log-${entry.level}`;
|
line.className = `log-line log-${entry.level}`;
|
||||||
@@ -2850,7 +2867,15 @@ btnAutoContinue.addEventListener('click', async () => {
|
|||||||
btnAutoRunNow?.addEventListener('click', async () => {
|
btnAutoRunNow?.addEventListener('click', async () => {
|
||||||
try {
|
try {
|
||||||
btnAutoRunNow.disabled = true;
|
btnAutoRunNow.disabled = true;
|
||||||
await chrome.runtime.sendMessage({ type: 'START_SCHEDULED_AUTO_RUN_NOW', source: 'sidepanel', payload: {} });
|
const waitingInterval = currentAutoRun.phase === 'waiting_interval';
|
||||||
|
await chrome.runtime.sendMessage({
|
||||||
|
type: waitingInterval ? 'SKIP_AUTO_RUN_COUNTDOWN' : 'START_SCHEDULED_AUTO_RUN_NOW',
|
||||||
|
source: 'sidepanel',
|
||||||
|
payload: {},
|
||||||
|
});
|
||||||
|
if (waitingInterval) {
|
||||||
|
showToast('已跳过当前倒计时,自动流程将立即继续。', 'info', 1800);
|
||||||
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
showToast(err.message, 'error');
|
showToast(err.message, 'error');
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
Reference in New Issue
Block a user