class SettingDialog(QDialog): saved = pyqtSignal() def __init__(self, parent=None): super(SettingDialog, self).__init__(parent) self._config = object self.download_threads = 3 self.max_size = 100 self.timeout = 5 self.dl_path = None self.time_fmt = False self.to_tray = False self.watch_clipboard = False self.debug = False self.set_pwd = False self.set_desc = False self.upload_delay = 0 self.allow_big_file = False self.upgrade = True self.pwd = "" self.desc = "" self.initUI() self.setStyleSheet(dialog_qss_style) def open_dialog(self, config): """"打开前先更新一下显示界面""" self._config = config if self._config.name: self.setWindowTitle(f"设置 <{self._config.name}>") else: self.setWindowTitle("设置") self.cwd = self._config.path self.set_values() self.exec() def show_values(self): """控件显示值""" self.download_threads_var.setText(str(self.download_threads)) self.max_size_var.setText(str(self.max_size)) self.timeout_var.setText(str(self.timeout)) self.dl_path_var.setText(str(self.dl_path)) self.time_fmt_box.setChecked(self.time_fmt) self.to_tray_box.setChecked(self.to_tray) self.watch_clipboard_box.setChecked(self.watch_clipboard) self.debug_box.setChecked(self.debug) self.set_pwd_box.setChecked(self.set_pwd) self.set_pwd_var.setEnabled(self.set_pwd) self.set_pwd_var.setText(self.pwd) self.set_desc_box.setChecked(self.set_desc) self.set_desc_var.setEnabled(self.set_desc) self.set_desc_var.setText(self.desc) self.upload_delay_var.setText(str(self.upload_delay)) self.big_file_box.setChecked(self.allow_big_file) self.big_file_box.setText(f"允许上传超过 {self.max_size}MB 的大文件") self.big_file_box.setDisabled(True) # 关闭允许上传大文件设置入口 self.upgrade_box.setChecked(self.upgrade) def set_values(self, reset=False): """设置控件对应变量初始值""" settings = self._config.default_settings if reset else self._config.settings self.download_threads = settings["download_threads"] self.max_size = settings["max_size"] self.timeout = settings["timeout"] self.dl_path = settings["dl_path"] self.time_fmt = settings["time_fmt"] self.to_tray = settings["to_tray"] self.watch_clipboard = settings["watch_clipboard"] self.debug = settings["debug"] self.set_pwd = settings["set_pwd"] self.pwd = settings["pwd"] self.set_desc = settings["set_desc"] self.desc = settings["desc"] self.upload_delay = settings["upload_delay"] if 'upgrade' in settings: self.upgrade = settings["upgrade"] self.show_values() def get_values(self) -> dict: """读取输入控件的值""" if self.download_threads_var.text(): self.download_threads = int(self.download_threads_var.text()) if self.max_size_var.text(): self.max_size = int(self.max_size_var.text()) if self.timeout_var.text(): self.timeout = int(self.timeout_var.text()) if self.upload_delay_var.text(): self.upload_delay = int(self.upload_delay_var.text()) self.dl_path = str(self.dl_path_var.text()) self.pwd = str(self.set_pwd_var.toPlainText()) self.desc = str(self.set_desc_var.toPlainText()) return { "download_threads": self.download_threads, "max_size": self.max_size, "timeout": self.timeout, "dl_path": self.dl_path, "time_fmt": self.time_fmt, "to_tray": self.to_tray, "watch_clipboard": self.watch_clipboard, "debug": self.debug, "set_pwd": self.set_pwd, "pwd": self.pwd, "set_desc": self.set_desc, "desc": self.desc, "upload_delay": self.upload_delay, "allow_big_file": self.allow_big_file, "upgrade": self.upgrade } def initUI(self): self.setWindowTitle("设置") logo = QLabel() logo.setPixmap(QPixmap(SRC_DIR + "logo2.gif")) logo.setStyleSheet("background-color:rgb(255,255,255);") logo.setAlignment(Qt.AlignCenter) self.download_threads_lb = QLabel("同时下载文件数") self.download_threads_var = QLineEdit() self.download_threads_var.setPlaceholderText("范围:1-9") self.download_threads_var.setToolTip("范围:1-9") self.download_threads_var.setInputMask("D") self.max_size_lb = QLabel("分卷大小(MB)") self.max_size_var = QLineEdit() self.max_size_var.setPlaceholderText("普通用户最大100,vip用户根据具体情况设置") self.max_size_var.setToolTip("普通用户最大100,vip用户根据具体情况设置") self.max_size_var.setInputMask("D99") self.timeout_lb = QLabel("请求超时(秒)") self.timeout_var = QLineEdit() self.timeout_var.setPlaceholderText("范围:1-99") self.timeout_var.setToolTip("范围:1-99") self.timeout_var.setInputMask("D9") self.upload_delay_lb = QLabel("上传延时(秒)") self.upload_delay_var = QLineEdit() self.upload_delay_var.setPlaceholderText("范围:1-99") self.upload_delay_var.setToolTip("范围:1-99") self.upload_delay_var.setInputMask("D9") self.dl_path_lb = QLabel("下载保存路径") self.dl_path_var = MyLineEdit(self) self.dl_path_var.clicked.connect(self.set_download_path) self.time_fmt_box = QCheckBox("使用[年-月-日]时间格式") self.time_fmt_box.setToolTip("文件上传日期显示格式") self.to_tray_box = QCheckBox("关闭到系统托盘") self.to_tray_box.setToolTip("点击关闭软件按钮是最小化软件至系统托盘") self.watch_clipboard_box = QCheckBox("监听系统剪切板") self.watch_clipboard_box.setToolTip("检测到系统剪切板中有符合规范的蓝奏链接时自动唤起软件,并提取") self.debug_box = QCheckBox("开启调试日志") self.debug_box.setToolTip("记录软件 debug 信息至 debug-lanzou-gui.log 文件") self.set_pwd_box = QCheckBox("上传文件自动设置密码") self.set_pwd_var = AutoResizingTextEdit() self.set_pwd_var.setPlaceholderText(" 2-8 位数字或字母") self.set_pwd_var.setToolTip("2-8 位数字或字母") self.set_desc_box = QCheckBox("上传文件自动设置描述") self.set_desc_var = AutoResizingTextEdit() self.big_file_box = QCheckBox(f"允许上传超过 {self.max_size}MB 的大文件") self.big_file_box.setToolTip("开启大文件上传支持 (功能下线)") self.upgrade_box = QCheckBox("自动检测新版本") self.upgrade_box.setToolTip("在软件打开时自动检测是否有新的版本发布,如有则弹出更新信息") self.time_fmt_box.toggle() self.time_fmt_box.stateChanged.connect(self.change_time_fmt) self.to_tray_box.stateChanged.connect(self.change_to_tray) self.watch_clipboard_box.stateChanged.connect( self.change_watch_clipboard) self.debug_box.stateChanged.connect(self.change_debug) self.set_pwd_box.stateChanged.connect(self.change_set_pwd) self.set_pwd_var.editingFinished.connect(self.check_pwd) self.set_desc_box.stateChanged.connect(self.change_set_desc) self.big_file_box.stateChanged.connect(self.change_big_file) self.upgrade_box.stateChanged.connect(self.change_upgrade) buttonBox = QDialogButtonBox() buttonBox.setOrientation(Qt.Horizontal) buttonBox.setStandardButtons(QDialogButtonBox.Reset | QDialogButtonBox.Save | QDialogButtonBox.Cancel) buttonBox.button(QDialogButtonBox.Reset).setText("重置") buttonBox.button(QDialogButtonBox.Save).setText("保存") buttonBox.button(QDialogButtonBox.Cancel).setText("取消") buttonBox.button(QDialogButtonBox.Reset).clicked.connect( lambda: self.set_values(reset=True)) buttonBox.button(QDialogButtonBox.Save).clicked.connect(self.slot_save) buttonBox.rejected.connect(self.reject) form = QFormLayout() form.setLabelAlignment(Qt.AlignRight) form.setSpacing(10) form.addRow(self.download_threads_lb, self.download_threads_var) form.addRow(self.timeout_lb, self.timeout_var) form.addRow(self.upload_delay_lb, self.upload_delay_var) form.addRow(self.max_size_lb, self.max_size_var) form.addRow(self.dl_path_lb, self.dl_path_var) vbox = QVBoxLayout() vbox.addWidget(logo) vbox.addStretch(1) vbox.addLayout(form) vbox.addStretch(1) hbox = QHBoxLayout() hbox.addWidget(self.time_fmt_box) hbox.addWidget(self.to_tray_box) hbox.addWidget(self.watch_clipboard_box) hbox.addWidget(self.debug_box) vbox.addLayout(hbox) vbox.addStretch(1) hbox_2 = QHBoxLayout() hbox_2.addWidget(self.set_pwd_box) hbox_2.addWidget(self.set_pwd_var) vbox.addLayout(hbox_2) vbox.addStretch(1) hbox_3 = QHBoxLayout() hbox_3.addWidget(self.set_desc_box) hbox_3.addWidget(self.set_desc_var) vbox.addLayout(hbox_3) hbox_4 = QHBoxLayout() hbox_4.addWidget(self.big_file_box) hbox_4.addWidget(self.upgrade_box) vbox.addStretch(1) vbox.addLayout(hbox_4) vbox.addStretch(2) vbox.addWidget(buttonBox) self.setLayout(vbox) self.setMinimumWidth(500) def change_time_fmt(self, state): if state == Qt.Checked: self.time_fmt = True else: self.time_fmt = False def change_to_tray(self, state): if state == Qt.Checked: self.to_tray = True else: self.to_tray = False def change_watch_clipboard(self, state): if state == Qt.Checked: self.watch_clipboard = True else: self.watch_clipboard = False def change_debug(self, state): if state == Qt.Checked: self.debug = True else: self.debug = False def change_big_file(self, state): if state == Qt.Checked: self.allow_big_file = True else: self.allow_big_file = False def change_upgrade(self, state): if state == Qt.Checked: self.upgrade = True else: self.upgrade = False def change_set_pwd(self, state): if state == Qt.Checked: self.set_pwd = True self.set_pwd_var.setDisabled(False) else: self.set_pwd = False self.set_pwd_var.setDisabled(True) def change_set_desc(self, state): if state == Qt.Checked: self.set_desc = True self.set_desc_var.setDisabled(False) else: self.set_desc = False self.set_desc_var.setDisabled(True) def check_pwd(self): pwd = self.set_pwd_var.toPlainText() pwd = ''.join(list(filter(str.isalnum, pwd))) if len(pwd) < 2: pwd = "" self.set_pwd_var.setText(pwd[:8]) def set_download_path(self): """设置下载路径""" dl_path = QFileDialog.getExistingDirectory(self, "选择文件下载保存文件夹", self.cwd) dl_path = os.path.normpath(dl_path) # windows backslash if dl_path == self.dl_path or dl_path == ".": return None self.dl_path_var.setText(dl_path) self.dl_path = dl_path def slot_save(self): """保存槽函数""" self._config.settings = self.get_values() self.saved.emit() self.close()
class InfoDialog(QDialog): """文件信息对话框""" get_dl_link = pyqtSignal(str, str) closed = pyqtSignal() def __init__(self, parent=None): super().__init__(parent) self.infos = None self.initUI() self.setStyleSheet(dialog_qss_style) def update_ui(self): self.tx_dl_link.setPlaceholderText("单击获取") self.tx_name.setText(self.infos.name) if self.infos.is_file: self.setWindowTitle("文件信息") self.lb_name.setText("文件名:") self.lb_desc.setText("文件描述:") self.tx_dl_link.setText("") # 清空旧的信息 self.lb_dl_link.setVisible(True) self.tx_dl_link.setVisible(True) else: self.setWindowTitle("文件夹信息") self.lb_name.setText("文件夹名:") self.lb_desc.setText("文件夹描述:") self.lb_dl_link.setVisible(False) self.tx_dl_link.setVisible(False) if self.infos.size: self.tx_size.setText(self.infos.size) self.lb_size.setVisible(True) self.tx_size.setVisible(True) else: self.tx_size.setVisible(False) self.lb_size.setVisible(False) if self.infos.time: self.lb_time.setVisible(True) self.tx_time.setVisible(True) self.tx_time.setText(self.infos.time) else: self.lb_time.setVisible(False) self.tx_time.setVisible(False) if self.infos.downs: self.lb_dl_count.setVisible(True) self.tx_dl_count.setVisible(True) self.tx_dl_count.setText(str(self.infos.downs)) else: self.tx_dl_count.setVisible(False) self.lb_dl_count.setVisible(False) if self.infos.pwd: self.tx_pwd.setText(self.infos.pwd) self.tx_pwd.setPlaceholderText("") else: self.tx_pwd.setText("") self.tx_pwd.setPlaceholderText("无") if self.infos.desc: self.tx_desc.setText(self.infos.desc) self.tx_desc.setPlaceholderText("") else: self.tx_desc.setText("") self.tx_desc.setPlaceholderText("无") self.tx_share_url.setText(self.infos.url) self.adjustSize() def set_values(self, infos): self.infos = infos self.update_ui() def set_dl_link_tx(self, text): self.tx_dl_link.setText(text) self.adjustSize() def call_get_dl_link(self): url = self.tx_share_url.text() pwd = self.tx_pwd.text() self.get_dl_link.emit(url, pwd) self.tx_dl_link.setPlaceholderText("后台获取中,请稍后!") def call_get_short_url(self): self.tx_short.setPlaceholderText("后台获取中,请稍后!") url = self.tx_share_url.text() from lanzou.api.extra import get_short_url short_url = get_short_url(url) if short_url: self.tx_short.setText(short_url) self.tx_short.setPlaceholderText("") else: self.tx_short.setText("") self.tx_short.setPlaceholderText("生成失败!") def clean(self): self.tx_short.setText("") self.tx_short.setPlaceholderText("单击获取") def initUI(self): self.setWindowIcon(QIcon("./src/share.ico")) self.setWindowTitle("文件信息") self.buttonBox = QDialogButtonBox() self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons(QDialogButtonBox.Close) self.buttonBox.button(QDialogButtonBox.Close).setText("关闭") self.buttonBox.rejected.connect(self.reject) self.buttonBox.rejected.connect(self.clean) self.buttonBox.rejected.connect(self.closed.emit) self.logo = QLabel() self.logo.setPixmap(QPixmap("./src/q9.gif")) self.logo.setAlignment(Qt.AlignCenter) self.logo.setStyleSheet("background-color:rgb(255,204,51);") self.lb_name = QLabel() self.lb_name.setText("文件名:") self.tx_name = AutoResizingTextEdit() self.tx_name.setReadOnly(True) self.tx_name.setMinimumLines(1) self.lb_size = QLabel() self.lb_size.setText("文件大小:") self.tx_size = QLabel() self.lb_time = QLabel() self.lb_time.setText("上传时间:") self.tx_time = QLabel() self.lb_dl_count = QLabel() self.lb_dl_count.setText("下载次数:") self.tx_dl_count = QLabel() self.lb_share_url = QLabel() self.lb_share_url.setText("分享链接:") self.tx_share_url = QLineEdit() self.tx_share_url.setReadOnly(True) self.lb_pwd = QLabel() self.lb_pwd.setText("提取码:") self.tx_pwd = QLineEdit() self.tx_pwd.setReadOnly(True) self.lb_short = QLabel() self.lb_short.setText("短链接:") self.tx_short = AutoResizingTextEdit(self) self.tx_short.setPlaceholderText("单击获取") self.tx_short.clicked.connect(self.call_get_short_url) self.tx_short.setReadOnly(True) self.tx_short.setMinimumLines(1) self.lb_desc = QLabel() self.lb_desc.setText("文件描述:") self.tx_desc = AutoResizingTextEdit() self.tx_desc.setReadOnly(True) self.tx_desc.setMinimumLines(1) self.lb_dl_link = QLabel() self.lb_dl_link.setText("下载直链:") self.tx_dl_link = AutoResizingTextEdit(self) self.tx_dl_link.setPlaceholderText("单击获取") self.tx_dl_link.clicked.connect(self.call_get_dl_link) self.tx_dl_link.setReadOnly(True) self.tx_dl_link.setMinimumLines(1) vbox = QVBoxLayout() vbox.addWidget(self.logo) vbox.addStretch(1) form = QFormLayout() form.setLabelAlignment(Qt.AlignRight) form.addRow(self.lb_name, self.tx_name) form.addRow(self.lb_size, self.tx_size) form.addRow(self.lb_time, self.tx_time) form.addRow(self.lb_dl_count, self.tx_dl_count) form.addRow(self.lb_share_url, self.tx_share_url) form.addRow(self.lb_pwd, self.tx_pwd) form.addRow(self.lb_short, self.tx_short) form.addRow(self.lb_desc, self.tx_desc) form.addRow(self.lb_dl_link, self.tx_dl_link) vbox.addLayout(form) vbox.addStretch(1) vbox.addWidget(self.buttonBox) self.setLayout(vbox) self.setMinimumWidth(500)