Skip to content

Commit ada825d

Browse files
authored
Merge pull request #131 from Zeal-L/develop
Develop
2 parents cdc3680 + af92f4e commit ada825d

9 files changed

+7556
-7596
lines changed

poetry.lock

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/BiliPlus.py

+30-13
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from typing import TYPE_CHECKING
88

9+
import time
910
import requests
1011
from bs4 import BeautifulSoup
1112
from retrying import retry
@@ -72,7 +73,7 @@ def retrieveAvailableEpisode(self, episodes: list[BiliPlusEpisode], comic_id: st
7273
biliplus_html = ""
7374

7475
@retry(stop_max_delay=MAX_RETRY_SMALL, wait_exponential_multiplier=RETRY_WAIT_EX)
75-
def _(url: str) -> str | None:
76+
def _(url: str) -> str:
7677
try:
7778
res = requests.post(
7879
url,
@@ -83,27 +84,25 @@ def _(url: str) -> str | None:
8384
logger.warning(f"漫画id:{self.comic_id} 在BiliPlus获取漫画信息失败! 重试中...\n{e}")
8485
raise e
8586
if "未登录" in res.text:
86-
self.mainGUI.signal_message_box.emit(
87-
"您的BiliPlus Cookie无效,请更新您的BiliPlus Cookie"
88-
)
89-
return None
87+
return "cookie invalid"
9088
if 'src="http' not in res.text:
91-
self.mainGUI.signal_message_box.emit(
92-
"BiliPlus无此漫画的缓存记录\n"
93-
"请在BiliPlus的该漫画详情页面使用功能“获取未缓存索引”后重试"
94-
)
95-
return None
89+
return ""
9690
if res.status_code != 200:
9791
logger.warning(
9892
f"漫画id:{self.comic_id} 在BiliPlus爬取漫画信息失败! "
99-
"状态码:{res.status_code}, 理由: {res.reason} 重试中..."
93+
f"状态码:{res.status_code}, 理由: {res.reason} 重试中..."
10094
)
10195
raise requests.HTTPError()
10296
return res.text
10397

10498
try:
10599
biliplus_html = _(biliplus_detail_url)
106-
if None is biliplus_html:
100+
if "" == biliplus_html:
101+
return None
102+
if "cookie invalid" == biliplus_html:
103+
self.mainGUI.signal_message_box.emit(
104+
"您的BiliPlus Cookie无效,请更新您的BiliPlus Cookie!"
105+
)
107106
return None
108107
except requests.RequestException as e:
109108
logger.error(f"漫画id:{self.comic_id} 在BiliPlus重复获取漫画信息多次后失败!\n{e}")
@@ -133,9 +132,26 @@ def _(url: str) -> str | None:
133132
for ep in ep_items:
134133
if ep.img["src"] != "about:blank":
135134
ep_available.append(ep.a["href"].split("epid=")[1])
135+
136+
unlock_times = 0
136137
for ep in episodes:
137138
if str(ep.id) in ep_available:
139+
if ep.available is False:
140+
unlock_times += 1
138141
ep.available = True
142+
143+
if len(ep_available) == 0:
144+
msg = "BiliPlus无此漫画的缓存记录\n\n" \
145+
"请在BiliPlus的该漫画详情页面使用功能“获取未缓存索引”后重试\n\n"
146+
elif unlock_times != 0:
147+
msg = f"BiliPlus为本漫画额外解锁{unlock_times}个章节\n\n"
148+
else:
149+
msg = "BiliPlus未能为此漫画解锁更多章节\n\n"
150+
self.mainGUI.signal_information_box.emit(
151+
f"{msg}Ciallo~(∠・ω< )⌒★\n"
152+
"您的主动分享能温暖每一个漫画人\n"
153+
"请在BiliPlus漫画主页进入功能“查看已购漫画”展示你的实力!"
154+
)
139155
except requests.RequestException as e:
140156
msg = f"漫画id:{self.comic_id} 处理BiliPlus解锁章节数据多次后失败!"
141157
logger.error(msg)
@@ -180,6 +196,7 @@ def init_imgsList(self) -> bool:
180196
biliplus_img_url = (
181197
f"https://www.biliplus.com/manga/?act=read&mangaid={self.comic_id}&epid={self.id}"
182198
)
199+
biliplus_img_url += f"&t={time.time()}"
183200
biliplus_html = ""
184201

185202
@retry(stop_max_delay=MAX_RETRY_SMALL, wait_exponential_multiplier=RETRY_WAIT_EX)
@@ -221,7 +238,7 @@ def _() -> list[dict]:
221238
# ? 解析BiliPlus解锁章节图片地址
222239
try:
223240
biliplus_imgs_token = []
224-
if "获取凭证出错" in biliplus_html:
241+
if "获取凭证出错" in biliplus_html and 'src="http' not in biliplus_html:
225242
msg = f"《{self.comic_name}》章节:{self.title} " \
226243
"在BiliPlus上的章节共享者已退出登陆,下载失败!"
227244
logger.error(msg)

src/DownloadManager.py

-1
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,6 @@ def __thread__EpisodeTask(self, curr_id: int, epi: Episode) -> None:
167167
save_path = None
168168
if rate == 1:
169169
save_path = epi.save(imgs_path)
170-
epi.clearAfterSave(imgs_path)
171170

172171
self.updateTaskInfo(curr_id, rate)
173172
self.signal_rate_progress.emit(

src/Episode.py

+7-6
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import re
1111
import shutil
1212
from typing import TYPE_CHECKING
13-
from zipfile import ZipFile
13+
from zipfile import ZipFile, ZIP_DEFLATED
1414

1515
import piexif
1616
import requests
@@ -197,13 +197,13 @@ def _() -> list[dict]:
197197
############################################################
198198

199199
def clearAfterSave(self, imgs_path: list[str]) -> None:
200-
"""删除临时图片, 偶尔会出现删除失败的情况,故给与重试5次
200+
"""删除临时图片, 偶尔会出现删除失败的情况,故给与重试3次
201201
202202
Args:
203203
imgs_path (list): 临时图片路径列表
204204
"""
205205

206-
@retry(stop_max_attempt_number=5)
206+
@retry(stop_max_attempt_number=3)
207207
def _() -> None:
208208
for img in reversed(imgs_path):
209209
try:
@@ -297,6 +297,7 @@ def _() -> None:
297297
# 关闭所有图像, 释放内存
298298
for img in temp_imgs:
299299
img.close()
300+
self.clearAfterSave(imgs_path)
300301

301302
# 在pdf文件属性中记录章节标题作者和软件版本以及版权信息
302303
if not self.exif_setting:
@@ -370,7 +371,7 @@ def jpg_exif(img_path: str):
370371
logger.exception(e)
371372

372373
# 复制图片到文件夹
373-
shutil.copy2(
374+
shutil.move(
374375
img_path,
375376
os.path.join(self.epi_path, f"{str(index).zfill(3)}.{img_format}"),
376377
)
@@ -445,7 +446,7 @@ def saveToZip(self, imgs_path: list[str]) -> None:
445446
@retry(stop_max_attempt_number=5)
446447
def _() -> None:
447448
try:
448-
with ZipFile(f"{self.epi_path}.zip", "w") as z:
449+
with ZipFile(f"{self.epi_path}.zip", "w", compression=ZIP_DEFLATED) as z:
449450
# 压缩文件里不要子目录,全部存在根目录
450451
for root, _dirs, files in os.walk(self.epi_path):
451452
for file in files:
@@ -484,7 +485,7 @@ def saveToCbz(self, imgs_path: list[str]) -> None:
484485
@retry(stop_max_attempt_number=5)
485486
def _() -> None:
486487
try:
487-
with ZipFile(f"{self.epi_path}.cbz", "w") as z:
488+
with ZipFile(f"{self.epi_path}.cbz", "w", compression=ZIP_DEFLATED) as z:
488489
# 压缩文件里不要子目录,全部存在根目录
489490
for root, _dirs, files in os.walk(self.epi_path):
490491
for file in files:

src/ui/MangaUI.py

+7-13
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def _() -> None:
123123
self.present_comic_id = comic_id
124124
self.resolveEnable("resolving")
125125
comic = Comic(self.present_comic_id, self.mainGUI)
126-
self.updateComicInfoEvent(comic, "bilibili")
126+
self.updateComicInfoEvent(comic, "done")
127127

128128
self.mainGUI.lineEdit_manga_search_id.returnPressed.connect(_)
129129
self.mainGUI.pushButton_manga_search_id.clicked.connect(_)
@@ -138,7 +138,7 @@ def _(item: QListWidgetItem) -> None:
138138
self.present_comic_id = self.search_info[index]["id"]
139139
self.resolveEnable("resolving")
140140
comic = Comic(self.present_comic_id, self.mainGUI)
141-
self.updateComicInfoEvent(comic, "bilibili")
141+
self.updateComicInfoEvent(comic, "done")
142142

143143
self.mainGUI.listWidget_manga_search.itemDoubleClicked.connect(_)
144144

@@ -375,7 +375,7 @@ def updateComicInfoEvent(self, comic: Comic, resolve_type: str, _event: QEvent =
375375
376376
Args:
377377
comic (Comic): 漫画类实例
378-
resolve_type (str): 更新的解析类型
378+
resolve_type (str): 更新的进度类型
379379
"""
380380

381381
if self.mainGUI.label_resolve_status.text() == "":
@@ -392,7 +392,7 @@ def getComicInfo(self, comic: Comic, resolve_type: str) -> None:
392392
393393
Args:
394394
comic (Comic): 获取的漫画实例
395-
resolve_type (str): 更新的解析类型
395+
resolve_type (str): 更新的进度类型
396396
397397
"""
398398

@@ -785,7 +785,7 @@ def _() -> None:
785785
return
786786
self.resolveEnable("resolving")
787787
comic = Comic(self.present_comic_id, self.mainGUI)
788-
self.updateComicInfoEvent(comic, "bilibili")
788+
self.updateComicInfoEvent(comic, "done")
789789

790790
self.mainGUI.pushButton_resolve_detail.clicked.connect(_)
791791

@@ -802,7 +802,7 @@ def _() -> None:
802802
return
803803
self.resolveEnable("resolving")
804804
comic = BiliPlusComic(self.present_comic_id, self.mainGUI)
805-
self.updateComicInfoEvent(comic, "biliplus")
805+
self.updateComicInfoEvent(comic, "done")
806806

807807
self.mainGUI.pushButton_biliplus_resolve_detail.clicked.connect(_)
808808

@@ -869,7 +869,6 @@ def _() -> None:
869869
self.mainGUI.tabWidget_download_list.setCurrentIndex(0)
870870

871871
self.mainGUI.pushButton_chp_detail_download_selected.clicked.connect(_)
872-
self.mainGUI.pushButton_biliplus_detail_download_selected.clicked.connect(_)
873872

874873
###########################################################
875874

@@ -883,17 +882,12 @@ def resolveEnable(self, resolve_type: str) -> None:
883882
self.mainGUI.pushButton_resolve_detail.setEnabled(False)
884883
self.mainGUI.pushButton_biliplus_resolve_detail.setEnabled(False)
885884
self.mainGUI.pushButton_chp_detail_download_selected.setEnabled(False)
886-
self.mainGUI.pushButton_biliplus_detail_download_selected.setEnabled(False)
887885
else:
888886
self.mainGUI.pushButton_resolve_detail.setEnabled(True)
889887
self.mainGUI.pushButton_biliplus_resolve_detail.setEnabled(True)
890888

891-
if resolve_type == "bilibili":
889+
if resolve_type == "done":
892890
self.mainGUI.pushButton_chp_detail_download_selected.setEnabled(True)
893-
self.mainGUI.pushButton_biliplus_detail_download_selected.setEnabled(False)
894-
elif resolve_type == "biliplus":
895-
self.mainGUI.pushButton_chp_detail_download_selected.setEnabled(False)
896-
self.mainGUI.pushButton_biliplus_detail_download_selected.setEnabled(True)
897891

898892
############################################################
899893

src/ui/PySide_src/mainWindow.ui

-30
Original file line numberDiff line numberDiff line change
@@ -462,36 +462,6 @@
462462
</property>
463463
</widget>
464464
</item>
465-
<item>
466-
<widget class="QLabel" name="label_biliplus_empty">
467-
<property name="text">
468-
<string/>
469-
</property>
470-
</widget>
471-
</item>
472-
<item>
473-
<widget class="Line" name="line_11">
474-
<property name="orientation">
475-
<enum>Qt::Vertical</enum>
476-
</property>
477-
</widget>
478-
</item>
479-
<item>
480-
<widget class="QPushButton" name="pushButton_biliplus_detail_download_selected">
481-
<property name="enabled">
482-
<bool>false</bool>
483-
</property>
484-
<property name="maximumSize">
485-
<size>
486-
<width>130</width>
487-
<height>25</height>
488-
</size>
489-
</property>
490-
<property name="text">
491-
<string>下载BiliPlus选中章节</string>
492-
</property>
493-
</widget>
494-
</item>
495465
</layout>
496466
</item>
497467
</layout>

src/ui/PySide_src/mainWindow_ui.py

-21
Original file line numberDiff line numberDiff line change
@@ -333,25 +333,6 @@ def setupUi(self, MainWindow):
333333

334334
self.h_Layout_biliplus_detail.addWidget(self.label_resolve_status)
335335

336-
self.label_biliplus_empty = QLabel(self.widget_biliplus_detail)
337-
self.label_biliplus_empty.setObjectName(u"label_biliplus_empty")
338-
339-
self.h_Layout_biliplus_detail.addWidget(self.label_biliplus_empty)
340-
341-
self.line_11 = QFrame(self.widget_biliplus_detail)
342-
self.line_11.setObjectName(u"line_11")
343-
self.line_11.setFrameShape(QFrame.VLine)
344-
self.line_11.setFrameShadow(QFrame.Sunken)
345-
346-
self.h_Layout_biliplus_detail.addWidget(self.line_11)
347-
348-
self.pushButton_biliplus_detail_download_selected = QPushButton(self.widget_biliplus_detail)
349-
self.pushButton_biliplus_detail_download_selected.setObjectName(u"pushButton_biliplus_detail_download_selected")
350-
self.pushButton_biliplus_detail_download_selected.setEnabled(False)
351-
self.pushButton_biliplus_detail_download_selected.setMaximumSize(QSize(130, 25))
352-
353-
self.h_Layout_biliplus_detail.addWidget(self.pushButton_biliplus_detail_download_selected)
354-
355336

356337
self.h_Layout_widget_biliplus_detail.addLayout(self.h_Layout_biliplus_detail)
357338

@@ -922,8 +903,6 @@ def retranslateUi(self, MainWindow):
922903
self.pushButton_resolve_detail.setText(QCoreApplication.translate("MainWindow", u"B\u7ad9\u89e3\u6790", None))
923904
self.pushButton_biliplus_resolve_detail.setText(QCoreApplication.translate("MainWindow", u"BiliPlus\u89e3\u6790", None))
924905
self.label_resolve_status.setText("")
925-
self.label_biliplus_empty.setText("")
926-
self.pushButton_biliplus_detail_download_selected.setText(QCoreApplication.translate("MainWindow", u"\u4e0b\u8f7dBiliPlus\u9009\u4e2d\u7ae0\u8282", None))
927906
self.textBrowser_tutorial.setHtml(QCoreApplication.translate("MainWindow", u"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
928907
"<html><head><meta name=\"qrichtext\" content=\"1\" /><meta charset=\"utf-8\" /><style type=\"text/css\">\n"
929908
"p, li { white-space: pre-wrap; }\n"

0 commit comments

Comments
 (0)