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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-go-exam-helper",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "DSH Go 答题助手:盯住考试页面,把答案弹在顶部通知里。题库可选,图形题走视觉。",
5
5
  "keywords": [
6
6
  "dsh",
package/payload/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.0
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
  }