本地漫画支持多章节

This commit is contained in:
tonquer 2023-08-13 18:14:45 +08:00
parent 69bd22ab68
commit 97a2e18231
36 changed files with 10363 additions and 4103 deletions

View File

@ -2,6 +2,18 @@
# tonquer<tonquer@qq.com> # tonquer<tonquer@qq.com>
# https://github.com/tonquer/picacg-qt # https://github.com/tonquer/picacg-qt
###################################################################################### ######################################################################################
# Version: v1.4.6
# 2023/8/13
# 1) 本地漫画支持多章节
# Version: v1.4.5
# 2023/5/7
# 1) 修改上一页和上一章跳到最后 #252
# 2) 自动打卡功能
# 3) 新增新版本聊天室
# 4) 修复上下滚动可能出现回滚 #242
# 5) 收藏新增搜索功能
# Version: v1.4.4 # Version: v1.4.4
# 2023/3/19 # 2023/3/19
# 1) 优化非滚动模式下,放大后的清晰度问题 # 1) 优化非滚动模式下,放大后的清晰度问题

BIN
res/icon/clear_off.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
res/icon/clear_on.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Binary file not shown.

View File

@ -1,14 +1,12 @@
import os import os
import sys
from tools.langconv import Converter from tools.langconv import Converter
cmd = "pyside6-lupdate.exe" os.system("chcp 65001")
sts = os.system(cmd + " -no-obsolete -source-language zh_CN -target-language zh_HK ../src/tools/str.py -ts ../translate/str_hk.ts") sts = os.system("pyside6-lupdate.exe -no-obsolete -source-language zh_CN -target-language zh_HK ../src/tools/str.py -ts ../translate/str_hk.ts")
sts = os.system(cmd + " -no-obsolete -source-language zh_CN -target-language en_US ../src/tools/str.py -ts ../translate/str_en.ts") sts = os.system("pyside6-lupdate.exe -no-obsolete -source-language zh_CN -target-language en_US ../src/tools/str.py -ts ../translate/str_en.ts")
sts = os.system(cmd + " -no-obsolete -source-language zh_CN -target-language zh_HK ../ui -ts ../translate/ui_hk.ts")
sts = os.system(cmd + " -no-obsolete -source-language zh_CN -target-language en_US ../ui -ts ../translate/ui_en.ts")
sts = os.system("pyside6-lupdate.exe -no-obsolete -source-language zh_CN -target-language zh_HK ../ui -ts ../translate/ui_hk.ts")
sts = os.system("pyside6-lupdate.exe -no-obsolete -source-language zh_CN -target-language en_US ../ui -ts ../translate/ui_en.ts")
#
for tsFile in ["../translate/str_hk.ts", "../translate/ui_hk.ts"]: for tsFile in ["../translate/str_hk.ts", "../translate/ui_hk.ts"]:
f = open(tsFile, "r", encoding="utf-8") f = open(tsFile, "r", encoding="utf-8")
data = "" data = ""
@ -33,6 +31,5 @@ for tsFile in ["../translate/str_hk.ts", "../translate/ui_hk.ts"]:
f.write(data) f.write(data)
f.close() f.close()
cmd = "pyside6-lrelease.exe" sts = os.system("pyside6-lrelease.exe ../translate/str_en.ts ../translate/ui_en.ts -qm ../res/tr/tr_en.qm")
sts = os.system(cmd + " ../translate/str_en.ts ../translate/ui_en.ts -qm ../res/tr/tr_en.qm") sts = os.system("pyside6-lrelease.exe ../translate/str_hk.ts ../translate/ui_hk.ts -qm ../res/tr/tr_hk.qm")
sts = os.system(cmd + " ../translate/str_hk.ts ../translate/ui_hk.ts -qm ../res/tr/tr_hk.qm")

View File

@ -31,6 +31,7 @@ class ComicListWidget(BaseListWidget):
self.isDelMenu = False self.isDelMenu = False
self.isGame = False self.isGame = False
self.isLocal = False self.isLocal = False
self.isLocalEps = False
self.isMoveMenu = False self.isMoveMenu = False
self.openMenu = False self.openMenu = False
@ -113,7 +114,10 @@ class ComicListWidget(BaseListWidget):
widget.title = v.title widget.title = v.title
widget.picNum = v.picCnt widget.picNum = v.picCnt
widget.url = v.file widget.url = v.file
title += "<font color=#d5577c>{}</font>".format("(" + str(v.picCnt) + "P)") if len(v.eps) > 0:
title += "<font color=#d5577c>{}</font>".format("(" + str(len(v.eps)) + "E)")
else:
title += "<font color=#d5577c>{}</font>".format("(" + str(v.picCnt) + "P)")
if v.lastReadTime: if v.lastReadTime:
categories = "{} {}".format(ToolUtil.GetUpdateStrByTick(v.lastReadTime), Str.GetStr(Str.Looked)) categories = "{} {}".format(ToolUtil.GetUpdateStrByTick(v.lastReadTime), Str.GetStr(Str.Looked))
@ -247,6 +251,8 @@ class ComicListWidget(BaseListWidget):
assert isinstance(widget, ComicItemWidget) assert isinstance(widget, ComicItemWidget)
if self.isGame: if self.isGame:
QtOwner().OpenGameInfo(widget.id) QtOwner().OpenGameInfo(widget.id)
elif self.isLocalEps:
QtOwner().OpenLocalEpsBook(widget.id)
elif self.isLocal: elif self.isLocal:
QtOwner().OpenLocalBook(widget.id) QtOwner().OpenLocalBook(widget.id)
else: else:

View File

@ -54,7 +54,7 @@ Issues3 = "https://hub.fastgit.xyz/tonquer/picacg-qt/issues"
UpdateVersion = "v1.4.5" UpdateVersion = "v1.4.5"
RealVersion = "v1.4.5" RealVersion = "v1.4.5"
TimeVersion = "2023-5-7" TimeVersion = "2023-8-13"
Waifu2xVersion = "1.1.6" Waifu2xVersion = "1.1.6"

File diff suppressed because it is too large Load Diff

View File

