JS -> NDK paste failed.

Signed-off-by: cuile4 <cuile4@huawei.com>
Change-Id: I65143f775bde91f9b9a5af886c92630883731ed6
Signed-off-by: cuile4 <cuile4@huawei.com>
This commit is contained in:
cuile4 2024-10-22 20:49:22 +08:00
parent 03ca8d3c28
commit 95e31d7c95
4 changed files with 48 additions and 4 deletions

View File

@ -47,6 +47,8 @@ public:
static std::shared_ptr<std::vector<std::pair<std::string, UDMF::ValueType>>> Convert(
const std::vector<std::shared_ptr<PasteDataEntry>> &entries);
static UDMF::ValueType Convert(const std::shared_ptr<PasteDataEntry>& entry);
static std::vector<std::string> Convert(const std::vector<std::string> &utdIds);
private:

View File

@ -125,6 +125,48 @@ std::vector<std::shared_ptr<PasteDataEntry>> ConvertUtils::Convert(
return pbEntries;
}
UDMF::ValueType ConvertUtils::Convert(const std::shared_ptr<PasteDataEntry>& entry)
{
auto utdId = entry->GetUtdId();
auto value = entry->GetValue();
if (std::holds_alternative<std::monostate>(value) || std::holds_alternative<std::shared_ptr<Object>>(value)) {
return value;
}
auto mimeType = entry->GetMimeType();
auto object = std::make_shared<UDMF::Object>();
if (mimeType == MIMETYPE_TEXT_PLAIN) {
object->value_[UDMF::UNIFORM_DATA_TYPE] = utdId;
if (std::holds_alternative<std::string>(value)) {
object->value_[UDMF::CONTENT] = std::get<std::string>(value);
}
} else if (mimeType == MIMETYPE_TEXT_HTML) {
object->value_[UDMF::UNIFORM_DATA_TYPE] = utdId;
if (std::holds_alternative<std::string>(value)) {
object->value_[UDMF::HTML_CONTENT] = std::get<std::string>(value);
}
} else if (mimeType == MIMETYPE_TEXT_URI) {
object->value_[UDMF::UNIFORM_DATA_TYPE] = utdId;
if (std::holds_alternative<std::string>(value)) {
object->value_[UDMF::FILE_URI_PARAM] = std::get<std::string>(value);
}
} else if (mimeType == MIMETYPE_PIXELMAP) {
object->value_[UDMF::UNIFORM_DATA_TYPE] = utdId;
if (std::holds_alternative<std::shared_ptr<OHOS::Media::PixelMap>>(value)) {
object->value_[UDMF::PIXEL_MAP] = std::get<std::shared_ptr<OHOS::Media::PixelMap>>(value);
}
} else if (mimeType == MIMETYPE_TEXT_WANT) {
PASTEBOARD_HILOGI(PASTEBOARD_MODULE_CLIENT, "mimeType is want,udmf not surpport");
} else {
object->value_[UDMF::UNIFORM_DATA_TYPE] = utdId;
if (std::holds_alternative<std::vector<uint8_t>>(value)) {
auto arrayBuffer = std::get<std::vector<uint8_t>>(value);
object->value_[UDMF::ARRAY_BUFFER] = arrayBuffer;
object->value_[UDMF::ARRAY_BUFFER_LENGTH] = static_cast<int64_t>(arrayBuffer.size());
}
}
return object;
}
std::shared_ptr<std::vector<std::pair<std::string, UDMF::ValueType>>> ConvertUtils::Convert(
const std::vector<std::shared_ptr<PasteDataEntry>> &entries)
{
@ -138,7 +180,7 @@ std::shared_ptr<std::vector<std::pair<std::string, UDMF::ValueType>>> ConvertUti
if (udmfEntryMap.find(entry->GetUtdId()) == udmfEntryMap.end()) {
entryUtdIds.emplace_back(entry->GetUtdId());
}
udmfEntryMap.insert_or_assign(entry->GetUtdId(), entry->GetValue());
udmfEntryMap.insert_or_assign(entry->GetUtdId(), Convert(entry));
}
for (auto const &utdId : entryUtdIds) {
auto item = udmfEntryMap.find(utdId);

View File

@ -233,7 +233,7 @@ std::shared_ptr<std::string> PasteDataEntry::ConvertToHtml() const
std::shared_ptr<Uri> PasteDataEntry::ConvertToUri() const
{
std::string res;
if (GetUtdId() != UDMF::UtdUtils::GetUtdIdFromUtdEnum(UDType::FILE_URI)) {
if (!UDMF::UnifiedDataUtils::IsFileUri(GetUtdId())) {
PASTEBOARD_HILOGE(PASTEBOARD_MODULE_CLIENT, "type error, utdId:%{public}s", GetUtdId().c_str());
return nullptr;
}
@ -384,7 +384,7 @@ std::string CommonUtils::Convert2MimeType(const std::string &utdId)
if (utdId == UDMF::UtdUtils::GetUtdIdFromUtdEnum(UDType::HTML)) {
return MIMETYPE_TEXT_HTML;
}
if (utdId == UDMF::UtdUtils::GetUtdIdFromUtdEnum(UDType::FILE_URI)) {
if (UDMF::UnifiedDataUtils::IsFileUri(utdId)) {
return MIMETYPE_TEXT_URI;
}
if (utdId == UDMF::UtdUtils::GetUtdIdFromUtdEnum(UDType::SYSTEM_DEFINED_PIXEL_MAP)) {

View File

@ -578,7 +578,7 @@ bool PasteDataRecord::HasEmptyEntry() const
if (udmfValue_ && !std::holds_alternative<std::monostate>(*udmfValue_)) {
return false;
}
for (auto const &entry : entries_) {
for (auto const &entry : GetEntries()) {
if (std::holds_alternative<std::monostate>(entry->GetValue())) {
return true;
}