Skip to content

Commit 02ca503

Browse files
committed
refactor: 引导流程
1 parent f9865b7 commit 02ca503

1 file changed

Lines changed: 27 additions & 18 deletions

File tree

aao/app.py

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -161,30 +161,47 @@ def _needs_onboarding() -> bool:
161161

162162
return not load_settings().get("onboarded", False)
163163

164+
def _hide_overlay(self) -> None:
165+
"""临时隐藏悬浮窗(弹 QMessageBox 前调,避免遮挡)。"""
166+
if self.overlay is not None:
167+
self.overlay.hide()
168+
169+
def _show_overlay(self) -> None:
170+
"""恢复悬浮窗显示。"""
171+
if self.overlay is not None:
172+
self.overlay.show()
173+
164174
def _on_window_configured(self) -> None:
165175
"""设置页"设为默认窗口"后:按新窗口重连 controller/tasker 并注入各页;
166176
引导中则提示去校准并跳页。"""
167-
ok = self._reconnect()
177+
onboarding = self._needs_onboarding()
178+
# 引导中不创建悬浮窗(避免遮挡后续 QMessageBox)
179+
ok = self._reconnect(skip_overlay=onboarding)
168180
if not ok:
181+
self._hide_overlay()
169182
QMessageBox.warning(
170183
self,
171184
"连接失败",
172185
"未找到指定窗口,请确认游戏已启动且窗口选择正确。",
173186
)
187+
self._show_overlay()
174188
return
175-
if not self._needs_onboarding():
189+
if not onboarding:
176190
return
191+
self._hide_overlay()
177192
QMessageBox.information(
178193
self,
179194
"下一步:校准",
180195
"窗口已设置。请到「校准」页完成费用条校准后再凹图。",
181196
)
197+
self._show_overlay()
182198
self.nav.setCurrentRow(_PAGE_CALIB)
183199

184-
def _reconnect(self) -> bool:
200+
def _reconnect(self, skip_overlay: bool = False) -> bool:
185201
"""按 settings.json 的 window_name/class 重连 controller + 重建 tasker,
186202
注入凹图页/校准页,并(若有校准)启 measure worker。返回是否连上。
187203
204+
skip_overlay=True 时不创建/显示悬浮窗(新手引导时避免遮挡对话框)。
188205
同步执行(连窗口+post_bundle 约 1-2s,短暂卡 UI 可接受)。
189206
"""
190207
from maa.toolkit import Toolkit
@@ -218,7 +235,7 @@ def _reconnect(self) -> bool:
218235
self.calib_page.set_runtime(controller)
219236

220237
# 有校准则启 measure worker(供悬浮窗/打轴实时帧)
221-
if self._calibration_data is not None:
238+
if self._calibration_data is not None and not skip_overlay:
222239
if self.overlay is None: # 首次启动 controller 为 None 时未建,此处补建
223240
self.overlay = OverlayWindow()
224241
self.overlay.show()
@@ -244,13 +261,15 @@ def _on_profile_saved(self, filename: str) -> None:
244261
self.editor_page.set_profile(filename)
245262
except (OSError, ValueError):
246263
logger.exception("校准 %s 加载失败", filename)
264+
onboarding = self._needs_onboarding()
247265
if self._controller is not None:
248-
self._reconnect() # 用新校准重启 measure worker
266+
self._reconnect(skip_overlay=onboarding)
249267

250-
if not self._needs_onboarding():
268+
if not onboarding:
251269
return
252270
from aao.ui.settings_page import load_settings, save_settings
253271

272+
self._hide_overlay()
254273
QMessageBox.information(
255274
self,
256275
"可以凹图了",
@@ -479,7 +498,8 @@ def main() -> int:
479498

480499
app = QApplication(sys.argv)
481500

482-
# 校准加载:目录无任何 .json → 弹窗提示先校准,UI 仍启动(measure worker 跳过)
501+
# 校准加载:无校准则 data=None,MainWindow 会跳过 measure worker/悬浮窗,
502+
# 引导流程(首次→设置页→连接→校准)自然覆盖,不需要 pre-window 弹窗。
483503
calib_dir = calibration.calibration_dir()
484504
has_calib = any(calib_dir.glob("*.json"))
485505
data = None
@@ -489,17 +509,6 @@ def main() -> int:
489509
logger.info("校准 %s:%d 档 (%s)", profile, len(data.profiles), data.detection_mode)
490510
except (OSError, ValueError):
491511
logger.exception("校准 %s 加载失败,计时功能不可用", profile)
492-
QMessageBox.warning(
493-
None,
494-
"校准加载失败",
495-
f"校准文件 {profile} 加载失败,计时/凹图功能不可用。\n请到「校准」页重新校准。",
496-
)
497-
else:
498-
QMessageBox.information(
499-
None,
500-
"未校准",
501-
"尚未进行费用条校准,计时与凹图功能不可用。\n请到「校准」页完成校准后再使用。",
502-
)
503512

504513
window = MainWindow(controller, tasker, data, profile, args.no_api, args.port)
505514

0 commit comments

Comments
 (0)