@ -36,7 +36,7 @@ class Ui_Help(object):
self.scrollArea.setWidgetResizable(True) self.scrollArea.setWidgetResizable(True)
self.scrollAreaWidgetContents = QWidget() self.scrollAreaWidgetContents = QWidget()
self.scrollAreaWidgetContents.setObjectName(u"scrollAreaWidgetContents") self.scrollAreaWidgetContents.setObjectName(u"scrollAreaWidgetContents")
self.scrollAreaWidgetContents.setGeometry(QRect(0, 0, 753, 718)) self.scrollAreaWidgetContents.setGeometry(QRect(0, 0, 736, 744))
self.verticalLayout_3 = QVBoxLayout(self.scrollAreaWidgetContents) self.verticalLayout_3 = QVBoxLayout(self.scrollAreaWidgetContents)
self.verticalLayout_3.setObjectName(u"verticalLayout_3") self.verticalLayout_3.setObjectName(u"verticalLayout_3")
self.horizontalLayout = QHBoxLayout() self.horizontalLayout = QHBoxLayout()
@ -89,33 +89,10 @@ class Ui_Help(object):
self.gridLayout.addWidget(self.label_5, 3, 0, 1, 1) self.gridLayout.addWidget(self.label_5, 3, 0, 1, 1)
self.verCheck = QPushButton(self.widget_2)
self.verCheck.setObjectName(u"verCheck")
self.gridLayout.addWidget(self.verCheck, 1, 2, 1, 1)
self.logButton = QPushButton(self.widget_2)
self.logButton.setObjectName(u"logButton")
self.gridLayout.addWidget(self.logButton, 5, 2, 1, 1)
self.label_7 = QLabel(self.widget_2)
self.label_7.setObjectName(u"label_7")
self.label_7.setMinimumSize(QSize(80, 50))
self.label_7.setFont(font)
self.gridLayout.addWidget(self.label_7, 5, 0, 1, 1)
self.localTime = QLabel(self.widget_2)
self.localTime.setObjectName(u"localTime")
self.localTime.setFont(font)
self.gridLayout.addWidget(self.localTime, 4, 1, 1, 1)
self.dbCheck = QPushButton(self.widget_2) self.dbCheck = QPushButton(self.widget_2)
self.dbCheck.setObjectName(u"dbCheck") self.dbCheck.setObjectName(u"dbCheck")
self.gridLayout.addWidget(self.dbCheck, 4, 2, 1, 1) self.gridLayout.addWidget(self.dbCheck, 5, 2, 1, 1)
self.label_4 = QLabel(self.widget_2) self.label_4 = QLabel(self.widget_2)
self.label_4.setObjectName(u"label_4") self.label_4.setObjectName(u"label_4")
@ -124,23 +101,11 @@ class Ui_Help(object):
self.gridLayout.addWidget(self.label_4, 0, 0, 1, 1) self.gridLayout.addWidget(self.label_4, 0, 0, 1, 1)
self.localNum = QLabel(self.widget_2) self.localTime = QLabel(self.widget_2)
self.localNum.setObjectName(u"localNum") self.localTime.setObjectName(u"localTime")
self.localNum.setFont(font) self.localTime.setFont(font)
self.gridLayout.addWidget(self.localNum, 3, 1, 1, 1) self.gridLayout.addWidget(self.localTime, 5, 1, 1, 1)
self.label_9 = QLabel(self.widget_2)
self.label_9.setObjectName(u"label_9")
self.label_9.setFont(font)
self.gridLayout.addWidget(self.label_9, 1, 0, 1, 1)
self.version = QLabel(self.widget_2)
self.version.setObjectName(u"version")
self.version.setFont(font)
self.gridLayout.addWidget(self.version, 0, 1, 1, 1)
self.label_6 = QLabel(self.widget_2) self.label_6 = QLabel(self.widget_2)
self.label_6.setObjectName(u"label_6") self.label_6.setObjectName(u"label_6")
@ -149,33 +114,81 @@ class Ui_Help(object):
self.gridLayout.addWidget(self.label_6, 2, 0, 1, 1) self.gridLayout.addWidget(self.label_6, 2, 0, 1, 1)
self.label_11 = QLabel(self.widget_2)
self.label_11.setObjectName(u"label_11")
self.label_11.setFont(font)
self.gridLayout.addWidget(self.label_11, 4, 0, 1, 1)
self.upTimeLabel = QLabel(self.widget_2) self.upTimeLabel = QLabel(self.widget_2)
self.upTimeLabel.setObjectName(u"upTimeLabel") self.upTimeLabel.setObjectName(u"upTimeLabel")
self.upTimeLabel.setFont(font) self.upTimeLabel.setFont(font)
self.gridLayout.addWidget(self.upTimeLabel, 1, 1, 1, 1) self.gridLayout.addWidget(self.upTimeLabel, 1, 1, 1, 1)
self.verCheck = QPushButton(self.widget_2)
self.verCheck.setObjectName(u"verCheck")
self.gridLayout.addWidget(self.verCheck, 1, 2, 1, 1)
self.localNum = QLabel(self.widget_2)
self.localNum.setObjectName(u"localNum")
self.localNum.setFont(font)
self.gridLayout.addWidget(self.localNum, 3, 1, 1, 1)
self.openCmd = QPushButton(self.widget_2)
self.openCmd.setObjectName(u"openCmd")
self.gridLayout.addWidget(self.openCmd, 6, 1, 1, 1)
self.preCheckBox = QCheckBox(self.widget_2)
self.preCheckBox.setObjectName(u"preCheckBox")
self.gridLayout.addWidget(self.preCheckBox, 0, 2, 1, 1)
self.version = QLabel(self.widget_2)
self.version.setObjectName(u"version")
self.version.setFont(font)
self.gridLayout.addWidget(self.version, 0, 1, 1, 1)
self.label_9 = QLabel(self.widget_2)
self.label_9.setObjectName(u"label_9")
self.label_9.setFont(font)
self.gridLayout.addWidget(self.label_9, 1, 0, 1, 1)
self.logButton = QPushButton(self.widget_2)
self.logButton.setObjectName(u"logButton")
self.gridLayout.addWidget(self.logButton, 6, 2, 1, 1)
self.label_7 = QLabel(self.widget_2)
self.label_7.setObjectName(u"label_7")
self.label_7.setMinimumSize(QSize(80, 50))
self.label_7.setFont(font)
self.gridLayout.addWidget(self.label_7, 6, 0, 1, 1)
self.label_11 = QLabel(self.widget_2)
self.label_11.setObjectName(u"label_11")
self.label_11.setFont(font)
self.gridLayout.addWidget(self.label_11, 5, 0, 1, 1)
self.waifu2x = QLabel(self.widget_2) self.waifu2x = QLabel(self.widget_2)
self.waifu2x.setObjectName(u"waifu2x") self.waifu2x.setObjectName(u"waifu2x")
self.waifu2x.setFont(font) self.waifu2x.setFont(font)
self.gridLayout.addWidget(self.waifu2x, 2, 1, 1, 1) self.gridLayout.addWidget(self.waifu2x, 2, 1, 1, 1)
self.openCmd = QPushButton(self.widget_2) self.label_10 = QLabel(self.widget_2)
self.openCmd.setObjectName(u"openCmd") self.label_10.setObjectName(u"label_10")
self.label_10.setMinimumSize(QSize(80, 50))
self.label_10.setFont(font)
self.gridLayout.addWidget(self.openCmd, 5, 1, 1, 1) self.gridLayout.addWidget(self.label_10, 4, 0, 1, 1)
self.preCheckBox = QCheckBox(self.widget_2) self.localVer = QLabel(self.widget_2)
self.preCheckBox.setObjectName(u"preCheckBox") self.localVer.setObjectName(u"localVer")
self.localVer.setFont(font)
self.gridLayout.addWidget(self.preCheckBox, 0, 2, 1, 1) self.gridLayout.addWidget(self.localVer, 4, 1, 1, 1)
self.verticalLayout_2.addWidget(self.widget_2) self.verticalLayout_2.addWidget(self.widget_2)
@ -239,21 +252,23 @@ class Ui_Help(object):
self.label_3.setText(QCoreApplication.translate("Help", u"\u60f3\u63d0\u4f9b\u4e00\u4e9b\u5efa\u8bae\uff1f", None)) self.label_3.setText(QCoreApplication.translate("Help", u"\u60f3\u63d0\u4f9b\u4e00\u4e9b\u5efa\u8bae\uff1f", None))
self.pushButton.setText(QCoreApplication.translate("Help", u"Github Issue", None)) self.pushButton.setText(QCoreApplication.translate("Help", u"Github Issue", None))
self.label_5.setText(QCoreApplication.translate("Help", u"\u672c\u5730\u5e93\u6570\u91cf:", None)) self.label_5.setText(QCoreApplication.translate("Help", u"\u672c\u5730\u5e93\u6570\u91cf:", None))
self.verCheck.setText(QCoreApplication.translate("Help", u"\u68c0\u6d4b\u66f4\u65b0", None))
self.logButton.setText(QCoreApplication.translate("Help", u"\u6253\u5f00\u65e5\u5fd7\u76ee\u5f55", None))
self.label_7.setText(QCoreApplication.translate("Help", u"\u65e5\u5fd7:", None))
self.localTime.setText("")
self.dbCheck.setText(QCoreApplication.translate("Help", u"\u68c0\u6d4b\u66f4\u65b0", None)) self.dbCheck.setText(QCoreApplication.translate("Help", u"\u68c0\u6d4b\u66f4\u65b0", None))
self.label_4.setText(QCoreApplication.translate("Help", u"\u7248\u672c\u53f7:", None)) self.label_4.setText(QCoreApplication.translate("Help", u"\u7248\u672c\u53f7:", None))
self.localNum.setText("") self.localTime.setText("")
self.label_9.setText(QCoreApplication.translate("Help", u"\u4e0a\u6b21\u66f4\u65b0\u65f6\u95f4\uff1a", None))
self.version.setText(QCoreApplication.translate("Help", u"v1.2.8", None))
self.label_6.setText(QCoreApplication.translate("Help", u"waifu2x\u7248\u672c:", None)) self.label_6.setText(QCoreApplication.translate("Help", u"waifu2x\u7248\u672c:", None))
self.label_11.setText(QCoreApplication.translate("Help", u"\u672c\u5730\u6570\u636e\u4e0a\u6b21\u66f4\u65b0:", None))
self.upTimeLabel.setText(QCoreApplication.translate("Help", u"2021-11-27", None)) self.upTimeLabel.setText(QCoreApplication.translate("Help", u"2021-11-27", None))
self.waifu2x.setText(QCoreApplication.translate("Help", u"v1.0.8", None)) self.verCheck.setText(QCoreApplication.translate("Help", u"\u68c0\u6d4b\u66f4\u65b0", None))
self.localNum.setText("")
self.openCmd.setText(QCoreApplication.translate("Help", u"\u6253\u5f00\u63a7\u5236\u53f0", None)) self.openCmd.setText(QCoreApplication.translate("Help", u"\u6253\u5f00\u63a7\u5236\u53f0", None))
self.preCheckBox.setText(QCoreApplication.translate("Help", u"\u63a5\u53d7Beta\u7248\u672c\u66f4\u65b0", None)) self.preCheckBox.setText(QCoreApplication.translate("Help", u"\u63a5\u53d7Beta\u7248\u672c\u66f4\u65b0", None))
self.version.setText(QCoreApplication.translate("Help", u"v1.2.8", None))
self.label_9.setText(QCoreApplication.translate("Help", u"\u4e0a\u6b21\u66f4\u65b0\u65f6\u95f4\uff1a", None))
self.logButton.setText(QCoreApplication.translate("Help", u"\u6253\u5f00\u65e5\u5fd7\u76ee\u5f55", None))
self.label_7.setText(QCoreApplication.translate("Help", u"\u65e5\u5fd7:", None))
self.label_11.setText(QCoreApplication.translate("Help", u"\u672c\u5730\u6570\u636e\u4e0a\u6b21\u66f4\u65b0:", None))
self.waifu2x.setText(QCoreApplication.translate("Help", u"v1.0.8", None))
self.label_10.setText(QCoreApplication.translate("Help", u"\u672c\u5730\u5e93\u7248\u672c\uff1a", None))
self.localVer.setText("")
self.label_8.setText(QCoreApplication.translate("Help", u"\u65b0\u7248\u672c\uff1a", None)) self.label_8.setText(QCoreApplication.translate("Help", u"\u65b0\u7248\u672c\uff1a", None))
self.updateLabel.setText("") self.updateLabel.setText("")
self.updateButton.setText(QCoreApplication.translate("Help", u"\u524d\u5f80\u66f4\u65b0", None)) self.updateButton.setText(QCoreApplication.translate("Help", u"\u524d\u5f80\u66f4\u65b0", None))

View File

