From a8371235db5c58634805101fef6034588ab8c0eb Mon Sep 17 00:00:00 2001 From: Viktor Govako Date: Sat, 8 Jul 2023 10:32:46 -0300 Subject: [PATCH] Skip non-string custom metadata. Follow up d9d26da385df209153f9fc110d3767b4e89046c0. Signed-off-by: Viktor Govako --- android/jni/app/organicmaps/UserMarkHelper.cpp | 8 ++++---- .../app/organicmaps/bookmarks/data/Metadata.java | 6 +++--- indexer/editable_map_object.cpp | 16 +++++++++++----- indexer/map_object.hpp | 8 ++++++-- .../PlacePageData/Common/PlacePageInfoData.mm | 1 - 5 files changed, 24 insertions(+), 15 deletions(-) diff --git a/android/jni/app/organicmaps/UserMarkHelper.cpp b/android/jni/app/organicmaps/UserMarkHelper.cpp index 40936f815c..b3f0e0a946 100644 --- a/android/jni/app/organicmaps/UserMarkHelper.cpp +++ b/android/jni/app/organicmaps/UserMarkHelper.cpp @@ -13,11 +13,11 @@ void InjectMetadata(JNIEnv * env, jclass const clazz, jobject const mapObject, o static jmethodID const addId = env->GetMethodID(clazz, "addMetadata", "(ILjava/lang/String;)V"); ASSERT(addId, ()); - using MetadataID = osm::MapObject::MetadataID; - src.ForEachMetadataReadable([env, &mapObject](MetadataID id, std::string const & meta) + src.ForEachMetadataReadable([env, &mapObject](osm::MapObject::MetadataID id, std::string const & meta) { - // TODO: It is not a good idea to pass raw strings to UI. Calling separate getters should be a better way. - if (id != MetadataID::FMD_DESCRIPTION && !meta.empty()) + /// @todo Make separate processing of non-string values like FMD_DESCRIPTION. + /// Actually, better to call separate getters instead of ToString processing. + if (!meta.empty()) { jni::TScopedLocalRef metaString(env, jni::ToJavaString(env, meta)); env->CallVoidMethod(mapObject, addId, static_cast(id), metaString.get()); diff --git a/android/src/app/organicmaps/bookmarks/data/Metadata.java b/android/src/app/organicmaps/bookmarks/data/Metadata.java index 2bba53f3fe..a511e53de3 100644 --- a/android/src/app/organicmaps/bookmarks/data/Metadata.java +++ b/android/src/app/organicmaps/bookmarks/data/Metadata.java @@ -41,9 +41,9 @@ public class Metadata implements Parcelable FMD_DENOMINATION(21), FMD_BUILDING_LEVELS(22), FWD_TEST_ID(23), - // FMD_SPONSORED_ID(24), - // FMD_PRICE_RATE(25), - // FMD_RATING(26), + FMD_CUSTOM_IDS(24), + FMD_PRICE_RATES(25), + FMD_RATINGS(26), // FMD_BANNER_URL(27), FMD_LEVEL(28), FMD_AIRPORT_IATA(29), diff --git a/indexer/editable_map_object.cpp b/indexer/editable_map_object.cpp index 45fb1099b7..eb2d108659 100644 --- a/indexer/editable_map_object.cpp +++ b/indexer/editable_map_object.cpp @@ -264,10 +264,12 @@ vector const & EditableMapObject::GetNearbyStreets() const { re void EditableMapObject::ForEachMetadataItem(function const & fn) const { - m_metadata.ForEach([&fn](feature::Metadata::EType type, std::string_view value) + m_metadata.ForEach([&fn](MetadataID type, std::string_view value) { + switch (type) + { // Multilang description may produce several tags with different values. - if (type == feature::Metadata::FMD_DESCRIPTION) + case MetadataID::FMD_DESCRIPTION: { auto const mlDescr = StringUtf8Multilang::FromBuffer(std::string(value)); mlDescr.ForEach([&fn](int8_t code, string_view v) @@ -277,10 +279,14 @@ void EditableMapObject::ForEachMetadataItem(function