Skip to content

Commit 0b4ffaf

Browse files
authored
Merge-build: v2.7.2
2 parents deca556 + 209b0ce commit 0b4ffaf

File tree

24 files changed

+396
-128
lines changed

24 files changed

+396
-128
lines changed

ComicSpider/pipelines.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,12 @@ def handle_task(spider, stats, task_obj):
9494
_tasks = spider.tasks[task_obj.taskid]
9595
_tasks.downloaded.append(task_obj)
9696
curr_progress = int(len(_tasks.downloaded) / _tasks.tasks_count * 100)
97-
if conf.isDeduplicate and curr_progress >= 100:
97+
if curr_progress >= 100:
9898
tasks_obj = spider.tasks[task_obj.taskid]
9999
if getattr(tasks_obj, 'meta_info', None):
100100
tasks_obj.meta_info.fin_callback(spider.tasks_path[tasks_obj.taskid])
101-
spider.sql_handler.add(task_obj.taskid)
101+
if conf.isDeduplicate:
102+
spider.sql_handler.add(task_obj.taskid)
102103
spider.Q('TasksQueue').send(task_obj, wait=True)
103104
stats.inc_value('image/downloaded')
104105

GUI/conf_dialog.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def retranslateUiAgain(self, Dialog):
7979
self.label_completer.setText(_translate("Dialog", res.GUI.Uic.confDia_labelPreset))
8080
self.label_6.setText(_translate("Dialog", res.GUI.Uic.confDia_labelClipDb))
8181
self.label_7.setText(_translate("Dialog", res.GUI.Uic.confDia_labelClipNum))
82-
self.metaTypeLabel.setText(_translate("Dialog", res.GUI.Uic.confDia_metaType))
82+
self.metaTypeLabel.setText(_translate("Dialog", res.GUI.Uic.confDia_dledHandle))
8383
self.concurr_numLabel.setText(_translate("Dialog", res.GUI.Uic.confDia_labelConcurrNum))
8484
# 添加cookie类型选项
8585
support = list(COOKIES_PLACEHOLDER.keys())
@@ -93,11 +93,11 @@ def retranslateUiAgain(self, Dialog):
9393
self.pypiSourceBox.setItemText(1, _translate("Dialog", "清华源"))
9494
self.pypiSourceBox.setItemText(2, _translate("Dialog", "阿里源"))
9595
self.pypiSourceBox.setItemText(3, _translate("Dialog", "华为源"))
96-
self.metaTypeBox.addItem("")
97-
self.metaTypeBox.addItem("")
98-
self.metaTypeBox.setItemText(0, _translate("Dialog", "-"))
99-
self.metaTypeBox.setItemText(1, _translate("Dialog", "ComicInfo.xml"))
100-
self.metaTypeBox.setCurrentIndex(0)
96+
self.dledHandleBox.addItem("")
97+
self.dledHandleBox.addItem("")
98+
self.dledHandleBox.setItemText(0, _translate("Dialog", "-"))
99+
self.dledHandleBox.setItemText(1, _translate("Dialog", ".cbz"))
100+
self.dledHandleBox.setCurrentIndex(0)
101101
self.cookiesBox.setCurrentText(support[0])
102102