@ -16,8 +16,9 @@ from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QImage, QKeySequence, QLinearGradient, QPainter, QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform) QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QComboBox, QFrame, QGridLayout, from PySide6.QtWidgets import (QApplication, QComboBox, QFrame, QGridLayout,
QHBoxLayout, QLabel, QListWidgetItem, QPushButton, QHBoxLayout, QLabel, QLineEdit, QListWidgetItem,
QSizePolicy, QSpacerItem, QSpinBox, QWidget) QPushButton, QSizePolicy, QSpacerItem, QSpinBox,
QWidget)
from component.list.comic_list_widget import ComicListWidget from component.list.comic_list_widget import ComicListWidget
from component.list.tag_list_widget import TagListWidget from component.list.tag_list_widget import TagListWidget
@ -29,6 +30,17 @@ class Ui_Local(object):
Local.resize(628, 334) Local.resize(628, 334)
self.gridLayout_2 = QGridLayout(Local) self.gridLayout_2 = QGridLayout(Local)
self.gridLayout_2.setObjectName(u"gridLayout_2") self.gridLayout_2.setObjectName(u"gridLayout_2")
self.gridLayout_3 = QGridLayout()
self.gridLayout_3.setObjectName(u"gridLayout_3")
self.bookList = ComicListWidget(Local)
self.bookList.setObjectName(u"bookList")
self.bookList.setStyleSheet(u"")
self.gridLayout_3.addWidget(self.bookList, 0, 0, 1, 1)
self.gridLayout_2.addLayout(self.gridLayout_3, 3, 0, 1, 1)
self.horizontalLayout_2 = QHBoxLayout() self.horizontalLayout_2 = QHBoxLayout()
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
self.tagsList = TagListWidget(Local) self.tagsList = TagListWidget(Local)
@ -67,18 +79,7 @@ class Ui_Local(object):
self.horizontalLayout_2.addWidget(self.toolButton, 0, Qt.AlignRight) self.horizontalLayout_2.addWidget(self.toolButton, 0, Qt.AlignRight)
self.gridLayout_2.addLayout(self.horizontalLayout_2, 0, 0, 1, 1) self.gridLayout_2.addLayout(self.horizontalLayout_2, 1, 0, 1, 1)
self.gridLayout_3 = QGridLayout()
self.gridLayout_3.setObjectName(u"gridLayout_3")
self.bookList = ComicListWidget(Local)
self.bookList.setObjectName(u"bookList")
self.bookList.setStyleSheet(u"")
self.gridLayout_3.addWidget(self.bookList, 0, 0, 1, 1)
self.gridLayout_2.addLayout(self.gridLayout_3, 2, 0, 1, 1)
self.gridLayout_4 = QGridLayout() self.gridLayout_4 = QGridLayout()
self.gridLayout_4.setObjectName(u"gridLayout_4") self.gridLayout_4.setObjectName(u"gridLayout_4")
@ -168,7 +169,24 @@ class Ui_Local(object):
self.gridLayout_4.addLayout(self.horizontalLayout, 0, 0, 1, 1) self.gridLayout_4.addLayout(self.horizontalLayout, 0, 0, 1, 1)
self.gridLayout_2.addLayout(self.gridLayout_4, 3, 0, 1, 1) self.gridLayout_2.addLayout(self.gridLayout_4, 4, 0, 1, 1)
self.widget = QWidget(Local)
self.widget.setObjectName(u"widget")
self.horizontalLayout_3 = QHBoxLayout(self.widget)
self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
self.label = QLabel(self.widget)
self.label.setObjectName(u"label")
self.horizontalLayout_3.addWidget(self.label)
self.lineEdit = QLineEdit(self.widget)
self.lineEdit.setObjectName(u"lineEdit")
self.horizontalLayout_3.addWidget(self.lineEdit)
self.gridLayout_2.addWidget(self.widget, 0, 0, 1, 1)
self.retranslateUi(Local) self.retranslateUi(Local)
@ -194,5 +212,6 @@ class Ui_Local(object):
#if QT_CONFIG(shortcut) #if QT_CONFIG(shortcut)
self.jumpButton.setShortcut(QCoreApplication.translate("Local", u"Return", None)) self.jumpButton.setShortcut(QCoreApplication.translate("Local", u"Return", None))
#endif // QT_CONFIG(shortcut) #endif // QT_CONFIG(shortcut)
self.label.setText(QCoreApplication.translate("Local", u"\u641c\u7d22\uff1a", None))
# retranslateUi # retranslateUi

View File

@ -15,7 +15,8 @@ from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon, QFont, QFontDatabase, QGradient, QIcon,
QImage, QKeySequence, QLinearGradient, QPainter, QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform) QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QGridLayout, QListWidgetItem, QSizePolicy, from PySide6.QtWidgets import (QApplication, QGridLayout, QHBoxLayout, QLabel,
QListWidgetItem, QRadioButton, QSizePolicy, QSpacerItem,
QWidget) QWidget)
from component.list.comic_list_widget import ComicListWidget from component.list.comic_list_widget import ComicListWidget
@ -36,7 +37,26 @@ class Ui_LocalEps(object):
self.gridLayout_3.addWidget(self.bookList, 0, 0, 1, 1) self.gridLayout_3.addWidget(self.bookList, 0, 0, 1, 1)
self.gridLayout_2.addLayout(self.gridLayout_3, 1, 0, 1, 1) self.gridLayout_2.addLayout(self.gridLayout_3, 4, 0, 1, 1)
self.name = QLabel(LocalEps)
self.name.setObjectName(u"name")
self.gridLayout_2.addWidget(self.name, 0, 0, 1, 1)
self.horizontalLayout = QHBoxLayout()
self.horizontalLayout.setObjectName(u"horizontalLayout")
self.showWaifu2x = QRadioButton(LocalEps)
self.showWaifu2x.setObjectName(u"showWaifu2x")
self.horizontalLayout.addWidget(self.showWaifu2x)
self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.horizontalLayout.addItem(self.horizontalSpacer)
self.gridLayout_2.addLayout(self.horizontalLayout, 2, 0, 1, 1)
self.retranslateUi(LocalEps) self.retranslateUi(LocalEps)
@ -46,5 +66,7 @@ class Ui_LocalEps(object):
def retranslateUi(self, LocalEps): def retranslateUi(self, LocalEps):
LocalEps.setWindowTitle(QCoreApplication.translate("LocalEps", u"\u672c\u5730\u6f2b\u753b\u7ae0\u8282", None)) LocalEps.setWindowTitle(QCoreApplication.translate("LocalEps", u"\u672c\u5730\u6f2b\u753b\u7ae0\u8282", None))
self.name.setText("")
self.showWaifu2x.setText(QCoreApplication.translate("LocalEps", u"\u53ea\u663e\u793aWaifu2x", None))
# retranslateUi # retranslateUi

View File

@ -101,9 +101,9 @@ class Ui_Main(object):
self.indexView = IndexView() self.indexView = IndexView()
self.indexView.setObjectName(u"indexView") self.indexView.setObjectName(u"indexView")
self.subStackWidget.addWidget(self.indexView) self.subStackWidget.addWidget(self.indexView)
self.localEpsReadView = LocalEpsReadView() self.localReadEpsView = LocalEpsReadView()
self.localEpsReadView.setObjectName(u"localEpsReadView") self.localReadEpsView.setObjectName(u"localReadEpsView")
self.subStackWidget.addWidget(self.localEpsReadView) self.subStackWidget.addWidget(self.localReadEpsView)
self.chatNewView = ChatNewView() self.chatNewView = ChatNewView()
self.chatNewView.setObjectName(u"chatNewView") self.chatNewView.setObjectName(u"chatNewView")
self.subStackWidget.addWidget(self.chatNewView) self.subStackWidget.addWidget(self.chatNewView)

View File

@ -42,7 +42,7 @@ from view.info.game_info_view import GameInfoView
from view.read.read_view import ReadView from view.read.read_view import ReadView
from view.search.search_view import SearchView from view.search.search_view import SearchView
from view.setting.setting_view import SettingView from view.setting.setting_view import SettingView
from view.tool.local_eps_read_view import LocalEpsReadView from view.tool.local_read_eps_view import LocalReadEpsView
from view.tool.local_read_view import LocalReadView from view.tool.local_read_view import LocalReadView
from view.tool.waifu2x_tool_view import Waifu2xToolView from view.tool.waifu2x_tool_view import Waifu2xToolView
from view.user.favorite_view import FavoriteView from view.user.favorite_view import FavoriteView
@ -171,9 +171,9 @@ class Ui_MainWindows(object):
self.chatNewView = ChatNewView() self.chatNewView = ChatNewView()
self.chatNewView.setObjectName(u"chatNewView") self.chatNewView.setObjectName(u"chatNewView")
self.subStackWidget.addWidget(self.chatNewView) self.subStackWidget.addWidget(self.chatNewView)
self.localEpsReadView = LocalEpsReadView() self.localReadEpsView = LocalReadEpsView()
self.localEpsReadView.setObjectName(u"localEpsReadView") self.localReadEpsView.setObjectName(u"localReadEpsView")
self.subStackWidget.addWidget(self.localEpsReadView) self.subStackWidget.addWidget(self.localReadEpsView)
self.bookEpsView = BookEpsView() self.bookEpsView = BookEpsView()
self.bookEpsView.setObjectName(u"bookEpsView") self.bookEpsView.setObjectName(u"bookEpsView")
self.subStackWidget.addWidget(self.bookEpsView) self.subStackWidget.addWidget(self.bookEpsView)

View File

