Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

下载文件名问题和zip描述信息改动等(掺入一些灵魂的 #54

Open
wants to merge 73 commits into
base: dev
Choose a base branch
from

Conversation

dynilath
Copy link

和之前的那个pr差不多,主要是修了些问题。

1,新的文件名控制。

在exhentai浏览画廊单独一页时,比较大的png都会变成jpg,比较小的png会保持png。具体是否会压缩的分界点和图片源的链接带宽有关系。这也即是说原本是png的画廊下载的文件实际是png还是jpg完全无法简单预计。
除此之外,gif文件也会被下载成jpg。
这里采用了另一种办法:在ehentai的画廊页面里,每一页预览的title里面包含了原本的文件名。单独一页中的顶部和底部显示的文件名是压缩转码后的文件名。我使用这些文件名取代了原本的rename_map机制。
具体工作方式如下:

  • 在TASK_STATE_SCAN_PAGE阶段,从画廊获取原文件名,存入fid_2_original_file_name_map
    此时如果出现重名,添加"_1"到文件名末尾,仍然重名则使用"_2",以此类推
  • 在TASK_STATE_SCAN_IMG阶段,从单独页上获取实际文件名(主要是扩展名),存入fid_2_file_name_map
  • 在TASK_STATE_SCAN_IMG阶段,从单独页上获取文件体积信息,存入fid_2_file_size_map
  • 保存文件时直接使用获取到的文件名,无需最后再改名

2,zip描述信息改动

把h.json里面的一些信息搬到了zip里,包括gjname、gnname、tags、total、title、rename_ori、download_ori、url、fid_fname_map。最后这个task.fid_fname_map是上述的文件名控制用到的,用于描述第几页文件名为何。
这使得zip文件能够自我描述比较完整的画廊信息,在TASK_STATE_SCAN_PAGE阶段中,这些信息也用于检测zip文件是否需要重新下载等等。
这也使得载入其他方式转移来的文件成为可能,让xehentai有可能成为一个下载画廊管理软件。

3,scan_downloaded和prescan_downloaded

由于上述文件名控制原理,到TASK_STATE_SCAN_IMG的时候才能知道实际的文件名。

prescan_downloaded负责扫描zip文件的描述信息。通过以下四个方面决定如何操作该zip:

  • fid_fname_map是否存在,其长度是否等于total。不存在或者小于total都表示这个文件不太像这个软件下载的,由于可能是早前版本下载的,所以先解压出来重新下。
  • download_ori不匹配,解压出来重新下。但如果zip文件download_ori为True,而task的download_ori为False,那就不管。
  • rename_ori不匹配,最好的办法我想是根据fid_fname_map直接在TASK_STATE_SCAN_PAGE后就改名。但目前是解压出来重新下。
  • url不匹配。这种情况很可能是想用4k扫图替换风大扫图,解压出来重新下。

scan_downloaded主要负责下了一半的东西暂停继续。将下载目录中的文件和fid_2_file_size_map中的数据对比,如果通过对比则不会加入page_q。

4,一些小问题

画廊名称结尾有多个.时会被win系统全部吃掉。更改了一下filename_filter。
由于重新启动时,图片源的ip会发生变化,画廊会更新(尤其是ongoing的画廊),tag也会更新(尤其是早前下载的新画廊)。所以重新载入TASK_STATE_DOWNLOAD状态的任务时,改为退回到TASK_STATE_GET_META状态。

…to jpg format by exhentai, it leaves a problem.
…sidering write the id - name relational mapping into files.
ignore vs files
glob.escape is not supported in python 2.x, use other method to filter files instead.
output zipfile meta into xehdone, nothing more yet.
@fffonion
Copy link
Owner

fffonion commented Dec 16, 2018

那么♂多,待我看看

dynilath and others added 6 commits November 10, 2019 19:20
The most noteworthy is that reload url had changed a bit. Now it can be
mix-up of letters and numbers and dashes.
when load from h.json, failcode of task needs reset
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants