1#include "OGC3DTilesAssetsParser.h"
6#include <Foundation/Logging/Logger.h>
8#include <Serialization/JsonParser.h>
20parseJSON(std::string_view json) {
21 Document doc = parseJson(json, JsonParseFlags::None);
24 if (doc.HasMember(
"type")) {
25 asset->type = std::string(doc[
"type"].GetString());
28 LOG_ERROR(logger,
"No TYPE in asset structure");
32 if (doc.HasMember(
"url")) {
33 asset->url = std::string(doc[
"url"].GetString());
35 else if (doc.HasMember(
"options")) {
36 GenericObject options = doc[
"options"].GetObject();
37 if (options.HasMember(
"url")) {
38 asset->url = std::string(options[
"url"].GetString());
41 LOG_ERROR(logger,
"No URL:OPTIONS in asset structure");
46 LOG_ERROR(logger,
"No URL in asset structure");
50 if (doc.HasMember(
"accessToken")) {
52 asset->bearerToken = std::string(doc[
"accessToken"].GetString());
55 LOG_WARNING(logger,
"Tiles assets file does not contain an 'accessToken' property.");
69Cogs::Core::DataFetcherManager::FetchId
70OGC3DTilesAssetsParser::fetch(
Context* context,
const std::string& baseURL,
const std::string& accessToken,
int assetId, OGC3DTilesAssetsParser::FetchCallback callback)
74 return Cogs::Core::DataFetcherManager::NoFetchId;
77 const std::string url = baseURL +
"/v1/assets/" + std::to_string(assetId) +
"/endpoint?access_token=" + accessToken;
79 Cogs::Core::DataFetcherManager::FetchId fetchId = DataFetcherManager::fetchAsync(context, url,
80 [context, url, callback](std::unique_ptr<Cogs::FileContents> data) {
85 std::string_view jsonStr = std::string_view(
static_cast<const char*
>(contentsBuff.data()), contentsBuff.size());
86 asset = parseJSON(jsonStr);
89 LOG_ERROR(logger,
"Could not fetch assets file '%s'", url.c_str());
92 auto finishTask = [callback, asset]() {
96#if defined(EMSCRIPTEN)
101 context->
engine->runTaskInMainThread(std::move(finishTask));
111 const size_t start = asset->url.find_first_of(
"://");
112 const size_t end = asset->url.find(
"/", start + 4);
113 if (start == std::string::npos || end == std::string::npos) {
116 return asset->url.substr(0, end);
A Context instance contains all the services, systems and runtime components needed to use Cogs.
std::unique_ptr< class Engine > engine
Engine instance.
Log implementation class.
Contains the Engine, Renderer, resource managers and other systems needed to run Cogs....
constexpr Log getLogger(const char(&name)[LEN]) noexcept