@ -195,6 +195,10 @@ class QtOwner(Singleton):
self.owner.searchView2.searchTab.setText(Title) self.owner.searchView2.searchTab.setText(Title)
self.owner.SwitchWidget(self.owner.searchView2, **arg) self.owner.SwitchWidget(self.owner.searchView2, **arg)
def OpenLocalEpsView(self, bookId):
arg = {"bookId": bookId}
self.owner.SwitchWidget(self.owner.localReadEpsView, **arg)
def OpenSearchByText(self, text): def OpenSearchByText(self, text):
self.owner.searchView.lineEdit.setText(text) self.owner.searchView.lineEdit.setText(text)
self.owner.searchView.lineEdit.Search() self.owner.searchView.lineEdit.Search()
@ -203,9 +207,9 @@ class QtOwner(Singleton):
self.owner.totalStackWidget.setCurrentIndex(1) self.owner.totalStackWidget.setCurrentIndex(1)
self.owner.readView.OpenPage(bookId, index, pageIndex=pageIndex, isOffline=isOffline) self.owner.readView.OpenPage(bookId, index, pageIndex=pageIndex, isOffline=isOffline)
def OpenLocalReadView(self, v): def OpenLocalReadView(self, v, epsId=0):
self.owner.totalStackWidget.setCurrentIndex(1) self.owner.totalStackWidget.setCurrentIndex(1)
self.owner.readView.OpenLocalPage(v) self.owner.readView.OpenLocalPage(v, epsId)
def CloseReadView(self): def CloseReadView(self):
self.owner.totalStackWidget.setCurrentIndex(0) self.owner.totalStackWidget.setCurrentIndex(0)
@ -238,6 +242,9 @@ class QtOwner(Singleton):
def OpenLocalBook(self, bookId): def OpenLocalBook(self, bookId):
self.owner.localReadView.OpenLocalBook(bookId) self.owner.localReadView.OpenLocalBook(bookId)
def OpenLocalEpsBook(self, bookId):
self.owner.localReadEpsView.OpenLocalBook(bookId)
def OpenEpsInfo(self, bookId): def OpenEpsInfo(self, bookId):
# self.owner.subCommentView.SetOpenEvent(commentId, widget) # self.owner.subCommentView.SetOpenEvent(commentId, widget)
arg = {"bookId": bookId} arg = {"bookId": bookId}

View File

@ -224,21 +224,22 @@ class SqlServer(Singleton):
def _SelectUpdateInfo(self, conn, sql, backId): def _SelectUpdateInfo(self, conn, sql, backId):
cur = conn.cursor() cur = conn.cursor()
cur.execute("select * from system") cur.execute("select id, size, time, sub_version from system where 1 order by id desc limit 1")
nums = 0 nums = 0
time = "" time = ""
version = 0 version = 0
dbVer = ""
for data in cur.fetchall(): for data in cur.fetchall():
if config.UpdateVersion == data[0]: dbVer = data[0]
nums = data[1] nums = data[1]
time = data[2] time = data[2]
version = data[3] version = data[3]
cur.execute("select count(*) from book") cur.execute("select count(*) from book")
for data in cur.fetchall(): for data in cur.fetchall():
nums = data[0] nums = data[0]
data = pickle.dumps((nums, time, version)) data = pickle.dumps((dbVer, nums, time, version))
if backId: if backId:
TaskSql().taskObj.sqlBack.emit(backId, data) TaskSql().taskObj.sqlBack.emit(backId, data)

View File

@ -36,7 +36,7 @@ class QLocalTask(object):
class LocalData(object): class LocalData(object):
Type1 = 1 # 加载目录 Type1 = 1 # 加载目录
Type2 = 2 # 加载文件 Type2 = 2 # 加载文件
Type3 = 3 # Type3 = 3 # 加载目录所有
Type4 = 4 # Type4 = 4 #
Type5 = 5 # 批量加载 Type5 = 5 # 批量加载
@ -61,6 +61,10 @@ class LocalData(object):
self.pic = [] # 图片数 self.pic = [] # 图片数
self.eps = [] # 多章节 self.eps = [] # 多章节
@property
def isWaifu2x(self):
return "waifu2x" in self.file or "waifu2x" in self.path
def CopyData(self, o): def CopyData(self, o):
assert isinstance(o, LocalData) assert isinstance(o, LocalData)
self.cover = o.cover self.cover = o.cover
@ -68,6 +72,20 @@ class LocalData(object):
self.pic = [] self.pic = []
self.pic.extend(o.pic) self.pic.extend(o.pic)
oldDict = {}
for v in self.eps:
oldDict[v.id] = v
self.eps.clear()
for v in o.eps:
if v.id in oldDict:
newV = oldDict[v.id]
newV.CopyData(v)
self.eps.append(newV)
else:
self.eps.append(v)
@property @property
def sumPicCnt(self): def sumPicCnt(self):
a = 0 a = 0
@ -82,6 +100,15 @@ class LocalData(object):
self.cover = self.pic[0] self.cover = self.pic[0]
return return
def SortEps(self):
self.eps = natsorted(self.eps, key=lambda a:a.title)
if self.eps:
first = self.eps[0]
path = first.file.replace(self.file, "").strip("\\").strip("/")
self.cover = os.path.join(path, os.path.join(first.path, first.cover))
for v in self.eps:
v.main_id = self.id
return
class TaskLocal(TaskBase, QtTaskBase): class TaskLocal(TaskBase, QtTaskBase):
def __init__(self) -> None: def __init__(self) -> None:
@ -191,7 +218,8 @@ class TaskLocal(TaskBase, QtTaskBase):
st, data = self.ParseBookInfoByFile(dir) st, data = self.ParseBookInfoByFile(dir)
datas = [data] datas = [data]
elif type == LocalData.Type3: elif type == LocalData.Type3:
st, datas = self.ParseBookInfoByFile(dir) st, data = self.ParseBookInfoByDirRecursion(dir)
datas = [data]
elif type == LocalData.Type4: elif type == LocalData.Type4:
st, datas = self.ParseBookInfoByFile(dir) st, datas = self.ParseBookInfoByFile(dir)
elif type == LocalData.Type5: elif type == LocalData.Type5:
@ -222,9 +250,13 @@ class TaskLocal(TaskBase, QtTaskBase):
self._inQueue.put(self.taskId) self._inQueue.put(self.taskId)
return self.taskId return self.taskId
def AddLoadReadPicture(self, v, index, backParam, callBack, cleanFlag): def AddLoadReadPicture(self, v2, index, backParam, callBack, cleanFlag):
self.taskId += 1 self.taskId += 1
assert isinstance(v, LocalData) assert isinstance(v2, LocalData)
if index == -1 and v2.eps:
v = v2.eps[0]
else:
v = v2
info = QLocalTask(self.taskId) info = QLocalTask(self.taskId)
info.callBack = callBack info.callBack = callBack
@ -306,6 +338,77 @@ class TaskLocal(TaskBase, QtTaskBase):
return Str.ErrorPath, "" return Str.ErrorPath, ""
return Status.Ok, l return Status.Ok, l
def ParseBookInfoByDirRecursion(self, dirName):
# 解析递归目录
# 获取目录名称
path = dirName
try:
if not os.path.isdir(dirName):
return Str.ErrorPath, ""
nextPath = ""
allData = self.ParseBookInfoByDirRecursion2(dirName)
if not allData:
return Str.ErrorPath, ""
if len(allData) <= 1 :
return self.ParseBookInfoByDir(dirName)
l = LocalData()
l.eps = allData
l.title = os.path.basename(dirName)
l.file = dirName
l.id = hashlib.md5(l.file.encode("utf-8")).hexdigest()
l.SortEps()
l.path = ""
l.main_id = l.id
l.isZipFile = False
l.addTime = int(time.time())
except Exception as es:
Log.Error(es)
return Str.ErrorPath, ""
return Status.Ok, l
def ParseBookInfoByDirRecursion2(self, dirName):
allData = []
try:
if not os.path.isdir(dirName):
return []
allDir = []
zipFile = []
picNum = 0
for v in os.scandir(dirName):
isinstance(v, os.DirEntry)
if v.is_dir():
allDir.append(v.name)
elif v.is_file():
data = v.name.split(".")
if len(data) < 2:
continue
mat = data[-1]
if mat == "zip":
zipFile.append(v.name)
if mat in LocalData.AllPictureFormat:
picNum += 1
for zipName in zipFile:
st, l = self.ParseBookInfoByFile(os.path.join(dirName, zipName))
if st == Status.Ok:
allData.append(l)
if picNum > 1:
st, l = self.ParseBookInfoByDir(dirName)
if st == Status.Ok:
allData.append(l)
else:
for file in allDir:
newAllData = self.ParseBookInfoByDirRecursion2(os.path.join(dirName, file))
allData.extend(newAllData)
except Exception as es:
Log.Error(es)
return allData
def ParseBookInfoByFile(self, fileName): def ParseBookInfoByFile(self, fileName):
# 解析 # 解析
# 判断ZIP是否存在 # 判断ZIP是否存在
@ -376,7 +479,7 @@ class TaskLocal(TaskBase, QtTaskBase):
if os.path.isfile(url): if os.path.isfile(url):
st, v = self.ParseBookInfoByFile(url) st, v = self.ParseBookInfoByFile(url)
elif os.path.isdir(url): elif os.path.isdir(url):
st, v = self.ParseBookInfoByDir(url) st, v = self.ParseBookInfoByDirRecursion(url)
else: else:
st = Status.Error st = Status.Error
if st == Status.Ok: if st == Status.Ok:

View File

