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 | |