fix: Wi-Fi 恢复失败后继续搜索设备 (#66)
This commit is contained in:
@@ -40,6 +40,14 @@ class AndroidWifiConversionResult:
|
||||
devices: List[AndroidDevice]
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class AndroidDeviceSearchResult:
|
||||
"""一次设备搜索的结果,可同时携带已保存设备恢复警告。"""
|
||||
|
||||
devices: List[AndroidDevice]
|
||||
restore_warning: str = ""
|
||||
|
||||
|
||||
CommandRunner = Callable[[Sequence[str], float], subprocess.CompletedProcess]
|
||||
ProgressCallback = Callable[[str], None]
|
||||
Sleeper = Callable[[float], None]
|
||||
|
||||
@@ -18,6 +18,7 @@ from PyQt5.QtCore import (
|
||||
from .android_device_service import (
|
||||
AndroidDeviceConversionCancelled,
|
||||
AndroidDeviceSearchError,
|
||||
AndroidDeviceSearchResult,
|
||||
AndroidDeviceService,
|
||||
PDD_PACKAGE_NAME,
|
||||
)
|
||||
@@ -130,11 +131,18 @@ class AndroidDeviceSearchWorker(QObject):
|
||||
def run(self) -> None:
|
||||
try:
|
||||
try:
|
||||
restore_warning = ""
|
||||
if self._restore_serial:
|
||||
devices = self._service.restore_saved_device(
|
||||
self._restore_serial,
|
||||
lambda: self._cancelled,
|
||||
)
|
||||
try:
|
||||
devices = self._service.restore_saved_device(
|
||||
self._restore_serial,
|
||||
lambda: self._cancelled,
|
||||
)
|
||||
except AndroidDeviceSearchError as exc:
|
||||
restore_warning = str(exc)
|
||||
devices = self._service.search(
|
||||
lambda: self._cancelled
|
||||
)
|
||||
else:
|
||||
devices = self._service.search(lambda: self._cancelled)
|
||||
except AndroidDeviceSearchError as exc:
|
||||
@@ -145,7 +153,9 @@ class AndroidDeviceSearchWorker(QObject):
|
||||
self.failed.emit(str(exc) or "无法搜索 Android 设备")
|
||||
else:
|
||||
if not self._cancelled:
|
||||
self.succeeded.emit(devices)
|
||||
self.succeeded.emit(
|
||||
AndroidDeviceSearchResult(devices, restore_warning)
|
||||
)
|
||||
finally:
|
||||
self.completed.emit()
|
||||
|
||||
@@ -897,7 +907,7 @@ class SettingsPageEventBinder(QObject):
|
||||
return AndroidDeviceInfo(serial) if serial else None
|
||||
|
||||
@pyqtSlot(object)
|
||||
def _on_search_succeeded(self, devices) -> None:
|
||||
def _on_search_succeeded(self, result: AndroidDeviceSearchResult) -> None:
|
||||
if self._closing:
|
||||
return
|
||||
|
||||
@@ -909,7 +919,7 @@ class SettingsPageEventBinder(QObject):
|
||||
android_version=device.android_version,
|
||||
status=device.status,
|
||||
)
|
||||
for device in devices
|
||||
for device in result.devices
|
||||
]
|
||||
self._page.set_android_devices(rows)
|
||||
saved_device = self._page.deviceTableModel.device_for_serial(
|
||||
@@ -919,6 +929,24 @@ class SettingsPageEventBinder(QObject):
|
||||
self._page.deviceTableModel.set_checked_serial(
|
||||
self._saved_android_serial
|
||||
)
|
||||
|
||||
if result.restore_warning:
|
||||
action = (
|
||||
"自动恢复未完成"
|
||||
if self._search_is_startup_restore
|
||||
else "搜索完成"
|
||||
)
|
||||
found_text = (
|
||||
f"找到 {len(rows)} 台 Android 设备"
|
||||
if rows
|
||||
else "未找到其他 Android 设备"
|
||||
)
|
||||
self._page.deviceStatusLabel.setText(
|
||||
f"{action}:{found_text};已保存设备 "
|
||||
f"{self._saved_android_serial} 恢复失败:"
|
||||
f"{result.restore_warning};配置已保留"
|
||||
)
|
||||
elif saved_device is not None and saved_device.status == "device":
|
||||
action = (
|
||||
"恢复完成"
|
||||
if self._search_is_startup_restore
|
||||
|
||||
Reference in New Issue
Block a user