#pragma once #include "cache.h" #include "curlfuncs.h" #include "merrors.h" #include using michlib::Error; using michlib::RetVal; class CopernicusCatalog { static const MString caturl; std::unique_ptr cache; CURLRAII chandle; Json::Value catalog; // Download catalog Error GetCatalog(); // Asset url from dataset RetVal AssetURL(const MString& prod, const MString& dataset, const MString& asset) const; public: CopernicusCatalog(); // Download JSON from url RetVal GetJSON(const MString& url) const; // List of products RetVal> ProductList() const; // List of datasets in product RetVal> DatasetList(const MString& prod) const; // URL of product RetVal ProductURL(const MString& prod) const; // URL of dataset RetVal DatasetURL(const MString& prod, const MString& dataset) const; // URL of native data (files) in dataset RetVal DatasetNativeURL(const MString& prod, const MString& dataset) const { return AssetURL(prod, dataset, "native"); } // URL of timechuncked data (files) in dataset RetVal DatasetTimeURL(const MString& prod, const MString& dataset) const { return AssetURL(prod, dataset, "timeChunked"); } // URL of geochuncked data (files) in dataset RetVal DatasetGeoURL(const MString& prod, const MString& dataset) const { return AssetURL(prod, dataset, "geoChunked"); } bool Valid() const { return catalog.isObject(); } explicit operator bool() const { return Valid(); } };