我好像把鱼佬的通用图片上传插件的重复上传 bug 给修复好了

38 条回复
171 次浏览

起因是鱼佬的图床插件偶尔会出现生成两个图床链接的 bug,鱼佬最近比较忙一直没修,我在天才程序员的帮助下,做了一点修复,应该是修好了,我完全不懂代码,全靠 Codex 指挥,修复点如下(基于 github 仓库路径):
一、路径:src/packages/universal-image-uploader/index.ts,修改上传识别逻辑:
1、在 function initPasteUpload 上方加入:

复制
function dedupeImageFiles(files: File[]): File[] {
  const list: File[] = []
  const seen = new Set<string>()

  for (const file of files) {
    if (!file?.type?.includes('image')) continue

    const sig = `${file.type}|${file.size}`
    if (seen.has(sig)) continue

    seen.add(sig)
    list.push(file)
  }

  return list
}

function collectClipboardImageFiles(cd: DataTransfer): File[] {
  const itemFiles: File[] = []
  const items = cd.items ? Array.from(cd.items) : []

  for (const item of items) {
    if (item?.kind === 'file' && item.type?.includes('image')) {
      const file = item.getAsFile?.()
      if (file) itemFiles.push(file)
    }
  }

  if (itemFiles.length > 0) return dedupeImageFiles(itemFiles)

  const files = cd.files ? Array.from(cd.files) : []
  return dedupeImageFiles(files)
}

2、initPasteUpload()里的 const list: File[] = []至 if (f && f.type && f.type.includes('image')) addIfNew(f)的部分,包括后边的一个},全部删除,替换为:
const list = collectClipboardImageFiles(cd)

二、顺便改了 UI 显示的两处翻译(英文和繁体处同理)。
路径:src/packages/universal-image-uploader/constants.ts
proxy_none: '无代理' 改为了 '不使用图片代理'
multi_host_none: '同时上传至' 改为了 '仅上传至主图床'

修改的是源码,还需要构建新的 universal-image-uploader.user.js 脚本才能使用。

几乎看不懂这些代码的含义是什么,但是测试了七八次,没有再次出现‘启用粘贴上传功能’时在 UI 面板和评论框出现两处图片链接的情况了,再测试几天如果没问题我就提交合并分支给鱼佬。

再次感谢鱼佬
插件原地址: https://2libra.com/post/open-source-sharing/8kmx340

兔友们也可以测试一下是不是真的修复了。

  • 附言 1

    找了个临时的文件中转站传上去了: 通用图片上传助手-修复版



  • 附言 2

    鱼佬已合并 PR,大家可以直接更新鱼佬的油猴脚本使用了,不用再单独下我这个

都听我说!
OP

我没有油猴的账号,而且也不会持续维护,就先不在油猴发了,如果改完没问题我就提交分支合并到鱼佬的主线仓库

前排打手

我用这个脚本有一段时间是俩上传,现在一直都是只有一个了,不知道我这边是咋变好的force_smile

大平衡者
GRD

厉害啊,感谢,有空我再看看。
也欢迎提交 PR。666

展开 1 条评论
混沌

我那天在项目下提了 issue ,不同的软件截图效果也不一致,windows 系统有没有影响暂时不确定

展开 2 条评论
展开 4 条评论

发表一个评论

R保持