14514f5e3Sopenharmony_ci/* 24514f5e3Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License. 54514f5e3Sopenharmony_ci * You may obtain a copy of the License at 64514f5e3Sopenharmony_ci * 74514f5e3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84514f5e3Sopenharmony_ci * 94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and 134514f5e3Sopenharmony_ci * limitations under the License. 144514f5e3Sopenharmony_ci */ 154514f5e3Sopenharmony_ci 164514f5e3Sopenharmony_ci#ifndef ECMASCRIPT_OHOS_PRELOAD_APP_INFO_H 174514f5e3Sopenharmony_ci#define ECMASCRIPT_OHOS_PRELOAD_APP_INFO_H 184514f5e3Sopenharmony_ci 194514f5e3Sopenharmony_ci#include <string> 204514f5e3Sopenharmony_ci#include <set> 214514f5e3Sopenharmony_ci#include <vector> 224514f5e3Sopenharmony_ci 234514f5e3Sopenharmony_ci#include "ecmascript/platform/file.h" 244514f5e3Sopenharmony_ci#include "macros.h" 254514f5e3Sopenharmony_ci 264514f5e3Sopenharmony_cinamespace panda::ecmascript { 274514f5e3Sopenharmony_ciclass OhosPreloadAppInfo { 284514f5e3Sopenharmony_cipublic: 294514f5e3Sopenharmony_ci constexpr static const char *const PRELOAD_PATH_PREFIX = "/system/"; 304514f5e3Sopenharmony_ci constexpr static const char *const PRELOAD_AN_FOLDER = "/ark-cache/"; 314514f5e3Sopenharmony_ci 324514f5e3Sopenharmony_ci OhosPreloadAppInfo() = default; 334514f5e3Sopenharmony_ci 344514f5e3Sopenharmony_ci static std::string GetPreloadAOTFileName(const std::string &hapPath, const std::string &moduleName) 354514f5e3Sopenharmony_ci { 364514f5e3Sopenharmony_ci std::string aotFileName = ""; 374514f5e3Sopenharmony_ci std::string appName = ""; 384514f5e3Sopenharmony_ci std::string folderPath = ""; 394514f5e3Sopenharmony_ci std::string appPath = ""; 404514f5e3Sopenharmony_ci 414514f5e3Sopenharmony_ci size_t folderEnd = 0; 424514f5e3Sopenharmony_ci size_t appEnd = 0; 434514f5e3Sopenharmony_ci if (hapPath.find(PRELOAD_PATH_PREFIX) != std::string::npos) { 444514f5e3Sopenharmony_ci folderEnd = hapPath.find_last_of('/'); 454514f5e3Sopenharmony_ci } 464514f5e3Sopenharmony_ci if (folderEnd != std::string::npos) { 474514f5e3Sopenharmony_ci // "/system/app/AppName" 484514f5e3Sopenharmony_ci folderPath = hapPath.substr(0, folderEnd); 494514f5e3Sopenharmony_ci appEnd = folderPath.find_last_of('/'); 504514f5e3Sopenharmony_ci // "AppName" 514514f5e3Sopenharmony_ci appName = folderPath.substr(appEnd + 1); 524514f5e3Sopenharmony_ci } 534514f5e3Sopenharmony_ci if (appEnd != std::string::npos) { 544514f5e3Sopenharmony_ci // "/system/app" 554514f5e3Sopenharmony_ci appPath = hapPath.substr(0, appEnd); 564514f5e3Sopenharmony_ci // "/system/app/ark-cache/AppName/ModuleName" 574514f5e3Sopenharmony_ci aotFileName = appPath + PRELOAD_AN_FOLDER + appName + "/" + moduleName; 584514f5e3Sopenharmony_ci } 594514f5e3Sopenharmony_ci std::string anFile = aotFileName + AOTFileManager::FILE_EXTENSION_AN; 604514f5e3Sopenharmony_ci std::string aiFile = aotFileName + AOTFileManager::FILE_EXTENSION_AI; 614514f5e3Sopenharmony_ci if (!FileExist(anFile.c_str()) || !FileExist(aiFile.c_str())) { 624514f5e3Sopenharmony_ci aotFileName.clear(); 634514f5e3Sopenharmony_ci } 644514f5e3Sopenharmony_ci return aotFileName; 654514f5e3Sopenharmony_ci } 664514f5e3Sopenharmony_ci}; 674514f5e3Sopenharmony_ci} // namespace panda::ecmascript 684514f5e3Sopenharmony_ci#endif