103103
for k, ui_key in LANG.items():
@@ -178,8 +178,9 @@ def _switch_mode():
178178
theme_mgr.set_dark(conf.darkTheme)
179179
self.darkTheme.clicked.connect(_switch_mode)
180180
def _regular_update():
181-
self.puThread = ProjUpdateThread(self)
182-
Updater(self.gui).run()
181+
# self.puThread = ProjUpdateThread(self)
182+
# Updater(self.gui).run()
183+
self.gui.open_url_by_browser('https://doc.comicguispider.nyc.mn/changelog/history')
183184
self.updateBtn.clicked.connect(_regular_update)
184185
self.supportBtn.clicked.connect(lambda: CustomFlyout.make(
185186
view=SupportView(self), target=self.supportBtn, parent=self
@@ -193,8 +194,8 @@ def _tip_lang_change(idx):
193194
)
194195
self.langBox.activated.connect(_tip_lang_change)
195196
def _tip_meta_change(idx):
196-
match self.metaTypeBox.itemText(idx):
197-
case "ComicInfo.xml":
197+
match self.dledHandleBox.itemText(idx):
198+
case ".cbz":
198199
_meta_tip = "适配平台例如:ComicRack, Komga, kavita\n保存并内置重启后生效"
199200
case _:
200201
_meta_tip = ""
@@ -204,7 +205,7 @@ def _tip_meta_change(idx):
204205
orient=Qt.Horizontal, isClosable=True, position=InfoBarPosition.TOP,
205206
duration=5000, parent=self
206207
)
207-
self.metaTypeBox.activated.connect(_tip_meta_change)
208+
self.dledHandleBox.activated.connect(_tip_meta_change)
208209
self.cookiesBox.currentTextChanged.connect(self._on_cookie_type_changed)
209210
def _tip_on(is_checked: bool, tip_content=None):
210211
if is_checked:
@@ -236,7 +237,7 @@ def show_self(self): # can't naming `show`. If done, just run code once
236237
self.logLevelComboBox.setCurrentIndex(self.logLevelComboBox.findText(getattr(conf, "log_level")))
237238
self.pypiSourceBox.setCurrentIndex(getattr(conf, "pypi_source"))
238239
self.langBox.setCurrentIndex(self.langBox.findData(getattr(conf, "lang")))
239-
self.metaTypeBox.setCurrentIndex(self.metaTypeBox.findText(getattr(conf, "meta_type")))
240+
self.dledHandleBox.setCurrentIndex(self.dledHandleBox.findText(getattr(conf, "downloaded_handle")))
240241
# 仅当 初次confdia ui创建 & conf值设入ui后,才绑定槽函数
241242
if self._init_flag:
242243
self.bind_logic()
@@ -278,7 +279,7 @@ def save_conf(self):
278279
"sv_path": sv_path,
279280
"log_level": getattr(self, "logLevelComboBox").currentText(),
280281
"lang": getattr(self, "langBox").currentData(),
281-
"meta_type": getattr(self, "metaTypeBox").currentText(),
282+
"downloaded_handle": getattr(self, "dledHandleBox").currentText(),
282283
"concurr_num": getattr(self, "concurr_numEdit").value(),
283284
"isDeduplicate": getattr(self, "isDeduplicate").isChecked(),
284285
"addUuid": getattr(self, "addUuid").isChecked(),

GUI/gui.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -382,8 +382,13 @@ def retry_all():
382382
self.log.error(str(traceback.format_exc()))
383383
self.log = conf.cLog(name="GUI")
384384
self.BrowserWindow = None
385-
self.Q('InputFieldQueue').clear()
386-
QTimer.singleShot(10, lambda : self.setupUi(self))
385+
def safe_setup():
386+
if hasattr(self, 'p_crawler') and self.p_crawler and self.p_crawler.is_alive():
387+
QTimer.singleShot(70, safe_setup)
388+
else:
389+
self.Q('InputFieldQueue').clear()
390+
self.setupUi(self)
391+
QTimer.singleShot(10, safe_setup)
387392

388393
self.say(font_color(f"{self.res.reboot_tip}", cls='theme-highlight', size=4))
389394
QTimer.singleShot(50, retry_all)

GUI/manager/__init__.py

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import os
2-
import shlex
2+
import json
3+
from pathlib import Path
34
import subprocess
45
import typing as t
56