@ -227,6 +227,9 @@ class Str:
SupportDrop = 148 # 支持拖拽文件导入 SupportDrop = 148 # 支持拖拽文件导入
AlreadyHave = 149 # 已存在 AlreadyHave = 149 # 已存在
SameWight = 150 # 等宽模式 SameWight = 150 # 等宽模式
CopyFileLast = 151 # 保存上次路径
ImportDouble = 152 # 导入多章节目录
@classmethod @classmethod
def Reload(cls): def Reload(cls):
@ -442,10 +445,12 @@ class Str:
cls.strDict[cls.SupportDrop] = QCoreApplication.translate("cls.obj", "支持拖拽文件导入", None) cls.strDict[cls.SupportDrop] = QCoreApplication.translate("cls.obj", "支持拖拽文件导入", None)
cls.strDict[cls.AlreadyHave] = QCoreApplication.translate("cls.obj", "已存在", None) cls.strDict[cls.AlreadyHave] = QCoreApplication.translate("cls.obj", "已存在", None)
cls.strDict[cls.SameWight] = QCoreApplication.translate("cls.obj", "等宽模式", None) cls.strDict[cls.SameWight] = QCoreApplication.translate("cls.obj", "等宽模式", None)
cls.strDict[cls.CopyFileLast] = QCoreApplication.translate("cls.obj", "保存上次路径", None)
cls.strDict[cls.ImportDouble] = QCoreApplication.translate("cls.obj", "导入多章节目录", None)
@classmethod @classmethod
def GetStr(cls, enumType): def GetStr(cls, enumType, defualt=""):
return cls.strDict.get(enumType, "") return cls.strDict.get(enumType, defualt)
@classmethod @classmethod
def CheckStr(cls): def CheckStr(cls):

View File

@ -125,10 +125,10 @@ class HelpView(QWidget, Ui_Help, QtTaskBase):
self.AddSqlTask("book", "", SqlServer.TaskTypeSelectUpdate, self.UpdateDbInfoBack) self.AddSqlTask("book", "", SqlServer.TaskTypeSelectUpdate, self.UpdateDbInfoBack)
def UpdateDbInfoBack(self, data): def UpdateDbInfoBack(self, data):
num, timeStr, version = data dbVer, num, timeStr, version = data
self.curSubVersion = version self.curSubVersion = version
self.curUpdateTick = ToolUtil.GetTimeTickEx(timeStr) self.curUpdateTick = ToolUtil.GetTimeTickEx(timeStr)
self.localVer.setText(dbVer)
# curEndTime = datetime.now() - timedelta(7) # curEndTime = datetime.now() - timedelta(7)
# newTick = int(curEndTime.timestamp()) # newTick = int(curEndTime.timestamp())
# self.curUpdateTick = newTick # self.curUpdateTick = newTick
@ -136,6 +136,10 @@ class HelpView(QWidget, Ui_Help, QtTaskBase):
self.localNum.setText(str(num)) self.localNum.setText(str(num))
self.localTime.setText(timeStr) self.localTime.setText(timeStr)
QtOwner().searchView.UpdateTime(timeStr) QtOwner().searchView.UpdateTime(timeStr)
if config.RealVersion != dbVer:
self.UpdateText(self.dbCheck, "错误的data.db版本", "#7fb80e", False)
return
if not self.isCheckUp: if not self.isCheckUp:
self.isCheckUp = True self.isCheckUp = True
self.ReUpdateDatabase() self.ReUpdateDatabase()
@ -149,11 +153,13 @@ class HelpView(QWidget, Ui_Help, QtTaskBase):
if QtOwner().isOfflineModel: if QtOwner().isOfflineModel:
return return
if self.curUpdateTick <= 0:
return
if self.curIndex >= len(self.dbUpdateUrl): if self.curIndex >= len(self.dbUpdateUrl):
return return
if self.curUpdateTick <= 0:
return
self.UpdateText(self.dbCheck, Str.CheckUp, "#7fb80e", False) self.UpdateText(self.dbCheck, Str.CheckUp, "#7fb80e", False)
self.dbCheck.setEnabled(False) self.dbCheck.setEnabled(False)
url = self.dbUpdateUrl[self.curIndex] url = self.dbUpdateUrl[self.curIndex]
@ -174,7 +180,7 @@ class HelpView(QWidget, Ui_Help, QtTaskBase):
def UpdateText(self, label, text, color, enable): def UpdateText(self, label, text, color, enable):
label.setStyleSheet("background-color:transparent;color:{}".format(color)) label.setStyleSheet("background-color:transparent;color:{}".format(color))
label.setText("{}".format(Str.GetStr(text))) label.setText("{}".format(Str.GetStr(text, text)))
label.setEnabled(enable) label.setEnabled(enable)
if enable: if enable:
label.setCursor(Qt.PointingHandCursor) label.setCursor(Qt.PointingHandCursor)

View File

@ -143,6 +143,7 @@ class MainView(Main, QtTaskBase):
self.gameView.retranslateUi(self.gameView) self.gameView.retranslateUi(self.gameView)
self.helpView.retranslateUi(self.helpView) self.helpView.retranslateUi(self.helpView)
self.waifu2xToolView.retranslateUi(self.waifu2xToolView) self.waifu2xToolView.retranslateUi(self.waifu2xToolView)
self.navigationWidget.retranslateUi(self.navigationWidget)
def Init(self): def Init(self):
IsCanUse = False IsCanUse = False

View File

@ -297,6 +297,14 @@ class ReadGraphicsView(QGraphicsView, SmoothScroll):
self.qtTool.FullScreen() self.qtTool.FullScreen()
elif ev.key() == Qt.Key_F2: elif ev.key() == Qt.Key_F2:
self.qtTool.curWaifu2x.click() self.qtTool.curWaifu2x.click()
elif ev.key() == Qt.Key_F4:
self.readImg.CopyLastFile()
elif ev.key() == Qt.Key_F3:
self.readImg.CopyFile()
elif ev.key() == Qt.Key_F1:
self.readImg.CopyPicture()
elif ev.key() == Qt.Key_F12: elif ev.key() == Qt.Key_F12:
self.readImg.ShowAndCloseTool() self.readImg.ShowAndCloseTool()
elif ev.key() == Qt.Key_Space: elif ev.key() == Qt.Key_Space:

View File

@ -348,7 +348,10 @@ class ReadTool(QtWidgets.QWidget, Ui_ReadImg):
epsId -= 1 epsId -= 1
if self.readImg.isLocal: if self.readImg.isLocal:
QtOwner().ShowMsg(Str.GetStr(Str.AlreadyLastChapter)) if epsId < 0:
QtOwner().ShowMsg(Str.GetStr(Str.AlreadyLastChapter))
return
self.readImg.OpenLocalPage(self.readImg._cacheBook, epsId, 9999)
return return
elif self.readImg.isOffline: elif self.readImg.isOffline:
if not QtOwner().downloadView.IsDownloadEpsId(self.readImg.bookId, self.readImg.epsId - 1): if not QtOwner().downloadView.IsDownloadEpsId(self.readImg.bookId, self.readImg.epsId - 1):
@ -373,7 +376,10 @@ class ReadTool(QtWidgets.QWidget, Ui_ReadImg):
bookInfo = BookMgr().books.get(bookId) bookInfo = BookMgr().books.get(bookId)
epsId += 1 epsId += 1
if self.readImg.isLocal: if self.readImg.isLocal:
QtOwner().ShowMsg(Str.GetStr(Str.AlreadyNextChapter)) if epsId >= len(self.readImg._cacheBook):
QtOwner().ShowMsg(Str.GetStr(Str.AlreadyNextChapter))
return
self.readImg.OpenLocalPage(self.readImg._cacheBook, epsId, 0)
return return
elif self.readImg.isOffline: elif self.readImg.isOffline:
if not QtOwner().downloadView.IsDownloadEpsId(self.readImg.bookId, self.readImg.epsId + 1): if not QtOwner().downloadView.IsDownloadEpsId(self.readImg.bookId, self.readImg.epsId + 1):

View File

