✨新功能:置顶任意选项
你可以把自己常用的选项置顶显示,它们会始终显示在顶部(即使你没有启用“显示高级设置”也会始终显示)。这样不仅能快速找到需要的设置,而且平时也可以隐藏高级设置,让界面更加清爽。
把选项置顶有 2 种方法,分别为 PC 端和移动端设计:
- 把鼠标指针放到选项上,然后点击左侧的置顶图标。
- 长按选项名称 0.5 秒。
重新操作即可取消置顶。
🔧增加和调整了一些抓取设置
✨新增设置:不抓取下载过的作品
如果你启用了这个设置,那么下载器在抓取每个作品前会先检查它是否有下载记录,如果有就不抓取它。
这有助于增量更新,并减少不必要的抓取。
🔧在“ID 范围”设置里,你可以为图像作品和小说分别设置 ID 了
之前设置的 ID 不会区分作品类型,现在可以区分了。
✨新增设置:多图作品只抓取后几张图片
常见的使用场景:一些用户在发布恋活(Koikatsu)等游戏的人物卡或场景卡时,前面的图片都是截图展示,最后一张才是包含数据的卡片。你可以启用这个设置只抓取最后一张或多张图片。
提示:两个“只抓取”条件可以同时使用,此时图片只要满足其中一个条件就会保留。这样你可以跳过中间的图片,只下载首尾的图片。
例如:日月的多图作品最后一张就是人物卡。
✨新增设置:多图作品不抓取前几张图片
常见的使用场景:有些画师的作品的第一张图片有文字,第二张没有文字;或者第一张是全年龄的,第二张是 R-18 的。你可以启用这个设置来排除第一张或前几张图片。
注意:如果你设置的数字大于作品里的图片数量,那么下载器会保留最后一张图片,而非排除整个作品。
“只抓取”和“不抓取”的条件可以同时使用。不抓取的优先级更高:如果一张图片同时满足两种条件,下载器不会抓取它。
例如:こけもも的多图作品的第一张图片是有文字的,第二张图是纯净的。如果想排除第一张图片,就可以使用这个设置。
另外他的最后一张图片都是宣传图,所以也可以同时配合“多图作品不抓取后几张图片”使用。
✨新增设置:多图作品不抓取后几张图片
我把“不抓取多图作品的最后一张图片”设置升级成了“多图作品不抓取后几张图片”。之前只能固定排除最后 1 张图片,现在可以设置排除的数字了。
常见的使用场景:有些画师的作品的最后一张或几张图片是宣传图,或者是有马赛克的图片。你可以启用这个设置来排除最后一张或多张图片。
注意:如果你设置的数字大于作品里的图片数量,那么下载器会保留第一张图片,而非排除整个作品。
“只抓取”和“不抓取”的条件可以同时使用。不抓取的优先级更高:如果一张图片同时满足两种条件,下载器不会抓取它。
例如:儒宅 Ruzhai 的多图作品的最后一张都是宣传图,适合使用这个设置。
🗑移除设置:不抓取多图作品的最后一张图片
它被“多图作品不抓取后几张图片”取代了。
🔧增加和调整了一些命名设置
✨新增设置:不创建文件夹
该设置位于“下载”选项卡,当你下载单图作品或多图作品时可以不建立文件夹,直接保存到下载目录里。
🗑移除设置:只有一个抓取结果时不建立文件夹
它被“不创建文件夹”取代了。
✨新增设置:序号的起始值
你可以设置图片的序号从 0 开始还是从 1 开始。默认值是 0。
这个设置在“更多”-“命名”分类里。
✨新增设置:移除文件名里的 Emoji
这个设置在“更多”-“命名”分类里。
⚠️“更多”-“命名”里的一些命名设置的使用方式发生了变化
“更多”-“命名”里的一些设置会在保存文件时添加一层文件夹。之前下载器总是把新增的文件夹添加到文件名前面(这意味着它总是最后一层文件夹),现在你可以把它放到任意层级了。
这是一项优化,但需要注意的是,它们的使用方式发生了变化:除了启用设置,还需要在命名规则里插入对应的标记。如果你启用了这些设置里的任意一个,就必须使用新的方式:
- 为多图作品添加一层文件夹
- 使用第一个匹配的标签建立文件夹
- 把r18作品存入指定的文件夹里
你可以点击这些设置右侧的“帮助”按钮查看详细说明。
✨新增设置:为多图作品添加一层文件夹
它取代了旧的设置:“为每个作品建立单独的文件夹”,并且使用方法也有所不同:在命名规则里使用 {multi_image_folder} 代表该设置的效果。
之前当你启用该设置时,下载器总是把这个文件夹添加到文件名前面(这意味着它总是最后一层文件夹),现在你可以把它放到任意层级了。
🗑移除设置:为每个作品建立单独的文件
它被“为多图作品添加一层文件夹”取代了。
🗑移除设置:根据作品类型自动建立文件夹
它被新的命名标记取代了:{type_illust}、{type_manga}、{type_ugoira}、{type_novel}。
🔧调整设置:为 R-18(G) 作品添加一层文件夹
如果你启用了该设置,现在需要在命名规则里添加 {r18_g_folder} 才能使其发挥作用。
🔧调整设置:使用第一个匹配的标签建立文件夹
如果你启用了该设置,现在需要在命名规则里添加 {match_tag_folder} 才能使其发挥作用。
✨新增命名标记 {char_count}
{char_count}:小说的字数或单词数(取决于小说的语言),是数字。当作品不是小说时会被忽略。
✨新增命名标记 {sl}
其实以前就可以用 {sl},但是我没有把它放到公开的列表里。现在把它显示出来了。
因此移除了一个旧的设置:createFolderBySl(使用 sl 数据创建一层文件夹)。
🔧下载时,{px} 标记会使用图片的实际宽高
在多图作品里,每张图片的宽高可能都不一样。之前 {px} 标记总是会使用第一张图片的宽高,现在进行了优化:
如果下载的图片尺寸是“原图”(默认就是原图),那么 {px} 标记会使用图片的实际宽高。
😊增加了命名规则输入框的宽度
我注意到有些用户设置的命名规则很长,原本的输入框无法完全显示,所以我把输入框改成独占一行,并且可以显示多行内容,这样就可以完整的显示命名规则了。
🔧调整和增加了一些下载功能
✨新增设置:在已下载的作品上显示边框
该设置位于“更多”-“下载”分类里。
如果你启用了该设置,下载器会在已下载的作品上显示边框,这样你就可以方便的知道哪些作品下载过了。另外,在作品列表页面里(例如你的收藏页面),你也可以更容易的知道上次下载到了哪里,这有助于增量更新。
✨新增设置:管理下载记录
之前导出、导入、清除下载记录的按钮是放在“不下载重复文件”里的,但这次新增了 2 个依赖下载记录的功能,所以需要把管理下载的功能独立出来,这样条理更清晰。
另外还修改了相关功能的帮助文本。
✨新增设置:合并系列小说时的分割阈值
合并系列小说时,如果 EPUB 文件的体积太大,下载器可能会把它分割成多个文件。你可以设置分割的单位体积。
✨合并系列小说时,可以跳过之前已下载的部分
之前合并系列小说时,下载器总是会下载所有小说,不会排除已下载过的小说。现在我进行了优化:
在合并系列小说时,如果你启用了“不抓取下载过的作品”,下载器会跳过有下载记录的小说,只合并没有下载记录的小说。
从这个版本开始,当你合并系列小说时,下载器会为里面的每篇小说都生成下载记录(就像你单独下载过它们一样),所以当你再次合并同一个系列时,如果启用了“不抓取下载过的作品”,下载器就可以跳过以前合并过的小说,只合并新增的小说。
🔧调整和增加了一些增强功能
✨“预览作品”里添加了作品类型设置
你可以设置预览哪些类型的作品:单图作品、多图作品、动图。
🗑移除设置:预览动图
现在不需要这个单独的设置了,它被“预览作品”里的“动图”选项替代了。
✨预览作品时,如果这个作品含有被屏蔽的标签,下载器就不会显示预览
下载器在预览作品之前会检查它是否含有被屏蔽的标签。检查的设置是“不能含有的标签”和你在账号设置里 Mute 的标签。如果作品被排除,下载器就不会预览它,并且会显示对应的提示。
PS:该功能只影响“预览作品”。如果你依然想查看它,可以使用其他方式,例如点击缩略图上的图片查看器按钮,或者在缩略图上长按鼠标右键来显示图片。
✨新增设置:缩略图上按钮的位置
很早以前,下载器在缩略图上显示的第一个按钮是放大按钮(点击打开图片查看器)。所以按钮的左右位置设置也放在了它里面。但后来下载器不断增加了在缩略图上显示的按钮,所以早该把位置设置独立出来了。
现在把位置设置独立出来了。
🔧一些功能不再依赖“预览作品”
之前如果未启用“预览作品”功能,有两个功能也无法使用:“在缩略图上长按鼠标右键时显示大图”和“预览作品的详细信息”。
现在这些功能都独立了,不再依赖“预览作品”。
🐞修复 bug
🐞修复了启用了“把文件保存到用户上次选择的位置”时,一些文件可能丢失(未被下载)的问题
当用户启用了“把文件保存到用户上次选择的位置”,并且短时间内下载大量文件时,部分文件会丢失(未被下载)。
现在如果用户启用了“把文件保存到用户上次选择的位置”,会强制添加 200 ms 的下载间隔时间,解决了此问题。
🐞修复了查找作品缩略图时的一些问题
这次我添加了一个 debug 命令为作品缩略图添加边框,发现了一些问题并进行了修复:
- 在一些页面上,整个作品区域会被选中,并且里面的缩略图区域又被选中了一次,重复了,而且看起来就像是大圈套小圈一样。现在消除了前一种情况。
- 在小说排行榜上,没有查找到新出现的作品,现在修复。
🐞修复了单独保存小说里的图片时,可能创建多个文件夹的问题
触发场景:用户设置的小说保存格式是 TXT,并且在命名规则里 {id_num} 出现多次,第一次是在文件夹里。
下载器会把图片的 id 添加到第一次出现的小说 id 后面,但由于此时 id 在文件夹里,就导致了每个图片都创建了文件夹。
现在修复:只会在文件名的小说 id 后面添加图片 id。
🐞修复了“在搜索页面里移除已关注用户的作品”可能导致作品被清空的问题
以前可能没有这个问题,应该是 Pixiv 的某次改版导致的,现在经常出现。
原因是下载器查找用户 id 时,有时会匹配到列表容器元素,并把它移除,这导致所有作品都被移除了。现在修复。
🐞修复了在图片查看器里按 ESC 时,会同时取消手动选择作品的问题
🔀调整了部分设置的位置顺序
🔀“多图作品只抓取前几张图片”移动到了“更多”-“抓取”里
因为这个设置可能不太常用,所以我把它移到“更多”里了。
🔀“多图作品的图片数量上限”移动到了“更多”-“抓取”里
因为这个设置可能不太常用,所以我把它移到“更多”里了。
🔀“把文件保存到用户上次选择的位置”移动到了“更多”-“下载”里
我注意到一些用户在没有必要使用“把文件保存到用户上次选择的位置”时,依然启用了该设置。这个设置从名字上可能有一定误导性,如果用户不看详细说明,可能想当然的就启用了。而且我觉得这个设置只适合少数用户使用,所以将其移动到了“更多”-“下载”里。
😊优化用户体验,并添加了一些帮助信息
😊解决了合并系列小说时,导出日志功能可能不生效的问题
这个不是 bug,不过为了减少用户的困惑,进行了针对性优化,以确保导出日志的时机为“下载完毕”时,可以导出合并系列小说的日志。
😊在下载器左下角添加了“获取帮助”按钮
我把之前的 Discord 按钮换成了“获取帮助”按钮,点击之后会显示提示,里面包含了 Discord 和 GitHub issues 的链接。
😊当浏览器把 .jpg 保存为 .jfif 时,显示提示
时不时就有用户遇到这个问题,所以下载器现在会检查这个问题,并在日志里显示提示。
😊在一些日志前面添加了 Emoji 符号
- 🛸 提示过滤条件
- 🚫 提示作品被排除的原因
- 💡 一些使用技巧
- ⚠️ 一些需要注意的信息
😊作品被排除时,会显示更详细的原因
当作品被排除时,如果排除原因里有多个子选项,下载器会显示它被排除的具体原因。
例如“作品类型”有 4 个子选项:插画、漫画、动图、小说。当作品被排除时,会显示它自己的类型。
这些日志例如:
下载器排除了一些作品,原因: 作品类型: 插画
下载器排除了一些作品,原因: 年龄限制: 全年龄
下载器排除了一些作品,原因: AI 生成
下载器排除了一些作品,原因: 图片数量: 单图作品
下载器排除了一些作品,原因: 图片的宽高比例: 竖图
😊鼠标经过设置项时,会显示浅色的背景颜色
这样用户可以更方便的知道光标位于哪个设置里,优化用户体验。
另外对于有多行的设置,鼠标经过时会显示在一整块背景颜色里,可以更清晰的知道其边界,避免与其他设置混淆。
♻️重构了一些代码
♻️拆分了在日志里显示已启用的过滤器的代码
之前 Filter.ts 同时负责显示提示和检查过滤条件,但是代码行数太多了,查看和修改都比较麻烦,所以我把显示提示的部分拆分到了 ShowEnabledFilter.ts 里。
♻️拆分了管理下载记录的代码
之前所有逻辑都在 DownloadRecord 里,但其实最核心、最常用的功能就是添加记录和查询记录。其他功能混在在同一个文件里降低了我查看、调试代码时的效率。现在我进行了拆分:
- DownloadRecord 负责添加和查询下载记录
- DownloadRecordManager 负责导入、导出、清空下载记录
♻️拆分了在新增的设置左边显示 new 图标的代码
之前这部分代码在 Option.ts 里,导致内容杂乱,现在拆分到 ShowNewIcon.ts 里。
♻️拆分了 Form 里美化表单和管理帮助内容的代码
之前 Form.ts 里有 3 种主要功能:绑定一些元素的事件、美化表单、管理帮助内容。
现在后两种功能都拆分到单独的文件里了,代码逻辑清晰了很多。
♻️简化了帮助按钮的配置
之前每个帮助按钮都要在 Form.ts 里配置它的 id、title、msg,每添加一个按钮就要在 Form 里添加一份配置。
现在改为在按钮上附带配置信息,这样 Form 里不需要单独保存配置了,降低了维护压力:
<button type="button" class="gray1 textButton showMsgBtn" data-title="_抓取多少作品" data-msg="_抓取多少作品的提示" data-xztext="_帮助"></button>提示按钮(点击后会显示帮助区域)也做了同样的优化。
♻️“在缩略图上长按鼠标右键时显示大图”与“预览作品”功能解耦
之前“在缩略图上长按鼠标右键时显示大图”依赖“预览作品”向它传递一些数据,如果关闭了“预览作品”功能,会导致“在缩略图上长按鼠标右键时显示大图”也无法使用。
现在进行解耦,并修复了一些边界情况可能会触发的 bug。
♻️“预览作品的详细信息”与“预览作品”功能解耦
之前因为两个功能在绑定事件、触发条件、加载作品数据等方面有相似之处,所以“预览作品的详细信息”功能的触发是由“预览作品”控制的。
虽然这样确实精简掉了一些代码,但是关闭“预览作品”时就无法使用“预览作品的详细信息”功能了。而且“预览作品的详细信息”本身的逻辑不算复杂,但是掺杂在复杂的“预览作品”里面,就很难理清楚了。
所以我把“预览作品的详细信息”功能独立出来了,不再依赖“预览作品”功能。
♻️QuickBookmark 模块在页面初始化时会减少一次请求
进入作品页面或刷新作品页面时,之前下载器会请求 2 次作品数据,一次是 DisplayThumbnailListOnMultiImageWorkPage,一次是 QuickBookmark。现在只会请求 1 次了,因为 QuickBookmark 在初始时会从缓存获取。
不过在之后切换到其他作品时,还是会发送 2 次,因为之后 QuickBookmark 的执行时机较晚,而且不使用已有的缓存,所以会重新发送一次请求。
♻️移除了一些不必要的 Promise 包装
以前的代码里有一些不必要的 return new Promise() 包装,现在改成了 async/await 风格。
PS:有少数本来就适合使用 Promise 对象的场景没有做修改,例如必须使用回调函数或者等待某个事件触发来 resolve 的场景。
♻️把所有 setTimeoutWorker.set 替换为 setTimeoutWorker.sleep
以前设计 setTimeoutWorker 的时候只写了 set 功能,需要传入回调函数,在指定时间后触发。现在发现这样做挺傻逼的,因为既然需要调用方传入回调函数,那完全可以让调用方自行执行回调函数,而 setTimeoutWorker 只要负责等待就好了。
所以我添加了 sleep 方法,并把所有 setTimeoutWorker.set 都替换成了 setTimeoutWorker.sleep,简洁了许多。
♻️把 Utils.sleep 替换为对 setTimeoutWorker.sleep 的封装
之前有些代码里用的是 Utils.sleep,有些是 setTimeoutWorker.sleep,不统一。
由于 setTimeoutWorker.sleep 在前台页面里可以完全替代 Utils.sleep,所以应该全都换成 setTimeoutWorker.sleep。
但考虑到 setTimeoutWorker.sleep 只有 sleep 这一个公开方法,而 Utils 包含更多功能,而且已经被很多模块引用了。所以我直接让 Utils.sleep return setTimeoutWorker.sleep,再把原来的两种 sleep 都统一成 Utils.sleep,调用起来更简洁,也减少了分歧。
♻️下载文件时使用 Fetch 代替 XHR
之前 Downloads.ts 里下载文件时(就是会显示在下载进度条上的文件),使用的是 XHR,但是它有个问题:C 盘剩余空间小于 4 GB 的话,可能无法下载体积较大的文件,即使是不到 10 MB 的文件,也可能会被浏览器强行中断下载,导致这个文件下载失败,并可能导致下载卡住。虽然这个问题发生的概率比较低,但由于下载器的用户数量比较多,所以隔三岔五就有人问我这个问题。
现在改为使用 Fetch,它没有这个问题,可以避免因为磁盘空间不足导致的错误。
PS:使用 Fetch 在下载时会略微增加内存占用,但不严重,即使是并发下载体积大的动图也没有问题。