接通审核中结果核对、受理记账与后续调度

This commit is contained in:
Longtail committed 2026-10-31 17:20:36 +08:00
1 parent d157c179c8
commit f0be4f5596
18 files changed
+510 -57

No files matched your search

+48 -14
View File
@@ -7,7 +7,7 @@
const owner=sessionStorage.getItem('auto-news-owner') || crypto.randomUUID();
sessionStorage.setItem('auto-news-owner',owner);
let run=null, working=false, halted=true, aborter=null, active=null, tickBusy=false;
let skipBusy=false, preparation=null;
let skipBusy=false, preparation=null, stopRevision=0, resultSeenAt=0;
const pending=new Map();
function rpc(route,body={}) {
return new Promise((resolve,reject)=>{
@@ -24,7 +24,7 @@
data.error?waiter.reject(new Error(data.error)):waiter.resolve(data.value);
});
const status=message=>document.dispatchEvent(new CustomEvent('dww11:connection-status',{detail:message}));
document.addEventListener('dww11:auto-stop',()=>{halted=true;aborter?.abort(new Error('流程已终止'));});
document.addEventListener('dww11:auto-stop',()=>{stopRevision++;halted=true;aborter?.abort(new Error('流程已终止'));});
function account() {
const element=document.querySelector('#mumucms_username');
if(!element)return null;
@@ -142,16 +142,41 @@
const local=loadLocal();
if(local?.id===job.id&&local.snapshot&&job.state==='awaiting_user_review') {
await rpc('event',{id:job.id,state:'user_submitting',epoch:run.epoch,snapshot:local.snapshot});
job.state='user_submitting';
job.state='user_submitting';job.snapshot=local.snapshot;
}
if(job.state==='user_submitting') {
// Result selectors intentionally await user-provided HTML; URL alone is not proof.
if(!editorPage(job) || (local?.clickedAt && Date.now()-local.clickedAt>45000)) {
await rpc('event',{id:job.id,state:'submit_unknown',error:'等待结果页 HTML 适配;候选页面:'+location.href});
await rpc('stop');
status('已记录候选结果页;尚不能自动核对。流程已暂停,请补充结果页 HTML。');
if(!['user_submitting','submit_unknown'].includes(job.state))return;
const snapshot=job.snapshot||local?.snapshot||{};
const result=window.DWW11Results?.inspect(document,location.href,snapshot);
if(result?.kind==='rejected'&&job.state==='user_submitting') {
await rpc('event',{id:job.id,state:'rejected',error:result.error});
status('网站明确拒绝本次提交,已暂停;核对并处理稿件后仍需亲手发表');return;
}
if(result?.kind==='accepted') {
if(result.author_uid!==job.account.uid||result.fid!==job.fid||result.title!==window.DWW11Results.clean(snapshot.title)) {
if(job.state==='user_submitting')await rpc('event',{id:job.id,state:'submit_unknown',error:'结果页标题、首帖作者或版块与提交任务不符'});
await rpc('stop');status('结果不匹配,已暂停,请人工核对');return;
}
}else if(job.state==='submit_unknown')status('发布结果待核对;不会重发、计数或换号。');
resultSeenAt ||= Date.now();
if(result.evidence.integrity_issues.some(x=>x.includes('尚未加载'))&&Date.now()-resultSeenAt<15000) {
status('已看到审核中详情,等待正文图片加载后核对');return;
}
const revision=stopRevision,epoch=run.epoch;
await rpc('accept',{id:job.id,...result});
sessionStorage.removeItem(SLOT);active=null;
// Re-read persistent control after accounting; Stop must suppress navigation and subsequent jobs.
run=await rpc('heartbeat',{account:account(),url:location.href,extension:extension()});
halted=!run.running;
if(!halted&&revision===stopRevision&&run.epoch===epoch)location.assign('https://www.dww11.com/');
else status('受理结果已保存;流程已暂停,请核对后明确继续');
return;
}
const clickedAt=local?.clickedAt||Number(job.submitted_at||0)*1000;
if(clickedAt&&Date.now()-clickedAt<45000) {
status(result?.prompt||result?.error||'等待网站提交结果,不会重复发表');return;
}
if(job.state==='user_submitting')await rpc('event',{id:job.id,state:'submit_unknown',error:result?.error||'提交结果证据不足,请打开对应帖子详情后核对'});
if(run.running)await rpc('stop');
status('发布结果待核对;打开对应详情页可继续核对,不会重发');
}
async function switchAccount() {
if(working||halted)return;
@@ -159,9 +184,10 @@
location.assign('https://www.dww11.com/');return;
}
const ext=extension(),button=document.querySelector('#dww11-extension-next');
if(!ext.ready||!ext.idle||!button||button.disabled) {status('请安装并重新加载带联动接口的换号插件');return;}
await rpc('switch-begin');
if(halted||!run?.running)return;
if(!ext.ready||!ext.idle||!button||button.disabled) {await rpc('stop');status('换号插件未就绪,流程已暂停,请检查插件后继续');return;}
const revision=stopRevision,epoch=run.epoch;
await rpc('switch-begin',{epoch});
if(halted||!run?.running||revision!==stopRevision)return;
button.click();status('正在换号;等待插件完成并核对新账号');
}
async function tick() {
@@ -181,7 +207,13 @@
if(run.active && run.owner===owner) {const saved=await rpc('current');if(saved.job) {active=saved.job;await observeResult(saved.job);}}
status(run.reason || '流程已暂停');return;
}
const next=await rpc('next',{account:account(),extension:extension()});run=next.run;
if(run.active&&run.owner===owner) {
const saved=await rpc('current');
if(saved.job&&['user_submitting','submit_unknown'].includes(saved.job.state)) {active=saved.job;await observeResult(saved.job);return;}
}
const revision=stopRevision,epoch=run.epoch;
const next=await rpc('next',{account:account(),extension:extension(),url:location.href});run=next.run;
if(revision!==stopRevision||run.epoch!==epoch)return;
if(skipBusy)return;
if(next.job)active=next.job;
if(next.action==='prepare'||(next.action==='resume'&&next.job.state==='preparing'))preparation=prepare(next.job);
@@ -193,6 +225,8 @@
}
else if(['importing','formatting'].includes(next.job.state))await fail(new Error('导入阶段发生中断,请检查编辑器和已上传图片后处理任务'));
else if(next.job.state==='needs_attention')status(next.job.error);
}else if(next.action==='home') {
if(!halted&&run.running)location.assign('https://www.dww11.com/');
}else if(next.action==='switch')await switchAccount();
else if(next.action==='switch_wait')status('等待换号结果;若插件已暂停,请人工处理后继续');
else if(next.action==='login')status('未能读取当前账号 UID,请登录并确认账号元素');