amtoaer / bili-sync

由 Rust & Tokio 驱动的哔哩哔哩同步工具
https://bili-sync.allwens.work
MIT License
605 stars 44 forks source link

临时文件没有处理的问题 #158

Closed HWWHEN closed 3 months ago

HWWHEN commented 3 months ago

感谢大佬用爱发电,这里提点小问题,程序好像是只看数据库进行操作,并不会读取目录 有个别视频一直是tmp文件不会进行处理,不删除数据库文件就不会进行下载,而删除数据库文件后会重新下载全部 希望能加入读取目录的行为

amtoaer commented 3 months ago

“个别视频一直是tmp文件不会进行处理,不删除数据库文件就不会进行下载”这个问题应该不是一个整体,而是由两个分离的部分导致的误解:

  1. 程序下载失败后未即时删除临时文件,导致临时文件残留;
  2. 视频下载重试次数失败次数过多,导致视频被标记为失败,不会继续重试。

你遇到的应该是视频被标记为失败,但临时文件未即时清理的情况,这个问题本身和读取目录无关。

对于问题 1,看了一下现在的逻辑,只有成功下载、合并视频后才会删掉临时文件,这是一个 bug。需要调整一下逻辑,确保临时文件无论如何都被删除。

对于问题 2,我感觉你是想有一种办法能够允许继续重试已经标记为失败的视频,这个目前程序还没有支持,我打算在后续把它放到 webui 里。当前你可以手动打开数据库文件,在 videos 和 pages 表把你想要重试的视频的 status字段修改为 0,这会让程序在下次轮询时重新尝试该视频的下载。

至于读取目录这个需求,应该是问题 2 的延伸。你期待的是“删除数据库文件后触发下载,如果发现目的文件已存在则跳过下载过程”,从而通过删除数据库达到重新下载个别视频的目的?

我可以加入检查目的文件是否存在的处理作为一个短期的 workaround,但数据库的构建需要大量请求 b 站 api,删除数据库来触发少数几个视频的刷新代价有点太大了,如果可以(不嫌麻烦)的话还是推荐用上面的修改数据库的方法。

HWWHEN commented 3 months ago

非常感谢提供的分析和方案,原来有要做webui的计划!那可真是太棒了!

对于下载失败的情况,我觉得会是我网速比较慢的原因,3个视频同时下载,有的视频速度很快,有的就几乎不动,而这些不动的很可能就是消耗完重试次数,导致最终失败的视频。

而且我留意到还有许多up主信息/视频封面处理失败的error(error sending request for url),但是单独在浏览器打开错误里的链接是能正常展示的,感觉也是网速原因,别的视频在占用带宽导致了timeout,同时只下载一个视频应该能解决这种情况,后续能否加入这个配置项呢。

amtoaer commented 3 months ago

可以的,目前已经引入了 video 和 page 的并发下载配置,等下次发版应该就可以支持了。