13920e296Sopenharmony_ci/* 23920e296Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 33920e296Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 43920e296Sopenharmony_ci * you may not use this file except in compliance with the License. 53920e296Sopenharmony_ci * You may obtain a copy of the License at 63920e296Sopenharmony_ci * 73920e296Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 83920e296Sopenharmony_ci * 93920e296Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 103920e296Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 113920e296Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 123920e296Sopenharmony_ci * See the License for the specific language governing permissions and 133920e296Sopenharmony_ci * limitations under the License. 143920e296Sopenharmony_ci */ 153920e296Sopenharmony_ci 163920e296Sopenharmony_ci#ifndef OHOS_RESTOOL_RESOURCE_APPEND_H 173920e296Sopenharmony_ci#define OHOS_RESTOOL_RESOURCE_APPEND_H 183920e296Sopenharmony_ci 193920e296Sopenharmony_ci#include <fstream> 203920e296Sopenharmony_ci#include "cmd_parser.h" 213920e296Sopenharmony_ci#include "factory_resource_compiler.h" 223920e296Sopenharmony_ci#include "file_entry.h" 233920e296Sopenharmony_ci 243920e296Sopenharmony_cinamespace OHOS { 253920e296Sopenharmony_cinamespace Global { 263920e296Sopenharmony_cinamespace Restool { 273920e296Sopenharmony_ciclass ResourceAppend { 283920e296Sopenharmony_cipublic: 293920e296Sopenharmony_ci ResourceAppend(const PackageParser &packageParser); 303920e296Sopenharmony_ci virtual ~ResourceAppend() {}; 313920e296Sopenharmony_ci uint32_t Append(); 323920e296Sopenharmony_ci uint32_t Combine(); 333920e296Sopenharmony_ci const std::map<int64_t, std::vector<std::shared_ptr<ResourceItem>>> GetItems() const 343920e296Sopenharmony_ci { 353920e296Sopenharmony_ci return items_; 363920e296Sopenharmony_ci } 373920e296Sopenharmony_ci 383920e296Sopenharmony_ciprivate: 393920e296Sopenharmony_ci bool Combine(const std::string &folderPath); 403920e296Sopenharmony_ci bool ScanResources(const std::string &resourcePath, const std::string &outputPath); 413920e296Sopenharmony_ci bool ScanSubResources(const FileEntry entry, const std::string &resourcePath, 423920e296Sopenharmony_ci const std::string &outputPath); 433920e296Sopenharmony_ci bool ScanSubLimitkeyResources(const FileEntry entry, const std::string &resourcePath, 443920e296Sopenharmony_ci const std::string &outputPath); 453920e296Sopenharmony_ci bool ScanIegalResources(const std::string &resourcePath, const std::string &outputPath); 463920e296Sopenharmony_ci bool ScanLimitKey(const std::unique_ptr<FileEntry> &entry, const std::string &limitKey, 473920e296Sopenharmony_ci const std::string outputPath); 483920e296Sopenharmony_ci bool ScanFiles(const std::unique_ptr<FileEntry> &entry, const DirectoryInfo &directoryInfo, 493920e296Sopenharmony_ci const std::string &outputPath); 503920e296Sopenharmony_ci bool ScanFile(const FileInfo &fileInfo, const std::string &outputPath); 513920e296Sopenharmony_ci bool ScanSingleFile(const std::string &filePath, const std::string &outputPath); 523920e296Sopenharmony_ci bool WriteFileInner(std::ostringstream &outStream, const std::string &outputPath) const; 533920e296Sopenharmony_ci bool WriteResourceItem(const ResourceItem &resourceItem, std::ostringstream &out); 543920e296Sopenharmony_ci bool LoadResourceItem(const std::string &filePath); 553920e296Sopenharmony_ci bool ScanRawFilesOrResFiles(const std::string &path, const std::string &outputPath, const std::string &limit); 563920e296Sopenharmony_ci bool WriteRawFilesOrResFiles(const std::string &filePath, const std::string &outputPath, const std::string &limit); 573920e296Sopenharmony_ci bool Push(const std::shared_ptr<ResourceItem> &resourceItem); 583920e296Sopenharmony_ci void AddRef(const std::shared_ptr<ResourceItem> &resourceItem); 593920e296Sopenharmony_ci bool LoadResourceItemFromMem(const char buffer[], int32_t length); 603920e296Sopenharmony_ci std::string ParseString(const char buffer[], int32_t length, int32_t &offset) const; 613920e296Sopenharmony_ci int32_t ParseInt32(const char buffer[], int32_t length, int32_t &offset) const; 623920e296Sopenharmony_ci bool ParseRef(); 633920e296Sopenharmony_ci bool CheckModuleResourceItem(const std::shared_ptr<ResourceItem> &resourceItem, int64_t id); 643920e296Sopenharmony_ci bool IsBaseIdDefined(const FileInfo &fileInfo); 653920e296Sopenharmony_ci#ifdef __WIN32 663920e296Sopenharmony_ci bool LoadResourceItemWin(const std::string &filePath); 673920e296Sopenharmony_ci#endif 683920e296Sopenharmony_ci void CheckAllItems(std::vector<std::pair<ResType, std::string>> &noBaseResource); 693920e296Sopenharmony_ci const PackageParser &packageParser_; 703920e296Sopenharmony_ci std::map<int64_t, std::vector<std::shared_ptr<ResourceItem>>> items_; 713920e296Sopenharmony_ci std::map<int64_t, std::vector<std::shared_ptr<ResourceItem>>> itemsForModule_; 723920e296Sopenharmony_ci std::vector<std::shared_ptr<ResourceItem>> refs_; 733920e296Sopenharmony_ci}; 743920e296Sopenharmony_ci} 753920e296Sopenharmony_ci} 763920e296Sopenharmony_ci} 773920e296Sopenharmony_ci#endif