#pragma once #include #include #include #include #include namespace mbgl { class OfflineDatabase; class FileSource; class WorkRequest; class FileRequest; class Resource; class Response; class SourceInfo; class StyleParser; class Source; /** * Coordinates the request and storage of all resources for an offline region. * @private */ class OfflineDownload { public: OfflineDownload(int64_t id, OfflineRegionDefinition&&, OfflineDatabase& offline, FileSource& online); ~OfflineDownload(); void setObserver(std::unique_ptr); void setState(OfflineRegionDownloadState); OfflineRegionStatus getStatus() const; private: void activateDownload(); void deactivateDownload(); std::vector spriteResources(const StyleParser&) const; std::vector glyphResources(const StyleParser&) const; std::vector tileResources(SourceType, uint16_t, const SourceInfo&) const; /* * Ensure that the resource is stored in the database, requesting it if necessary. * While the request is in progress, it is recorded in `requests`. If the download * is deactivated, all in progress requests are cancelled. */ void ensureResource(const Resource&, std::function = {}); void ensureTiles(SourceType, uint16_t, const SourceInfo&); int64_t id; OfflineRegionDefinition definition; OfflineDatabase& offlineDatabase; FileSource& onlineFileSource; OfflineRegionStatus status; std::unique_ptr observer; std::list> workRequests; std::list> fileRequests; std::set requiredSourceURLs; }; } // namespace mbgl