From 4e4cd35a127e115dcf4db3d239a66f87325ca6f9 Mon Sep 17 00:00:00 2001 From: MistEO Date: Fri, 6 May 2022 22:18:29 +0800 Subject: [PATCH] =?UTF-8?q?fix.=E4=BF=AE=E5=A4=8DdisplayId=E4=B8=8D?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E6=97=B6=E7=9A=84=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/config.json | 10 +------ src/MeoAssistant/Controller.cpp | 45 +++++++++++++++------------- src/MeoAssistant/GeneralConfiger.cpp | 2 +- 3 files changed, 26 insertions(+), 31 deletions(-) diff --git a/resource/config.json b/resource/config.json index 6f610b909a..ea4065ea20 100644 --- a/resource/config.json +++ b/resource/config.json @@ -42,7 +42,6 @@ "swipe": "[Adb] -s [Address] shell input swipe [x1] [y1] [x2] [y2] [duration]", "display": "[Adb] -s [Address] shell dumpsys window displays | grep init= | awk ' { print $3 } '", "displayFormat": "cur=%dx%d", - "displayId": "", "screencapRawWithGzip": "[Adb] -s [Address] exec-out \"screencap | gzip -1\"", "screencapEncode": "[Adb] -s [Address] exec-out screencap -p", "release": "[Adb] kill-server" @@ -72,7 +71,7 @@ "release": "[Adb] kill-server" } }, - "BlueStacksInternationalNewVersion": { + "BlueStacksInternationalNewVersion": { "handle": { "class": "", "window": "BlueStacks App Player" @@ -91,7 +90,6 @@ "swipe": "[Adb] -s [Address] shell input swipe [x1] [y1] [x2] [y2] [duration]", "display": "[Adb] -s [Address] shell dumpsys window displays | grep init= | awk ' { print $3 } '", "displayFormat": "cur=%dx%d", - "displayId": "", "screencapRawWithGzip": "[Adb] -s [Address] exec-out \"screencap | gzip -1\"", "screencapEncode": "[Adb] -s [Address] exec-out screencap -p", "release": "[Adb] kill-server" @@ -114,7 +112,6 @@ "swipe": "[Adb] -s [Address] shell input swipe [x1] [y1] [x2] [y2] [duration]", "display": "[Adb] -s [Address] shell dumpsys window displays | grep init= | awk ' { print $3 } '", "displayFormat": "cur=%dx%d", - "displayId": "", "screencapRawWithGzip": "[Adb] -s [Address] exec-out \"screencap | gzip -1\"", "screencapEncode": "[Adb] -s [Address] exec-out screencap -p", "release": "[Adb] kill-server" @@ -138,7 +135,6 @@ "swipe": "[Adb] -s [Address] shell input swipe [x1] [y1] [x2] [y2] [duration]", "display": "[Adb] -s [Address] shell dumpsys window displays | grep init= | awk ' { print $3 } '", "displayFormat": "cur=%dx%d", - "displayId": "", "screencapRawWithGzip": "[Adb] -s [Address] shell \"screencap | gzip -1\"", "screencapEncode": "[Adb] -s [Address] shell screencap -p", "release": "[Adb] kill-server" @@ -162,7 +158,6 @@ "swipe": "[Adb] -s [Address] shell input swipe [x1] [y1] [x2] [y2] [duration]", "display": "[Adb] -s [Address] shell dumpsys window displays | grep init= | awk ' { print $3 } '", "displayFormat": "cur=%dx%d", - "displayId": "", "screencapRawWithGzip": "[Adb] -s [Address] exec-out \"screencap | gzip -1\"", "screencapEncode": "[Adb] -s [Address] exec-out screencap -p", "release": "[Adb] kill-server" @@ -186,7 +181,6 @@ "swipe": "[Adb] -s [Address] shell input swipe [x1] [y1] [x2] [y2] [duration]", "display": "[Adb] -s [Address] shell dumpsys window displays | grep init= | awk ' { print $3 } '", "displayFormat": "cur=%dx%d", - "displayId": "", "screencapRawWithGzip": "[Adb] -s [Address] exec-out \"screencap | gzip -1\"", "screencapEncode": "[Adb] -s [Address] exec-out screencap -p", "release": "[Adb] kill-server" @@ -209,7 +203,6 @@ "swipe": "[Adb] -s [Address] shell input swipe [x1] [y1] [x2] [y2] [duration]", "display": "[Adb] -s [Address] shell dumpsys window displays | grep init=", "displayFormat": " init=%dx%d", - "displayId": "", "screencapRawWithGzip": "[Adb] -s [Address] shell \"screencap | gzip -1\"", "screencapEncode": "[Adb] -s [Address] shell screencap -p", "release": "[Adb] kill-server" @@ -254,7 +247,6 @@ "click": "[Adb] -s [Address] shell input tap [x] [y]", "swipe": "[Adb] -s [Address] shell input swipe [x1] [y1] [x2] [y2] [duration]", "display": "[Adb] -s [Address] shell dumpsys window displays | grep init=", - "displayId": "", "displayFormat": " init=%dx%d", "screencapRawWithGzip": "[Adb] -s [Address] exec-out \"screencap | gzip -1\"", "screencapEncode": "[Adb] -s [Address] exec-out screencap -p", diff --git a/src/MeoAssistant/Controller.cpp b/src/MeoAssistant/Controller.cpp index 17057f9e6e..80dfb2d366 100644 --- a/src/MeoAssistant/Controller.cpp +++ b/src/MeoAssistant/Controller.cpp @@ -107,11 +107,14 @@ bool asst::Controller::connect_adb(const std::string & address) { LogTraceScope("connect_adb " + address); - std::string connect_cmd = utils::string_replace_all( - utils::string_replace_all(m_emulator_info.adb.connect, "[Adb]", m_emulator_info.adb.path), - "[Address]", address); + std::vector> replaces = { + {"[Adb]", m_emulator_info.adb.path}, + {"[Address]", address} + }; + + std::string connect_cmd = utils::string_replace_all_batch( + m_emulator_info.adb.connect, replaces); - std::string display_id; auto connect_ret = call_command(connect_cmd, 600 * 1000); // 端口即使错误,命令仍然会返回0,TODO 对connect_result进行判断 if (!connect_ret) { @@ -120,9 +123,8 @@ bool asst::Controller::connect_adb(const std::string & address) // 按需获取display ID 信息 if (!m_emulator_info.adb.display_id.empty()) { - std::string display_id_cmd = utils::string_replace_all( - utils::string_replace_all(m_emulator_info.adb.display_id, "[Adb]", m_emulator_info.adb.path), - "[Address]", address); + std::string display_id_cmd = utils::string_replace_all_batch( + m_emulator_info.adb.display_id, replaces); auto display_id_ret = call_command(display_id_cmd); if (!display_id_ret) { return false; @@ -138,15 +140,12 @@ bool asst::Controller::connect_adb(const std::string & address) return false; } - display_id = display_id_pipe_str.substr(last + 1); + std::string display_id = display_id_pipe_str.substr(last + 1); // 去掉换行 display_id.pop_back(); + + replaces.emplace_back("[DisplayId]", std::move(display_id)); } - std::vector> replaces = { - {"[Adb]", m_emulator_info.adb.path}, - {"[Address]", address}, - {"[DisplayId]", display_id} - }; std::string display_cmd = utils::string_replace_all_batch( m_emulator_info.adb.display, replaces); @@ -178,29 +177,33 @@ bool asst::Controller::connect_adb(const std::string & address) constexpr double DefaultRatio = static_cast(WindowWidthDefault) / static_cast(WindowHeightDefault); - double cur_ratio = static_cast(m_emulator_info.adb.display_width) / static_cast(m_emulator_info.adb.display_height); + double cur_ratio = static_cast(m_emulator_info.adb.display_width) / + static_cast(m_emulator_info.adb.display_height); if (cur_ratio >= DefaultRatio // 说明是宽屏或默认16:9,按照高度计算缩放 || std::fabs(cur_ratio - DefaultRatio) < DoubleDiff) { int scale_width = static_cast(cur_ratio * WindowHeightDefault); m_scale_size = std::make_pair(scale_width, WindowHeightDefault); - m_control_scale = static_cast(m_emulator_info.adb.display_height) / static_cast(WindowHeightDefault); + m_control_scale = static_cast(m_emulator_info.adb.display_height) / + static_cast(WindowHeightDefault); } else { // 否则可能是偏正方形的屏幕,按宽度计算 int scale_height = static_cast(WindowWidthDefault / cur_ratio); m_scale_size = std::make_pair(WindowWidthDefault, scale_height); - m_control_scale = static_cast(m_emulator_info.adb.display_width) / static_cast(WindowWidthDefault); + m_control_scale = static_cast(m_emulator_info.adb.display_width) / + static_cast(WindowWidthDefault); } - + m_emulator_info.adb.click = utils::string_replace_all_batch( m_emulator_info.adb.click, replaces); m_emulator_info.adb.swipe = utils::string_replace_all_batch( m_emulator_info.adb.swipe, replaces); - m_emulator_info.adb.screencap_raw_with_gzip = - utils::string_replace_all_batch( + m_emulator_info.adb.screencap_raw_with_gzip = utils::string_replace_all_batch( m_emulator_info.adb.screencap_raw_with_gzip, replaces); - m_emulator_info.adb.screencap_encode = utils::string_replace_all_batch(m_emulator_info.adb.screencap_encode, replaces); - m_emulator_info.adb.release = utils::string_replace_all(m_emulator_info.adb.release, "[Adb]", m_emulator_info.adb.path); + m_emulator_info.adb.screencap_encode = utils::string_replace_all_batch( + m_emulator_info.adb.screencap_encode, replaces); + m_emulator_info.adb.release = utils::string_replace_all_batch( + m_emulator_info.adb.release, replaces); return true; } diff --git a/src/MeoAssistant/GeneralConfiger.cpp b/src/MeoAssistant/GeneralConfiger.cpp index e89e790444..00772dbf18 100644 --- a/src/MeoAssistant/GeneralConfiger.cpp +++ b/src/MeoAssistant/GeneralConfiger.cpp @@ -50,7 +50,7 @@ bool asst::GeneralConfiger::parse(const json::value& json) emulator_info.adb.click = adb_json.at("click").as_string(); emulator_info.adb.swipe = adb_json.at("swipe").as_string(); emulator_info.adb.display = adb_json.at("display").as_string(); - emulator_info.adb.display_id = adb_json.at("displayId").as_string(); + emulator_info.adb.display_id = adb_json.get("displayId", std::string()); emulator_info.adb.display_format = adb_json.at("displayFormat").as_string(); emulator_info.adb.screencap_raw_with_gzip = adb_json.at("screencapRawWithGzip").as_string(); emulator_info.adb.screencap_encode = adb_json.at("screencapEncode").as_string();