feat: 保存当前使用的 Android 设备 (#22)
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
"""当前使用 Android 设备的本地设置服务。"""
|
||||
|
||||
from .settings_repository import SettingsRepository
|
||||
|
||||
|
||||
SELECTED_ANDROID_SERIAL_KEY = "android.selected_serial"
|
||||
MAX_ANDROID_SERIAL_LENGTH = 255
|
||||
|
||||
|
||||
class SelectedAndroidDeviceService:
|
||||
"""只保存自动化应使用的设备号,不缓存 ADB 搜索结果。"""
|
||||
|
||||
def __init__(self, repository: SettingsRepository):
|
||||
self._repository = repository
|
||||
|
||||
def load(self) -> str:
|
||||
"""读取已保存设备号;缺失或损坏时返回空字符串。"""
|
||||
|
||||
value = self._repository.get(SELECTED_ANDROID_SERIAL_KEY, "")
|
||||
if not isinstance(value, str):
|
||||
return ""
|
||||
return value.strip()
|
||||
|
||||
def save(self, serial: str) -> str:
|
||||
"""校验并保存设备号,返回规范化后的值。"""
|
||||
|
||||
normalized = self._normalize_serial(serial)
|
||||
self._repository.set(SELECTED_ANDROID_SERIAL_KEY, normalized)
|
||||
return normalized
|
||||
|
||||
def delete(self) -> bool:
|
||||
"""清除当前设备配置;配置不存在时也视为安全完成。"""
|
||||
|
||||
return self._repository.delete(SELECTED_ANDROID_SERIAL_KEY)
|
||||
|
||||
@staticmethod
|
||||
def _normalize_serial(serial: object) -> str:
|
||||
if not isinstance(serial, str):
|
||||
raise ValueError("Android 设备号必须是文本")
|
||||
|
||||
normalized = serial.strip()
|
||||
if not normalized:
|
||||
raise ValueError("Android 设备号不能为空")
|
||||
if len(normalized) > MAX_ANDROID_SERIAL_LENGTH:
|
||||
raise ValueError(
|
||||
f"Android 设备号最多 {MAX_ANDROID_SERIAL_LENGTH} 个字符"
|
||||
)
|
||||
if any(character.isspace() for character in normalized):
|
||||
raise ValueError("Android 设备号不能包含空白字符")
|
||||
return normalized
|
||||
Reference in New Issue
Block a user