1bc03f14fSopenharmony_ci/* 2bc03f14fSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 3bc03f14fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4bc03f14fSopenharmony_ci * you may not use this file except in compliance with the License. 5bc03f14fSopenharmony_ci * You may obtain a copy of the License at 6bc03f14fSopenharmony_ci * 7bc03f14fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8bc03f14fSopenharmony_ci * 9bc03f14fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10bc03f14fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11bc03f14fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12bc03f14fSopenharmony_ci * See the License for the specific language governing permissions and 13bc03f14fSopenharmony_ci * limitations under the License. 14bc03f14fSopenharmony_ci */ 15bc03f14fSopenharmony_ci 16bc03f14fSopenharmony_ci#include <securec.h> 17bc03f14fSopenharmony_ci 18bc03f14fSopenharmony_ci#include "pasteboard_ffi.h" 19bc03f14fSopenharmony_ci 20bc03f14fSopenharmony_ciusing namespace OHOS::FFI; 21bc03f14fSopenharmony_ciusing namespace OHOS::Media; 22bc03f14fSopenharmony_ciusing namespace OHOS::MiscServices; 23bc03f14fSopenharmony_ciusing namespace OHOS::MiscServicesCj; 24bc03f14fSopenharmony_ci 25bc03f14fSopenharmony_cinamespace OHOS { 26bc03f14fSopenharmony_cinamespace CJSystemapi { 27bc03f14fSopenharmony_ciextern "C" { 28bc03f14fSopenharmony_ciRetDataI64 FfiOHOSCreateStringPasteData(const char *mimeType, const char *value) 29bc03f14fSopenharmony_ci{ 30bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSCreateStringPasteData"); 31bc03f14fSopenharmony_ci RetDataI64 ret; 32bc03f14fSopenharmony_ci std::string mmType = mimeType; 33bc03f14fSopenharmony_ci CJValueType valueType; 34bc03f14fSopenharmony_ci valueType.stringValue = value; 35bc03f14fSopenharmony_ci 36bc03f14fSopenharmony_ci ret.data = CreateCjPasteDataObject(mmType, valueType); 37bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 38bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSCreateStringPasteData success"); 39bc03f14fSopenharmony_ci 40bc03f14fSopenharmony_ci return ret; 41bc03f14fSopenharmony_ci} 42bc03f14fSopenharmony_ci 43bc03f14fSopenharmony_ciRetDataI64 FfiOHOSCreatePixelMapPasteData(const char *mimeType, int64_t pixelMapId) 44bc03f14fSopenharmony_ci{ 45bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSCreatePixelMapPasteData"); 46bc03f14fSopenharmony_ci RetDataI64 ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = 0 }; 47bc03f14fSopenharmony_ci auto pixelMapImpl = FFIData::GetData<PixelMapImpl>(pixelMapId); 48bc03f14fSopenharmony_ci if (pixelMapImpl == nullptr) { 49bc03f14fSopenharmony_ci return ret; 50bc03f14fSopenharmony_ci } 51bc03f14fSopenharmony_ci std::string mmType = mimeType; 52bc03f14fSopenharmony_ci CJValueType valueType; 53bc03f14fSopenharmony_ci valueType.pixelMap = pixelMapImpl->GetRealPixelMap(); 54bc03f14fSopenharmony_ci 55bc03f14fSopenharmony_ci ret.data = CreateCjPasteDataObject(mmType, valueType); 56bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 57bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSCreatePixelMapPasteData success"); 58bc03f14fSopenharmony_ci 59bc03f14fSopenharmony_ci return ret; 60bc03f14fSopenharmony_ci} 61bc03f14fSopenharmony_ci 62bc03f14fSopenharmony_ciRetDataI64 FfiOHOSCreateArrayBufPasteData(const char *mimeType, uint8_t *buffPtr, int64_t bufferSize) 63bc03f14fSopenharmony_ci{ 64bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSCreateArrayBufPasteData"); 65bc03f14fSopenharmony_ci RetDataI64 ret; 66bc03f14fSopenharmony_ci std::string mmType = mimeType; 67bc03f14fSopenharmony_ci CJValueType valueType; 68bc03f14fSopenharmony_ci valueType.arrayBufferData = buffPtr; 69bc03f14fSopenharmony_ci valueType.arrayBufferSize = bufferSize; 70bc03f14fSopenharmony_ci 71bc03f14fSopenharmony_ci ret.data = CreateCjPasteDataObject(mmType, valueType); 72bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 73bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSCreateArrayBufPasteData success"); 74bc03f14fSopenharmony_ci 75bc03f14fSopenharmony_ci return ret; 76bc03f14fSopenharmony_ci} 77bc03f14fSopenharmony_ci 78bc03f14fSopenharmony_cichar *PasteBoardMallocCString(const std::string &origin) 79bc03f14fSopenharmony_ci{ 80bc03f14fSopenharmony_ci auto len = origin.length() + 1; 81bc03f14fSopenharmony_ci char *res = static_cast<char *>(malloc(sizeof(char) * len)); 82bc03f14fSopenharmony_ci if (res == nullptr) { 83bc03f14fSopenharmony_ci return nullptr; 84bc03f14fSopenharmony_ci } 85bc03f14fSopenharmony_ci auto ret = strcpy_s(res, sizeof(char) * len, origin.c_str()); 86bc03f14fSopenharmony_ci if (ret != EOK) { 87bc03f14fSopenharmony_ci LOGE("strcpy_s error"); 88bc03f14fSopenharmony_ci free(res); 89bc03f14fSopenharmony_ci return nullptr; 90bc03f14fSopenharmony_ci } 91bc03f14fSopenharmony_ci return res; 92bc03f14fSopenharmony_ci} 93bc03f14fSopenharmony_ci 94bc03f14fSopenharmony_civoid FillCPasteDataRecord(CPasteDataRecord *retPtr, std::shared_ptr<PasteDataRecord> record) 95bc03f14fSopenharmony_ci{ 96bc03f14fSopenharmony_ci if (record == nullptr) { 97bc03f14fSopenharmony_ci return; 98bc03f14fSopenharmony_ci } 99bc03f14fSopenharmony_ci retPtr->htmlText = nullptr; 100bc03f14fSopenharmony_ci retPtr->mimeType = nullptr; 101bc03f14fSopenharmony_ci retPtr->plainText = nullptr; 102bc03f14fSopenharmony_ci retPtr->uri = nullptr; 103bc03f14fSopenharmony_ci retPtr->pixelMap = ERR_INVALID_INSTANCE_CODE; 104bc03f14fSopenharmony_ci if (record->GetHtmlText() != nullptr) { 105bc03f14fSopenharmony_ci std::string resHtmlText = *(record->GetHtmlText()); 106bc03f14fSopenharmony_ci retPtr->htmlText = PasteBoardMallocCString(resHtmlText); 107bc03f14fSopenharmony_ci } 108bc03f14fSopenharmony_ci if (!record->GetMimeType().empty()) { 109bc03f14fSopenharmony_ci std::string resMimeType = record->GetMimeType(); 110bc03f14fSopenharmony_ci retPtr->mimeType = PasteBoardMallocCString(resMimeType); 111bc03f14fSopenharmony_ci } 112bc03f14fSopenharmony_ci if (record->GetPlainText() != nullptr) { 113bc03f14fSopenharmony_ci std::string resPlainText = *(record->GetPlainText()); 114bc03f14fSopenharmony_ci retPtr->plainText = PasteBoardMallocCString(resPlainText); 115bc03f14fSopenharmony_ci } 116bc03f14fSopenharmony_ci if (record->GetUri() != nullptr) { 117bc03f14fSopenharmony_ci std::string resUri = record->GetUri()->ToString(); 118bc03f14fSopenharmony_ci retPtr->uri = PasteBoardMallocCString(resUri); 119bc03f14fSopenharmony_ci } 120bc03f14fSopenharmony_ci std::shared_ptr<PixelMap> pixelMap = record->GetPixelMap(); 121bc03f14fSopenharmony_ci auto nativeImage = FFIData::Create<PixelMapImpl>(move(pixelMap)); 122bc03f14fSopenharmony_ci if (!nativeImage) { 123bc03f14fSopenharmony_ci retPtr->pixelMap = 0; 124bc03f14fSopenharmony_ci return; 125bc03f14fSopenharmony_ci } 126bc03f14fSopenharmony_ci retPtr->pixelMap = nativeImage->GetID(); 127bc03f14fSopenharmony_ci} 128bc03f14fSopenharmony_ci 129bc03f14fSopenharmony_ciRetDataI64 FfiOHOSCreateStringPasteDataRecord(const char *mimeType, const char *value, CPasteDataRecord *retPtr) 130bc03f14fSopenharmony_ci{ 131bc03f14fSopenharmony_ci LOGI("[PasteDataRecord] FfiOHOSCreateStringPasteDataRecord"); 132bc03f14fSopenharmony_ci RetDataI64 ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = 0 }; 133bc03f14fSopenharmony_ci std::string mmType = mimeType; 134bc03f14fSopenharmony_ci CJValueType valueType; 135bc03f14fSopenharmony_ci valueType.stringValue = value; 136bc03f14fSopenharmony_ci 137bc03f14fSopenharmony_ci ret.data = CreateCjPasteDataRecordObject(mmType, valueType); 138bc03f14fSopenharmony_ci if (ret.data == 0) { 139bc03f14fSopenharmony_ci return ret; 140bc03f14fSopenharmony_ci } 141bc03f14fSopenharmony_ci auto recordInstance = FFIData::GetData<PasteDataRecordImpl>(ret.data); 142bc03f14fSopenharmony_ci if (!recordInstance) { 143bc03f14fSopenharmony_ci FFIData::Release(ret.data); 144bc03f14fSopenharmony_ci return ret; 145bc03f14fSopenharmony_ci } 146bc03f14fSopenharmony_ci std::shared_ptr<PasteDataRecord> record = recordInstance->GetRealPasteDataRecord(); 147bc03f14fSopenharmony_ci FillCPasteDataRecord(retPtr, record); 148bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 149bc03f14fSopenharmony_ci LOGI("[PasteDataRecord] FfiOHOSCreateStringPasteDataRecord success"); 150bc03f14fSopenharmony_ci 151bc03f14fSopenharmony_ci return ret; 152bc03f14fSopenharmony_ci} 153bc03f14fSopenharmony_ci 154bc03f14fSopenharmony_ciRetDataI64 FfiOHOSCreatePixelMapPasteDataRecord(const char *mimeType, int64_t pixelMapId, CPasteDataRecord *retPtr) 155bc03f14fSopenharmony_ci{ 156bc03f14fSopenharmony_ci LOGI("[PasteDataRecord] FfiOHOSCreateStringPasteDataRecord"); 157bc03f14fSopenharmony_ci RetDataI64 ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = 0 }; 158bc03f14fSopenharmony_ci std::string mmType = mimeType; 159bc03f14fSopenharmony_ci auto pixelMapImpl = FFIData::GetData<PixelMapImpl>(pixelMapId); 160bc03f14fSopenharmony_ci if (pixelMapImpl == nullptr) { 161bc03f14fSopenharmony_ci return ret; 162bc03f14fSopenharmony_ci } 163bc03f14fSopenharmony_ci 164bc03f14fSopenharmony_ci auto pixelMap = pixelMapImpl->GetRealPixelMap(); 165bc03f14fSopenharmony_ci CJValueType valueType; 166bc03f14fSopenharmony_ci valueType.pixelMap = pixelMap; 167bc03f14fSopenharmony_ci ret.data = CreateCjPasteDataRecordObject(mmType, valueType); 168bc03f14fSopenharmony_ci if (ret.data == 0) { 169bc03f14fSopenharmony_ci return ret; 170bc03f14fSopenharmony_ci } 171bc03f14fSopenharmony_ci auto recordInstance = FFIData::GetData<PasteDataRecordImpl>(ret.data); 172bc03f14fSopenharmony_ci if (!recordInstance) { 173bc03f14fSopenharmony_ci FFIData::Release(ret.data); 174bc03f14fSopenharmony_ci return ret; 175bc03f14fSopenharmony_ci } 176bc03f14fSopenharmony_ci std::shared_ptr<PasteDataRecord> record = recordInstance->GetRealPasteDataRecord(); 177bc03f14fSopenharmony_ci FillCPasteDataRecord(retPtr, record); 178bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 179bc03f14fSopenharmony_ci LOGI("[PasteDataRecord] FfiOHOSCreateStringPasteDataRecord success"); 180bc03f14fSopenharmony_ci 181bc03f14fSopenharmony_ci return ret; 182bc03f14fSopenharmony_ci} 183bc03f14fSopenharmony_ci 184bc03f14fSopenharmony_ciRetDataI64 FfiOHOSCreateArrayBufPasteDataRecord( 185bc03f14fSopenharmony_ci const char *mimeType, uint8_t *buffPtr, int64_t bufferSize, CPasteDataRecord *retPtr) 186bc03f14fSopenharmony_ci{ 187bc03f14fSopenharmony_ci LOGI("[PasteDataRecord] FfiOHOSCreateArrayBufPasteDataRecord"); 188bc03f14fSopenharmony_ci RetDataI64 ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = 0 }; 189bc03f14fSopenharmony_ci std::string mmType = mimeType; 190bc03f14fSopenharmony_ci CJValueType valueType; 191bc03f14fSopenharmony_ci valueType.arrayBufferData = buffPtr; 192bc03f14fSopenharmony_ci valueType.arrayBufferSize = bufferSize; 193bc03f14fSopenharmony_ci 194bc03f14fSopenharmony_ci ret.data = CreateCjPasteDataRecordObject(mmType, valueType); 195bc03f14fSopenharmony_ci if (ret.data == 0) { 196bc03f14fSopenharmony_ci return ret; 197bc03f14fSopenharmony_ci } 198bc03f14fSopenharmony_ci auto recordInstance = FFIData::GetData<PasteDataRecordImpl>(ret.data); 199bc03f14fSopenharmony_ci if (!recordInstance) { 200bc03f14fSopenharmony_ci FFIData::Release(ret.data); 201bc03f14fSopenharmony_ci return ret; 202bc03f14fSopenharmony_ci } 203bc03f14fSopenharmony_ci std::shared_ptr<PasteDataRecord> record = recordInstance->GetRealPasteDataRecord(); 204bc03f14fSopenharmony_ci FillCPasteDataRecord(retPtr, record); 205bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 206bc03f14fSopenharmony_ci LOGI("[PasteDataRecord] FfiOHOSCreateArrayBufPasteDataRecord success"); 207bc03f14fSopenharmony_ci 208bc03f14fSopenharmony_ci return ret; 209bc03f14fSopenharmony_ci} 210bc03f14fSopenharmony_ci 211bc03f14fSopenharmony_ciRetDataCString FfiOHOSPasteDataGetPrimaryText(int64_t id) 212bc03f14fSopenharmony_ci{ 213bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetPrimaryText start"); 214bc03f14fSopenharmony_ci RetDataCString ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = nullptr }; 215bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataImpl>(id); 216bc03f14fSopenharmony_ci if (!instance) { 217bc03f14fSopenharmony_ci LOGE("[PasteData] GetPrimaryText: instance not exist %{public}" PRId64, id); 218bc03f14fSopenharmony_ci return ret; 219bc03f14fSopenharmony_ci } 220bc03f14fSopenharmony_ci 221bc03f14fSopenharmony_ci auto pasteData = instance->GetRealPasteData(); 222bc03f14fSopenharmony_ci if (pasteData == nullptr) { 223bc03f14fSopenharmony_ci LOGE("[PasteData] GetPrimaryText: pasteData not exist"); 224bc03f14fSopenharmony_ci return ret; 225bc03f14fSopenharmony_ci } 226bc03f14fSopenharmony_ci 227bc03f14fSopenharmony_ci std::shared_ptr<std::string> p = pasteData->GetPrimaryText(); 228bc03f14fSopenharmony_ci if (p != nullptr) { 229bc03f14fSopenharmony_ci ret.data = PasteBoardMallocCString(*p); 230bc03f14fSopenharmony_ci if (ret.data == nullptr) { 231bc03f14fSopenharmony_ci ret.code = ERR_CODE_PARAM_INVALID; 232bc03f14fSopenharmony_ci return ret; 233bc03f14fSopenharmony_ci } 234bc03f14fSopenharmony_ci } 235bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 236bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetPrimaryText success"); 237bc03f14fSopenharmony_ci 238bc03f14fSopenharmony_ci return ret; 239bc03f14fSopenharmony_ci} 240bc03f14fSopenharmony_ci 241bc03f14fSopenharmony_ciRetDataCString FfiOHOSPasteDataRecordToPlainText(int64_t id) 242bc03f14fSopenharmony_ci{ 243bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataRecordToPlainText start"); 244bc03f14fSopenharmony_ci RetDataCString ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = nullptr }; 245bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataRecordImpl>(id); 246bc03f14fSopenharmony_ci if (!instance) { 247bc03f14fSopenharmony_ci LOGE("[PasteRecord] ToPlainText: instance not exist %{public}" PRId64, id); 248bc03f14fSopenharmony_ci ret.code = ERR_INVALID_INSTANCE_CODE; 249bc03f14fSopenharmony_ci return ret; 250bc03f14fSopenharmony_ci } 251bc03f14fSopenharmony_ci 252bc03f14fSopenharmony_ci std::string res = instance->GetRealPasteDataRecord()->ConvertToText(); 253bc03f14fSopenharmony_ci ret.data = PasteBoardMallocCString(res); 254bc03f14fSopenharmony_ci if (ret.data == nullptr) { 255bc03f14fSopenharmony_ci ret.code = ERR_CODE_PARAM_INVALID; 256bc03f14fSopenharmony_ci return ret; 257bc03f14fSopenharmony_ci } 258bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 259bc03f14fSopenharmony_ci LOGI("[PasteRecord] FfiOHOSPasteDataRecordToPlainText success"); 260bc03f14fSopenharmony_ci 261bc03f14fSopenharmony_ci return ret; 262bc03f14fSopenharmony_ci} 263bc03f14fSopenharmony_ci 264bc03f14fSopenharmony_ciRetDataCString FfiOHOSPasteDataGetPrimaryHtml(int64_t id) 265bc03f14fSopenharmony_ci{ 266bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetPrimaryHtml start"); 267bc03f14fSopenharmony_ci RetDataCString ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = nullptr }; 268bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataImpl>(id); 269bc03f14fSopenharmony_ci if (!instance) { 270bc03f14fSopenharmony_ci LOGE("[PasteData] GetPrimaryHtml: instance not exist %{public}" PRId64, id); 271bc03f14fSopenharmony_ci return ret; 272bc03f14fSopenharmony_ci } 273bc03f14fSopenharmony_ci 274bc03f14fSopenharmony_ci auto pasteData = instance->GetRealPasteData(); 275bc03f14fSopenharmony_ci if (pasteData == nullptr) { 276bc03f14fSopenharmony_ci LOGE("[PasteData] GetPrimaryHtml: pasteData not exist"); 277bc03f14fSopenharmony_ci return ret; 278bc03f14fSopenharmony_ci } 279bc03f14fSopenharmony_ci 280bc03f14fSopenharmony_ci std::shared_ptr<std::string> p = pasteData->GetPrimaryHtml(); 281bc03f14fSopenharmony_ci if (p != nullptr) { 282bc03f14fSopenharmony_ci ret.data = PasteBoardMallocCString(*p); 283bc03f14fSopenharmony_ci if (ret.data == nullptr) { 284bc03f14fSopenharmony_ci ret.code = ERR_CODE_PARAM_INVALID; 285bc03f14fSopenharmony_ci return ret; 286bc03f14fSopenharmony_ci } 287bc03f14fSopenharmony_ci } 288bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 289bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetPrimaryHtml success"); 290bc03f14fSopenharmony_ci 291bc03f14fSopenharmony_ci return ret; 292bc03f14fSopenharmony_ci} 293bc03f14fSopenharmony_ci 294bc03f14fSopenharmony_ciRetDataCString FfiOHOSPasteDataGetPrimaryUri(int64_t id) 295bc03f14fSopenharmony_ci{ 296bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetPrimaryUri start"); 297bc03f14fSopenharmony_ci RetDataCString ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = nullptr }; 298bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataImpl>(id); 299bc03f14fSopenharmony_ci if (!instance) { 300bc03f14fSopenharmony_ci LOGE("[PasteData] GetPrimaryUri: instance not exist %{public}" PRId64, id); 301bc03f14fSopenharmony_ci return ret; 302bc03f14fSopenharmony_ci } 303bc03f14fSopenharmony_ci 304bc03f14fSopenharmony_ci auto pasteData = instance->GetRealPasteData(); 305bc03f14fSopenharmony_ci if (pasteData == nullptr) { 306bc03f14fSopenharmony_ci LOGE("[PasteData] GetPrimaryUri: pasteData not exist"); 307bc03f14fSopenharmony_ci return ret; 308bc03f14fSopenharmony_ci } 309bc03f14fSopenharmony_ci 310bc03f14fSopenharmony_ci std::shared_ptr<OHOS::Uri> p = pasteData->GetPrimaryUri(); 311bc03f14fSopenharmony_ci if (p != nullptr) { 312bc03f14fSopenharmony_ci std::string uri = p->ToString(); 313bc03f14fSopenharmony_ci ret.data = PasteBoardMallocCString(uri); 314bc03f14fSopenharmony_ci if (ret.data == nullptr) { 315bc03f14fSopenharmony_ci ret.code = ERR_CODE_PARAM_INVALID; 316bc03f14fSopenharmony_ci return ret; 317bc03f14fSopenharmony_ci } 318bc03f14fSopenharmony_ci } 319bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 320bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetPrimaryUri success"); 321bc03f14fSopenharmony_ci 322bc03f14fSopenharmony_ci return ret; 323bc03f14fSopenharmony_ci} 324bc03f14fSopenharmony_ci 325bc03f14fSopenharmony_ciRetDataI64 FfiOHOSPasteDataGetPrimaryPixelMap(int64_t id) 326bc03f14fSopenharmony_ci{ 327bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetPrimaryPixelMap start"); 328bc03f14fSopenharmony_ci RetDataI64 ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = 0 }; 329bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataImpl>(id); 330bc03f14fSopenharmony_ci if (!instance) { 331bc03f14fSopenharmony_ci LOGE("[PasteData] GetPrimaryPixelMap: instance not exist %{public}" PRId64, id); 332bc03f14fSopenharmony_ci return ret; 333bc03f14fSopenharmony_ci } 334bc03f14fSopenharmony_ci 335bc03f14fSopenharmony_ci auto pasteData = instance->GetRealPasteData(); 336bc03f14fSopenharmony_ci if (pasteData == nullptr) { 337bc03f14fSopenharmony_ci LOGE("[PasteData] GetPrimaryPixelMap: pasteData not exist"); 338bc03f14fSopenharmony_ci return ret; 339bc03f14fSopenharmony_ci } 340bc03f14fSopenharmony_ci 341bc03f14fSopenharmony_ci std::shared_ptr<PixelMap> pixelMap = pasteData->GetPrimaryPixelMap(); 342bc03f14fSopenharmony_ci if (pixelMap != nullptr) { 343bc03f14fSopenharmony_ci auto nativeImage = FFIData::Create<PixelMapImpl>(move(pixelMap)); 344bc03f14fSopenharmony_ci if (!nativeImage) { 345bc03f14fSopenharmony_ci return ret; 346bc03f14fSopenharmony_ci } 347bc03f14fSopenharmony_ci ret.data = nativeImage->GetID(); 348bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 349bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetPrimaryPixelMap success"); 350bc03f14fSopenharmony_ci } else { 351bc03f14fSopenharmony_ci LOGE("[PasteData] pixelMap not exist"); 352bc03f14fSopenharmony_ci } 353bc03f14fSopenharmony_ci 354bc03f14fSopenharmony_ci return ret; 355bc03f14fSopenharmony_ci} 356bc03f14fSopenharmony_ci 357bc03f14fSopenharmony_ciRetDataCString FfiOHOSPasteDataGetPrimaryMimeType(int64_t id) 358bc03f14fSopenharmony_ci{ 359bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetPrimaryMimeType start"); 360bc03f14fSopenharmony_ci RetDataCString ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = nullptr }; 361bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataImpl>(id); 362bc03f14fSopenharmony_ci if (!instance) { 363bc03f14fSopenharmony_ci LOGE("[PasteData] GetPrimaryMimeType: instance not exist %{public}" PRId64, id); 364bc03f14fSopenharmony_ci return ret; 365bc03f14fSopenharmony_ci } 366bc03f14fSopenharmony_ci 367bc03f14fSopenharmony_ci auto pasteData = instance->GetRealPasteData(); 368bc03f14fSopenharmony_ci if (pasteData == nullptr) { 369bc03f14fSopenharmony_ci LOGE("[PasteData] GetPrimaryMimeType: pasteData not exist"); 370bc03f14fSopenharmony_ci return ret; 371bc03f14fSopenharmony_ci } 372bc03f14fSopenharmony_ci 373bc03f14fSopenharmony_ci std::shared_ptr<std::string> mimeType = pasteData->GetPrimaryMimeType(); 374bc03f14fSopenharmony_ci if (mimeType != nullptr) { 375bc03f14fSopenharmony_ci ret.data = PasteBoardMallocCString(*mimeType); 376bc03f14fSopenharmony_ci if (ret.data == nullptr) { 377bc03f14fSopenharmony_ci ret.code = ERR_CODE_PARAM_INVALID; 378bc03f14fSopenharmony_ci return ret; 379bc03f14fSopenharmony_ci } 380bc03f14fSopenharmony_ci } 381bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 382bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetPrimaryMimeType success"); 383bc03f14fSopenharmony_ci 384bc03f14fSopenharmony_ci return ret; 385bc03f14fSopenharmony_ci} 386bc03f14fSopenharmony_ci 387bc03f14fSopenharmony_cistatic char **VectorToCArrString(std::vector<std::string> &vec) 388bc03f14fSopenharmony_ci{ 389bc03f14fSopenharmony_ci char **result = new char *[vec.size()]; 390bc03f14fSopenharmony_ci if (result == nullptr) { 391bc03f14fSopenharmony_ci return nullptr; 392bc03f14fSopenharmony_ci } 393bc03f14fSopenharmony_ci size_t temp = 0; 394bc03f14fSopenharmony_ci for (size_t i = 0; i < vec.size(); i++) { 395bc03f14fSopenharmony_ci result[i] = new char[vec[i].length() + 1]; 396bc03f14fSopenharmony_ci if (result[i] == nullptr) { 397bc03f14fSopenharmony_ci break; 398bc03f14fSopenharmony_ci } 399bc03f14fSopenharmony_ci if (strcpy_s(result[i], vec[i].length() + 1, vec[i].c_str()) != 0) { 400bc03f14fSopenharmony_ci delete[] result[i]; 401bc03f14fSopenharmony_ci result[i] = nullptr; 402bc03f14fSopenharmony_ci break; 403bc03f14fSopenharmony_ci } 404bc03f14fSopenharmony_ci temp++; 405bc03f14fSopenharmony_ci } 406bc03f14fSopenharmony_ci if (temp != vec.size()) { 407bc03f14fSopenharmony_ci for (size_t j = temp; j > 0; j--) { 408bc03f14fSopenharmony_ci delete[] result[j - 1]; 409bc03f14fSopenharmony_ci result[j - 1] = nullptr; 410bc03f14fSopenharmony_ci } 411bc03f14fSopenharmony_ci delete[] result; 412bc03f14fSopenharmony_ci return nullptr; 413bc03f14fSopenharmony_ci } 414bc03f14fSopenharmony_ci return result; 415bc03f14fSopenharmony_ci} 416bc03f14fSopenharmony_ci 417bc03f14fSopenharmony_ciint32_t FfiOHOSPasteDataGetProperty(int64_t id, CPasteDataProperty *retPtr) 418bc03f14fSopenharmony_ci{ 419bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetProperty start"); 420bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataImpl>(id); 421bc03f14fSopenharmony_ci if (!instance) { 422bc03f14fSopenharmony_ci LOGE("[PasteData] GetProperty: instance not exist %{public}" PRId64, id); 423bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 424bc03f14fSopenharmony_ci } 425bc03f14fSopenharmony_ci 426bc03f14fSopenharmony_ci auto pasteData = instance->GetRealPasteData(); 427bc03f14fSopenharmony_ci if (pasteData == nullptr) { 428bc03f14fSopenharmony_ci LOGE("[PasteData] GetProperty: pasteData not exist"); 429bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 430bc03f14fSopenharmony_ci } 431bc03f14fSopenharmony_ci 432bc03f14fSopenharmony_ci PasteDataProperty property = pasteData->GetProperty(); 433bc03f14fSopenharmony_ci retPtr->tag = PasteBoardMallocCString(property.tag); 434bc03f14fSopenharmony_ci if (retPtr->tag == nullptr) { 435bc03f14fSopenharmony_ci return ERR_CODE_PARAM_INVALID; 436bc03f14fSopenharmony_ci } 437bc03f14fSopenharmony_ci retPtr->mimeTypes.head = VectorToCArrString(property.mimeTypes); 438bc03f14fSopenharmony_ci if (retPtr->mimeTypes.head == nullptr) { 439bc03f14fSopenharmony_ci free(retPtr->tag); 440bc03f14fSopenharmony_ci return ERR_CODE_PARAM_INVALID; 441bc03f14fSopenharmony_ci } 442bc03f14fSopenharmony_ci retPtr->mimeTypes.size = static_cast<int64_t>(property.mimeTypes.size()); 443bc03f14fSopenharmony_ci retPtr->timestamp = property.timestamp; 444bc03f14fSopenharmony_ci retPtr->localOnly = property.localOnly; 445bc03f14fSopenharmony_ci retPtr->shareOption = property.shareOption; 446bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetProperty success"); 447bc03f14fSopenharmony_ci 448bc03f14fSopenharmony_ci return SUCCESS_CODE; 449bc03f14fSopenharmony_ci} 450bc03f14fSopenharmony_ci 451bc03f14fSopenharmony_cistatic std::vector<std::string> CArrStringToVector(CArrString src) 452bc03f14fSopenharmony_ci{ 453bc03f14fSopenharmony_ci LOGI("CArrStringToVector start"); 454bc03f14fSopenharmony_ci std::vector<std::string> res; 455bc03f14fSopenharmony_ci for (int64_t i = 0; i < src.size; i++) { 456bc03f14fSopenharmony_ci res.push_back(std::string(src.head[i])); 457bc03f14fSopenharmony_ci } 458bc03f14fSopenharmony_ci LOGI("CArrStringToVector end"); 459bc03f14fSopenharmony_ci return res; 460bc03f14fSopenharmony_ci} 461bc03f14fSopenharmony_ci 462bc03f14fSopenharmony_ciint32_t FfiOHOSPasteDataSetProperty( 463bc03f14fSopenharmony_ci int64_t id, CArrString mimeTypes, const char *tag, int64_t timestamp, bool localOnly, int32_t shareOption) 464bc03f14fSopenharmony_ci{ 465bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataSetProperty start"); 466bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataImpl>(id); 467bc03f14fSopenharmony_ci if (!instance) { 468bc03f14fSopenharmony_ci LOGE("[PasteData] SetProperty: instance not exist %{public}" PRId64, id); 469bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 470bc03f14fSopenharmony_ci } 471bc03f14fSopenharmony_ci PasteDataProperty property; 472bc03f14fSopenharmony_ci property.mimeTypes = CArrStringToVector(mimeTypes); 473bc03f14fSopenharmony_ci property.tag = tag; 474bc03f14fSopenharmony_ci property.timestamp = timestamp; 475bc03f14fSopenharmony_ci property.localOnly = localOnly; 476bc03f14fSopenharmony_ci property.shareOption = static_cast<ShareOption>(shareOption); 477bc03f14fSopenharmony_ci 478bc03f14fSopenharmony_ci auto pasteData = instance->GetRealPasteData(); 479bc03f14fSopenharmony_ci if (pasteData == nullptr) { 480bc03f14fSopenharmony_ci LOGE("[PasteData] SetProperty: pasteData not exist"); 481bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 482bc03f14fSopenharmony_ci } 483bc03f14fSopenharmony_ci 484bc03f14fSopenharmony_ci pasteData->SetProperty(property); 485bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataSetProperty success"); 486bc03f14fSopenharmony_ci 487bc03f14fSopenharmony_ci return SUCCESS_CODE; 488bc03f14fSopenharmony_ci} 489bc03f14fSopenharmony_ci 490bc03f14fSopenharmony_ciRetDataCString FfiOHOSPasteDataGetTag(int64_t id) 491bc03f14fSopenharmony_ci{ 492bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetTag start"); 493bc03f14fSopenharmony_ci RetDataCString ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = nullptr }; 494bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataImpl>(id); 495bc03f14fSopenharmony_ci if (!instance) { 496bc03f14fSopenharmony_ci LOGE("[PasteData] GetTag: instance not exist %{public}" PRId64, id); 497bc03f14fSopenharmony_ci return ret; 498bc03f14fSopenharmony_ci } 499bc03f14fSopenharmony_ci 500bc03f14fSopenharmony_ci auto pasteData = instance->GetRealPasteData(); 501bc03f14fSopenharmony_ci if (pasteData == nullptr) { 502bc03f14fSopenharmony_ci LOGE("[PasteData] GetTag: pasteData not exist"); 503bc03f14fSopenharmony_ci return ret; 504bc03f14fSopenharmony_ci } 505bc03f14fSopenharmony_ci 506bc03f14fSopenharmony_ci std::string tag = pasteData->GetTag(); 507bc03f14fSopenharmony_ci if (!tag.empty()) { 508bc03f14fSopenharmony_ci ret.data = PasteBoardMallocCString(tag); 509bc03f14fSopenharmony_ci if (ret.data == nullptr) { 510bc03f14fSopenharmony_ci ret.code = ERR_CODE_PARAM_INVALID; 511bc03f14fSopenharmony_ci return ret; 512bc03f14fSopenharmony_ci } 513bc03f14fSopenharmony_ci } 514bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 515bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetTag success"); 516bc03f14fSopenharmony_ci 517bc03f14fSopenharmony_ci return ret; 518bc03f14fSopenharmony_ci} 519bc03f14fSopenharmony_ci 520bc03f14fSopenharmony_ciRetDataBool FfiOHOSPasteDataHasType(int64_t id, const char *mimeTypes) 521bc03f14fSopenharmony_ci{ 522bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataHasType start"); 523bc03f14fSopenharmony_ci RetDataBool ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = false }; 524bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataImpl>(id); 525bc03f14fSopenharmony_ci if (!instance) { 526bc03f14fSopenharmony_ci LOGE("[PasteData] HasType: instance not exist %{public}" PRId64, id); 527bc03f14fSopenharmony_ci return ret; 528bc03f14fSopenharmony_ci } 529bc03f14fSopenharmony_ci 530bc03f14fSopenharmony_ci std::string types = mimeTypes; 531bc03f14fSopenharmony_ci 532bc03f14fSopenharmony_ci auto pasteData = instance->GetRealPasteData(); 533bc03f14fSopenharmony_ci if (pasteData == nullptr) { 534bc03f14fSopenharmony_ci LOGE("[PasteData] HasType: pasteData not exist"); 535bc03f14fSopenharmony_ci return ret; 536bc03f14fSopenharmony_ci } 537bc03f14fSopenharmony_ci 538bc03f14fSopenharmony_ci ret.data = pasteData->HasMimeType(types); 539bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 540bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataHasType success"); 541bc03f14fSopenharmony_ci 542bc03f14fSopenharmony_ci return ret; 543bc03f14fSopenharmony_ci} 544bc03f14fSopenharmony_ci 545bc03f14fSopenharmony_ciint32_t FfiOHOSPasteDataAddRecord(int64_t id, int64_t recordId) 546bc03f14fSopenharmony_ci{ 547bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataAddRecord start"); 548bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataImpl>(id); 549bc03f14fSopenharmony_ci if (!instance) { 550bc03f14fSopenharmony_ci LOGE("[PasteData] AddRecord: instance not exist %{public}" PRId64, id); 551bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 552bc03f14fSopenharmony_ci } 553bc03f14fSopenharmony_ci 554bc03f14fSopenharmony_ci PasteDataRecord rec; 555bc03f14fSopenharmony_ci auto recordIntance = FFIData::GetData<PasteDataRecordImpl>(recordId); 556bc03f14fSopenharmony_ci if (!recordIntance) { 557bc03f14fSopenharmony_ci LOGE("[PasteData] AddRecord: instance not exist %{public}" PRId64, recordId); 558bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 559bc03f14fSopenharmony_ci } 560bc03f14fSopenharmony_ci 561bc03f14fSopenharmony_ci auto pasteData = instance->GetRealPasteData(); 562bc03f14fSopenharmony_ci if (pasteData == nullptr) { 563bc03f14fSopenharmony_ci LOGE("[PasteData] AddRecord: pasteData not exist"); 564bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 565bc03f14fSopenharmony_ci } 566bc03f14fSopenharmony_ci 567bc03f14fSopenharmony_ci pasteData->AddRecord(recordIntance->GetRealPasteDataRecord()); 568bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataAddRecord success"); 569bc03f14fSopenharmony_ci 570bc03f14fSopenharmony_ci return SUCCESS_CODE; 571bc03f14fSopenharmony_ci} 572bc03f14fSopenharmony_ci 573bc03f14fSopenharmony_ciint32_t FfiOHOSPasteDataAddMimeTypeRecord(int64_t id, const char *mimeType, const char *value) 574bc03f14fSopenharmony_ci{ 575bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataAddMimeTypeRecord start"); 576bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataImpl>(id); 577bc03f14fSopenharmony_ci if (!instance) { 578bc03f14fSopenharmony_ci LOGE("[PasteData] AddMimeTypeRecord: instance not exist %{public}" PRId64, id); 579bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 580bc03f14fSopenharmony_ci } 581bc03f14fSopenharmony_ci 582bc03f14fSopenharmony_ci std::string types = mimeType; 583bc03f14fSopenharmony_ci std::string realValue = value; 584bc03f14fSopenharmony_ci 585bc03f14fSopenharmony_ci auto pasteData = instance->GetRealPasteData(); 586bc03f14fSopenharmony_ci if (pasteData == nullptr) { 587bc03f14fSopenharmony_ci LOGE("[PasteData] AddMimeTypeRecord: pasteData not exist"); 588bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 589bc03f14fSopenharmony_ci } 590bc03f14fSopenharmony_ci 591bc03f14fSopenharmony_ci if (types == MIMETYPE_TEXT_HTML) { 592bc03f14fSopenharmony_ci pasteData->AddHtmlRecord(realValue); 593bc03f14fSopenharmony_ci } else if (types == MIMETYPE_TEXT_PLAIN) { 594bc03f14fSopenharmony_ci pasteData->AddTextRecord(realValue); 595bc03f14fSopenharmony_ci } else { 596bc03f14fSopenharmony_ci pasteData->AddUriRecord(OHOS::Uri(realValue)); 597bc03f14fSopenharmony_ci } 598bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataAddMimeTypeRecord success"); 599bc03f14fSopenharmony_ci 600bc03f14fSopenharmony_ci return SUCCESS_CODE; 601bc03f14fSopenharmony_ci} 602bc03f14fSopenharmony_ci 603bc03f14fSopenharmony_ciint32_t FfiOHOSPasteDataAddPixelMapRecord(int64_t id, const char *mimeType, int64_t pixelMapId) 604bc03f14fSopenharmony_ci{ 605bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataAddPixelMapRecord start"); 606bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataImpl>(id); 607bc03f14fSopenharmony_ci if (!instance) { 608bc03f14fSopenharmony_ci LOGE("[PasteData] AddPixelMapRecord: instance not exist %{public}" PRId64, id); 609bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 610bc03f14fSopenharmony_ci } 611bc03f14fSopenharmony_ci auto pixelMapImpl = FFIData::GetData<PixelMapImpl>(pixelMapId); 612bc03f14fSopenharmony_ci if (pixelMapImpl == nullptr) { 613bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 614bc03f14fSopenharmony_ci } 615bc03f14fSopenharmony_ci 616bc03f14fSopenharmony_ci auto pixelMap = pixelMapImpl->GetRealPixelMap(); 617bc03f14fSopenharmony_ci if (pixelMap == nullptr) { 618bc03f14fSopenharmony_ci LOGE("[PasteData] AddPixelMapRecord: PixelMap not exist"); 619bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 620bc03f14fSopenharmony_ci } 621bc03f14fSopenharmony_ci 622bc03f14fSopenharmony_ci auto pasteData = instance->GetRealPasteData(); 623bc03f14fSopenharmony_ci if (pasteData == nullptr) { 624bc03f14fSopenharmony_ci LOGE("[PasteData] AddPixelMapRecord: pasteData not exist"); 625bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 626bc03f14fSopenharmony_ci } 627bc03f14fSopenharmony_ci 628bc03f14fSopenharmony_ci pasteData->AddPixelMapRecord(pixelMap); 629bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataAddPixelMapRecord success"); 630bc03f14fSopenharmony_ci 631bc03f14fSopenharmony_ci return SUCCESS_CODE; 632bc03f14fSopenharmony_ci} 633bc03f14fSopenharmony_ci 634bc03f14fSopenharmony_ciint32_t FfiOHOSPasteDataAddArrayRecord(int64_t id, const char *mimeType, uint8_t *buffPtr, int64_t bufferSize) 635bc03f14fSopenharmony_ci{ 636bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataAddArrayRecord start"); 637bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataImpl>(id); 638bc03f14fSopenharmony_ci if (!instance) { 639bc03f14fSopenharmony_ci LOGE("[PasteData] AddArrayRecord: instance not exist %{public}" PRId64, id); 640bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 641bc03f14fSopenharmony_ci } 642bc03f14fSopenharmony_ci 643bc03f14fSopenharmony_ci std::string types = mimeType; 644bc03f14fSopenharmony_ci void *data = buffPtr; 645bc03f14fSopenharmony_ci size_t dataLen = static_cast<size_t>(bufferSize); 646bc03f14fSopenharmony_ci 647bc03f14fSopenharmony_ci auto pasteData = instance->GetRealPasteData(); 648bc03f14fSopenharmony_ci if (pasteData == nullptr) { 649bc03f14fSopenharmony_ci LOGE("[PasteData] AddArrayRecord: pasteData not exist"); 650bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 651bc03f14fSopenharmony_ci } 652bc03f14fSopenharmony_ci 653bc03f14fSopenharmony_ci pasteData->AddKvRecord( 654bc03f14fSopenharmony_ci types, std::vector<uint8_t>(reinterpret_cast<uint8_t *>(data), reinterpret_cast<uint8_t *>(data) + dataLen)); 655bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataAddArrayRecord success"); 656bc03f14fSopenharmony_ci 657bc03f14fSopenharmony_ci return SUCCESS_CODE; 658bc03f14fSopenharmony_ci} 659bc03f14fSopenharmony_ci 660bc03f14fSopenharmony_ciRetDataCArrString FfiOHOSPasteDataGetMimeTypes(int64_t id) 661bc03f14fSopenharmony_ci{ 662bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataAddArrayRecord start"); 663bc03f14fSopenharmony_ci RetDataCArrString ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = { .head = nullptr, .size = 0 } }; 664bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataImpl>(id); 665bc03f14fSopenharmony_ci if (!instance) { 666bc03f14fSopenharmony_ci LOGE("[PasteData] GetMimeTypes: instance not exist %{public}" PRId64, id); 667bc03f14fSopenharmony_ci return ret; 668bc03f14fSopenharmony_ci } 669bc03f14fSopenharmony_ci 670bc03f14fSopenharmony_ci auto pasteData = instance->GetRealPasteData(); 671bc03f14fSopenharmony_ci if (pasteData == nullptr) { 672bc03f14fSopenharmony_ci LOGE("[PasteData] GetMimeTypes: pasteData not exist"); 673bc03f14fSopenharmony_ci return ret; 674bc03f14fSopenharmony_ci } 675bc03f14fSopenharmony_ci 676bc03f14fSopenharmony_ci std::vector<std::string> mimeTypes = pasteData->GetMimeTypes(); 677bc03f14fSopenharmony_ci ret.data.head = VectorToCArrString(mimeTypes); 678bc03f14fSopenharmony_ci if (ret.data.head == nullptr) { 679bc03f14fSopenharmony_ci ret.code = ERR_CODE_PARAM_INVALID; 680bc03f14fSopenharmony_ci return ret; 681bc03f14fSopenharmony_ci } 682bc03f14fSopenharmony_ci ret.data.size = static_cast<int64_t>(mimeTypes.size()); 683bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 684bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetMimeTypes success"); 685bc03f14fSopenharmony_ci 686bc03f14fSopenharmony_ci return ret; 687bc03f14fSopenharmony_ci} 688bc03f14fSopenharmony_ci 689bc03f14fSopenharmony_ciRetDataI64 FfiOHOSPasteDataGetRecord(int64_t id, int32_t index, CPasteDataRecord *retPtr) 690bc03f14fSopenharmony_ci{ 691bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetRecord start"); 692bc03f14fSopenharmony_ci RetDataI64 ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = 0 }; 693bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataImpl>(id); 694bc03f14fSopenharmony_ci if (!instance) { 695bc03f14fSopenharmony_ci LOGE("[PasteData] GetRecord: instance not exist %{public}" PRId64, id); 696bc03f14fSopenharmony_ci return ret; 697bc03f14fSopenharmony_ci } 698bc03f14fSopenharmony_ci 699bc03f14fSopenharmony_ci auto pasteData = instance->GetRealPasteData(); 700bc03f14fSopenharmony_ci if (pasteData == nullptr) { 701bc03f14fSopenharmony_ci LOGE("[PasteData] GetRecord: pasteData not exist"); 702bc03f14fSopenharmony_ci return ret; 703bc03f14fSopenharmony_ci } 704bc03f14fSopenharmony_ci 705bc03f14fSopenharmony_ci if ((std::size_t)index >= pasteData->GetRecordCount()) { 706bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataRemoveRecord index out of range."); 707bc03f14fSopenharmony_ci ret.code = OUT_OF_RANGE; 708bc03f14fSopenharmony_ci return ret; 709bc03f14fSopenharmony_ci } 710bc03f14fSopenharmony_ci std::shared_ptr<PasteDataRecord> record = pasteData->GetRecordAt((std::size_t)index); 711bc03f14fSopenharmony_ci if (record == nullptr) { 712bc03f14fSopenharmony_ci LOGE("[PasteData] FfiOHOSPasteDataRemoveRecord index out of range."); 713bc03f14fSopenharmony_ci ret.code = OUT_OF_RANGE; 714bc03f14fSopenharmony_ci return ret; 715bc03f14fSopenharmony_ci } 716bc03f14fSopenharmony_ci 717bc03f14fSopenharmony_ci FillCPasteDataRecord(retPtr, record); 718bc03f14fSopenharmony_ci auto existedRecordImpl = getCjPasteDataRecordImpl(record); 719bc03f14fSopenharmony_ci if (existedRecordImpl != nullptr) { 720bc03f14fSopenharmony_ci ret.data = existedRecordImpl->GetID(); 721bc03f14fSopenharmony_ci } else { 722bc03f14fSopenharmony_ci auto pasteDataRecordImpl = FFI::FFIData::Create<PasteDataRecordImpl>(record); 723bc03f14fSopenharmony_ci if (!pasteDataRecordImpl) { 724bc03f14fSopenharmony_ci return ret; 725bc03f14fSopenharmony_ci } 726bc03f14fSopenharmony_ci ret.data = pasteDataRecordImpl->GetID(); 727bc03f14fSopenharmony_ci } 728bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 729bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetRecord success"); 730bc03f14fSopenharmony_ci 731bc03f14fSopenharmony_ci return ret; 732bc03f14fSopenharmony_ci} 733bc03f14fSopenharmony_ci 734bc03f14fSopenharmony_ciRetDataUI FfiOHOSPasteDataGetRecordCount(int64_t id) 735bc03f14fSopenharmony_ci{ 736bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetRecordCount start"); 737bc03f14fSopenharmony_ci RetDataUI ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = 0 }; 738bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataImpl>(id); 739bc03f14fSopenharmony_ci if (!instance) { 740bc03f14fSopenharmony_ci LOGE("[PasteData] GetRecordCount: instance not exist %{public}" PRId64, id); 741bc03f14fSopenharmony_ci return ret; 742bc03f14fSopenharmony_ci } 743bc03f14fSopenharmony_ci 744bc03f14fSopenharmony_ci auto pasteData = instance->GetRealPasteData(); 745bc03f14fSopenharmony_ci if (pasteData == nullptr) { 746bc03f14fSopenharmony_ci LOGE("[PasteData] GetRecordCount: pasteData not exist"); 747bc03f14fSopenharmony_ci return ret; 748bc03f14fSopenharmony_ci } 749bc03f14fSopenharmony_ci 750bc03f14fSopenharmony_ci ret.data = pasteData->GetRecordCount(); 751bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 752bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataGetRecordCount success"); 753bc03f14fSopenharmony_ci 754bc03f14fSopenharmony_ci return ret; 755bc03f14fSopenharmony_ci} 756bc03f14fSopenharmony_ci 757bc03f14fSopenharmony_ciint32_t FfiOHOSPasteDataRemoveRecord(int64_t id, int32_t index) 758bc03f14fSopenharmony_ci{ 759bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataRemoveRecord start"); 760bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataImpl>(id); 761bc03f14fSopenharmony_ci if (!instance) { 762bc03f14fSopenharmony_ci LOGE("[PasteData] RemoveRecord: instance not exist %{public}" PRId64, id); 763bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 764bc03f14fSopenharmony_ci } 765bc03f14fSopenharmony_ci 766bc03f14fSopenharmony_ci auto pasteData = instance->GetRealPasteData(); 767bc03f14fSopenharmony_ci if (pasteData == nullptr) { 768bc03f14fSopenharmony_ci LOGE("[PasteData] RemoveRecord: pasteData not exist"); 769bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 770bc03f14fSopenharmony_ci } 771bc03f14fSopenharmony_ci 772bc03f14fSopenharmony_ci if ((std::size_t)index >= pasteData->GetRecordCount()) { 773bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataRemoveRecord index out of range."); 774bc03f14fSopenharmony_ci return OUT_OF_RANGE; 775bc03f14fSopenharmony_ci } 776bc03f14fSopenharmony_ci std::shared_ptr<PasteDataRecord> recordImpl = pasteData->GetRecordAt((std::size_t)index); 777bc03f14fSopenharmony_ci if (recordImpl != nullptr) { 778bc03f14fSopenharmony_ci auto existedRecordImpl = getCjPasteDataRecordImpl(recordImpl); 779bc03f14fSopenharmony_ci if (existedRecordImpl != nullptr) { 780bc03f14fSopenharmony_ci FFIData::Release(existedRecordImpl->GetID()); 781bc03f14fSopenharmony_ci removeCjPasteDataRecordImpl(recordImpl); 782bc03f14fSopenharmony_ci } 783bc03f14fSopenharmony_ci pasteData->RemoveRecordAt(index); 784bc03f14fSopenharmony_ci } 785bc03f14fSopenharmony_ci 786bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataRemoveRecord success"); 787bc03f14fSopenharmony_ci 788bc03f14fSopenharmony_ci return SUCCESS_CODE; 789bc03f14fSopenharmony_ci} 790bc03f14fSopenharmony_ci 791bc03f14fSopenharmony_ciint32_t FfiOHOSPasteDataReplaceRecord(int64_t id, int64_t recordId, int32_t index) 792bc03f14fSopenharmony_ci{ 793bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataReplaceRecord start"); 794bc03f14fSopenharmony_ci auto instance = FFIData::GetData<PasteDataImpl>(id); 795bc03f14fSopenharmony_ci if (!instance) { 796bc03f14fSopenharmony_ci LOGE("[PasteData] ReplaceRecord: instance not exist %{public}" PRId64, id); 797bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 798bc03f14fSopenharmony_ci } 799bc03f14fSopenharmony_ci 800bc03f14fSopenharmony_ci auto recordInstance = FFIData::GetData<PasteDataRecordImpl>(recordId); 801bc03f14fSopenharmony_ci if (!recordInstance) { 802bc03f14fSopenharmony_ci LOGE("[PasteData] ReplaceRecord: instance not exist %{public}" PRId64, recordId); 803bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 804bc03f14fSopenharmony_ci } 805bc03f14fSopenharmony_ci 806bc03f14fSopenharmony_ci auto pasteData = instance->GetRealPasteData(); 807bc03f14fSopenharmony_ci if (pasteData == nullptr) { 808bc03f14fSopenharmony_ci LOGE("[PasteData] ReplaceRecord: pasteData not exist"); 809bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 810bc03f14fSopenharmony_ci } 811bc03f14fSopenharmony_ci 812bc03f14fSopenharmony_ci if ((std::size_t)index >= pasteData->GetRecordCount()) { 813bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataReplaceRecord index out of range."); 814bc03f14fSopenharmony_ci return OUT_OF_RANGE; 815bc03f14fSopenharmony_ci } 816bc03f14fSopenharmony_ci std::shared_ptr<PasteDataRecord> oldRecord = pasteData->GetRecordAt((std::size_t)index); 817bc03f14fSopenharmony_ci if (oldRecord != nullptr) { 818bc03f14fSopenharmony_ci auto existedRecordImpl = getCjPasteDataRecordImpl(oldRecord); 819bc03f14fSopenharmony_ci if (existedRecordImpl != nullptr) { 820bc03f14fSopenharmony_ci FFIData::Release(existedRecordImpl->GetID()); 821bc03f14fSopenharmony_ci removeCjPasteDataRecordImpl(oldRecord); 822bc03f14fSopenharmony_ci } 823bc03f14fSopenharmony_ci } 824bc03f14fSopenharmony_ci 825bc03f14fSopenharmony_ci std::shared_ptr<PasteDataRecord> newRecord = recordInstance->GetRealPasteDataRecord(); 826bc03f14fSopenharmony_ci addCjPasteDataRecordImpl(newRecord, recordInstance); 827bc03f14fSopenharmony_ci pasteData->ReplaceRecordAt(index, newRecord); 828bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSPasteDataReplaceRecord success"); 829bc03f14fSopenharmony_ci 830bc03f14fSopenharmony_ci return SUCCESS_CODE; 831bc03f14fSopenharmony_ci} 832bc03f14fSopenharmony_ci 833bc03f14fSopenharmony_ciRetDataI64 FfiOHOSGetSystemPasteboard() 834bc03f14fSopenharmony_ci{ 835bc03f14fSopenharmony_ci RetDataI64 ret; 836bc03f14fSopenharmony_ci LOGI("[SystemPasteboard] FfiOHOSGetSystemPasteboard start"); 837bc03f14fSopenharmony_ci ret.code = SystemPasteboardImpl::GetSystemPasteboardImpl(ret.data); 838bc03f14fSopenharmony_ci LOGI("[SystemPasteboard] FfiOHOSGetSystemPasteboard success"); 839bc03f14fSopenharmony_ci return ret; 840bc03f14fSopenharmony_ci} 841bc03f14fSopenharmony_ci 842bc03f14fSopenharmony_ciint32_t FfiOHOSSystemPasteboardSetData(int64_t id, int64_t pasteDataId) 843bc03f14fSopenharmony_ci{ 844bc03f14fSopenharmony_ci LOGI("[SystemPasteboard] FfiOHOSSystemPasteboardSetData start"); 845bc03f14fSopenharmony_ci auto instance = FFIData::GetData<SystemPasteboardImpl>(id); 846bc03f14fSopenharmony_ci if (!instance) { 847bc03f14fSopenharmony_ci LOGE("[SystemPasteboard] SetData: instance not exist %{public}" PRId64, id); 848bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 849bc03f14fSopenharmony_ci } 850bc03f14fSopenharmony_ci auto pasteDataInstance = FFIData::GetData<PasteDataImpl>(pasteDataId); 851bc03f14fSopenharmony_ci if (!pasteDataInstance) { 852bc03f14fSopenharmony_ci LOGE("[SystemPasteboard] SetData: instance not exist %{public}" PRId64, pasteDataId); 853bc03f14fSopenharmony_ci return ERR_INVALID_INSTANCE_CODE; 854bc03f14fSopenharmony_ci } 855bc03f14fSopenharmony_ci auto ret = instance->SetData(pasteDataInstance, pasteDataInstance->GetRealPasteData()); 856bc03f14fSopenharmony_ci if (ret == SUCCESS_CODE) { 857bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSSystemPasteboardSetData success"); 858bc03f14fSopenharmony_ci } 859bc03f14fSopenharmony_ci 860bc03f14fSopenharmony_ci return SUCCESS_CODE; 861bc03f14fSopenharmony_ci} 862bc03f14fSopenharmony_ci 863bc03f14fSopenharmony_ciRetDataI64 FfiOHOSSystemPasteboardGetData(int64_t id) 864bc03f14fSopenharmony_ci{ 865bc03f14fSopenharmony_ci RetDataI64 ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = 0 }; 866bc03f14fSopenharmony_ci LOGI("[SystemPasteboard] FfiOHOSSystemPasteboardGetData start"); 867bc03f14fSopenharmony_ci auto instance = FFIData::GetData<SystemPasteboardImpl>(id); 868bc03f14fSopenharmony_ci if (!instance) { 869bc03f14fSopenharmony_ci LOGE("[SystemPasteboard] GetData: instance not exist %{public}" PRId64, id); 870bc03f14fSopenharmony_ci return ret; 871bc03f14fSopenharmony_ci } 872bc03f14fSopenharmony_ci std::shared_ptr<MiscServices::PasteData> pasteData = std::make_shared<PasteData>(); 873bc03f14fSopenharmony_ci int32_t res = instance->GetData(*pasteData); 874bc03f14fSopenharmony_ci if (res != static_cast<int32_t>(PasteboardError::E_OK)) { 875bc03f14fSopenharmony_ci ret.code = res; 876bc03f14fSopenharmony_ci return ret; 877bc03f14fSopenharmony_ci } 878bc03f14fSopenharmony_ci auto pasteDataImpl = FFIData::Create<PasteDataImpl>(pasteData); 879bc03f14fSopenharmony_ci if (!pasteDataImpl) { 880bc03f14fSopenharmony_ci return ret; 881bc03f14fSopenharmony_ci } 882bc03f14fSopenharmony_ci ret.data = pasteDataImpl->GetID(); 883bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 884bc03f14fSopenharmony_ci LOGI("[SystemPasteboard] FfiOHOSSystemPasteboardGetData success"); 885bc03f14fSopenharmony_ci return ret; 886bc03f14fSopenharmony_ci} 887bc03f14fSopenharmony_ci 888bc03f14fSopenharmony_ciRetDataBool FfiOHOSSystemPasteboardHasData(int64_t id) 889bc03f14fSopenharmony_ci{ 890bc03f14fSopenharmony_ci RetDataBool ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = false }; 891bc03f14fSopenharmony_ci LOGI("[SystemPasteboard] FfiOHOSSystemPasteboardHasData start"); 892bc03f14fSopenharmony_ci auto instance = FFIData::GetData<SystemPasteboardImpl>(id); 893bc03f14fSopenharmony_ci if (!instance) { 894bc03f14fSopenharmony_ci LOGE("[SystemPasteboard] HasData: instance not exist %{public}" PRId64, id); 895bc03f14fSopenharmony_ci return ret; 896bc03f14fSopenharmony_ci } 897bc03f14fSopenharmony_ci 898bc03f14fSopenharmony_ci ret.data = instance->HasData(); 899bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 900bc03f14fSopenharmony_ci LOGI("[SystemPasteboard] FfiOHOSSystemPasteboardHasData success"); 901bc03f14fSopenharmony_ci return ret; 902bc03f14fSopenharmony_ci} 903bc03f14fSopenharmony_ci 904bc03f14fSopenharmony_ciFFI_EXPORT void FfiOHOSSystemPasteboardClearData(int64_t id) 905bc03f14fSopenharmony_ci{ 906bc03f14fSopenharmony_ci LOGI("[SystemPasteboard] FfiOHOSSystemPasteboardClearData start"); 907bc03f14fSopenharmony_ci auto instance = FFIData::GetData<SystemPasteboardImpl>(id); 908bc03f14fSopenharmony_ci if (!instance) { 909bc03f14fSopenharmony_ci LOGE("[SystemPasteboard] ClearData: instance not exist %{public}" PRId64, id); 910bc03f14fSopenharmony_ci return; 911bc03f14fSopenharmony_ci } 912bc03f14fSopenharmony_ci instance->ClearData(); 913bc03f14fSopenharmony_ci 914bc03f14fSopenharmony_ci LOGI("[SystemPasteboard] FfiOHOSSystemPasteboardClearData success"); 915bc03f14fSopenharmony_ci} 916bc03f14fSopenharmony_ci 917bc03f14fSopenharmony_ciRetDataBool FfiOHOSSystemPasteboardIsRemoteData(int64_t id) 918bc03f14fSopenharmony_ci{ 919bc03f14fSopenharmony_ci RetDataBool ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = false }; 920bc03f14fSopenharmony_ci LOGI("[SystemPasteboard] FfiOHOSSystemPasteboardIsRemoteData start"); 921bc03f14fSopenharmony_ci auto instance = FFIData::GetData<SystemPasteboardImpl>(id); 922bc03f14fSopenharmony_ci if (!instance) { 923bc03f14fSopenharmony_ci LOGE("[SystemPasteboard] IsRemoteData: instance not exist %{public}" PRId64, id); 924bc03f14fSopenharmony_ci return ret; 925bc03f14fSopenharmony_ci } 926bc03f14fSopenharmony_ci 927bc03f14fSopenharmony_ci ret.data = instance->IsRemoteData(); 928bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 929bc03f14fSopenharmony_ci LOGI("[SystemPasteboard] FfiOHOSSystemPasteboardIsRemoteData success"); 930bc03f14fSopenharmony_ci return ret; 931bc03f14fSopenharmony_ci} 932bc03f14fSopenharmony_ci 933bc03f14fSopenharmony_ciRetDataBool FfiOHOSSystemPasteboardHasDataType(int64_t id, const char *mimeType) 934bc03f14fSopenharmony_ci{ 935bc03f14fSopenharmony_ci RetDataBool ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = false }; 936bc03f14fSopenharmony_ci LOGI("[SystemPasteboard] FfiOHOSSystemPasteboardHasDataType start"); 937bc03f14fSopenharmony_ci auto instance = FFIData::GetData<SystemPasteboardImpl>(id); 938bc03f14fSopenharmony_ci if (!instance) { 939bc03f14fSopenharmony_ci LOGE("[SystemPasteboard] HasDataType: instance not exist %{public}" PRId64, id); 940bc03f14fSopenharmony_ci return ret; 941bc03f14fSopenharmony_ci } 942bc03f14fSopenharmony_ci 943bc03f14fSopenharmony_ci std::string types = mimeType; 944bc03f14fSopenharmony_ci ret.data = instance->HasDataType(types); 945bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 946bc03f14fSopenharmony_ci LOGI("[SystemPasteboard] FfiOHOSSystemPasteboardHasDataType success"); 947bc03f14fSopenharmony_ci return ret; 948bc03f14fSopenharmony_ci} 949bc03f14fSopenharmony_ci 950bc03f14fSopenharmony_ciRetDataCString FfiOHOSSystemPasteboardGetDataSource(int64_t id) 951bc03f14fSopenharmony_ci{ 952bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSSystemPasteboardGetDataSource start"); 953bc03f14fSopenharmony_ci RetDataCString ret = { .code = ERR_INVALID_INSTANCE_CODE, .data = nullptr }; 954bc03f14fSopenharmony_ci auto instance = FFIData::GetData<SystemPasteboardImpl>(id); 955bc03f14fSopenharmony_ci if (!instance) { 956bc03f14fSopenharmony_ci LOGE("[SystemPasteboard] GetDataSource: instance not exist %{public}" PRId64, id); 957bc03f14fSopenharmony_ci return ret; 958bc03f14fSopenharmony_ci } 959bc03f14fSopenharmony_ci std::string res = instance->GetDataSource(); 960bc03f14fSopenharmony_ci ret.data = PasteBoardMallocCString(res); 961bc03f14fSopenharmony_ci if (ret.data == nullptr) { 962bc03f14fSopenharmony_ci ret.code = ERR_CODE_PARAM_INVALID; 963bc03f14fSopenharmony_ci return ret; 964bc03f14fSopenharmony_ci } 965bc03f14fSopenharmony_ci ret.code = SUCCESS_CODE; 966bc03f14fSopenharmony_ci LOGI("[PasteData] FfiOHOSSystemPasteboardGetDataSource success"); 967bc03f14fSopenharmony_ci 968bc03f14fSopenharmony_ci return ret; 969bc03f14fSopenharmony_ci} 970bc03f14fSopenharmony_ci} 971bc03f14fSopenharmony_ci} // namespace CJSystemapi 972bc03f14fSopenharmony_ci} // namespace OHOS 973