@@ -43,7 +44,7 @@ def init(self):
4344
def handle(self, task: t.Union[TasksObj, TaskObj]):
4445
if not getattr(self.gui, "BrowserWindow"):
4546
self.init()
46-
if not getattr(self.gui.tf, "tasks_progress_panel_flag"):
47+
if self.gui.tf and not getattr(self.gui.tf, "tasks_progress_panel_flag"):
4748
if not self._init_lock:
4849
self._init_lock = True
4950
self.gui.BrowserWindow.init_tasks_progress_panel(
@@ -116,12 +117,11 @@ def to_update(recv):
116117
except Exception:
117118
pass
118119
ver = recv.update_info.get("tag_name")
119-
log = str(conf.log_path.joinpath("update.log"))
120-
CustomInfoBar.show("", self.res.to_update % log,
120+
CustomInfoBar.show("", self.res.to_update,
121121
self.gui.textBrowser, self.proj.update_info.get("html_url"),
122122
f"""<{ver}>""", _type="SUCCESS")
123123
_close_thread()
124-
QTimer.singleShot(6000, lambda: self.to_update(ver, log))
124+
QTimer.singleShot(4000, lambda: self.to_update(ver))
125125

126126
def checked(recv):
127127
try:
@@ -164,13 +164,24 @@ def rerun(self):
164164
subprocess.Popen(cmd, cwd=exc_p, env=env)
165165
QTimer.singleShot(1000, self.gui.close)
166166

167-
def to_update(self, ver, log):
168-
python_version_arg = "'<3.14'"
169-
cmd = f"{uv_exc} tool install ComicGUISpider=={ver} --force --index-url {PYPI_SOURCE[conf.pypi_source]} --python {python_version_arg}"
167+
def to_update(self, ver):
168+
uv_env = {key: os.environ[key] for key in ('UV_TOOL_DIR', 'UV_TOOL_BIN_DIR') if key in os.environ}
169+
tool_dir = Path(uv_env['UV_TOOL_DIR'])
170170
if os.name == "nt":
171-
subprocess.Popen(["cmd", "/c", "start", "", "powershell", "-NoProfile", "-Command",
172-
f"{cmd} 2>&1 | Tee-Object -FilePath {shlex.quote(log)} ; Read-Host 'Press Enter to close'"])
171+
python_exc = tool_dir / "comicguispider" / "Scripts" / "python.exe"
173172
else:
174-
full = f"""{cmd} 2>&1 | tee -a {shlex.quote(log)} ; echo 'done'; read -n1 -s -r -p 'Press any key to close...'"""
175-
subprocess.Popen(["setsid", "sh", "-c", full], start_new_session=True)
173+
python_exc = tool_dir / "comicguispider" / "bin" / "python"
174+
with ori_path.joinpath("assets/update.txt").open("r", encoding="utf-8") as f:
175+
template = f.read()
176+
updater_script = template.replace(r"{uv_env_dict}", json.dumps(uv_env, ensure_ascii=False))
177+
script_path = tool_dir.joinpath("cgs_update.py")
178+
with open(script_path, "w", encoding="utf-8") as f:
179+
f.write(updater_script)
180+
args = [str(python_exc), str(script_path),
181+
'--uv-exc', uv_exc, '--version', ver,
182+
'--index-url', PYPI_SOURCE[conf.pypi_source]]
183+
if os.name == "nt":
184+
subprocess.Popen(args, creationflags=subprocess.CREATE_NEW_CONSOLE, env=env)
185+
else:
186+
subprocess.Popen(args, start_new_session=True, env=env)
176187
self.gui.close()

GUI/script/kemono.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -452,8 +452,6 @@ def run_kemono(self):
452452
self.say("input empty")
453453
return
454454

455-
self.say(font_color("""<br>🔔留意 Motrix 有任务开始即可<br>任务提示done后运行键会恢复,可继续接下一轮任务<br>""",
456-
cls='theme-highlight'))
457455
self.backend_thread = KemonoBackendThread(backend_kw, self)
458456
self.backend_thread.output_signal.connect(self.say)
459457
self.backend_thread.finished_signal.connect(self._on_kemono_finished)
@@ -533,6 +531,6 @@ def run(self):
533531
self.print(cleaned_line)
534532
exit_code = process.wait()
535533
if exit_code == 0:
536-
self.print(font_color("✅ done!", cls='theme-success'))
534+
self.print(font_color("✅ done! 运行键已恢复,可继续接下一轮任务 ヾ( ̄▽ ̄ )~~", cls='theme-success'))
537535
self.interface.runBtn.setEnabled(True)
538536
self.finished_signal.emit(exit_code)

GUI/uic/conf_dia.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,9 @@ def setupUi(self, Dialog):
105105
self.metaTypeLabel = StrongBodyLabel(Dialog)
106106
self.metaTypeLabel.setObjectName("metaTypeLabel")
107107
self.horizontalLayout_proxies.addWidget(self.metaTypeLabel)
108-
self.metaTypeBox = ComboBox(Dialog)
109-
self.metaTypeBox.setObjectName("metaTypeBox")
110-
self.horizontalLayout_proxies.addWidget(self.metaTypeBox)
108+
self.dledHandleBox = ComboBox(Dialog)
109+
self.dledHandleBox.setObjectName("dledHandleBox")
110+
self.horizontalLayout_proxies.addWidget(self.dledHandleBox)
111111
self.dialogVLayout.addLayout(self.horizontalLayout_proxies)
112112
self.horizontalLayout_label_completer = QtWidgets.QHBoxLayout()
113113
self.horizontalLayout_label_completer.setObjectName("horizontalLayout_label_completer")
@@ -208,7 +208,7 @@ def setupUi(self, Dialog):
208208
self.gridLayout_2.addLayout(self.dialogVLayout, 0, 0, 1, 1)
209209

210210
self.retranslateUi(Dialog)
211-
self.metaTypeBox.setCurrentIndex(-1)
211+
self.dledHandleBox.setCurrentIndex(-1)
212212
self.cancelBtn.clicked.connect(Dialog.reject) # type: ignore
213213
self.acceptBtn.clicked.connect(Dialog.accept) # type: ignore
214214
QtCore.QMetaObject.connectSlotsByName(Dialog)

GUI/uic/qfluent/components/cust.py

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -163,25 +163,23 @@ def __init__(self, conf_dia=None):
163163

164164
self.promoteLayout = QtWidgets.QHBoxLayout()
165165
self.promoteBtn = HyperlinkButton(FluentIcon.LINK, self.res.confDia_promote_url, self.res.confDia_promote_title)
166-
self.contentLabel = BodyLabel(self.res.confDia_promote_content)
167166
self.promoteLayout.addWidget(self.promoteBtn)
168-
self.promoteLayout.addWidget(self.contentLabel)
169167
self.promoteLayout.addItem(QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum))
170168

171169
self.contentLabel = BodyLabel(res.GUI.Uic.confDia_support_content)
172-
self.picLayout = QtWidgets.QHBoxLayout()
173-
self.aliPayLabel = ImageLabel(":/_support/alipay.png")
174-
self.aliPayLabel.scaledToWidth(int(self.width * 0.4))
175-
self.aliPayLabel.setBorderRadius(8, 8, 8, 8)
176-
self.picLayout.addWidget(self.aliPayLabel)
177-
vLine = QtWidgets.QFrame(self)
178-
vLine.setFrameShape(QtWidgets.QFrame.VLine)
179-
vLine.setFrameShadow(QtWidgets.QFrame.Sunken)
180-
self.picLayout.addWidget(vLine)
181-
self.wePayLabel = ImageLabel(":/_support/wepay.png")
182-
self.wePayLabel.scaledToWidth(int(self.width * 0.4))
183-
self.wePayLabel.setBorderRadius(8, 8, 8, 8)
184-
self.picLayout.addWidget(self.wePayLabel)
170+
# self.picLayout = QtWidgets.QHBoxLayout()
171+
# self.aliPayLabel = ImageLabel(":/_support/alipay.png")
172+
# self.aliPayLabel.scaledToWidth(int(self.width * 0.4))
173+
# self.aliPayLabel.setBorderRadius(8, 8, 8, 8)
174+
# self.picLayout.addWidget(self.aliPayLabel)
175+
# vLine = QtWidgets.QFrame(self)
176+
# vLine.setFrameShape(QtWidgets.QFrame.VLine)
177+
# vLine.setFrameShadow(QtWidgets.QFrame.Sunken)
178+
# self.picLayout.addWidget(vLine)
179+
# self.wePayLabel = ImageLabel(":/_support/wepay.png")
180+
# self.wePayLabel.scaledToWidth(int(self.width * 0.4))
181+
# self.wePayLabel.setBorderRadius(8, 8, 8, 8)
182+
# self.picLayout.addWidget(self.wePayLabel)
185183

186184
self.layout.addLayout(self.titleLayout)
187185
self.hLine = QtWidgets.QFrame(self)
@@ -190,7 +188,7 @@ def __init__(self, conf_dia=None):
190188
self.layout.addWidget(self.hLine)
191189
self.layout.addLayout(self.promoteLayout)
192190
self.layout.addWidget(self.contentLabel)
193-
self.layout.addLayout(self.picLayout)
191+
# self.layout.addLayout(self.picLayout)
194192
self.setFixedWidth(self.width)
195193
self.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
196194

README.md

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,16 @@
2929

3030
- 如上动图演示的多种使用方式,方便的内置重启,多开同时操作不同网站等
3131
- 开预览后随便点点就能下载,预览窗口充当于微型浏览器
32-
- 通过加减号,`0 全选``-3 选倒数三个` 等输入规则,方便指定选择
33-
- 基于翻页保留,体验如同塞进购物车
34-
- 预设,去重,加标识符等自定义设置
32+
- 丰富多样的输入规则,方便指定选择
33+
- 无感翻页保留选择,已下载记录等提示
34+
- 预设,去重,加标识符等各种自定义设置
3535

3636
**更多移步查阅 [🎸功能文档](https://doc.comicguispider.nyc.mn/feat/)**
3737

3838
## 📑介绍
3939

40-
都下载了,不点一下吗 👉 ⭐ [![stars](https://img.shields.io/github/stars/jasoneri/ComicGUISpider
41-
)](https://github.com/jasoneri/ComicGUISpider/stargazers) &emsp;
40+
👍 什么玩意啊,最好再召集多点人把star降到 0 吧 👍 本来就是没人说的话我自用出错才修,还得谢谢用这方法把我恶心了 👍
41+
ok的,`v2.7.2` 以后不发版只用 源码/tag 更新筛人了,更了什么修复什么也只会在软件内配置窗口更新按钮里写
4242

4343
| 网站 | 适用区域 | 补充说明 | 状态<br>(UTC+8) |
4444
|:--------------------------------------|:----:|:----------:|:----:|
@@ -63,18 +63,17 @@
6363

6464
#### 🎁 Features
6565

66-
✅ 新增 `元数据记录` 功能,例如 `.czb``ComicInfo.xml`,具体看 [`配置 > 元数据类型`](https://doc.comicguispider.nyc.mn/config/#%E4%BB%A3%E7%90%86-proxies)
6766
✅ 简化处理发布页域名相关流程
68-
`rvTool > 显示记录` 记录窗口新增 `搜索选中行` 按钮
69-
匹配记录提示,菜单操作增强
70-
71-
<img src="https://img.comicguispider.nyc.mn/file/1765701939059_feat-2.7.1-beta.2.png" alt="tag" width="400">
67+
`rvTool > 显示记录` 记录窗口新增 `搜索选中行` 按钮
68+
匹配记录提示,菜单操作增强 > [📷screenshot](https://img.comicguispider.nyc.mn/file/1765701939059_feat-2.7.1-beta.2.png)
69+
`元数据记录` 改成 `后处理`,下载完成的后处理,具体看 [`配置 > 后处理`](https://doc.comicguispider.nyc.mn/config/#%E4%BB%A3%E7%90%86-proxies)
70+
`kemono` 过滤规则 修复&增强 > [看📏过滤规则示例](https://doc.comicguispider.nyc.mn/feat/script.html#%F0%9F%9A%80-%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B) (注意字段更改及时更新本地过滤规则)
7271

7372
#### 🐞 Fix
7473

7574
✅ 修复代理状态时拷贝流程仍然出错,具体看 [`faq > 拷贝访问相关`](https://doc.comicguispider.nyc.mn/faq/#_2-%E7%88%AC%E8%99%AB)
76-
修复 jm 域名获取(保底简化处理流程保留)
77-
子进度条修复,大部分转用内置浏览器
75+
修复 jm 域名获取(保底简化处理流程保留), 子进度条修复
76+
修复 kb 缓存失败重启卡死;报错 'tasks_progress_panel_flag'; 章节的 `.cbz`;
7877

7978
> 可参考 [更新方法](https://jasoneri.github.io//ComicGUISpider/deploy/quick-start.html#_4-%E6%9B%B4%E6%96%B0) 进行更新
8079
@@ -113,11 +112,10 @@
113112
[Weblate](https://hosted.weblate.org/engage/comicguispider/) 托管实现多语言的翻译
114113

115114
<a href="https://hosted.weblate.org/engage/comicguispider/">
116-
<img src="https://hosted.weblate.org/widget/comicguispider/287x66-grey.png" alt="翻译状态" />
115+
<img src="https://hosted.weblate.org/widget/comicguispider/287x66-grey.png" alt="翻译状态" height="66" style="vertical-align: middle;" />
117116
</a>
118-
119-
<a href="https://afdian.com/a/jsoneri">
120-
<img src="https://img.comicguispider.nyc.mn/file/1765002001925_CGS-aifadian.png" alt="在爱发电支持我">
117+
<a href="https://ko-fi.com/jsoneri">
118+
<img src="https://img.comicguispider.nyc.mn/file/1766128193347_sponsor_kofi.gif" alt="ko-fi" height="66" style="vertical-align: middle;">
121119
</a>
122120

123121
## 🔇免责声明

assets/res/locale/en_US.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ GUI:
112112
confDia_labelPreset: "Preset"
113113
confDia_labelClipDb: "ClipDB"
114114
confDia_labelClipNum: "ClipEntries"
115-
confDia_metaType: "metaType"
115+
confDia_dledHandle: "dledHandle"
116116
confDia_labelConcurrNum: "ConcurrNum"
117117
confDia_cookies_placeholder: "Refer to the animated guide in the configuration documentation for cookie acquisition methods\nIncluding fields:\n"
118118
confDia_svPathWarning: "set Save Path failed, read rule by right-button"
@@ -122,7 +122,6 @@ GUI:
122122
confDia_updateDialog_dev: "New dev version available"
123123
confDia_supportBtn: "Support"
124124
confDia_promote_title: "Recommended VPN"
125-
confDia_promote_content: "need VPN?"
126125
confDia_promote_url: "https://hxlm.io/#/register?code=sZWBMyum"
127126
confDia_support_content: "Donations will use to buy domain etc.."
128127
confDia_tip_deduplicate_on: "Dedup mode, take effect after save and reboot"
@@ -180,4 +179,4 @@ Updater:
180179
ver_check_fail: "Version check failed - retry or check releases"
181180
update_ensure: "Confirm Update"
182181
doing: "Involves code and dependency updates, Wait a moment.."
183-
to_update: "🚧 Close main process and open new terminal for update, restart then look at version to determine whether update is success or not\nIf necessary, you can take screenshot of log path: [%s]"
182+
to_update: "🚧 Close main process for update, restart then look at version to determine whether update is success or not"

0 commit comments

Comments
 (0)