summaryrefslogtreecommitdiff
path: root/platform/darwin/src/MGLOfflinePack.mm
diff options
context:
space:
mode:
Diffstat (limited to 'platform/darwin/src/MGLOfflinePack.mm')
-rw-r--r--platform/darwin/src/MGLOfflinePack.mm47
1 files changed, 35 insertions, 12 deletions
diff --git a/platform/darwin/src/MGLOfflinePack.mm b/platform/darwin/src/MGLOfflinePack.mm
index a8f807374c..6e30316f98 100644
--- a/platform/darwin/src/MGLOfflinePack.mm
+++ b/platform/darwin/src/MGLOfflinePack.mm
@@ -53,6 +53,7 @@ private:
@property (nonatomic, nullable, readwrite) mbgl::OfflineRegion *mbglOfflineRegion;
@property (nonatomic, readwrite) MGLOfflinePackProgress progress;
+@property (atomic, weak) MGLOfflineStorage *offlineStorage;
@end
@@ -69,13 +70,17 @@ private:
return self;
}
-- (instancetype)initWithMBGLRegion:(mbgl::OfflineRegion *)region {
+- (instancetype)initWithMBGLRegion:(mbgl::OfflineRegion *)region offlineStorage:(MGLOfflineStorage *)offlineStorage {
if (self = [super init]) {
_mbglOfflineRegion = region;
_state = MGLOfflinePackStateUnknown;
-
- mbgl::DefaultFileSource *mbglFileSource = [[MGLOfflineStorage sharedOfflineStorage] mbglFileSource];
- mbglFileSource->setOfflineRegionObserver(*_mbglOfflineRegion, std::make_unique<MBGLOfflineRegionObserver>(self));
+ _offlineStorage = offlineStorage;
+
+ mbgl::DefaultFileSource *mbglFileSource = [offlineStorage mbglFileSource];
+
+ if (mbglFileSource) {
+ mbglFileSource->setOfflineRegionObserver(*_mbglOfflineRegion, std::make_unique<MBGLOfflineRegionObserver>(self));
+ }
}
return self;
}
@@ -113,10 +118,17 @@ private:
MGLLogInfo(@"Resuming pack download.");
MGLAssertOfflinePackIsValid();
- self.state = MGLOfflinePackStateActive;
- mbgl::DefaultFileSource *mbglFileSource = [[MGLOfflineStorage sharedOfflineStorage] mbglFileSource];
- mbglFileSource->setOfflineRegionDownloadState(*_mbglOfflineRegion, mbgl::OfflineRegionDownloadState::Active);
+ mbgl::DefaultFileSource *mbglFileSource = [self.offlineStorage mbglFileSource];
+ if (mbglFileSource) {
+ self.state = MGLOfflinePackStateActive;
+ mbglFileSource->setOfflineRegionDownloadState(*_mbglOfflineRegion, mbgl::OfflineRegionDownloadState::Active);
+ }
+ else {
+ // What state should be we in?
+ self.state = MGLOfflinePackStateInvalid;
+
+ }
}
- (void)suspend {
@@ -128,8 +140,10 @@ private:
_isSuspending = YES;
}
- mbgl::DefaultFileSource *mbglFileSource = [[MGLOfflineStorage sharedOfflineStorage] mbglFileSource];
- mbglFileSource->setOfflineRegionDownloadState(*_mbglOfflineRegion, mbgl::OfflineRegionDownloadState::Inactive);
+ mbgl::DefaultFileSource *mbglFileSource = [self.offlineStorage mbglFileSource];
+ if (mbglFileSource) {
+ mbglFileSource->setOfflineRegionDownloadState(*_mbglOfflineRegion, mbgl::OfflineRegionDownloadState::Inactive);
+ }
}
- (void)invalidate {
@@ -137,8 +151,12 @@ private:
MGLAssert(_state != MGLOfflinePackStateInvalid, @"Cannot invalidate an already invalid offline pack.");
self.state = MGLOfflinePackStateInvalid;
- mbgl::DefaultFileSource *mbglFileSource = [[MGLOfflineStorage sharedOfflineStorage] mbglFileSource];
- mbglFileSource->setOfflineRegionObserver(*self.mbglOfflineRegion, nullptr);
+ mbgl::DefaultFileSource *mbglFileSource = [self.offlineStorage mbglFileSource];
+
+ if (mbglFileSource) {
+ mbglFileSource->setOfflineRegionObserver(*self.mbglOfflineRegion, nullptr);
+ }
+
self.mbglOfflineRegion = nil;
}
@@ -164,8 +182,13 @@ private:
MGLLogInfo(@"Requesting pack progress.");
MGLAssertOfflinePackIsValid();
- mbgl::DefaultFileSource *mbglFileSource = [[MGLOfflineStorage sharedOfflineStorage] mbglFileSource];
+ mbgl::DefaultFileSource *mbglFileSource = [self.offlineStorage mbglFileSource];
+ if (!mbglFileSource) {
+ return;
+ }
+
+
__weak MGLOfflinePack *weakSelf = self;
mbglFileSource->getOfflineRegionStatus(*_mbglOfflineRegion, [&, weakSelf](mbgl::expected<mbgl::OfflineRegionStatus, std::exception_ptr> status) {
if (status) {