From ca24272e114c96b51b2c706ba8c43ffcbbdb735b Mon Sep 17 00:00:00 2001 From: cyber-toad Date: Sun, 28 May 2023 22:26:55 +0200 Subject: [PATCH] [gpx] Implement code-review suggestions Signed-off-by: cyber-toad --- android/AndroidManifest.xml | 9 +++++++ .../bookmarks/data/BookmarkManager.java | 2 ++ iphone/Maps/OMaps.plist | 24 +++++++++++++++++++ kml/kml_tests/CMakeLists.txt | 4 ++-- kml/serdes_gpx.cpp | 11 ++++----- kml/serdes_gpx.hpp | 17 ++++--------- 6 files changed, 45 insertions(+), 22 deletions(-) diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index 5b728107954f7..7211b9f1e1ebb 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -612,11 +612,17 @@ + + + + + + @@ -628,6 +634,9 @@ + + + diff --git a/android/src/app/organicmaps/bookmarks/data/BookmarkManager.java b/android/src/app/organicmaps/bookmarks/data/BookmarkManager.java index d52f7106d6bcc..e42c9068e0eaa 100644 --- a/android/src/app/organicmaps/bookmarks/data/BookmarkManager.java +++ b/android/src/app/organicmaps/bookmarks/data/BookmarkManager.java @@ -461,6 +461,8 @@ public void loadBookmarksFile(@NonNull String path, boolean isTemporaryFile) else if (type.equalsIgnoreCase("kml+xml")) return filename + ".kml"; } + if (mime.endsWith("gpx+xml") || mime.endsWith("gpx")) // match application/gpx, application/gpx+xml + return filename + ".gpx"; } return null; diff --git a/iphone/Maps/OMaps.plist b/iphone/Maps/OMaps.plist index ac36cf7c9f034..ba7d992482f3c 100644 --- a/iphone/Maps/OMaps.plist +++ b/iphone/Maps/OMaps.plist @@ -227,6 +227,30 @@ application/vnd.google-earth.kmz+xml + + UTTypeConformsTo + + public.xml + + UTTypeDescription + GPS Exchange Format (GPX) + UTTypeIdentifier + com.topografix.gpx + UTTypeReferenceURL + http://www.topografix.com/GPX/1/ + UTTypeTagSpecification + + public.filename-extension + + gpx + GPX + + public.mime-type + + application/gpx+xml + + + diff --git a/kml/kml_tests/CMakeLists.txt b/kml/kml_tests/CMakeLists.txt index a18b3ed9fbf0f..c74eb34367422 100644 --- a/kml/kml_tests/CMakeLists.txt +++ b/kml/kml_tests/CMakeLists.txt @@ -1,10 +1,10 @@ project(kml_tests) set(SRC + gpx_tests.cpp + minzoom_quadtree_tests.cpp serdes_tests.cpp tests_data.hpp - minzoom_quadtree_tests.cpp - gpx_tests.cpp ) omim_add_test(${PROJECT_NAME} ${SRC}) diff --git a/kml/serdes_gpx.cpp b/kml/serdes_gpx.cpp index 51488b5f957ec..c449fb515b3df 100644 --- a/kml/serdes_gpx.cpp +++ b/kml/serdes_gpx.cpp @@ -123,7 +123,7 @@ void GpxParser::AddAttr(std::string const & attr, std::string const & value) } -std::string_view const & GpxParser::GetTagFromEnd(size_t n) const +std::string_view GpxParser::GetTagFromEnd(size_t n) const { ASSERT_LESS(n, m_tags.size(), ()); return m_tags[m_tags.size() - n - 1]; @@ -140,7 +140,7 @@ void GpxParser::ParseColor(std::string const & value) m_color = kml::ToRGBA(colorBytes[0], colorBytes[1], colorBytes[2], (char)255); } -void GpxParser::Pop(std::string_view const & tag) +void GpxParser::Pop(std::string_view tag) { ASSERT_EQUAL(m_tags.back(), tag, ()); @@ -148,7 +148,7 @@ void GpxParser::Pop(std::string_view const & tag) { m2::Point p = mercator::FromLatLon(m_lat, m_lon); if (m_line.empty() || !AlmostEqualAbs(m_line.back().GetPoint(), p, kMwmPointAccuracy)) - m_line.emplace_back(p); + m_line.emplace_back(std::move(p)); } else if (tag == gpx::kTrkSeg || tag == gpx::kRte) { @@ -173,11 +173,8 @@ void GpxParser::Pop(std::string_view const & tag) data.m_point = m_org; data.m_customName = std::move(m_customName); // Here we set custom name from 'name' field for KML-files exported from 3rd-party services. - if (data.m_name.size() == 1 && data.m_name.begin()->first == kDefaultLangCode && - data.m_customName.empty()) - { + if (data.m_name.size() == 1 && data.m_name.begin()->first == kDefaultLangCode && data.m_customName.empty()) data.m_customName = data.m_name; - } m_data.m_bookmarksData.push_back(std::move(data)); } diff --git a/kml/serdes_gpx.hpp b/kml/serdes_gpx.hpp index 9ca3c0946d4d7..2311b4768a90c 100644 --- a/kml/serdes_gpx.hpp +++ b/kml/serdes_gpx.hpp @@ -25,14 +25,10 @@ class GpxParser explicit GpxParser(FileData & data); bool Push(std::string_view const & name); void AddAttr(std::string const & attr, std::string const & value); - bool IsValidAttribute(std::string const & type, std::string const & value, - std::string const & attrInLowerCase) const; - std::string_view const & GetTagFromEnd(size_t n) const; - void Pop(std::string_view const & tag); + std::string_view GetTagFromEnd(size_t n) const; + void Pop(std::string_view tag); void CharData(std::string value); - - static kml::TrackLayer GetDefaultTrackLayer(); - + private: enum GeometryType { @@ -42,14 +38,9 @@ class GpxParser }; void ResetPoint(); - void SetOrigin(std::string const & s); - void ParseLineCoordinates(std::string const & s, char const * blockSeparator, - char const * coordSeparator); bool MakeValid(); void ParseColor(std::string const &value); - bool GetColorForStyle(std::string const & styleUrl, uint32_t & color) const; - double GetTrackWidthForStyle(std::string const & styleUrl) const; - + FileData & m_data; CategoryData m_compilationData; CategoryData * m_categoryData; // never null