@ -63,9 +63,18 @@ class ReadView(QtWidgets.QWidget, QtTaskBase):
self.pageIndex = -1 self.pageIndex = -1
self.isOffline = False self.isOffline = False
self.isLocal = False self.isLocal = False
self.cacheBook = None self._cacheBook = None
self.lastPath = ""
# QtOwner().owner.WindowsSizeChange.connect(self.qtTool.ClearQImage) # QtOwner().owner.WindowsSizeChange.connect(self.qtTool.ClearQImage)
@property
def cacheBook(self):
if self._cacheBook:
if self._cacheBook.eps:
if self.epsId >= 0 and self.epsId < len(self._cacheBook.eps):
return self._cacheBook.eps[self.epsId]
return self._cacheBook
@property @property
def scrollArea(self): def scrollArea(self):
return self.frame.scrollArea return self.frame.scrollArea
@ -143,11 +152,15 @@ class ReadView(QtWidgets.QWidget, QtTaskBase):
action.triggered.connect(self.qtTool.OpenNextEps) action.triggered.connect(self.qtTool.OpenNextEps)
menu4 = popMenu.addMenu(Str.GetStr(Str.Copy)) menu4 = popMenu.addMenu(Str.GetStr(Str.Copy))
action = menu4.addAction(Str.GetStr(Str.CopyPicture)) action = menu4.addAction(Str.GetStr(Str.CopyPicture) + "(F1)")
action.triggered.connect(self.CopyPicture) action.triggered.connect(self.CopyPicture)
action = menu4.addAction(Str.GetStr(Str.CopyFile))
action = menu4.addAction(Str.GetStr(Str.CopyFile) + "(F3)")
action.triggered.connect(self.CopyFile) action.triggered.connect(self.CopyFile)
action = menu4.addAction(Str.GetStr(Str.CopyFileLast) + "(F4)")
action.triggered.connect(self.CopyLastFile)
action = popMenu.addAction(Str.GetStr(Str.AutoScroll)+"(F5)") action = popMenu.addAction(Str.GetStr(Str.AutoScroll)+"(F5)")
action.triggered.connect(self.qtTool.SwitchScrollAndTurn) action.triggered.connect(self.qtTool.SwitchScrollAndTurn)
@ -196,7 +209,7 @@ class ReadView(QtWidgets.QWidget, QtTaskBase):
return return
self.isOffline = isOffline self.isOffline = isOffline
self.isLocal = False self.isLocal = False
self.cacheBook = None self._cacheBook = None
self.Clear() self.Clear()
info = BookMgr().books.get(bookId) info = BookMgr().books.get(bookId)
if info: if info:
@ -227,14 +240,19 @@ class ReadView(QtWidgets.QWidget, QtTaskBase):
config.IsTips = 0 config.IsTips = 0
self.frame.InitHelp() self.frame.InitHelp()
def OpenLocalPage(self, v): def OpenLocalPage(self, v, epsId=0, pageIndex=-1):
if not v: if not v:
return return
self.Clear()
assert isinstance(v, LocalData) assert isinstance(v, LocalData)
self.cacheBook = v self.epsId = epsId
self._cacheBook = v
self.pageIndex = self.cacheBook.lastIndex
if pageIndex >= 0:
self.pageIndex = pageIndex
self.isOffline = False self.isOffline = False
self.isLocal = True self.isLocal = True
self.Clear()
self.qtTool.checkBox.setChecked(Setting.IsOpenWaifu.value) self.qtTool.checkBox.setChecked(Setting.IsOpenWaifu.value)
self.qtTool.preDownWaifu2x.setChecked(Setting.PreDownWaifu2x.value) self.qtTool.preDownWaifu2x.setChecked(Setting.PreDownWaifu2x.value)
@ -243,10 +261,7 @@ class ReadView(QtWidgets.QWidget, QtTaskBase):
self.qtTool.SetData() self.qtTool.SetData()
# self.qtTool.show() # self.qtTool.show()
self.bookId = v.id self.bookId = self.cacheBook.id
self.epsId = 0
self.pageIndex = v.lastIndex
self.qtTool.isMaxFull = self.window().isMaximized() self.qtTool.isMaxFull = self.window().isMaximized()
if Setting.LookReadFull.value: if Setting.LookReadFull.value:
@ -714,7 +729,12 @@ class ReadView(QtWidgets.QWidget, QtTaskBase):
assert isinstance(self.cacheBook, LocalData) assert isinstance(self.cacheBook, LocalData)
self.cacheBook.lastIndex = self.curIndex self.cacheBook.lastIndex = self.curIndex
self.cacheBook.lastReadTime = int(time.time()) self.cacheBook.lastReadTime = int(time.time())
QtOwner().localReadView.AddDataToDB(self.cacheBook.id) if self._cacheBook.eps:
self._cacheBook.lastReadTime = int(time.time())
QtOwner().localReadView.UpdateLastTick(self._cacheBook.id)
QtOwner().localReadView.AddEpsDataToDB(self._cacheBook.id, self.cacheBook.id)
else:
QtOwner().localReadView.AddDataToDB(self.cacheBook.id)
else: else:
bookName = QtOwner().bookInfoView.bookName bookName = QtOwner().bookInfoView.bookName
url = QtOwner().bookInfoView.url url = QtOwner().bookInfoView.url
@ -848,25 +868,67 @@ class ReadView(QtWidgets.QWidget, QtTaskBase):
if not info.data and not info.waifuData: if not info.data and not info.waifuData:
return return
today = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time())) # today = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time()))
if info.waifuData: if info.waifuData:
path = "{}_waifu2x.jpg".format(today) path = "{}_{}_waifu2x.jpg".format(self.bookId, self.curIndex+1)
data = info.waifuData data = info.waifuData
else: else:
path = "{}.jpg".format(today) path = "{}_{}.jpg".format(self.bookId, self.curIndex+1)
data = info.data data = info.data
if not data: if not data:
return return
try: try:
if self.lastPath:
path = os.path.join(self.lastPath, path)
filepath = QFileDialog.getSaveFileName(self, Str.GetStr(Str.Save), path, "Image Files(*.jpg *.png)") filepath = QFileDialog.getSaveFileName(self, Str.GetStr(Str.Save), path, "Image Files(*.jpg *.png)")
if filepath and len(filepath) >= 1: if filepath and len(filepath) >= 1:
name = filepath[0] name = filepath[0]
if not name: if not name:
return return
self.lastPath = os.path.dirname(name)
f = open(name, "wb") f = open(name, "wb")
f.write(data) f.write(data)
f.close() f.close()
QtOwner().ShowMsg(Str.GetStr(Str.CopySuc)) QtOwner().ShowMsg(Str.GetStr(Str.SaveSuc))
except Exception as es:
Log.Error(es)
def CopyLastFile(self):
info = self.pictureData.get(self.curIndex)
if not info:
return
assert isinstance(info, QtFileData)
if not info.data and not info.waifuData:
return
if info.waifuData:
path = "{}_{}_waifu2x.jpg".format(self.bookId, self.curIndex+1)
data = info.waifuData
else:
path = "{}_{}.jpg".format(self.bookId, self.curIndex+1)
data = info.data
if not data:
return
try:
if self.lastPath:
name = os.path.join(self.lastPath, path)
else:
if self.lastPath:
path = os.path.join(self.lastPath, path)
filepath = QFileDialog.getSaveFileName(self, Str.GetStr(Str.Save), path, "Image Files(*.jpg *.png)")
if filepath and len(filepath) >= 1:
name = filepath[0]
if not name:
return
self.lastPath = os.path.dirname(name)
else:
return
# self.lastPath = os.path.dirname(name)
f = open(name, "wb")
f.write(data)
f.close()
QtOwner().ShowMsg(Str.GetStr(Str.SaveSuc))
except Exception as es: except Exception as es:
Log.Error(es) Log.Error(es)

View File

@ -100,7 +100,7 @@ class SettingView(QtWidgets.QWidget, Ui_SettingNew):
self.openProxy.clicked.connect(self.OpenProxy) self.openProxy.clicked.connect(self.OpenProxy)
# TODO # TODO
self.languageButton3.setVisible(False) # self.languageButton3.setVisible(False)
self.msgLabel.setVisible(False) self.msgLabel.setVisible(False)
@ -312,8 +312,8 @@ class SettingView(QtWidgets.QWidget, Ui_SettingNew):
language = 2 language = 2
else: else:
# TODO # TODO
# language = 3 language = 3
language = 2 # language = 2
if language == Setting.Language.autoValue: if language == Setting.Language.autoValue:
return return

View File

@ -93,21 +93,38 @@ class LocalReadDb(object):
def GetSaveStr(self, name): def GetSaveStr(self, name):
return name.replace("'", "''") return name.replace("'", "''")
def AddLoadLocalBook(self, info): def AddLoadLocalBook(self, info2):
info = info2
assert isinstance(info, LocalData)
self.AddLoadLocalBook2(info)
for info in info2.eps:
self.AddLoadLocalBook2(info)
self.cur.execute("COMMIT")
return
def AddLoadLocalEpsBook(self, info2):
info = info2
assert isinstance(info, LocalData)
self.AddLoadLocalBook2(info)
self.cur.execute("COMMIT")
return
def AddLoadLocalBook2(self, info2):
info = info2
assert isinstance(info, LocalData) assert isinstance(info, LocalData)
sql = "INSERT INTO local_book(id, title, file, path, cover, epsId, isZipFile, lastIndex, lastEpsId, addTime, lastReadTime, picCnt, main_id) " \ sql = "INSERT INTO local_book(id, title, file, path, cover, epsId, isZipFile, lastIndex, lastEpsId, addTime, lastReadTime, picCnt, main_id) " \
"VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', {5}, {6}, {7}, {8}, {9}, {10}, {11}, '{12}') " \ "VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', {5}, {6}, {7}, {8}, {9}, {10}, {11}, '{12}') " \
"ON CONFLICT(id) DO UPDATE SET lastIndex='{7}', file='{2}', path='{3}', lastEpsId={8}, addTime={9}, lastReadTime={10}, picCnt={11}, cover='{4}' ".\ "ON CONFLICT(id) DO UPDATE SET lastIndex='{7}', file='{2}', path='{3}', lastEpsId={8}, addTime={9}, lastReadTime={10}, picCnt={11}, cover='{4}' ".\
format(info.id, self.GetSaveStr(info.title), self.GetSaveStr(info.file), self.GetSaveStr(info.path), self.GetSaveStr(info.cover), info.epsId, int(info.isZipFile), info.lastIndex format(info.id, self.GetSaveStr(info.title), self.GetSaveStr(info.file), self.GetSaveStr(info.path), self.GetSaveStr(info.cover), info.epsId, int(info.isZipFile), info.lastIndex
, info.lastEpsId, info.addTime, info.lastReadTime, info.picCnt, info.main_id) , info.lastEpsId, info.addTime, info.lastReadTime, info.picCnt, info.main_id)
suc = self.cur.execute(sql) suc = self.cur.execute(sql)
self.cur.execute("COMMIT")
return return
def DelDownloadDB(self, bookId): def DelDownloadDB(self, bookId):
sql = "delete from local_book where id='{}'".format(bookId) sql = "delete from local_book where id='{}'".format(bookId)
suc = self.cur.execute(sql) suc = self.cur.execute(sql)
sql = "delete from local_book where main_id='{}'".format(bookId)
suc = self.cur.execute(sql)
sql = "delete from local_category where book_id='{}'".format(bookId) sql = "delete from local_category where book_id='{}'".format(bookId)
suc = self.cur.execute(sql) suc = self.cur.execute(sql)
self.cur.execute("COMMIT") self.cur.execute("COMMIT")

