mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-15 17:30:27 +08:00
perf: 使用 devices 判断是否需要连接 (#10606)
* perf: 使用 devices 判断是否需要连接 * chore: 判断是否存在捕获组
This commit is contained in:
@@ -83,6 +83,8 @@ bool asst::GeneralConfig::parse(const json::value& json)
|
||||
const AdbCfg& base_cfg = base_name.empty() ? AdbCfg() : m_adb_cfg.at(base_name);
|
||||
|
||||
AdbCfg& adb = m_adb_cfg[cfg_json.at("configName").as_string()];
|
||||
adb.devices = cfg_json.get("devices", base_cfg.devices);
|
||||
adb.address_regex = cfg_json.get("addressRegex", base_cfg.address_regex);
|
||||
adb.connect = cfg_json.get("connect", base_cfg.connect);
|
||||
adb.display_id = cfg_json.get("displayId", base_cfg.display_id);
|
||||
adb.uuid = cfg_json.get("uuid", base_cfg.uuid);
|
||||
|
||||
@@ -65,6 +65,8 @@ struct Options
|
||||
struct AdbCfg
|
||||
{
|
||||
/* command */
|
||||
std::string devices;
|
||||
std::string address_regex;
|
||||
std::string connect;
|
||||
std::string display_id;
|
||||
std::string uuid;
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
#include "Utils/Platform.hpp"
|
||||
#include "Utils/StringMisc.hpp"
|
||||
|
||||
#include <regex>
|
||||
|
||||
asst::AdbController::AdbController(const AsstCallback& callback, Assistant* inst, PlatformType type)
|
||||
: InstHelper(inst)
|
||||
, m_callback(callback)
|
||||
@@ -754,29 +756,58 @@ bool asst::AdbController::connect(
|
||||
|
||||
/* connect */
|
||||
{
|
||||
m_adb.connect = cmd_replace(adb_cfg.connect);
|
||||
m_adb.release = cmd_replace(adb_cfg.release);
|
||||
auto connect_ret =
|
||||
call_command(m_adb.connect, 60LL * 1000, false /* adb 连接时不允许重试 */);
|
||||
bool is_connect_success = false;
|
||||
if (connect_ret) {
|
||||
auto& connect_str = connect_ret.value();
|
||||
// 检查连接字符串是否包含 "connected" 或 "device"
|
||||
is_connect_success = connect_str.find("connected") != std::string::npos ||
|
||||
connect_str.find("device") != std::string::npos;
|
||||
if (connect_str.find("daemon started successfully") != std::string::npos
|
||||
&& connect_str.find("daemon still not running") == std::string::npos) {
|
||||
// 先用 devices 读取输出
|
||||
m_adb.devices = cmd_replace(adb_cfg.devices);
|
||||
m_adb.address_regex = cmd_replace(adb_cfg.address_regex);
|
||||
auto devices_ret = call_command(m_adb.devices, 60LL * 1000, false);
|
||||
bool need_connect = true;
|
||||
if (devices_ret) {
|
||||
const auto& devices_str = devices_ret.value();
|
||||
const std::regex address_regex(m_adb.address_regex);
|
||||
for (std::sregex_iterator iter(devices_str.begin(), devices_str.end(), address_regex), end; iter != end; ++iter) {
|
||||
if (iter->size() > 1 && iter->str(1) == address) {
|
||||
need_connect = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!is_connect_success) {
|
||||
|
||||
// 如果不包含 `:` 且需要连接,connect 命令也不会成功
|
||||
if (address.find(':') == std::string::npos && need_connect) {
|
||||
json::value info = get_info_json()
|
||||
| json::object {
|
||||
{ "what", "ConnectFailed" },
|
||||
{ "why", "Connection command failed to exec" },
|
||||
{ "why", "Address does not contain ':' and no devices found" },
|
||||
};
|
||||
callback(AsstMsg::ConnectionInfo, info);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (need_connect) {
|
||||
m_adb.connect = cmd_replace(adb_cfg.connect);
|
||||
m_adb.release = cmd_replace(adb_cfg.release);
|
||||
auto connect_ret =
|
||||
call_command(m_adb.connect, 60LL * 1000, false /* adb 连接时不允许重试 */);
|
||||
bool is_connect_success = false;
|
||||
if (connect_ret) {
|
||||
auto& connect_str = connect_ret.value();
|
||||
// 检查连接字符串是否包含 "connected"
|
||||
is_connect_success = connect_str.find("connected") != std::string::npos;
|
||||
// NOTE:这玩意啥都没干,有什么用吗?
|
||||
if (connect_str.find("daemon started successfully") != std::string::npos
|
||||
&& connect_str.find("daemon still not running") == std::string::npos) {
|
||||
}
|
||||
}
|
||||
if (!is_connect_success) {
|
||||
json::value info = get_info_json()
|
||||
| json::object {
|
||||
{ "what", "ConnectFailed" },
|
||||
{ "why", "Connection command failed to exec" },
|
||||
};
|
||||
callback(AsstMsg::ConnectionInfo, info);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (need_exit()) {
|
||||
|
||||
@@ -119,6 +119,8 @@ protected:
|
||||
struct AdbProperty
|
||||
{
|
||||
/* command */
|
||||
std::string devices;
|
||||
std::string address_regex;
|
||||
std::string connect;
|
||||
std::string call_minitouch;
|
||||
std::string call_maatouch;
|
||||
|
||||
Reference in New Issue
Block a user