17c804472Sopenharmony_ci/* 27c804472Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 37c804472Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 47c804472Sopenharmony_ci * you may not use this file except in compliance with the License. 57c804472Sopenharmony_ci * You may obtain a copy of the License at 67c804472Sopenharmony_ci * 77c804472Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 87c804472Sopenharmony_ci * 97c804472Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 107c804472Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 117c804472Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 127c804472Sopenharmony_ci * See the License for the specific language governing permissions and 137c804472Sopenharmony_ci * limitations under the License. 147c804472Sopenharmony_ci */ 157c804472Sopenharmony_ci 167c804472Sopenharmony_ci#include "CommandParser.h" 177c804472Sopenharmony_ci#include <cstring> 187c804472Sopenharmony_ci#include <algorithm> 197c804472Sopenharmony_ci#include <cstdlib> 207c804472Sopenharmony_ci#include <regex> 217c804472Sopenharmony_ci#include "FileSystem.h" 227c804472Sopenharmony_ci#include "PreviewerEngineLog.h" 237c804472Sopenharmony_ci#include "TraceTool.h" 247c804472Sopenharmony_ci 257c804472Sopenharmony_ciCommandParser* CommandParser::example = nullptr; 267c804472Sopenharmony_ciCommandParser::CommandParser() 277c804472Sopenharmony_ci : isSendJSHeap(true), 287c804472Sopenharmony_ci orignalResolutionWidth(0), 297c804472Sopenharmony_ci orignalResolutionHeight(0), 307c804472Sopenharmony_ci compressionResolutionWidth(0), 317c804472Sopenharmony_ci compressionResolutionHeight(0), 327c804472Sopenharmony_ci jsHeapSize(MAX_JSHEAPSIZE), 337c804472Sopenharmony_ci deviceType("liteWearable"), 347c804472Sopenharmony_ci screenShape("circle"), 357c804472Sopenharmony_ci appName("undefined"), 367c804472Sopenharmony_ci configPath(""), 377c804472Sopenharmony_ci isRegionRefresh(false), 387c804472Sopenharmony_ci isCardDisplay(false), 397c804472Sopenharmony_ci projectID(""), 407c804472Sopenharmony_ci screenMode(CommandParser::ScreenMode::DYNAMIC), 417c804472Sopenharmony_ci configChanges(""), 427c804472Sopenharmony_ci appResourcePath(""), 437c804472Sopenharmony_ci projectModel("FA"), 447c804472Sopenharmony_ci pages("main_pages"), 457c804472Sopenharmony_ci containerSdkPath(""), 467c804472Sopenharmony_ci isComponentMode(false), 477c804472Sopenharmony_ci abilityPath(""), 487c804472Sopenharmony_ci#ifdef COMPONENT_TEST_ENABLED 497c804472Sopenharmony_ci componentTestConfig(""), 507c804472Sopenharmony_ci#endif // COMPONENT_TEST_ENABLED 517c804472Sopenharmony_ci staticCard(false) 527c804472Sopenharmony_ci{ 537c804472Sopenharmony_ci Register("-j", 1, "Launch the js app in <directory>."); 547c804472Sopenharmony_ci Register("-n", 1, "Set the js app name show on <window title>."); 557c804472Sopenharmony_ci Register("-d", 0, "Run in debug mode and start debug server."); 567c804472Sopenharmony_ci Register("-p", 1, "Config debug server to listen <port>."); 577c804472Sopenharmony_ci Register("-s", 1, "Local socket name <socket-name> for command line interface."); 587c804472Sopenharmony_ci Register("-v", 0, "Print the periviewer engine version."); 597c804472Sopenharmony_ci Register("-h", 0, "Print the usage help."); 607c804472Sopenharmony_ci Register("-or", 2, "Original resolution <width> <height>"); // 2 arguments 617c804472Sopenharmony_ci Register("-cr", 2, "Compression resolution <width> <height>"); // 2 arguments 627c804472Sopenharmony_ci Register("-f", 1, "config path <path>"); 637c804472Sopenharmony_ci Register("-hs", 1, "JS Heap <size>"); 647c804472Sopenharmony_ci Register("-hf", 1, "JS Send Heap <flag>"); 657c804472Sopenharmony_ci Register("-shape", 1, "Screen shape <shape>"); 667c804472Sopenharmony_ci Register("-device", 1, "Device type <type>"); 677c804472Sopenharmony_ci Register("-url", 1, "temp url"); 687c804472Sopenharmony_ci Register("-refresh", 1, "Screen <refresh mode>, support region and full"); 697c804472Sopenharmony_ci Register("-card", 1, "Controls the display <type> to switch between the app and card."); 707c804472Sopenharmony_ci Register("-projectID", 1, "the ID of current project."); 717c804472Sopenharmony_ci Register("-ts", 1, "Trace socket name"); 727c804472Sopenharmony_ci Register("-cm", 1, "Set colormode for the theme."); 737c804472Sopenharmony_ci Register("-o", 1, "Set orientation for the display."); 747c804472Sopenharmony_ci Register("-lws", 1, "Listening port of WebSocket"); 757c804472Sopenharmony_ci Register("-av", 1, "Set ace version."); 767c804472Sopenharmony_ci Register("-l", 1, "Set language for startParam."); 777c804472Sopenharmony_ci Register("-sd", 1, "Set screenDensity for Previewer."); 787c804472Sopenharmony_ci Register("-sm", 1, "Set Screen picture transport mode, support dynamic and static"); 797c804472Sopenharmony_ci Register("-cc", 1, "Set Resource configChanges."); 807c804472Sopenharmony_ci Register("-arp", 1, "Set App ResourcePath."); 817c804472Sopenharmony_ci Register("-fs", 1, "Select Fonts sources."); 827c804472Sopenharmony_ci Register("-pm", 1, "Set project model type."); 837c804472Sopenharmony_ci Register("-pages", 1, "Set project's router config file path."); 847c804472Sopenharmony_ci Register("-hsp", 1, "Set container sdk path."); 857c804472Sopenharmony_ci Register("-cpm", 1, "Set previewer start mode."); 867c804472Sopenharmony_ci Register("-abp", 1, "Set abilityPath for debug."); 877c804472Sopenharmony_ci Register("-abn", 1, "Set abilityName for debug."); 887c804472Sopenharmony_ci Register("-staticCard", 1, "Set card mode."); 897c804472Sopenharmony_ci Register("-foldable", 1, "Set foldable for Previewer."); 907c804472Sopenharmony_ci Register("-foldStatus", 1, "Set fold status for Previewer."); 917c804472Sopenharmony_ci Register("-fr", 2, "Fold resolution <width> <height>"); // 2 arguments 927c804472Sopenharmony_ci Register("-ljPath", 1, "Set loader.json path for Previewer"); 937c804472Sopenharmony_ci#ifdef COMPONENT_TEST_ENABLED 947c804472Sopenharmony_ci Register("-componentTest", 1, "Set component test config"); 957c804472Sopenharmony_ci#endif // COMPONENT_TEST_ENABLED 967c804472Sopenharmony_ci} 977c804472Sopenharmony_ci 987c804472Sopenharmony_ciCommandParser& CommandParser::GetInstance() 997c804472Sopenharmony_ci{ 1007c804472Sopenharmony_ci static CommandParser instance; 1017c804472Sopenharmony_ci return instance; 1027c804472Sopenharmony_ci} 1037c804472Sopenharmony_ci 1047c804472Sopenharmony_ci/* 1057c804472Sopenharmony_ci * Parse user input and check parameter validity 1067c804472Sopenharmony_ci */ 1077c804472Sopenharmony_cibool CommandParser::ProcessCommand(std::vector<std::string> strs) 1087c804472Sopenharmony_ci{ 1097c804472Sopenharmony_ci ProcessingCommand(strs); 1107c804472Sopenharmony_ci 1117c804472Sopenharmony_ci if (IsSet("v")) { 1127c804472Sopenharmony_ci ELOG("ProcessCommand Set -v!"); 1137c804472Sopenharmony_ci return false; 1147c804472Sopenharmony_ci } 1157c804472Sopenharmony_ci 1167c804472Sopenharmony_ci if (IsSet("h")) { 1177c804472Sopenharmony_ci ELOG("ProcessCommand Set -h!"); 1187c804472Sopenharmony_ci ELOG(HelpText().c_str()); 1197c804472Sopenharmony_ci return false; 1207c804472Sopenharmony_ci } 1217c804472Sopenharmony_ci 1227c804472Sopenharmony_ci return true; 1237c804472Sopenharmony_ci} 1247c804472Sopenharmony_ci 1257c804472Sopenharmony_cibool CommandParser::IsCommandValid() 1267c804472Sopenharmony_ci{ 1277c804472Sopenharmony_ci bool partRet = IsDebugPortValid() && IsAppPathValid() && IsAppNameValid() && IsResolutionValid(); 1287c804472Sopenharmony_ci partRet = partRet && IsConfigPathValid() && IsJsHeapValid() && IsJsHeapFlagValid() && IsScreenShapeValid(); 1297c804472Sopenharmony_ci partRet = partRet && IsDeviceValid() && IsUrlValid() && IsRefreshValid() && IsCardValid() && IsProjectIDValid(); 1307c804472Sopenharmony_ci partRet = partRet && IsColorModeValid() && IsOrientationValid() && IsWebSocketPortValid() && IsAceVersionValid(); 1317c804472Sopenharmony_ci partRet = partRet && IsScreenModeValid() && IsAppResourcePathValid() && IsLoaderJsonPathValid(); 1327c804472Sopenharmony_ci partRet = partRet && IsProjectModelValid() && IsPagesValid() && IsContainerSdkPathValid(); 1337c804472Sopenharmony_ci partRet = partRet && IsComponentModeValid() && IsAbilityPathValid() && IsStaticCardValid(); 1347c804472Sopenharmony_ci partRet = partRet && IsFoldableValid() && IsFoldStatusValid() && IsFoldResolutionValid(); 1357c804472Sopenharmony_ci partRet = partRet && IsAbilityNameValid() && IsLanguageValid() && IsTracePipeNameValid(); 1367c804472Sopenharmony_ci partRet = partRet && IsLocalSocketNameValid() && IsConfigChangesValid() && IsScreenDensityValid(); 1377c804472Sopenharmony_ci if (partRet) { 1387c804472Sopenharmony_ci return true; 1397c804472Sopenharmony_ci } 1407c804472Sopenharmony_ci ELOG(errorInfo.c_str()); 1417c804472Sopenharmony_ci ILOG(HelpText().c_str()); 1427c804472Sopenharmony_ci TraceTool::GetInstance().HandleTrace("Invalid startup parameters"); 1437c804472Sopenharmony_ci return false; 1447c804472Sopenharmony_ci} 1457c804472Sopenharmony_ci 1467c804472Sopenharmony_cibool CommandParser::IsSet(std::string key) 1477c804472Sopenharmony_ci{ 1487c804472Sopenharmony_ci if (argsMap.find(std::string("-") + key) == argsMap.end()) { 1497c804472Sopenharmony_ci return false; 1507c804472Sopenharmony_ci } 1517c804472Sopenharmony_ci return true; 1527c804472Sopenharmony_ci} 1537c804472Sopenharmony_ci 1547c804472Sopenharmony_cistd::string CommandParser::Value(std::string key) 1557c804472Sopenharmony_ci{ 1567c804472Sopenharmony_ci auto args = argsMap[std::string("-") + key]; 1577c804472Sopenharmony_ci if (args.size() > 0) { 1587c804472Sopenharmony_ci return args[0]; 1597c804472Sopenharmony_ci } 1607c804472Sopenharmony_ci return std::string(); 1617c804472Sopenharmony_ci} 1627c804472Sopenharmony_ci 1637c804472Sopenharmony_cistd::vector<std::string> CommandParser::Values(std::string key) 1647c804472Sopenharmony_ci{ 1657c804472Sopenharmony_ci if (argsMap.find(key) == argsMap.end()) { 1667c804472Sopenharmony_ci return std::vector<std::string>(); 1677c804472Sopenharmony_ci } 1687c804472Sopenharmony_ci std::vector<std::string> args = argsMap[key]; 1697c804472Sopenharmony_ci return args; 1707c804472Sopenharmony_ci} 1717c804472Sopenharmony_ci 1727c804472Sopenharmony_civoid CommandParser::Register(std::string key, uint32_t argc, std::string help) 1737c804472Sopenharmony_ci{ 1747c804472Sopenharmony_ci regsArgsCountMap[key] = argc; 1757c804472Sopenharmony_ci regsHelpMap[key] = help; 1767c804472Sopenharmony_ci} 1777c804472Sopenharmony_ci 1787c804472Sopenharmony_cibool CommandParser::IsResolutionValid(int32_t resolution) const 1797c804472Sopenharmony_ci{ 1807c804472Sopenharmony_ci if (resolution >= MIN_RESOLUTION && resolution <= MAX_RESOLUTION) { 1817c804472Sopenharmony_ci return true; 1827c804472Sopenharmony_ci } 1837c804472Sopenharmony_ci return false; 1847c804472Sopenharmony_ci} 1857c804472Sopenharmony_ci 1867c804472Sopenharmony_cistd::string CommandParser::GetDeviceType() const 1877c804472Sopenharmony_ci{ 1887c804472Sopenharmony_ci return deviceType; 1897c804472Sopenharmony_ci} 1907c804472Sopenharmony_ci 1917c804472Sopenharmony_cibool CommandParser::IsRegionRefresh() const 1927c804472Sopenharmony_ci{ 1937c804472Sopenharmony_ci return isRegionRefresh; 1947c804472Sopenharmony_ci} 1957c804472Sopenharmony_ci 1967c804472Sopenharmony_cibool CommandParser::IsCardDisplay() const 1977c804472Sopenharmony_ci{ 1987c804472Sopenharmony_ci return isCardDisplay; 1997c804472Sopenharmony_ci} 2007c804472Sopenharmony_ci 2017c804472Sopenharmony_cistd::string CommandParser::GetConfigPath() const 2027c804472Sopenharmony_ci{ 2037c804472Sopenharmony_ci return configPath; 2047c804472Sopenharmony_ci} 2057c804472Sopenharmony_ci 2067c804472Sopenharmony_cistd::string CommandParser::GetProjectID() const 2077c804472Sopenharmony_ci{ 2087c804472Sopenharmony_ci return projectID; 2097c804472Sopenharmony_ci} 2107c804472Sopenharmony_ci 2117c804472Sopenharmony_cistd::string CommandParser::GetAppResourcePath() const 2127c804472Sopenharmony_ci{ 2137c804472Sopenharmony_ci return appResourcePath; 2147c804472Sopenharmony_ci} 2157c804472Sopenharmony_ci 2167c804472Sopenharmony_cistd::string CommandParser::GetScreenShape() const 2177c804472Sopenharmony_ci{ 2187c804472Sopenharmony_ci return screenShape; 2197c804472Sopenharmony_ci} 2207c804472Sopenharmony_ci 2217c804472Sopenharmony_cistd::string CommandParser::GetProjectModel() const 2227c804472Sopenharmony_ci{ 2237c804472Sopenharmony_ci return projectModel; 2247c804472Sopenharmony_ci} 2257c804472Sopenharmony_ci 2267c804472Sopenharmony_cistd::string CommandParser::GetPages() const 2277c804472Sopenharmony_ci{ 2287c804472Sopenharmony_ci return pages; 2297c804472Sopenharmony_ci} 2307c804472Sopenharmony_ci 2317c804472Sopenharmony_cistd::string CommandParser::GetContainerSdkPath() const 2327c804472Sopenharmony_ci{ 2337c804472Sopenharmony_ci return containerSdkPath; 2347c804472Sopenharmony_ci} 2357c804472Sopenharmony_ci 2367c804472Sopenharmony_ciCommandParser::ScreenMode CommandParser::GetScreenMode() const 2377c804472Sopenharmony_ci{ 2387c804472Sopenharmony_ci return screenMode; 2397c804472Sopenharmony_ci} 2407c804472Sopenharmony_ci 2417c804472Sopenharmony_cistd::string CommandParser::GetConfigChanges() const 2427c804472Sopenharmony_ci{ 2437c804472Sopenharmony_ci return configChanges; 2447c804472Sopenharmony_ci} 2457c804472Sopenharmony_ci 2467c804472Sopenharmony_ciint32_t CommandParser::GetOrignalResolutionWidth() const 2477c804472Sopenharmony_ci{ 2487c804472Sopenharmony_ci return orignalResolutionWidth; 2497c804472Sopenharmony_ci} 2507c804472Sopenharmony_ci 2517c804472Sopenharmony_ciint32_t CommandParser::GetOrignalResolutionHeight() const 2527c804472Sopenharmony_ci{ 2537c804472Sopenharmony_ci return orignalResolutionHeight; 2547c804472Sopenharmony_ci} 2557c804472Sopenharmony_ci 2567c804472Sopenharmony_ciint32_t CommandParser::GetCompressionResolutionWidth() const 2577c804472Sopenharmony_ci{ 2587c804472Sopenharmony_ci return compressionResolutionWidth; 2597c804472Sopenharmony_ci} 2607c804472Sopenharmony_ci 2617c804472Sopenharmony_ciint32_t CommandParser::GetCompressionResolutionHeight() const 2627c804472Sopenharmony_ci{ 2637c804472Sopenharmony_ci return compressionResolutionHeight; 2647c804472Sopenharmony_ci} 2657c804472Sopenharmony_ci 2667c804472Sopenharmony_ciuint32_t CommandParser::GetJsHeapSize() const 2677c804472Sopenharmony_ci{ 2687c804472Sopenharmony_ci return jsHeapSize; 2697c804472Sopenharmony_ci} 2707c804472Sopenharmony_ci 2717c804472Sopenharmony_cistd::string CommandParser::GetAppName() const 2727c804472Sopenharmony_ci{ 2737c804472Sopenharmony_ci return appName; 2747c804472Sopenharmony_ci} 2757c804472Sopenharmony_ci 2767c804472Sopenharmony_cibool CommandParser::IsSendJSHeap() const 2777c804472Sopenharmony_ci{ 2787c804472Sopenharmony_ci return isSendJSHeap; 2797c804472Sopenharmony_ci} 2807c804472Sopenharmony_ci 2817c804472Sopenharmony_cibool CommandParser::IsComponentMode() const 2827c804472Sopenharmony_ci{ 2837c804472Sopenharmony_ci return isComponentMode; 2847c804472Sopenharmony_ci} 2857c804472Sopenharmony_ci 2867c804472Sopenharmony_cistd::string CommandParser::GetAbilityPath() const 2877c804472Sopenharmony_ci{ 2887c804472Sopenharmony_ci return abilityPath; 2897c804472Sopenharmony_ci} 2907c804472Sopenharmony_ci 2917c804472Sopenharmony_cistd::string CommandParser::GetAbilityName() const 2927c804472Sopenharmony_ci{ 2937c804472Sopenharmony_ci return abilityName; 2947c804472Sopenharmony_ci} 2957c804472Sopenharmony_ci 2967c804472Sopenharmony_cibool CommandParser::IsStaticCard() const 2977c804472Sopenharmony_ci{ 2987c804472Sopenharmony_ci return staticCard; 2997c804472Sopenharmony_ci} 3007c804472Sopenharmony_ci 3017c804472Sopenharmony_cibool CommandParser::IsDebugPortValid() 3027c804472Sopenharmony_ci{ 3037c804472Sopenharmony_ci if (IsSet("p")) { 3047c804472Sopenharmony_ci if (CheckParamInvalidity(Value("p"), true)) { 3057c804472Sopenharmony_ci errorInfo = "Launch -p parameters is not match regex."; 3067c804472Sopenharmony_ci return false; 3077c804472Sopenharmony_ci } 3087c804472Sopenharmony_ci int port = atoi(Value("p").c_str()); 3097c804472Sopenharmony_ci if (port < MIN_PORT || port > MAX_PORT) { 3107c804472Sopenharmony_ci errorInfo = 3117c804472Sopenharmony_ci std::string("Debug server port out of range: " + std::to_string(MIN_PORT) + "-" + 3127c804472Sopenharmony_ci std::to_string(MAX_PORT) + "."); 3137c804472Sopenharmony_ci ELOG("Launch -p parameters abnormal!"); 3147c804472Sopenharmony_ci return false; 3157c804472Sopenharmony_ci } 3167c804472Sopenharmony_ci } 3177c804472Sopenharmony_ci ILOG("CommandParser debug port: %s", Value("p").c_str()); 3187c804472Sopenharmony_ci return true; 3197c804472Sopenharmony_ci} 3207c804472Sopenharmony_ci 3217c804472Sopenharmony_cibool CommandParser::IsAppPathValid() 3227c804472Sopenharmony_ci{ 3237c804472Sopenharmony_ci if (!IsSet("j")) { 3247c804472Sopenharmony_ci errorInfo = std::string("No app path specified."); 3257c804472Sopenharmony_ci ELOG("Launch -j parameters abnormal!"); 3267c804472Sopenharmony_ci return false; 3277c804472Sopenharmony_ci } 3287c804472Sopenharmony_ci std::string path = Value("j"); 3297c804472Sopenharmony_ci if (!FileSystem::IsDirectoryExists(path)) { 3307c804472Sopenharmony_ci errorInfo = std::string("Js app path not exist."); 3317c804472Sopenharmony_ci ELOG("Launch -j parameters abnormal!"); 3327c804472Sopenharmony_ci return false; 3337c804472Sopenharmony_ci } 3347c804472Sopenharmony_ci 3357c804472Sopenharmony_ci return true; 3367c804472Sopenharmony_ci} 3377c804472Sopenharmony_ci 3387c804472Sopenharmony_cibool CommandParser::IsAppNameValid() 3397c804472Sopenharmony_ci{ 3407c804472Sopenharmony_ci if (IsSet("n")) { 3417c804472Sopenharmony_ci if (CheckParamInvalidity(Value("n"), false)) { 3427c804472Sopenharmony_ci errorInfo = "Launch -n parameters is not match regex."; 3437c804472Sopenharmony_ci return false; 3447c804472Sopenharmony_ci } 3457c804472Sopenharmony_ci size_t size = Value("n").size(); 3467c804472Sopenharmony_ci if (size > MAX_NAME_LENGTH) { 3477c804472Sopenharmony_ci errorInfo = std::string("Js app name it too long, max: " + std::to_string(MAX_NAME_LENGTH) + "."); 3487c804472Sopenharmony_ci return false; 3497c804472Sopenharmony_ci } 3507c804472Sopenharmony_ci appName = Value("n"); 3517c804472Sopenharmony_ci } 3527c804472Sopenharmony_ci ILOG("CommandParser app name: %s", appName.c_str()); 3537c804472Sopenharmony_ci return true; 3547c804472Sopenharmony_ci} 3557c804472Sopenharmony_ci 3567c804472Sopenharmony_cibool CommandParser::IsResolutionValid() 3577c804472Sopenharmony_ci{ 3587c804472Sopenharmony_ci if (IsSet("or") && IsSet("cr")) { 3597c804472Sopenharmony_ci if (IsResolutionArgValid(std::string("-or")) && IsResolutionArgValid(std::string("-cr"))) { 3607c804472Sopenharmony_ci orignalResolutionWidth = atoi(Values("-or")[0].c_str()); 3617c804472Sopenharmony_ci orignalResolutionHeight = atoi(Values("-or")[1].c_str()); 3627c804472Sopenharmony_ci compressionResolutionWidth = atoi(Values("-cr")[0].c_str()); 3637c804472Sopenharmony_ci compressionResolutionHeight = atoi(Values("-cr")[1].c_str()); 3647c804472Sopenharmony_ci ILOG("CommandParser resolution: %d %d %d %d", orignalResolutionWidth, orignalResolutionHeight, 3657c804472Sopenharmony_ci compressionResolutionWidth, compressionResolutionHeight); 3667c804472Sopenharmony_ci return true; 3677c804472Sopenharmony_ci } 3687c804472Sopenharmony_ci ELOG("Launch -cr/-or parameters abnormal!"); 3697c804472Sopenharmony_ci return false; 3707c804472Sopenharmony_ci } 3717c804472Sopenharmony_ci ELOG("Launch -cr/-or parameters abnormal!"); 3727c804472Sopenharmony_ci errorInfo = std::string("Origin resolution and compress resolution must be setted."); 3737c804472Sopenharmony_ci return false; 3747c804472Sopenharmony_ci} 3757c804472Sopenharmony_ci 3767c804472Sopenharmony_cibool CommandParser::IsJsHeapValid() 3777c804472Sopenharmony_ci{ 3787c804472Sopenharmony_ci if (IsSet("hs")) { 3797c804472Sopenharmony_ci if (CheckParamInvalidity(Value("hs"), true)) { 3807c804472Sopenharmony_ci errorInfo = "Launch -hs parameters is not match regex."; 3817c804472Sopenharmony_ci return false; 3827c804472Sopenharmony_ci } 3837c804472Sopenharmony_ci int size = atoi(Value("hs").c_str()); 3847c804472Sopenharmony_ci if (size < MIN_JSHEAPSIZE || size > MAX_JSHEAPSIZE) { 3857c804472Sopenharmony_ci errorInfo = std::string("JS heap size out of range: " + std::to_string(MIN_JSHEAPSIZE) + "-" + 3867c804472Sopenharmony_ci std::to_string(MAX_JSHEAPSIZE) + "."); 3877c804472Sopenharmony_ci ELOG("Launch -hs parameters abnormal!"); 3887c804472Sopenharmony_ci return false; 3897c804472Sopenharmony_ci } 3907c804472Sopenharmony_ci jsHeapSize = static_cast<uint32_t>(size); 3917c804472Sopenharmony_ci } 3927c804472Sopenharmony_ci ILOG("CommandParser js heap: %d", jsHeapSize); 3937c804472Sopenharmony_ci return true; 3947c804472Sopenharmony_ci} 3957c804472Sopenharmony_ci 3967c804472Sopenharmony_cibool CommandParser::IsJsHeapFlagValid() 3977c804472Sopenharmony_ci{ 3987c804472Sopenharmony_ci if (IsSet("hf")) { 3997c804472Sopenharmony_ci std::string flag = Value("hf"); 4007c804472Sopenharmony_ci if (flag != "true" && flag != "false") { 4017c804472Sopenharmony_ci errorInfo = std::string("JS heap flag suported: true or false"); 4027c804472Sopenharmony_ci ELOG("Launch -hs parameters abnormal!"); 4037c804472Sopenharmony_ci return false; 4047c804472Sopenharmony_ci } 4057c804472Sopenharmony_ci isSendJSHeap = (flag == "true"); 4067c804472Sopenharmony_ci } 4077c804472Sopenharmony_ci ILOG("CommandParser is send JS heap: %d", isSendJSHeap); 4087c804472Sopenharmony_ci return true; 4097c804472Sopenharmony_ci} 4107c804472Sopenharmony_ci 4117c804472Sopenharmony_cibool CommandParser::IsScreenShapeValid() 4127c804472Sopenharmony_ci{ 4137c804472Sopenharmony_ci if (IsSet("shape")) { 4147c804472Sopenharmony_ci std::string shape = Value("shape"); 4157c804472Sopenharmony_ci if (shape != "rect" && shape != "circle") { 4167c804472Sopenharmony_ci errorInfo = std::string("Screen shape suported: rect or circle"); 4177c804472Sopenharmony_ci ELOG("The current device does not support, please upgrade the SDK!"); 4187c804472Sopenharmony_ci return false; 4197c804472Sopenharmony_ci } 4207c804472Sopenharmony_ci screenShape = shape; 4217c804472Sopenharmony_ci } 4227c804472Sopenharmony_ci ILOG("CommandParser screen shape: %s", screenShape.c_str()); 4237c804472Sopenharmony_ci return true; 4247c804472Sopenharmony_ci} 4257c804472Sopenharmony_ci 4267c804472Sopenharmony_cibool CommandParser::IsDeviceValid() 4277c804472Sopenharmony_ci{ 4287c804472Sopenharmony_ci if (IsSet("device")) { 4297c804472Sopenharmony_ci auto iter = find(supportedDevices.begin(), supportedDevices.end(), Value("device")); 4307c804472Sopenharmony_ci if (iter == supportedDevices.end()) { 4317c804472Sopenharmony_ci errorInfo += std::string("Device type unsupport, please upgrade the Previewer SDK!"); 4327c804472Sopenharmony_ci ELOG("Device type unsupport!"); 4337c804472Sopenharmony_ci return false; 4347c804472Sopenharmony_ci } 4357c804472Sopenharmony_ci } 4367c804472Sopenharmony_ci deviceType = Value("device"); 4377c804472Sopenharmony_ci ILOG("CommandParser device: %s", deviceType.c_str()); 4387c804472Sopenharmony_ci return true; 4397c804472Sopenharmony_ci} 4407c804472Sopenharmony_ci 4417c804472Sopenharmony_cibool CommandParser::IsUrlValid() 4427c804472Sopenharmony_ci{ 4437c804472Sopenharmony_ci urlPath = Value("url"); 4447c804472Sopenharmony_ci if (urlPath.empty()) { 4457c804472Sopenharmony_ci errorInfo = "Launch -url parameters is empty."; 4467c804472Sopenharmony_ci return false; 4477c804472Sopenharmony_ci } 4487c804472Sopenharmony_ci ILOG("CommandParser url: %s", urlPath.c_str()); 4497c804472Sopenharmony_ci return true; 4507c804472Sopenharmony_ci} 4517c804472Sopenharmony_ci 4527c804472Sopenharmony_cibool CommandParser::IsConfigPathValid() 4537c804472Sopenharmony_ci{ 4547c804472Sopenharmony_ci if (!IsSet("f")) { 4557c804472Sopenharmony_ci return true; 4567c804472Sopenharmony_ci } 4577c804472Sopenharmony_ci 4587c804472Sopenharmony_ci std::string path = Value("f"); 4597c804472Sopenharmony_ci if (!FileSystem::IsFileExists(path)) { 4607c804472Sopenharmony_ci errorInfo = std::string("The configuration file path does not exist."); 4617c804472Sopenharmony_ci ELOG("Launch -f parameters abnormal!"); 4627c804472Sopenharmony_ci return false; 4637c804472Sopenharmony_ci } 4647c804472Sopenharmony_ci configPath = path; 4657c804472Sopenharmony_ci return true; 4667c804472Sopenharmony_ci} 4677c804472Sopenharmony_ci 4687c804472Sopenharmony_cibool CommandParser::IsAppResourcePathValid() 4697c804472Sopenharmony_ci{ 4707c804472Sopenharmony_ci if (!IsSet("arp")) { 4717c804472Sopenharmony_ci return true; 4727c804472Sopenharmony_ci } 4737c804472Sopenharmony_ci 4747c804472Sopenharmony_ci std::string path = Value("arp"); 4757c804472Sopenharmony_ci if (!FileSystem::IsDirectoryExists(path)) { 4767c804472Sopenharmony_ci errorInfo = std::string("The configuration appResource path does not exist."); 4777c804472Sopenharmony_ci ELOG("Launch -arp parameters abnormal!"); 4787c804472Sopenharmony_ci return false; 4797c804472Sopenharmony_ci } 4807c804472Sopenharmony_ci appResourcePath = path; 4817c804472Sopenharmony_ci return true; 4827c804472Sopenharmony_ci} 4837c804472Sopenharmony_ci 4847c804472Sopenharmony_cibool CommandParser::IsProjectModelValid() 4857c804472Sopenharmony_ci{ 4867c804472Sopenharmony_ci if (!IsSet("pm")) { 4877c804472Sopenharmony_ci return true; 4887c804472Sopenharmony_ci } 4897c804472Sopenharmony_ci 4907c804472Sopenharmony_ci std::string projectModelStr = Value("pm"); 4917c804472Sopenharmony_ci auto iter = find(projectModels.begin(), projectModels.end(), projectModelStr); 4927c804472Sopenharmony_ci if (iter == projectModels.end()) { 4937c804472Sopenharmony_ci errorInfo = std::string("The project model does not exist."); 4947c804472Sopenharmony_ci ELOG("Launch -pm parameters abnormal!"); 4957c804472Sopenharmony_ci return false; 4967c804472Sopenharmony_ci } 4977c804472Sopenharmony_ci 4987c804472Sopenharmony_ci projectModel = projectModelStr; 4997c804472Sopenharmony_ci ILOG("CommandParser projectModel: %s", projectModelStr.c_str()); 5007c804472Sopenharmony_ci return true; 5017c804472Sopenharmony_ci} 5027c804472Sopenharmony_ci 5037c804472Sopenharmony_cibool CommandParser::IsPagesValid() 5047c804472Sopenharmony_ci{ 5057c804472Sopenharmony_ci if (!IsSet("pages")) { 5067c804472Sopenharmony_ci return true; 5077c804472Sopenharmony_ci } 5087c804472Sopenharmony_ci pages = Value("pages"); 5097c804472Sopenharmony_ci if (CheckParamInvalidity(pages, false)) { 5107c804472Sopenharmony_ci errorInfo = "Launch -pages parameters is not match regex."; 5117c804472Sopenharmony_ci return false; 5127c804472Sopenharmony_ci } 5137c804472Sopenharmony_ci ILOG("CommandParser pages: %s", pages.c_str()); 5147c804472Sopenharmony_ci return true; 5157c804472Sopenharmony_ci} 5167c804472Sopenharmony_ci 5177c804472Sopenharmony_cibool CommandParser::IsResolutionArgValid(std::string command) 5187c804472Sopenharmony_ci{ 5197c804472Sopenharmony_ci std::vector<std::string> value = Values(command); 5207c804472Sopenharmony_ci uint32_t size = regsArgsCountMap[command]; 5217c804472Sopenharmony_ci if (value.size() != size) { 5227c804472Sopenharmony_ci errorInfo = std::string("Invalid argument's count."); 5237c804472Sopenharmony_ci return false; 5247c804472Sopenharmony_ci } 5257c804472Sopenharmony_ci if (IsResolutionRangeValid(value[0]) && IsResolutionRangeValid(value[1])) { 5267c804472Sopenharmony_ci return true; 5277c804472Sopenharmony_ci } 5287c804472Sopenharmony_ci return false; 5297c804472Sopenharmony_ci} 5307c804472Sopenharmony_ci 5317c804472Sopenharmony_cibool CommandParser::IsResolutionRangeValid(std::string value) 5327c804472Sopenharmony_ci{ 5337c804472Sopenharmony_ci if (CheckParamInvalidity(value, true)) { 5347c804472Sopenharmony_ci errorInfo = "Launch -or/-cr or -fr parameters is not match regex."; 5357c804472Sopenharmony_ci return false; 5367c804472Sopenharmony_ci } 5377c804472Sopenharmony_ci int32_t temp = atoi(value.c_str()); 5387c804472Sopenharmony_ci if (!IsResolutionValid(temp)) { 5397c804472Sopenharmony_ci errorInfo = std::string("Resolution range " + std::to_string(MIN_RESOLUTION) + "-" + 5407c804472Sopenharmony_ci std::to_string(MAX_RESOLUTION) + "."); 5417c804472Sopenharmony_ci return false; 5427c804472Sopenharmony_ci } 5437c804472Sopenharmony_ci return true; 5447c804472Sopenharmony_ci} 5457c804472Sopenharmony_ci 5467c804472Sopenharmony_cibool CommandParser::IsRefreshValid() 5477c804472Sopenharmony_ci{ 5487c804472Sopenharmony_ci if (!IsSet("refresh")) { 5497c804472Sopenharmony_ci return true; 5507c804472Sopenharmony_ci } 5517c804472Sopenharmony_ci 5527c804472Sopenharmony_ci std::string refresh = Value("refresh"); 5537c804472Sopenharmony_ci if (refresh != "region" && refresh != "full") { 5547c804472Sopenharmony_ci errorInfo = std::string("The refresh argument unsupported."); 5557c804472Sopenharmony_ci ELOG("Launch -refresh parameters abnormal!"); 5567c804472Sopenharmony_ci return false; 5577c804472Sopenharmony_ci } 5587c804472Sopenharmony_ci if (refresh == "region") { 5597c804472Sopenharmony_ci isRegionRefresh = true; 5607c804472Sopenharmony_ci } 5617c804472Sopenharmony_ci return true; 5627c804472Sopenharmony_ci} 5637c804472Sopenharmony_ci 5647c804472Sopenharmony_cibool CommandParser::IsCardValid() 5657c804472Sopenharmony_ci{ 5667c804472Sopenharmony_ci if (!IsSet("card")) { 5677c804472Sopenharmony_ci return true; 5687c804472Sopenharmony_ci } 5697c804472Sopenharmony_ci 5707c804472Sopenharmony_ci std::string card = Value("card"); 5717c804472Sopenharmony_ci if (card != "true" && card != "false") { 5727c804472Sopenharmony_ci errorInfo = std::string("The card argument unsupported."); 5737c804472Sopenharmony_ci ELOG("Launch -card parameters abnormal!"); 5747c804472Sopenharmony_ci return false; 5757c804472Sopenharmony_ci } 5767c804472Sopenharmony_ci 5777c804472Sopenharmony_ci std::string devicetype = GetDeviceType(); 5787c804472Sopenharmony_ci auto iter = find(cardDisplayDevices.begin(), cardDisplayDevices.end(), devicetype); 5797c804472Sopenharmony_ci if (iter != cardDisplayDevices.end() && card == "true") { 5807c804472Sopenharmony_ci isCardDisplay = true; 5817c804472Sopenharmony_ci } 5827c804472Sopenharmony_ci return true; 5837c804472Sopenharmony_ci} 5847c804472Sopenharmony_ci 5857c804472Sopenharmony_cibool CommandParser::IsProjectIDValid() 5867c804472Sopenharmony_ci{ 5877c804472Sopenharmony_ci if (IsSet("projectID")) { 5887c804472Sopenharmony_ci projectID = Value("projectID"); 5897c804472Sopenharmony_ci if (CheckParamInvalidity(projectID, false)) { 5907c804472Sopenharmony_ci errorInfo = "Launch -projectID parameters is not match regex."; 5917c804472Sopenharmony_ci return false; 5927c804472Sopenharmony_ci } 5937c804472Sopenharmony_ci } 5947c804472Sopenharmony_ci return true; 5957c804472Sopenharmony_ci} 5967c804472Sopenharmony_ci 5977c804472Sopenharmony_cibool CommandParser::IsColorModeValid() 5987c804472Sopenharmony_ci{ 5997c804472Sopenharmony_ci if (!IsSet("cm")) { 6007c804472Sopenharmony_ci return true; 6017c804472Sopenharmony_ci } 6027c804472Sopenharmony_ci 6037c804472Sopenharmony_ci std::string colorMode = Value("cm"); 6047c804472Sopenharmony_ci if (colorMode != "dark" && colorMode != "light") { 6057c804472Sopenharmony_ci errorInfo = std::string("The colormode argument unsupported."); 6067c804472Sopenharmony_ci ELOG("Launch -cm parameters abnormal!"); 6077c804472Sopenharmony_ci return false; 6087c804472Sopenharmony_ci } 6097c804472Sopenharmony_ci return true; 6107c804472Sopenharmony_ci} 6117c804472Sopenharmony_ci 6127c804472Sopenharmony_cibool CommandParser::IsAceVersionValid() 6137c804472Sopenharmony_ci{ 6147c804472Sopenharmony_ci if (!IsSet("av")) { 6157c804472Sopenharmony_ci return true; 6167c804472Sopenharmony_ci } 6177c804472Sopenharmony_ci 6187c804472Sopenharmony_ci std::string aceVersion = Value("av"); 6197c804472Sopenharmony_ci if (aceVersion != "ACE_1_0" && aceVersion != "ACE_2_0") { 6207c804472Sopenharmony_ci errorInfo = std::string("The aceVersion argument unsupported."); 6217c804472Sopenharmony_ci ELOG("Launch -av parameters abnormal!"); 6227c804472Sopenharmony_ci return false; 6237c804472Sopenharmony_ci } 6247c804472Sopenharmony_ci return true; 6257c804472Sopenharmony_ci} 6267c804472Sopenharmony_ci 6277c804472Sopenharmony_cibool CommandParser::IsOrientationValid() 6287c804472Sopenharmony_ci{ 6297c804472Sopenharmony_ci if (!IsSet("o")) { 6307c804472Sopenharmony_ci return true; 6317c804472Sopenharmony_ci } 6327c804472Sopenharmony_ci 6337c804472Sopenharmony_ci std::string orientation = Value("o"); 6347c804472Sopenharmony_ci if (orientation != "portrait" && orientation != "landscape") { 6357c804472Sopenharmony_ci errorInfo = std::string("The orientation argument unsupported."); 6367c804472Sopenharmony_ci ELOG("Launch -o parameters abnormal!"); 6377c804472Sopenharmony_ci return false; 6387c804472Sopenharmony_ci } 6397c804472Sopenharmony_ci return true; 6407c804472Sopenharmony_ci} 6417c804472Sopenharmony_ci 6427c804472Sopenharmony_cibool CommandParser::IsWebSocketPortValid() 6437c804472Sopenharmony_ci{ 6447c804472Sopenharmony_ci if (IsSet("lws")) { 6457c804472Sopenharmony_ci if (CheckParamInvalidity(Value("lws"), true)) { 6467c804472Sopenharmony_ci errorInfo = "Launch -lws parameters is not match regex."; 6477c804472Sopenharmony_ci return false; 6487c804472Sopenharmony_ci } 6497c804472Sopenharmony_ci int port = atoi(Value("lws").c_str()); 6507c804472Sopenharmony_ci if (port < MIN_PORT || port > MAX_PORT) { 6517c804472Sopenharmony_ci errorInfo = std::string("WebSocket listening port out of range: " + std::to_string(MIN_PORT) + "-" + 6527c804472Sopenharmony_ci std::to_string(MAX_PORT) + "."); 6537c804472Sopenharmony_ci ELOG("Launch -lws parameters abnormal!"); 6547c804472Sopenharmony_ci return false; 6557c804472Sopenharmony_ci } 6567c804472Sopenharmony_ci } 6577c804472Sopenharmony_ci ILOG("CommandParser WebSocket listening port: %s", Value("lws").c_str()); 6587c804472Sopenharmony_ci return true; 6597c804472Sopenharmony_ci} 6607c804472Sopenharmony_ci 6617c804472Sopenharmony_cibool CommandParser::IsScreenModeValid() 6627c804472Sopenharmony_ci{ 6637c804472Sopenharmony_ci std::string mode("dynamic"); 6647c804472Sopenharmony_ci if (IsSet("sm")) { 6657c804472Sopenharmony_ci mode = Value("sm"); 6667c804472Sopenharmony_ci if (mode != "dynamic" && mode != "static") { 6677c804472Sopenharmony_ci errorInfo = std::string("Screen picture transport mode suported: dynamic or static"); 6687c804472Sopenharmony_ci ELOG("Launch -sm parameters abnormal!"); 6697c804472Sopenharmony_ci return false; 6707c804472Sopenharmony_ci } 6717c804472Sopenharmony_ci screenMode = (mode == "static" ? CommandParser::ScreenMode::STATIC : 6727c804472Sopenharmony_ci CommandParser::ScreenMode::DYNAMIC); 6737c804472Sopenharmony_ci } 6747c804472Sopenharmony_ci ILOG("CommandParser screen mode: %s", mode.c_str()); 6757c804472Sopenharmony_ci return true; 6767c804472Sopenharmony_ci} 6777c804472Sopenharmony_ci 6787c804472Sopenharmony_cibool CommandParser::IsLanguageValid() 6797c804472Sopenharmony_ci{ 6807c804472Sopenharmony_ci if (!IsSet("l")) { 6817c804472Sopenharmony_ci return true; 6827c804472Sopenharmony_ci } 6837c804472Sopenharmony_ci std::string lan = Value("l"); 6847c804472Sopenharmony_ci if (CheckParamInvalidity(lan, false)) { 6857c804472Sopenharmony_ci errorInfo = "Launch -l parameters is not match regex."; 6867c804472Sopenharmony_ci return false; 6877c804472Sopenharmony_ci } 6887c804472Sopenharmony_ci ILOG("CommandParser l: %s", lan.c_str()); 6897c804472Sopenharmony_ci return true; 6907c804472Sopenharmony_ci} 6917c804472Sopenharmony_ci 6927c804472Sopenharmony_cibool CommandParser::IsTracePipeNameValid() 6937c804472Sopenharmony_ci{ 6947c804472Sopenharmony_ci if (!IsSet("ts")) { 6957c804472Sopenharmony_ci return true; 6967c804472Sopenharmony_ci } 6977c804472Sopenharmony_ci std::string tsName = Value("ts"); 6987c804472Sopenharmony_ci if (CheckParamInvalidity(tsName, false)) { 6997c804472Sopenharmony_ci errorInfo = "Launch -ts parameters is not match regex."; 7007c804472Sopenharmony_ci return false; 7017c804472Sopenharmony_ci } 7027c804472Sopenharmony_ci ILOG("CommandParser ts: %s", tsName.c_str()); 7037c804472Sopenharmony_ci return true; 7047c804472Sopenharmony_ci} 7057c804472Sopenharmony_ci 7067c804472Sopenharmony_cibool CommandParser::IsLocalSocketNameValid() 7077c804472Sopenharmony_ci{ 7087c804472Sopenharmony_ci if (!IsSet("s")) { 7097c804472Sopenharmony_ci return true; 7107c804472Sopenharmony_ci } 7117c804472Sopenharmony_ci std::string socketName = Value("s"); 7127c804472Sopenharmony_ci std::string regexStr = "^(?:[a-zA-Z0-9-_./\\s*]+)$"; 7137c804472Sopenharmony_ci std::regex reg(regexStr); 7147c804472Sopenharmony_ci if (!std::regex_match(socketName.cbegin(), socketName.cend(), reg)) { 7157c804472Sopenharmony_ci errorInfo = "Launch -s parameters is not match regex."; 7167c804472Sopenharmony_ci return false; 7177c804472Sopenharmony_ci } 7187c804472Sopenharmony_ci ILOG("CommandParser s: %s", socketName.c_str()); 7197c804472Sopenharmony_ci return true; 7207c804472Sopenharmony_ci} 7217c804472Sopenharmony_ci 7227c804472Sopenharmony_cibool CommandParser::IsConfigChangesValid() 7237c804472Sopenharmony_ci{ 7247c804472Sopenharmony_ci if (!IsSet("cc")) { 7257c804472Sopenharmony_ci return true; 7267c804472Sopenharmony_ci } 7277c804472Sopenharmony_ci std::string configChange = Value("cc"); 7287c804472Sopenharmony_ci if (CheckParamInvalidity(configChange, false)) { 7297c804472Sopenharmony_ci ELOG("Launch -cc parameters is not match regex."); 7307c804472Sopenharmony_ci return false; 7317c804472Sopenharmony_ci } 7327c804472Sopenharmony_ci ILOG("CommandParser cc: %s", configChange.c_str()); 7337c804472Sopenharmony_ci return true; 7347c804472Sopenharmony_ci} 7357c804472Sopenharmony_ci 7367c804472Sopenharmony_cibool CommandParser::IsScreenDensityValid() 7377c804472Sopenharmony_ci{ 7387c804472Sopenharmony_ci if (!IsSet("sd")) { 7397c804472Sopenharmony_ci return true; 7407c804472Sopenharmony_ci } 7417c804472Sopenharmony_ci std::string density = Value("sd"); 7427c804472Sopenharmony_ci if (CheckParamInvalidity(density, true)) { 7437c804472Sopenharmony_ci errorInfo = "Launch -sd parameters is not match regex."; 7447c804472Sopenharmony_ci return false; 7457c804472Sopenharmony_ci } 7467c804472Sopenharmony_ci ILOG("CommandParser sd: %s", density.c_str()); 7477c804472Sopenharmony_ci return true; 7487c804472Sopenharmony_ci} 7497c804472Sopenharmony_ci 7507c804472Sopenharmony_cibool CommandParser::IsContainerSdkPathValid() 7517c804472Sopenharmony_ci{ 7527c804472Sopenharmony_ci if (!IsSet("hsp")) { 7537c804472Sopenharmony_ci return true; 7547c804472Sopenharmony_ci } 7557c804472Sopenharmony_ci 7567c804472Sopenharmony_ci std::string path = Value("hsp"); 7577c804472Sopenharmony_ci if (!FileSystem::IsDirectoryExists(path)) { 7587c804472Sopenharmony_ci errorInfo = std::string("The container sdk path does not exist."); 7597c804472Sopenharmony_ci ELOG("Launch -hsp parameters abnormal!"); 7607c804472Sopenharmony_ci return false; 7617c804472Sopenharmony_ci } 7627c804472Sopenharmony_ci containerSdkPath = path; 7637c804472Sopenharmony_ci return true; 7647c804472Sopenharmony_ci} 7657c804472Sopenharmony_ci 7667c804472Sopenharmony_cistd::string CommandParser::HelpText() 7677c804472Sopenharmony_ci{ 7687c804472Sopenharmony_ci std::string helpText = "Usage:\n"; 7697c804472Sopenharmony_ci for (auto index = regsHelpMap.begin(); index != regsHelpMap.end(); index++) { 7707c804472Sopenharmony_ci helpText += "-" + index->first + " "; 7717c804472Sopenharmony_ci helpText += index->second + "\n"; 7727c804472Sopenharmony_ci } 7737c804472Sopenharmony_ci return helpText; 7747c804472Sopenharmony_ci} 7757c804472Sopenharmony_ci 7767c804472Sopenharmony_civoid CommandParser::ProcessingCommand(const std::vector<std::string>& strs) 7777c804472Sopenharmony_ci{ 7787c804472Sopenharmony_ci for (unsigned int i = 0; i < strs.size(); ++i) { 7797c804472Sopenharmony_ci std::string index = strs[i]; 7807c804472Sopenharmony_ci auto regInfo = regsArgsCountMap.find(strs[i]); 7817c804472Sopenharmony_ci if (regInfo == regsArgsCountMap.end()) { 7827c804472Sopenharmony_ci continue; 7837c804472Sopenharmony_ci } 7847c804472Sopenharmony_ci 7857c804472Sopenharmony_ci std::vector<std::string> args; 7867c804472Sopenharmony_ci for (uint32_t j = 0; j < regInfo->second; ++j) { 7877c804472Sopenharmony_ci if (i == strs.size() - 1 || strs[i + 1][0] == '-') { 7887c804472Sopenharmony_ci args.push_back(""); 7897c804472Sopenharmony_ci break; 7907c804472Sopenharmony_ci } 7917c804472Sopenharmony_ci args.push_back(strs[++i]); 7927c804472Sopenharmony_ci } 7937c804472Sopenharmony_ci argsMap[index] = args; 7947c804472Sopenharmony_ci } 7957c804472Sopenharmony_ci} 7967c804472Sopenharmony_ci 7977c804472Sopenharmony_ciint CommandParser::GetProjectModelEnumValue() const 7987c804472Sopenharmony_ci{ 7997c804472Sopenharmony_ci auto idxVal = std::distance(projectModels.begin(), 8007c804472Sopenharmony_ci find(projectModels.begin(), projectModels.end(), projectModel)); 8017c804472Sopenharmony_ci idxVal = (idxVal >= projectModels.size()) ? 0 : idxVal; 8027c804472Sopenharmony_ci return idxVal; 8037c804472Sopenharmony_ci} 8047c804472Sopenharmony_ci 8057c804472Sopenharmony_cistd::string CommandParser::GetProjectModelEnumName(int enumValue) const 8067c804472Sopenharmony_ci{ 8077c804472Sopenharmony_ci if (enumValue < 0 || enumValue >= projectModels.size()) { 8087c804472Sopenharmony_ci enumValue = 0; 8097c804472Sopenharmony_ci } 8107c804472Sopenharmony_ci return projectModels[enumValue]; 8117c804472Sopenharmony_ci} 8127c804472Sopenharmony_ci 8137c804472Sopenharmony_cibool CommandParser::CheckParamInvalidity(std::string param, bool isNum = false) 8147c804472Sopenharmony_ci{ 8157c804472Sopenharmony_ci std::regex reg(isNum ? regex4Num : regex4Str); 8167c804472Sopenharmony_ci return !std::regex_match(param.cbegin(), param.cend(), reg); 8177c804472Sopenharmony_ci} 8187c804472Sopenharmony_ci 8197c804472Sopenharmony_cibool CommandParser::IsComponentModeValid() 8207c804472Sopenharmony_ci{ 8217c804472Sopenharmony_ci if (!IsSet("cpm")) { 8227c804472Sopenharmony_ci return true; 8237c804472Sopenharmony_ci } 8247c804472Sopenharmony_ci 8257c804472Sopenharmony_ci std::string cpm = Value("cpm"); 8267c804472Sopenharmony_ci if (cpm != "true" && cpm != "false") { 8277c804472Sopenharmony_ci errorInfo = std::string("The component mode argument unsupported."); 8287c804472Sopenharmony_ci ELOG("Launch -cpm parameters abnormal!"); 8297c804472Sopenharmony_ci return false; 8307c804472Sopenharmony_ci } 8317c804472Sopenharmony_ci 8327c804472Sopenharmony_ci isComponentMode = cpm == "true" ? true : false; 8337c804472Sopenharmony_ci return true; 8347c804472Sopenharmony_ci} 8357c804472Sopenharmony_ci 8367c804472Sopenharmony_cibool CommandParser::IsAbilityPathValid() 8377c804472Sopenharmony_ci{ 8387c804472Sopenharmony_ci if (!IsSet("d")) { 8397c804472Sopenharmony_ci return true; 8407c804472Sopenharmony_ci } 8417c804472Sopenharmony_ci if (deviceType == "liteWearable" || deviceType == "smartVision") { 8427c804472Sopenharmony_ci return true; 8437c804472Sopenharmony_ci } 8447c804472Sopenharmony_ci if (!IsSet("abp")) { 8457c804472Sopenharmony_ci errorInfo = "Launch -d parameters without -abp parameters."; 8467c804472Sopenharmony_ci return false; 8477c804472Sopenharmony_ci } 8487c804472Sopenharmony_ci std::string path = Value("abp"); 8497c804472Sopenharmony_ci if (path.empty()) { 8507c804472Sopenharmony_ci errorInfo = std::string("The ability path is empty."); 8517c804472Sopenharmony_ci ELOG("Launch -abp parameters abnormal!"); 8527c804472Sopenharmony_ci return false; 8537c804472Sopenharmony_ci } 8547c804472Sopenharmony_ci abilityPath = path; 8557c804472Sopenharmony_ci return true; 8567c804472Sopenharmony_ci} 8577c804472Sopenharmony_ci 8587c804472Sopenharmony_cibool CommandParser::IsAbilityNameValid() 8597c804472Sopenharmony_ci{ 8607c804472Sopenharmony_ci if (!IsSet("d")) { 8617c804472Sopenharmony_ci return true; 8627c804472Sopenharmony_ci } 8637c804472Sopenharmony_ci if (deviceType == "liteWearable" || deviceType == "smartVision") { 8647c804472Sopenharmony_ci return true; 8657c804472Sopenharmony_ci } 8667c804472Sopenharmony_ci if (!IsSet("abn")) { 8677c804472Sopenharmony_ci ELOG("Launch -d parameters without -abn parameters."); 8687c804472Sopenharmony_ci return true; // 兼容老版本IDE(沒有abn参数) 8697c804472Sopenharmony_ci } 8707c804472Sopenharmony_ci std::string name = Value("abn"); 8717c804472Sopenharmony_ci if (name.empty()) { 8727c804472Sopenharmony_ci errorInfo = std::string("The ability name is empty."); 8737c804472Sopenharmony_ci ELOG("Launch -abn parameters abnormal!"); 8747c804472Sopenharmony_ci return false; 8757c804472Sopenharmony_ci } 8767c804472Sopenharmony_ci abilityName = name; 8777c804472Sopenharmony_ci return true; 8787c804472Sopenharmony_ci} 8797c804472Sopenharmony_ci 8807c804472Sopenharmony_cibool CommandParser::IsStaticCardValid() 8817c804472Sopenharmony_ci{ 8827c804472Sopenharmony_ci if (!IsSet("staticCard")) { 8837c804472Sopenharmony_ci return true; 8847c804472Sopenharmony_ci } 8857c804472Sopenharmony_ci std::string val = Value("staticCard"); 8867c804472Sopenharmony_ci if (val != "true" && val != "false") { 8877c804472Sopenharmony_ci errorInfo = std::string("The staticCard argument unsupported."); 8887c804472Sopenharmony_ci ELOG("Launch -staticCard parameters abnormal!"); 8897c804472Sopenharmony_ci return false; 8907c804472Sopenharmony_ci } 8917c804472Sopenharmony_ci if (val == "true") { 8927c804472Sopenharmony_ci staticCard = true; 8937c804472Sopenharmony_ci } 8947c804472Sopenharmony_ci return true; 8957c804472Sopenharmony_ci} 8967c804472Sopenharmony_ci 8977c804472Sopenharmony_cibool CommandParser::IsMainArgLengthInvalid(const char* str) const 8987c804472Sopenharmony_ci{ 8997c804472Sopenharmony_ci size_t argLength = strlen(str); 9007c804472Sopenharmony_ci if (argLength > maxMainArgLength) { 9017c804472Sopenharmony_ci ELOG("param size is more than %d", maxMainArgLength); 9027c804472Sopenharmony_ci return true; 9037c804472Sopenharmony_ci } 9047c804472Sopenharmony_ci return false; 9057c804472Sopenharmony_ci} 9067c804472Sopenharmony_ci 9077c804472Sopenharmony_cibool CommandParser::IsFoldableValid() 9087c804472Sopenharmony_ci{ 9097c804472Sopenharmony_ci if (!IsSet("foldable")) { 9107c804472Sopenharmony_ci return true; 9117c804472Sopenharmony_ci } 9127c804472Sopenharmony_ci std::string val = Value("foldable"); 9137c804472Sopenharmony_ci if (val != "true" && val != "false") { 9147c804472Sopenharmony_ci errorInfo = std::string("The foldable argument unsupported."); 9157c804472Sopenharmony_ci ELOG("Launch -foldable parameters abnormal!"); 9167c804472Sopenharmony_ci return false; 9177c804472Sopenharmony_ci } 9187c804472Sopenharmony_ci if (val == "true") { 9197c804472Sopenharmony_ci foldable = true; 9207c804472Sopenharmony_ci } 9217c804472Sopenharmony_ci return true; 9227c804472Sopenharmony_ci} 9237c804472Sopenharmony_ci 9247c804472Sopenharmony_cibool CommandParser::IsFoldStatusValid() 9257c804472Sopenharmony_ci{ 9267c804472Sopenharmony_ci if ((!IsSet("foldable")) || Value("foldable") != "true") { 9277c804472Sopenharmony_ci return true; 9287c804472Sopenharmony_ci } 9297c804472Sopenharmony_ci if (IsSet("foldStatus")) { 9307c804472Sopenharmony_ci if (Value("foldStatus") == "fold" || Value("foldStatus") == "unfold" || 9317c804472Sopenharmony_ci Value("foldStatus") == "unknown" || Value("foldStatus") == "half_fold") { 9327c804472Sopenharmony_ci foldStatus = Value("foldStatus"); 9337c804472Sopenharmony_ci return true; 9347c804472Sopenharmony_ci } 9357c804472Sopenharmony_ci } 9367c804472Sopenharmony_ci ELOG("Launch -foldStatus parameters abnormal!"); 9377c804472Sopenharmony_ci return false; 9387c804472Sopenharmony_ci} 9397c804472Sopenharmony_ci 9407c804472Sopenharmony_cibool CommandParser::IsFoldResolutionValid() 9417c804472Sopenharmony_ci{ 9427c804472Sopenharmony_ci if ((!IsSet("foldable")) || Value("foldable") != "true") { 9437c804472Sopenharmony_ci return true; 9447c804472Sopenharmony_ci } 9457c804472Sopenharmony_ci if (IsSet("fr")) { 9467c804472Sopenharmony_ci if (IsResolutionArgValid(std::string("-fr"))) { 9477c804472Sopenharmony_ci foldResolutionWidth = atoi(Values("-fr")[0].c_str()); 9487c804472Sopenharmony_ci foldResolutionHeight = atoi(Values("-fr")[1].c_str()); 9497c804472Sopenharmony_ci ILOG("CommandParser fold resolution: %d %d", foldResolutionWidth, foldResolutionHeight); 9507c804472Sopenharmony_ci return true; 9517c804472Sopenharmony_ci } 9527c804472Sopenharmony_ci ELOG("Launch -fr parameters abnormal!"); 9537c804472Sopenharmony_ci return false; 9547c804472Sopenharmony_ci } 9557c804472Sopenharmony_ci ELOG("Launch -fr parameters abnormal!"); 9567c804472Sopenharmony_ci errorInfo = std::string("Fold resolution must be setted."); 9577c804472Sopenharmony_ci return false; 9587c804472Sopenharmony_ci} 9597c804472Sopenharmony_ci 9607c804472Sopenharmony_cibool CommandParser::IsFoldable() const 9617c804472Sopenharmony_ci{ 9627c804472Sopenharmony_ci return foldable; 9637c804472Sopenharmony_ci} 9647c804472Sopenharmony_ci 9657c804472Sopenharmony_cistd::string CommandParser::GetFoldStatus() const 9667c804472Sopenharmony_ci{ 9677c804472Sopenharmony_ci return foldStatus; 9687c804472Sopenharmony_ci} 9697c804472Sopenharmony_ci 9707c804472Sopenharmony_ciint32_t CommandParser::GetFoldResolutionWidth() const 9717c804472Sopenharmony_ci{ 9727c804472Sopenharmony_ci return foldResolutionWidth; 9737c804472Sopenharmony_ci} 9747c804472Sopenharmony_ci 9757c804472Sopenharmony_ciint32_t CommandParser::GetFoldResolutionHeight() const 9767c804472Sopenharmony_ci{ 9777c804472Sopenharmony_ci return foldResolutionHeight; 9787c804472Sopenharmony_ci} 9797c804472Sopenharmony_ci 9807c804472Sopenharmony_cistd::string CommandParser::GetLoaderJsonPath() const 9817c804472Sopenharmony_ci{ 9827c804472Sopenharmony_ci return loaderJsonPath; 9837c804472Sopenharmony_ci} 9847c804472Sopenharmony_ci 9857c804472Sopenharmony_cibool CommandParser::IsLoaderJsonPathValid() 9867c804472Sopenharmony_ci{ 9877c804472Sopenharmony_ci if (!IsSet("ljPath")) { 9887c804472Sopenharmony_ci return true; 9897c804472Sopenharmony_ci } 9907c804472Sopenharmony_ci std::string path = Value("ljPath"); 9917c804472Sopenharmony_ci if (!FileSystem::IsFileExists(path)) { 9927c804472Sopenharmony_ci errorInfo = std::string("The configuration loader.json path does not exist."); 9937c804472Sopenharmony_ci ELOG("Launch -ljPath parameters abnormal!"); 9947c804472Sopenharmony_ci return false; 9957c804472Sopenharmony_ci } 9967c804472Sopenharmony_ci loaderJsonPath = path; 9977c804472Sopenharmony_ci return true; 9987c804472Sopenharmony_ci} 9997c804472Sopenharmony_ci 10007c804472Sopenharmony_ciint CommandParser::ParseArgs(int argc, char* argv[]) 10017c804472Sopenharmony_ci{ 10027c804472Sopenharmony_ci int startParamInvalidCode = 11; 10037c804472Sopenharmony_ci int defaultReturnVal = -1; 10047c804472Sopenharmony_ci std::vector<std::string> strs; 10057c804472Sopenharmony_ci for (int i = 1; i < argc; ++i) { 10067c804472Sopenharmony_ci if (IsMainArgLengthInvalid(argv[i])) { 10077c804472Sopenharmony_ci return startParamInvalidCode; 10087c804472Sopenharmony_ci } 10097c804472Sopenharmony_ci strs.push_back(argv[i]); 10107c804472Sopenharmony_ci } 10117c804472Sopenharmony_ci if (!ProcessCommand(strs)) { 10127c804472Sopenharmony_ci return 0; 10137c804472Sopenharmony_ci } 10147c804472Sopenharmony_ci if (!IsCommandValid()) { 10157c804472Sopenharmony_ci FLOG("Start args is invalid."); 10167c804472Sopenharmony_ci return startParamInvalidCode; 10177c804472Sopenharmony_ci } 10187c804472Sopenharmony_ci return defaultReturnVal; 10197c804472Sopenharmony_ci} 10207c804472Sopenharmony_ci 10217c804472Sopenharmony_civoid CommandParser::GetCommandInfo(CommandInfo& info) const 10227c804472Sopenharmony_ci{ 10237c804472Sopenharmony_ci info.deviceType = GetDeviceType(); 10247c804472Sopenharmony_ci info.pages = GetPages(); 10257c804472Sopenharmony_ci info.appResourcePath = GetAppResourcePath(); 10267c804472Sopenharmony_ci info.isCardDisplay = IsCardDisplay(); 10277c804472Sopenharmony_ci info.containerSdkPath = GetContainerSdkPath(); 10287c804472Sopenharmony_ci info.isComponentMode = IsComponentMode(); 10297c804472Sopenharmony_ci info.loaderJsonPath = GetLoaderJsonPath(); 10307c804472Sopenharmony_ci info.abilityPath = GetAbilityPath(); 10317c804472Sopenharmony_ci info.abilityName = GetAbilityName(); 10327c804472Sopenharmony_ci info.configPath = GetConfigPath(); 10337c804472Sopenharmony_ci info.screenShape = GetScreenShape(); 10347c804472Sopenharmony_ci info.orignalResolutionWidth = GetOrignalResolutionWidth(); 10357c804472Sopenharmony_ci info.orignalResolutionHeight = GetOrignalResolutionHeight(); 10367c804472Sopenharmony_ci info.compressionResolutionWidth = GetCompressionResolutionWidth(); 10377c804472Sopenharmony_ci info.compressionResolutionHeight = GetCompressionResolutionHeight(); 10387c804472Sopenharmony_ci} 10397c804472Sopenharmony_ci 10407c804472Sopenharmony_civoid CommandParser::GetFoldInfo(FoldInfo& info) const 10417c804472Sopenharmony_ci{ 10427c804472Sopenharmony_ci info.foldable = IsFoldable(); 10437c804472Sopenharmony_ci info.foldStatus = GetFoldStatus(); 10447c804472Sopenharmony_ci info.foldResolutionWidth = GetFoldResolutionWidth(); 10457c804472Sopenharmony_ci info.foldResolutionHeight = GetFoldResolutionHeight(); 10467c804472Sopenharmony_ci} 10477c804472Sopenharmony_ci 10487c804472Sopenharmony_ci#ifdef COMPONENT_TEST_ENABLED 10497c804472Sopenharmony_cistd::string CommandParser::GetComponentTestConfig() const 10507c804472Sopenharmony_ci{ 10517c804472Sopenharmony_ci return componentTestConfig; 10527c804472Sopenharmony_ci} 10537c804472Sopenharmony_ci#endif // COMPONENT_TEST_ENABLED