View File

@ -0,0 +1,107 @@
import json
import os
from this import d
from PySide6.QtCore import Signal, QUrl
from PySide6.QtGui import QAction, Qt, QDesktopServices
from PySide6.QtWidgets import QWidget, QMenu, QFileDialog
from natsort import natsorted
from interface.ui_index import Ui_Index
from interface.ui_local import Ui_Local
from interface.ui_local_eps import Ui_LocalEps
from qt_owner import QtOwner
from server import req, Log, User, Status
from task.qt_task import QtTaskBase
from task.task_local import LocalData
from tools.str import Str
from view.tool.local_read_db import LocalReadDb
class LocalReadEpsView(QWidget, Ui_LocalEps, QtTaskBase):
ReloadHistory = Signal(int)
def __init__(self, parent=None):
QWidget.__init__(self, parent)
Ui_Index.__init__(self)
QtTaskBase.__init__(self)
self.setupUi(self)
self.isInit = False
self.bookId = ""
self.cacheBook = None
self.bookIdToIndex = {}
self.bookList.isLocal = True
self.bookList.isLocalEps = True
self.bookList.LoadingPicture = self.LoadingPicture
self.bookList.ReDownloadPicture = self.LoadingPicture
self.showWaifu2x.clicked.connect(self.Init)
@property
def localReadView(self):
return QtOwner().localReadView
def Init(self):
book = self.localReadView.allBookInfos.get(self.bookId)
if not book:
return
self.name.setText(book.title)
self.bookIdToIndex.clear()
self.cacheBook = book
assert isinstance(book, LocalData)
self.bookList.clear()
for i, v in enumerate(book.eps):
assert isinstance(v, LocalData)
self.bookIdToIndex[v.id] = i
categroup = []
if v.isWaifu2x:
categroup.append("waifu2x")
else:
if self.showWaifu2x.isChecked():
continue
if v.isZipFile:
categroup.append("zip")
self.bookList.AddBookByLocal(v, "".join(categroup))
pass
def SwitchCurrent(self, **kwargs):
bookId = kwargs.get("bookId")
if bookId == self.bookId:
return
self.bookId = bookId
self.Init()
return
def LoadingPicture(self, index):
if isinstance(index, int):
item = self.bookList.item(index)
widget = self.bookList.itemWidget(item)
else:
widget = self.bookList.indexWidget(index)
bookId = widget.id
if bookId not in self.bookIdToIndex:
return
i = self.bookIdToIndex.get(bookId)
v = self.cacheBook.eps[i]
self.AddLocalTaskLoadPicture(v, -1, index, self.bookList.LoadingPictureComplete)
def OpenLocalBook(self, bookId):
if bookId not in self.bookIdToIndex:
return
newV = LocalData()
newV.id = self.cacheBook.id
newV.CopyData(self.cacheBook)
newV.eps = []
eps = 0
i = 0
for v in self.cacheBook.eps:
assert isinstance(v, LocalData)
if v.id == bookId:
eps = i
if not v.isWaifu2x:
if self.showWaifu2x.isChecked():
continue
i += 1
newV.eps.append(v)
QtOwner().OpenLocalReadView(newV, eps)

View File

