dsh-go-exam-helper 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/payload/VERSION +1 -1
- package/payload/watch.mjs +29 -1
package/package.json
CHANGED
package/payload/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.2.
|
|
1
|
+
1.2.1
|
package/payload/watch.mjs
CHANGED
|
@@ -144,10 +144,36 @@ async function shoot (p) {
|
|
|
144
144
|
return file
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
+
|
|
148
|
+
// 读屏被掐断的状态:只在开始时提醒一次,别刷屏
|
|
149
|
+
function noteReadFault (why) {
|
|
150
|
+
state.fault = true
|
|
151
|
+
const now = Date.now()
|
|
152
|
+
if (!state.faultAt || now - state.faultAt > 120_000) {
|
|
153
|
+
state.faultAt = now
|
|
154
|
+
log('读屏被系统停止', String(why || '').slice(0, 40))
|
|
155
|
+
if (pc) pc.callTool('notify', { title: '答题助手:读屏停了', text: '切到 DSH 一次(或点悬浮球)再回去继续答题,就会自动恢复' }).catch(() => {})
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
function clearReadFault () {
|
|
160
|
+
if (!state.fault) return
|
|
161
|
+
state.fault = false
|
|
162
|
+
state.faultAt = 0
|
|
163
|
+
log('读屏恢复')
|
|
164
|
+
}
|
|
165
|
+
|
|
147
166
|
async function tick (p) {
|
|
148
167
|
const t0 = Date.now()
|
|
149
168
|
const r = await withTimeout(p.callTool('screen', {}), 6000, '读屏')
|
|
150
169
|
const dump = r.text || ''
|
|
170
|
+
// 手机操控会话被系统断掉(息屏、切后台、用户点了停)时,桥接返回 isError 而不是抛错,
|
|
171
|
+
// 这时候要明确告诉用户,否则看起来就是"不动了"。
|
|
172
|
+
if ((r.raw && r.raw.isError) || /已停止本次手机操作|屏幕关闭|没有权限|not allowed/i.test(dump)) {
|
|
173
|
+
noteReadFault(dump)
|
|
174
|
+
return
|
|
175
|
+
}
|
|
176
|
+
clearReadFault()
|
|
151
177
|
if (!dump || /DSH 自己的界面/.test(dump) || /· DSH Go ·/.test(dump)) { state.sig = ''; state.stable = 0; return }
|
|
152
178
|
|
|
153
179
|
let screen = parseScreen(dump)
|
|
@@ -360,6 +386,7 @@ log('题库', bank ? bank.size + ' 题' : '未加载(放 bank.json 到目录
|
|
|
360
386
|
const isConnError = (msg) => /closed|ECONNREFUSED|EPIPE|ECONNRESET|ENOENT/i.test(String(msg))
|
|
361
387
|
|
|
362
388
|
let p = null
|
|
389
|
+
let pc = null
|
|
363
390
|
let restarts = 0
|
|
364
391
|
let backoff = 1000
|
|
365
392
|
|
|
@@ -368,6 +395,7 @@ for (;;) {
|
|
|
368
395
|
if (!p) {
|
|
369
396
|
p = await connect()
|
|
370
397
|
await p.init()
|
|
398
|
+
pc = p
|
|
371
399
|
log(restarts === 0 ? '已连接桥接' : `已重连桥接 #${restarts}`)
|
|
372
400
|
backoff = 1000
|
|
373
401
|
}
|
|
@@ -385,5 +413,5 @@ for (;;) {
|
|
|
385
413
|
}
|
|
386
414
|
}
|
|
387
415
|
// 在答题页上把轮询压到 350ms(切题能更快被发现);其他时候保持 900ms 省电
|
|
388
|
-
await new Promise((res) => setTimeout(res, state.examSeen ? 350 : 900))
|
|
416
|
+
await new Promise((res) => setTimeout(res, state.fault ? 3000 : (state.examSeen ? 350 : 900)))
|
|
389
417
|
}
|