Files
MapLibreParticleLab/platform/default/mbgl/storage/offline_download.hpp
John Firebaugh e49c1e3da3 [core] Fix offline status reporting regressions
The core of the change is ensuring that ensureResource doesn't release Zalgo: it should be consistently async, rather than async in the case that the resource doesn't exist in the database, but sync if it does.

This ensures that status is reported in a more consistent sequence, regardless of the database state.
2016-03-08 10:28:33 -08:00

65 lines
1.8 KiB
C++

#pragma once
#include <mbgl/storage/offline.hpp>
#include <mbgl/style/types.hpp>
#include <list>
#include <set>
#include <memory>
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<OfflineRegionObserver>);
void setState(OfflineRegionDownloadState);
OfflineRegionStatus getStatus() const;
private:
void activateDownload();
void deactivateDownload();
std::vector<Resource> spriteResources(const StyleParser&) const;
std::vector<Resource> glyphResources(const StyleParser&) const;
std::vector<Resource> 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 (Response)> = {});
void ensureTiles(SourceType, uint16_t, const SourceInfo&);
int64_t id;
OfflineRegionDefinition definition;
OfflineDatabase& offlineDatabase;
FileSource& onlineFileSource;
OfflineRegionStatus status;
std::unique_ptr<OfflineRegionObserver> observer;
std::list<std::unique_ptr<WorkRequest>> workRequests;
std::list<std::unique_ptr<FileRequest>> fileRequests;
std::set<std::string> requiredSourceURLs;
};
} // namespace mbgl