@ -10,7 +10,7 @@ from natsort import natsorted
from interface.ui_index import Ui_Index from interface.ui_index import Ui_Index
from interface.ui_local import Ui_Local from interface.ui_local import Ui_Local
from qt_owner import QtOwner from qt_owner import QtOwner
from server import req, Log, User, Status from server import req, Log, User, Status, time
from task.qt_task import QtTaskBase from task.qt_task import QtTaskBase
from task.task_local import LocalData from task.task_local import LocalData
from tools.str import Str from tools.str import Str
@ -32,6 +32,7 @@ class LocalReadView(QWidget, Ui_Local, QtTaskBase):
self.action1 = QAction(Str.GetStr(Str.ImportSimple), self.toolMenu, triggered=self.CheckAction1) self.action1 = QAction(Str.GetStr(Str.ImportSimple), self.toolMenu, triggered=self.CheckAction1)
self.action2 = QAction(Str.GetStr(Str.ImportSimpleZip), self.toolMenu, triggered=self.CheckAction2) self.action2 = QAction(Str.GetStr(Str.ImportSimpleZip), self.toolMenu, triggered=self.CheckAction2)
self.action4 = QAction(Str.GetStr(Str.ImportDouble), self.toolMenu, triggered=self.CheckAction3)
self.action3 = QAction(Str.GetStr(Str.SupportDrop), self.toolMenu) self.action3 = QAction(Str.GetStr(Str.SupportDrop), self.toolMenu)
self.action3.setEnabled(False) self.action3.setEnabled(False)
# self.action3 = QAction(Str.GetStr(Str.ImportSimpleDir), self.toolMenu, triggered=self.CheckAction3) # self.action3 = QAction(Str.GetStr(Str.ImportSimpleDir), self.toolMenu, triggered=self.CheckAction3)
@ -39,6 +40,7 @@ class LocalReadView(QWidget, Ui_Local, QtTaskBase):
self.toolMenu.addAction(self.action1) self.toolMenu.addAction(self.action1)
self.toolMenu.addAction(self.action2) self.toolMenu.addAction(self.action2)
self.toolMenu.addAction(self.action4)
self.toolMenu.addAction(self.action3) self.toolMenu.addAction(self.action3)
# self.toolMenu.addAction(self.action3) # self.toolMenu.addAction(self.action3)
# self.toolMenu.addAction(self.action4) # self.toolMenu.addAction(self.action4)
@ -71,6 +73,12 @@ class LocalReadView(QWidget, Ui_Local, QtTaskBase):
self.bookList.MoveHandler = self.MoveCallBack self.bookList.MoveHandler = self.MoveCallBack
self.bookList.openMenu = True self.bookList.openMenu = True
self.bookList.OpenDirHandler = self.OpenDirCallBack self.bookList.OpenDirHandler = self.OpenDirCallBack
self.lineEdit.textChanged.connect(self.SearchTextChange)
self.searchText = ""
def SearchTextChange(self, text):
self.searchText = text
self.InitBook()
def Init(self): def Init(self):
self.categoryBook, self.bookCategory = self.db.LoadCategory() self.categoryBook, self.bookCategory = self.db.LoadCategory()
@ -105,7 +113,8 @@ class LocalReadView(QWidget, Ui_Local, QtTaskBase):
if v.id in allBookId: if v.id in allBookId:
categoryList = self.bookCategory.get(v.id, []) categoryList = self.bookCategory.get(v.id, [])
categoryStr = ",".join(categoryList) categoryStr = ",".join(categoryList)
self.bookList.AddBookByLocal(v, categoryStr) if not self.searchText or self.searchText in v.title:
self.bookList.AddBookByLocal(v, categoryStr)
return return
def ClickTagsItem(self, modelIndex): def ClickTagsItem(self, modelIndex):
@ -129,7 +138,7 @@ class LocalReadView(QWidget, Ui_Local, QtTaskBase):
datas = list(value) datas = list(value)
sortId = self.sortIdCombox.currentIndex() sortId = self.sortIdCombox.currentIndex()
sortKeyID = self.sortKeyCombox.currentIndex() sortKeyID = self.sortKeyCombox.currentIndex()
isRevert = (sortId != 0) isRevert = (sortId == 0)
if sortKeyID == 0: if sortKeyID == 0:
datas.sort(key=lambda a: a.lastReadTime, reverse=isRevert) datas.sort(key=lambda a: a.lastReadTime, reverse=isRevert)
elif sortKeyID == 2: elif sortKeyID == 2:
@ -184,11 +193,19 @@ class LocalReadView(QWidget, Ui_Local, QtTaskBase):
return return
v = self.allBookInfos[bookId] v = self.allBookInfos[bookId]
assert isinstance(v, LocalData) assert isinstance(v, LocalData)
type = LocalData.Type1 if not v.isZipFile else LocalData.Type2 if v.eps != []:
type = LocalData.Type3
elif v.isZipFile:
type = LocalData.Type2
else:
type = LocalData.Type1
QtOwner().ShowLoading()
self.AddLocalTaskLoad(type, v.file, bookId, callBack=self.OpenLocalBookBack) self.AddLocalTaskLoad(type, v.file, bookId, callBack=self.OpenLocalBookBack)
return return
def OpenLocalBookBack(self, st, books, bookId): def OpenLocalBookBack(self, st, books, bookId):
QtOwner().CloseLoading()
if st != Status.Ok: if st != Status.Ok:
QtOwner().ShowError(Str.GetStr(st)) QtOwner().ShowError(Str.GetStr(st))
return return
@ -201,6 +218,10 @@ class LocalReadView(QWidget, Ui_Local, QtTaskBase):
assert isinstance(v, LocalData) assert isinstance(v, LocalData)
newV = books[0] newV = books[0]
v.CopyData(newV) v.CopyData(newV)
if v.eps != []:
QtOwner().OpenLocalEpsView(v.id)
return
if v.picCnt <= 0: if v.picCnt <= 0:
QtOwner().ShowError(Str.GetStr(Str.NotPictureFile)) QtOwner().ShowError(Str.GetStr(Str.NotPictureFile))
return return
@ -215,6 +236,22 @@ class LocalReadView(QWidget, Ui_Local, QtTaskBase):
self.db.AddLoadLocalBook(v) self.db.AddLoadLocalBook(v)
return return
def UpdateLastTick(self, taskId):
if taskId not in self.allBookInfos:
return
v = self.allBookInfos[taskId]
v.lastReadTime = int(time.time())
self.db.AddLoadLocalBook(v)
return
def AddEpsDataToDB(self, taskId, subId):
if taskId not in self.allBookInfos:
return
for v in self.allBookInfos[taskId].eps:
if v.id == subId:
self.db.AddLoadLocalEpsBook(v)
return
def AddBookByDir(self): def AddBookByDir(self):
return return
@ -252,6 +289,9 @@ class LocalReadView(QWidget, Ui_Local, QtTaskBase):
self.bookList.AddBookByLocal(v, category) self.bookList.AddBookByLocal(v, category)
self.AddDataToDB(v.id) self.AddDataToDB(v.id)
QtOwner().ShowMsg("已添加{}本到书架, {}本存在已忽略".format(addNum, alreadyNum)) QtOwner().ShowMsg("已添加{}本到书架, {}本存在已忽略".format(addNum, alreadyNum))
self.lineEdit.setText("")
self.sortIdCombox.setCurrentIndex(0)
self.sortKeyCombox.setCurrentIndex(1)
return return
# 导入单本Zip # 导入单本Zip
@ -268,8 +308,15 @@ class LocalReadView(QWidget, Ui_Local, QtTaskBase):
self.AddLocalTaskLoad(LocalData.Type2, name, path, self.CheckAction1LoadBack) self.AddLocalTaskLoad(LocalData.Type2, name, path, self.CheckAction1LoadBack)
return return
# 批量导入目录 # 导入单本目录
def CheckAction3(self): def CheckAction3(self):
if self.lastPath:
url = QFileDialog.getExistingDirectory(self, Str.GetStr(Str.SelectFold), dir=self.lastPath)
else:
url = QFileDialog.getExistingDirectory(self, Str.GetStr(Str.SelectFold))
if url:
QtOwner().ShowLoading()
self.AddLocalTaskLoad(LocalData.Type3, url, os.path.dirname(url), self.CheckAction1LoadBack)
return return
# 批量导入带章节的目录 # 批量导入带章节的目录

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -28,8 +28,8 @@ QScrollArea {background-color:transparent;}</string>
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>753</width> <width>736</width>
<height>718</height> <height>744</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_3"> <layout class="QVBoxLayout" name="verticalLayout_3">
@ -126,51 +126,7 @@ QScrollArea {background-color:transparent;}</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="2">
<widget class="QPushButton" name="verCheck">
<property name="text">
<string>检测更新</string>
</property>
</widget>
</item>
<item row="5" column="2"> <item row="5" column="2">
<widget class="QPushButton" name="logButton">
<property name="text">
<string>打开日志目录</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_7">
<property name="minimumSize">
<size>
<width>80</width>
<height>50</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>日志:</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLabel" name="localTime">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QPushButton" name="dbCheck"> <widget class="QPushButton" name="dbCheck">
<property name="text"> <property name="text">
<string>检测更新</string> <string>检测更新</string>
@ -195,8 +151,8 @@ QScrollArea {background-color:transparent;}</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="5" column="1">
<widget class="QLabel" name="localNum"> <widget class="QLabel" name="localTime">
<property name="font"> <property name="font">
<font> <font>
<pointsize>12</pointsize> <pointsize>12</pointsize>
@ -207,30 +163,6 @@ QScrollArea {background-color:transparent;}</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0">
<widget class="QLabel" name="label_9">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>上次更新时间:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="version">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>v1.2.8</string>
</property>
</widget>
</item>
<item row="2" column="0"> <item row="2" column="0">
<widget class="QLabel" name="label_6"> <widget class="QLabel" name="label_6">
<property name="minimumSize"> <property name="minimumSize">
@ -249,18 +181,6 @@ QScrollArea {background-color:transparent;}</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="0">
<widget class="QLabel" name="label_11">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>本地数据上次更新:</string>
</property>
</widget>
</item>
<item row="1" column="1"> <item row="1" column="1">
<widget class="QLabel" name="upTimeLabel"> <widget class="QLabel" name="upTimeLabel">
<property name="font"> <property name="font">
@ -273,6 +193,100 @@ QScrollArea {background-color:transparent;}</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="2">
<widget class="QPushButton" name="verCheck">
<property name="text">
<string>检测更新</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="localNum">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QPushButton" name="openCmd">
<property name="text">
<string>打开控制台</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QCheckBox" name="preCheckBox">
<property name="text">
<string>接受Beta版本更新</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="version">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>v1.2.8</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_9">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>上次更新时间:</string>
</property>
</widget>
</item>
<item row="6" column="2">
<widget class="QPushButton" name="logButton">
<property name="text">
<string>打开日志目录</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_7">
<property name="minimumSize">
<size>
<width>80</width>
<height>50</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>日志:</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_11">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>本地数据上次更新:</string>
</property>
</widget>
</item>
<item row="2" column="1"> <item row="2" column="1">
<widget class="QLabel" name="waifu2x"> <widget class="QLabel" name="waifu2x">
<property name="font"> <property name="font">
@ -285,17 +299,33 @@ QScrollArea {background-color:transparent;}</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="1"> <item row="4" column="0">
<widget class="QPushButton" name="openCmd"> <widget class="QLabel" name="label_10">
<property name="minimumSize">
<size>
<width>80</width>
<height>50</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text"> <property name="text">
<string>打开控制台</string> <string>本地库版本:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="2"> <item row="4" column="1">
<widget class="QCheckBox" name="preCheckBox"> <widget class="QLabel" name="localVer">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text"> <property name="text">
<string>接受Beta版本更新</string> <string/>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -14,7 +14,18 @@
<string>本地漫画</string> <string>本地漫画</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0"> <item row="3" column="0">
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="ComicListWidget" name="bookList">
<property name="styleSheet">
<string notr="true"/>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_2"> <layout class="QHBoxLayout" name="horizontalLayout_2">
<item> <item>
<widget class="TagListWidget" name="tagsList"> <widget class="TagListWidget" name="tagsList">
@ -70,18 +81,7 @@ QListWidget::item {
</item> </item>
</layout> </layout>
</item> </item>
<item row="2" column="0"> <item row="4" column="0">
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="ComicListWidget" name="bookList">
<property name="styleSheet">
<string notr="true"/>
</property>
</widget>
</item>
</layout>
</item>
<item row="3" column="0">
<layout class="QGridLayout" name="gridLayout_4"> <layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="0"> <item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
@ -234,6 +234,22 @@ QListWidget::item {
</item> </item>
</layout> </layout>
</item> </item>
<item row="0" column="0">
<widget class="QWidget" name="widget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>搜索:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit"/>
</item>
</layout>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<customwidgets> <customwidgets>

View File

@ -14,7 +14,7 @@
<string>本地漫画章节</string> <string>本地漫画章节</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_2">
<item row="1" column="0"> <item row="4" column="0">
<layout class="QGridLayout" name="gridLayout_3"> <layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0"> <item row="0" column="0">
<widget class="ComicListWidget" name="bookList"> <widget class="ComicListWidget" name="bookList">
@ -25,6 +25,37 @@
</item> </item>
</layout> </layout>
</item> </item>
<item row="0" column="0">
<widget class="QLabel" name="name">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QRadioButton" name="showWaifu2x">
<property name="text">
<string>只显示Waifu2x</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout> </layout>
</widget> </widget>
<customwidgets> <customwidgets>

View File

@ -87,7 +87,7 @@
<item> <item>
<widget class="AnimationStackWidget" name="subStackWidget"> <widget class="AnimationStackWidget" name="subStackWidget">
<widget class="IndexView" name="indexView"/> <widget class="IndexView" name="indexView"/>
<widget class="LocalEpsReadView" name="localEpsReadView"/> <widget class="LocalEpsReadView" name="localReadEpsView"/>
<widget class="ChatNewView" name="chatNewView"/> <widget class="ChatNewView" name="chatNewView"/>
<widget class="HelpView" name="helpView"/> <widget class="HelpView" name="helpView"/>
<widget class="MyCommentView" name="myCommentView"/> <widget class="MyCommentView" name="myCommentView"/>

View File

@ -129,7 +129,7 @@
<widget class="DownloadAllView" name="downloadAllView"/> <widget class="DownloadAllView" name="downloadAllView"/>
<widget class="LocalReadView" name="localReadView"/> <widget class="LocalReadView" name="localReadView"/>
<widget class="ChatNewView" name="chatNewView"/> <widget class="ChatNewView" name="chatNewView"/>
<widget class="LocalEpsReadView" name="localEpsReadView"/> <widget class="LocalReadEpsView" name="localReadEpsView"/>
<widget class="BookEpsView" name="bookEpsView"/> <widget class="BookEpsView" name="bookEpsView"/>
<widget class="FriedView" name="friedView"/> <widget class="FriedView" name="friedView"/>
</widget> </widget>
@ -301,15 +301,15 @@
<container>1</container> <container>1</container>
</customwidget> </customwidget>
<customwidget> <customwidget>
<class>TitleBarWidget</class> <class>LocalReadEpsView</class>
<extends>QWidget</extends> <extends>QWidget</extends>
<header location="global">component.widget.title_bar_widget.h</header> <header location="global">view.tool.local_read_eps_view.h</header>
<container>1</container> <container>1</container>
</customwidget> </customwidget>
<customwidget> <customwidget>
<class>LocalEpsReadView</class> <class>TitleBarWidget</class>
<extends>QWidget</extends> <extends>QWidget</extends>
<header location="global">view.tool.local_eps_read_view.h</header> <header location="global">component.widget.title_bar_widget.h</header>
<container>1</container> <container>1</container>
</customwidget> </customwidget>
</customwidgets> </customwidgets>