[core] Surface cache management APIs

These APIs need to be on the DefaultFileSource in order to
be visible for the SDKs bindings.
This commit is contained in:
Thiago Marcos P. Santos
2019-06-10 14:55:11 +03:00
parent 32e0b7beec
commit 5b4bb1398b
2 changed files with 52 additions and 0 deletions

View File

@@ -144,6 +144,14 @@ public:
*/
void deleteOfflineRegion(OfflineRegion&&, std::function<void (std::exception_ptr)>);
/*
* Invalidate all the tiles from an offline region forcing Mapbox GL to revalidate
* the tiles with the server before using. This is more efficient than deleting the
* offline region and downloading it again because if the data on the cache matches
* the server, no new data gets transmitted.
*/
void invalidateOfflineRegion(OfflineRegion&, std::function<void (std::exception_ptr)>);
/*
* Changing or bypassing this limit without permission from Mapbox is prohibited
* by the Mapbox Terms of Service.
@@ -186,6 +194,26 @@ public:
*/
void resetCache(std::function<void (std::exception_ptr)>);
/*
* Forces revalidation of tiles in the ambient cache.
*
* Forces Mapbox GL Native to revalidate tiles stored in the ambient
* cache with the tile server before using them, making sure they
* are the latest version. This is more efficient than cleaning the
* cache because if the tile is considered valid after the server
* lookup, it will not get downloaded again.
*/
void invalidateTileCache(std::function<void (std::exception_ptr)>);
/*
* Erase tiles from the ambient cache, freeing storage space.
*
* Erases the tile cache, freeing resources. This operation can be
* potentially slow because it will trigger a VACUUM on SQLite,
* forcing the database to move pages on the filesystem.
*/
void clearTileCache(std::function<void (std::exception_ptr)>);
// For testing only.
void setOnlineStatus(bool);

View File

@@ -87,6 +87,10 @@ public:
callback(offlineDatabase->deleteRegion(std::move(region)));
}
void invalidateRegion(int64_t regionID, std::function<void (std::exception_ptr)> callback) {
callback(offlineDatabase->invalidateRegion(regionID));
}
void setRegionObserver(int64_t regionID, std::unique_ptr<OfflineRegionObserver> observer) {
if (auto download = getDownload(regionID)) {
download.value()->setObserver(std::move(observer));
@@ -184,6 +188,14 @@ public:
callback(offlineDatabase->resetCache());
}
void invalidateTileCache(std::function<void (std::exception_ptr)> callback) {
callback(offlineDatabase->invalidateTileCache());
}
void clearTileCache(std::function<void (std::exception_ptr)> callback) {
callback(offlineDatabase->clearTileCache());
}
private:
expected<OfflineDownload*, std::exception_ptr> getDownload(int64_t regionID) {
auto it = downloads.find(regionID);
@@ -295,6 +307,10 @@ void DefaultFileSource::deleteOfflineRegion(OfflineRegion&& region, std::functio
impl->actor().invoke(&Impl::deleteRegion, std::move(region), callback);
}
void DefaultFileSource::invalidateOfflineRegion(OfflineRegion& region, std::function<void (std::exception_ptr)> callback) {
impl->actor().invoke(&Impl::invalidateRegion, region.getID(), callback);
}
void DefaultFileSource::setOfflineRegionObserver(OfflineRegion& region, std::unique_ptr<OfflineRegionObserver> observer) {
impl->actor().invoke(&Impl::setRegionObserver, region.getID(), std::move(observer));
}
@@ -327,6 +343,14 @@ void DefaultFileSource::resetCache(std::function<void (std::exception_ptr)> call
impl->actor().invoke(&Impl::resetCache, callback);
}
void DefaultFileSource::invalidateTileCache(std::function<void (std::exception_ptr)> callback) {
impl->actor().invoke(&Impl::invalidateTileCache, callback);
}
void DefaultFileSource::clearTileCache(std::function<void (std::exception_ptr)> callback) {
impl->actor().invoke(&Impl::clearTileCache, callback);
}
// For testing only:
void DefaultFileSource::setOnlineStatus(const bool status) {