From 4360257d8c6eb70df1bca546b8d50c103fe4a950 Mon Sep 17 00:00:00 2001 From: tdcosta100 Date: Mon, 26 Jun 2023 06:57:26 -0300 Subject: [PATCH] Add Windows support to MBTiles file source (#905) --- platform/android/android.cmake | 1 + platform/default/BUILD.bazel | 1 + .../src/mbgl/storage/mbtiles_file_source.cpp | 4 +++- platform/default/src/mbgl/util/filesystem.cpp | 13 +++++++++++++ platform/ios/ios.cmake | 1 + platform/linux/linux.cmake | 1 + platform/macos/macos.cmake | 1 + platform/qt/qt.cmake | 1 + platform/windows/windows.cmake | 2 ++ src/mbgl/util/filesystem.hpp | 9 +++++++++ 10 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 platform/default/src/mbgl/util/filesystem.cpp create mode 100644 src/mbgl/util/filesystem.hpp diff --git a/platform/android/android.cmake b/platform/android/android.cmake index 555b89d35..4e61beb38 100644 --- a/platform/android/android.cmake +++ b/platform/android/android.cmake @@ -66,6 +66,7 @@ target_sources( ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/sqlite3.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/text/bidi.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/compression.cpp + ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/filesystem.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/monotonic_timer.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/png_writer.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/thread_local.cpp diff --git a/platform/default/BUILD.bazel b/platform/default/BUILD.bazel index b6901696c..8d6a24f90 100644 --- a/platform/default/BUILD.bazel +++ b/platform/default/BUILD.bazel @@ -50,6 +50,7 @@ cc_library( "src/mbgl/storage/sqlite3.cpp", "src/mbgl/text/bidi.cpp", "src/mbgl/util/compression.cpp", + "src/mbgl/util/filesystem.cpp", "src/mbgl/util/monotonic_timer.cpp", "src/mbgl/util/png_writer.cpp", "src/mbgl/util/thread_local.cpp", diff --git a/platform/default/src/mbgl/storage/mbtiles_file_source.cpp b/platform/default/src/mbgl/storage/mbtiles_file_source.cpp index 6fbcaa295..29b9be2de 100644 --- a/platform/default/src/mbgl/storage/mbtiles_file_source.cpp +++ b/platform/default/src/mbgl/storage/mbtiles_file_source.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include @@ -283,7 +284,8 @@ std::unique_ptr MBTilesFileSource::request(const Resource &resourc return req; } - if (resource.url.find(":///") == std::string::npos) { + if (resource.url.find("://") == std::string::npos || + !util::is_absolute_path(resource.url.substr(resource.url.find("://") + 3))) { Response response; response.noContent = true; response.error = std::make_unique(Response::Error::Reason::Other, diff --git a/platform/default/src/mbgl/util/filesystem.cpp b/platform/default/src/mbgl/util/filesystem.cpp new file mode 100644 index 000000000..e814180d0 --- /dev/null +++ b/platform/default/src/mbgl/util/filesystem.cpp @@ -0,0 +1,13 @@ +#include + +#if defined(USE_STD_FILESYSTEM) +#include + +bool mbgl::util::is_absolute_path(std::string path) { + return std::filesystem::path(path).is_absolute(); +} +#else +bool mbgl::util::is_absolute_path(std::string path) { + return path.at(0) == '/'; +} +#endif diff --git a/platform/ios/ios.cmake b/platform/ios/ios.cmake index 2d6bcaa0c..0b6b760cb 100644 --- a/platform/ios/ios.cmake +++ b/platform/ios/ios.cmake @@ -73,6 +73,7 @@ list(APPEND ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/sqlite3.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/text/bidi.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/compression.cpp + ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/filesystem.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/monotonic_timer.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/png_writer.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/thread_local.cpp diff --git a/platform/linux/linux.cmake b/platform/linux/linux.cmake index 800509a9e..69e32b90e 100644 --- a/platform/linux/linux.cmake +++ b/platform/linux/linux.cmake @@ -42,6 +42,7 @@ target_sources( ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/text/local_glyph_rasterizer.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/async_task.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/compression.cpp + ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/filesystem.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/image.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/jpeg_reader.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/logging_stderr.cpp diff --git a/platform/macos/macos.cmake b/platform/macos/macos.cmake index a141bcddd..bec07627a 100644 --- a/platform/macos/macos.cmake +++ b/platform/macos/macos.cmake @@ -65,6 +65,7 @@ target_sources( ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/sqlite3.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/text/bidi.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/compression.cpp + ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/filesystem.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/monotonic_timer.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/png_writer.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/thread_local.cpp diff --git a/platform/qt/qt.cmake b/platform/qt/qt.cmake index ef2d96dab..7a4dd4894 100644 --- a/platform/qt/qt.cmake +++ b/platform/qt/qt.cmake @@ -91,6 +91,7 @@ target_sources( ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/online_file_source.cpp ${PROJECT_SOURCE_DIR}/platform/$,default/src/mbgl/storage/sqlite3.cpp,qt/src/mbgl/sqlite3.cpp> ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/compression.cpp + ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/filesystem.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/monotonic_timer.cpp $<$:${PROJECT_SOURCE_DIR}/platform/qt/src/mbgl/headless_backend_qt.cpp> ${PROJECT_SOURCE_DIR}/platform/qt/src/mbgl/async_task.cpp diff --git a/platform/windows/windows.cmake b/platform/windows/windows.cmake index 63274adc1..fcebee157 100644 --- a/platform/windows/windows.cmake +++ b/platform/windows/windows.cmake @@ -54,6 +54,7 @@ target_sources( ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/text/local_glyph_rasterizer.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/async_task.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/compression.cpp + ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/filesystem.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/image.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/jpeg_reader.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/logging_stderr.cpp @@ -72,6 +73,7 @@ target_compile_definitions( mbgl-core PRIVATE CURL_STATICLIB + USE_STD_FILESYSTEM ) if(MLN_WITH_EGL) diff --git a/src/mbgl/util/filesystem.hpp b/src/mbgl/util/filesystem.hpp new file mode 100644 index 000000000..b413fbc93 --- /dev/null +++ b/src/mbgl/util/filesystem.hpp @@ -0,0 +1,9 @@ +#pragma once + +#include + +namespace mbgl { +namespace util { +bool is_absolute_path(std::string path); +} +} // namespace mbgl