1 #pragma once 2 3 #include <mbgl/storage/offline.hpp> 4 #include <mbgl/storage/resource.hpp> 5 6 #include <list> 7 #include <unordered_set> 8 #include <memory> 9 #include <deque> 10 11 namespace mbgl { 12 13 class OfflineDatabase; 14 class FileSource; 15 class AsyncRequest; 16 class Response; 17 class Tileset; 18 19 namespace style { 20 class Parser; 21 } // namespace style 22 23 /** 24 * Coordinates the request and storage of all resources for an offline region. 25 26 * @private 27 */ 28 class OfflineDownload { 29 public: 30 OfflineDownload(int64_t id, OfflineRegionDefinition&&, OfflineDatabase& offline, FileSource& online); 31 ~OfflineDownload(); 32 33 void setObserver(std::unique_ptr<OfflineRegionObserver>); 34 void setState(OfflineRegionDownloadState); 35 36 OfflineRegionStatus getStatus() const; 37 38 private: 39 void activateDownload(); 40 void continueDownload(); 41 void deactivateDownload(); 42 43 /* 44 * Ensure that the resource is stored in the database, requesting it if necessary. 45 * While the request is in progress, it is recorded in `requests`. If the download 46 * is deactivated, all in progress requests are cancelled. 47 */ 48 void ensureResource(const Resource&, std::function<void (Response)> = {}); 49 50 void onMapboxTileCountLimitExceeded(); 51 52 int64_t id; 53 OfflineRegionDefinition definition; 54 OfflineDatabase& offlineDatabase; 55 FileSource& onlineFileSource; 56 OfflineRegionStatus status; 57 std::unique_ptr<OfflineRegionObserver> observer; 58 59 std::list<std::unique_ptr<AsyncRequest>> requests; 60 std::unordered_set<std::string> requiredSourceURLs; 61 std::deque<Resource> resourcesRemaining; 62 std::list<std::tuple<Resource, Response>> buffer; 63 64 void queueResource(Resource); 65 void queueTiles(style::SourceType, uint16_t tileSize, const Tileset&); 66 }; 67 68 } // namespace mbgl 69