Files
lion 169925c197 同步桌面端更新:重连/重试、断线自动重连、图片容错与鉴权参数
移植桌面端 2025-03-22 之后的更新到移动端,保留移动端自身布局:

- 补齐管理子路径鉴权参数:缩略图、在线图片、/cache 请求带上 AuthCode;
  原线上靠临时热补丁脚本 online-reader-auth-fix.js 绕过,现由源码原生支持。
- 断线自动重连:新增 src/utils/taskSocket.js,指数退避重连并在重连后重新同步
  任务列表与用量;App.vue 接入页面可见性/网络恢复事件,Side.vue 显示连接状态。
- 未完成任务重试:新增 retryGallery action 与重试按钮;补 "等待压缩" 状态。
- 图片容错:新增 src/utils/progressiveImages.js,单图加载失败不再阻塞后续页,
  支持单图重试。
- store 修复:收藏列表残留(slice→splice)、action 内改 context.state、
  gid 判空(null→undefined)、deleteTask 跳过下一元素、resetUndone 用 state 授权码、
  axios 全局错误拦截器、getShortname 简化。
- 下载链接统一由 buildGalleryDownloadUrl 生成(按 gid 而非名字)。
- 构建配置:base 改为 /asserts/mobile/、固定产物名 index.js/index.css、新增 .gitignore。
- 升级 Vite 8.3.0 + @vitejs/plugin-vue 6.0.9,npm audit 0 漏洞。
- 新增 tests/(11 项 Node 测试,全部通过)。
2026-09-20 14:03:10 +08:00

34 lines
1.2 KiB
JavaScript

import test from 'node:test'
import assert from 'node:assert/strict'
import {startImages, settleImage, retryImage} from '../src/utils/progressiveImages.js'
test('a failed image does not prevent later pages from loading', () => {
const urls = ['first', 'second', 'third']
const items = startImages(urls)
settleImage(items, urls, items[0], true)
assert.equal(items[0].failed, true)
assert.equal(items[1].url, 'second')
settleImage(items, urls, items[1])
assert.equal(items[2].url, 'third')
})
test('retry does not append a duplicate page and bypasses a failed URL cache', () => {
const urls = ['first?gid=1', 'second', 'third']
const items = startImages(urls)
settleImage(items, urls, items[0], true)
retryImage(items[0])
assert.equal(items[0].src, 'first?gid=1&retry=1')
settleImage(items, urls, items[0])
assert.equal(items.length, 2)
assert.equal(items[0].failed, false)
})
test('late image events cannot append content after changing pages', () => {
const old = startImages(['old'])[0]
const urls = ['new', 'next']
const items = startImages(urls)
settleImage(items, urls, old)
assert.equal(items.length, 1)
assert.deepEqual(startImages([]), [])
})