fix: 启动时恢复已保存的 Android 设备 (#26)
This commit is contained in:
@@ -6,7 +6,14 @@
|
||||
|
||||
from typing import Optional
|
||||
|
||||
from PyQt5.QtCore import QCoreApplication, QObject, QThread, pyqtSignal, pyqtSlot
|
||||
from PyQt5.QtCore import (
|
||||
QCoreApplication,
|
||||
QObject,
|
||||
QThread,
|
||||
QTimer,
|
||||
pyqtSignal,
|
||||
pyqtSlot,
|
||||
)
|
||||
|
||||
from .android_device_service import (
|
||||
AndroidDeviceConversionCancelled,
|
||||
@@ -97,15 +104,20 @@ class CurrentClientSaveWorker(QObject):
|
||||
|
||||
|
||||
class AndroidDeviceSearchWorker(QObject):
|
||||
"""在后台线程查询 ADB,结果只通过信号返回主线程。"""
|
||||
"""在后台搜索设备,也可先恢复一台已保存设备。"""
|
||||
|
||||
succeeded = pyqtSignal(object)
|
||||
failed = pyqtSignal(str)
|
||||
completed = pyqtSignal()
|
||||
|
||||
def __init__(self, service: AndroidDeviceService):
|
||||
def __init__(
|
||||
self,
|
||||
service: AndroidDeviceService,
|
||||
restore_serial: str = "",
|
||||
):
|
||||
super().__init__()
|
||||
self._service = service
|
||||
self._restore_serial = restore_serial
|
||||
self._cancelled = False
|
||||
|
||||
def cancel(self) -> None:
|
||||
@@ -117,7 +129,13 @@ class AndroidDeviceSearchWorker(QObject):
|
||||
def run(self) -> None:
|
||||
try:
|
||||
try:
|
||||
devices = self._service.search(lambda: self._cancelled)
|
||||
if self._restore_serial:
|
||||
devices = self._service.restore_saved_device(
|
||||
self._restore_serial,
|
||||
lambda: self._cancelled,
|
||||
)
|
||||
else:
|
||||
devices = self._service.search(lambda: self._cancelled)
|
||||
except AndroidDeviceSearchError as exc:
|
||||
if not self._cancelled:
|
||||
self.failed.emit(str(exc))
|
||||
@@ -247,6 +265,7 @@ class SettingsPageEventBinder(QObject):
|
||||
self._thread: Optional[QThread] = None
|
||||
self._worker: Optional[CurrentClientSaveWorker] = None
|
||||
self._search_busy = False
|
||||
self._search_restore_serial = ""
|
||||
self._search_thread: Optional[QThread] = None
|
||||
self._search_worker: Optional[AndroidDeviceSearchWorker] = None
|
||||
self._wifi_conversion_busy = False
|
||||
@@ -306,6 +325,8 @@ class SettingsPageEventBinder(QObject):
|
||||
self._load_current_client()
|
||||
self._load_selected_android_device()
|
||||
self._sync_button_state()
|
||||
if self._saved_android_serial:
|
||||
QTimer.singleShot(0, self._request_restore_saved_android_device)
|
||||
|
||||
@pyqtSlot()
|
||||
def _request_save_current_device(self) -> None:
|
||||
@@ -385,6 +406,15 @@ class SettingsPageEventBinder(QObject):
|
||||
|
||||
@pyqtSlot()
|
||||
def _start_search(self) -> None:
|
||||
self._start_search_worker()
|
||||
|
||||
@pyqtSlot()
|
||||
def _request_restore_saved_android_device(self) -> None:
|
||||
if not self._saved_android_serial:
|
||||
return
|
||||
self._start_search_worker(self._saved_android_serial)
|
||||
|
||||
def _start_search_worker(self, restore_serial: str = "") -> None:
|
||||
if (
|
||||
self._closing
|
||||
or self._busy
|
||||
@@ -396,11 +426,20 @@ class SettingsPageEventBinder(QObject):
|
||||
return
|
||||
|
||||
self._search_busy = True
|
||||
self._search_restore_serial = restore_serial
|
||||
self._sync_button_state()
|
||||
self._page.deviceStatusLabel.setText("正在搜索 Android 设备…")
|
||||
status = (
|
||||
f"正在恢复已保存设备:{restore_serial}…"
|
||||
if restore_serial
|
||||
else "正在搜索 Android 设备…"
|
||||
)
|
||||
self._page.deviceStatusLabel.setText(status)
|
||||
|
||||
thread = QThread(self)
|
||||
worker = AndroidDeviceSearchWorker(self._android_device_service)
|
||||
worker = AndroidDeviceSearchWorker(
|
||||
self._android_device_service,
|
||||
restore_serial,
|
||||
)
|
||||
worker.moveToThread(thread)
|
||||
|
||||
thread.started.connect(worker.run)
|
||||
@@ -687,8 +726,9 @@ class SettingsPageEventBinder(QObject):
|
||||
self._page.deviceTableModel.set_checked_serial(
|
||||
self._saved_android_serial
|
||||
)
|
||||
action = "恢复完成" if self._search_restore_serial else "搜索完成"
|
||||
self._page.deviceStatusLabel.setText(
|
||||
f"搜索完成:找到 {len(rows)} 台 Android 设备;"
|
||||
f"{action}:找到 {len(rows)} 台 Android 设备;"
|
||||
"已自动选择当前使用设备"
|
||||
)
|
||||
elif self._saved_android_serial:
|
||||
@@ -709,15 +749,22 @@ class SettingsPageEventBinder(QObject):
|
||||
def _on_search_failed(self, message: str) -> None:
|
||||
if self._closing:
|
||||
return
|
||||
self._page.deviceStatusLabel.setText(
|
||||
f"搜索失败:{message};设备列表和已保存配置未更改"
|
||||
)
|
||||
if self._search_restore_serial:
|
||||
self._page.deviceStatusLabel.setText(
|
||||
f"自动恢复失败:{message};已保存配置未更改,"
|
||||
"可点击搜索重试"
|
||||
)
|
||||
else:
|
||||
self._page.deviceStatusLabel.setText(
|
||||
f"搜索失败:{message};设备列表和已保存配置未更改"
|
||||
)
|
||||
|
||||
@pyqtSlot()
|
||||
def _on_search_thread_finished(self) -> None:
|
||||
self._search_worker = None
|
||||
self._search_thread = None
|
||||
self._search_busy = False
|
||||
self._search_restore_serial = ""
|
||||
if not self._closing:
|
||||
self._sync_button_state()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user