diff --git a/layout/main.ui b/layout/main.ui index 5645152..571b8d5 100644 --- a/layout/main.ui +++ b/layout/main.ui @@ -140,6 +140,16 @@ + + + + 🔧 应急检修,用户勿点 + + + 30 + + + diff --git a/main.py b/main.py index 3df51a6..695a5db 100644 --- a/main.py +++ b/main.py @@ -195,13 +195,13 @@ def update_vsdb_token(config_dir, new_token, new_email, log_callback): "UPDATE ItemTable SET value = ? WHERE key = ?", (value, key) ) - log_callback(f"✓ 更新了 {key}") + # log_callback(f"✓ 更新了 {key}") else: cursor.execute( "INSERT INTO ItemTable (key, value) VALUES (?, ?)", (key, value) ) - log_callback(f"✓ 插入了 {key}") + # log_callback(f"✓ 插入了 {key}") conn.commit() conn.close() @@ -553,6 +553,12 @@ class ChangeTokenThread(QThread): self.finished_signal.emit(False, "未找到 storage.json 文件") return + # 检查并修复只读属性 + if not os.access(storage_file, os.W_OK): + self.log_signal.emit("🔓 检测到文件只读,正在解除只读属性...") + import stat + storage_file.chmod(storage_file.stat().st_mode | stat.S_IWRITE) + # 读取原文件 self.log_signal.emit("📖 读取配置文件...") with open(storage_file, "r", encoding="utf-8") as f: @@ -765,6 +771,7 @@ class MainWindow(QMainWindow): self.btnClearLog = self.findChild(QPushButton, "btnClearLog") self.btnDonate = self.findChild(QPushButton, "btnDonate") self.btnCheckUpdate = self.findChild(QPushButton, "btnCheckUpdate") + self.btnEmergencyRepair = self.findChild(QPushButton, "btnEmergencyRepair") # 调试信息 print(f"txtToken: {self.txtToken}") @@ -791,6 +798,8 @@ class MainWindow(QMainWindow): self.btnDonate.clicked.connect(self.on_donate_clicked) if self.btnCheckUpdate: self.btnCheckUpdate.clicked.connect(self.on_check_update_clicked) + if self.btnEmergencyRepair: + self.btnEmergencyRepair.clicked.connect(self.on_emergency_repair_clicked) # 设置版本号显示在状态栏右侧 self.statusBar().addPermanentWidget(QLabel(f"Version: {__VERSION__}")) @@ -1041,6 +1050,25 @@ class MainWindow(QMainWindow): dialog = DonateDialog(self) dialog.exec() + def on_emergency_repair_clicked(self): + """应急检修:下载工具到桌面""" + import urllib.request + import threading + + url = "http://7colud.yunzer.cn/software/db%20browser%20for%20sqlite.zip" + desktop = Path.home() / "Desktop" + save_path = desktop / "db browser for sqlite.zip" + + def download(): + try: + self.log("🔧 正在下载检修工具...") + urllib.request.urlretrieve(url, str(save_path)) + self.log(f"✅ 下载完成,已保存到桌面:{save_path.name}") + except Exception as e: + self.log(f"❌ 下载失败: {e}") + + threading.Thread(target=download, daemon=True).start() + def on_change_finished(self, success, message): if self.btnChange: self.btnChange.setEnabled(True)