From 2c04308e54b6f2d6b58c3960ab46b2ea9162df46 Mon Sep 17 00:00:00 2001 From: Aaron Liang <76561968+AaronL725@users.noreply.github.com> Date: Tue, 14 Jul 2026 22:49:05 +0800 Subject: [PATCH] fix: make review patch GUI replacement robust --- tools/fix_review_patch_gui_replace.py | 61 +++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 tools/fix_review_patch_gui_replace.py diff --git a/tools/fix_review_patch_gui_replace.py b/tools/fix_review_patch_gui_replace.py new file mode 100644 index 0000000..98bc32d --- /dev/null +++ b/tools/fix_review_patch_gui_replace.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +from pathlib import Path + +script = Path(__file__).resolve().with_name("apply_review_fixes.py") +text = script.read_text(encoding="utf-8") + +needle = "app = one(app, ''' def log(self, message):" +start = text.find(needle) +if start < 0: + if "app = between(app, \" def log(self, message):\\n\"" in text: + print("GUI replacement already robust") + raise SystemExit(0) + raise RuntimeError("GUI UI replacement block start not found") + +end_marker = "\n\napp = one(app, \" save_config()\\n if config[\\\"email_provider\\\"] == \\\"cloudflare\\\"" +end = text.find(end_marker, start) +if end < 0: + raise RuntimeError("GUI UI replacement block end not found") + +replacement = r'''app = between(app, " def log(self, message):\n", " def should_stop(self):\n", ''' + "'''" + r''' def _call_ui(self, func, *args): + if threading.get_ident() == self._ui_thread_id: + func(*args) + return + try: + self.root.after(0, lambda: func(*args)) + except Exception: + pass + + def _append_log_line(self, line): + self.log_text.insert(tk.END, f"{line}\n") + self.log_text.see(tk.END) + + def log(self, message): + timestamp = datetime.datetime.now().strftime("%H:%M:%S") + line = f"[{timestamp}] {message}" + print(line, flush=True) + self._call_ui(self._append_log_line, line) + + def clear_log(self): + self._call_ui(lambda: self.log_text.delete(1.0, tk.END)) + + def update_stats(self): + self._call_ui(lambda: self.stats_var.set(f"成功: {self.success_count} | 失败: {self.fail_count}")) + + def _set_running_ui(self, running): + self.is_running = running + def apply(): + self.start_btn.config(state=tk.DISABLED if running else tk.NORMAL) + self.stop_btn.config(state=tk.NORMAL if running else tk.DISABLED) + self.status_var.set("运行中..." if running else "就绪") + self.status_label.config(foreground="blue" if running else "green") + self._call_ui(apply) + + +''' + "'''" + r''', "GUI UI calls") +''' + +text = text[:start] + replacement + text[end:] +script.write_text(text, encoding="utf-8") +print("review patch GUI replacement made robust")