summaryrefslogtreecommitdiff
path: root/platform/darwin/include/MGLOfflineStorage.h
blob: 4f3432163bb022b29b83b0f3cbf00021b7845987 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#import <Foundation/Foundation.h>

#import "MGLTypes.h"

NS_ASSUME_NONNULL_BEGIN

@class MGLOfflinePack;
@protocol MGLOfflineRegion;

/**
 A block to be called once an offline pack has been completely created and
 added.
 
 @param pack Contains a pointer to the newly added pack, or `nil` if there was
    an error creating or adding the pack.
 @param error Contains a pointer to an error object (if any) indicating why the
    pack could not be created or added. For a list of possible error codes, see
    `MGLErrorCode`.
 */
typedef void (^MGLOfflinePackAdditionCompletionHandler)(MGLOfflinePack * _Nullable pack, NSError * _Nullable error);

/**
 A block to be called once an offline pack has been completely invalidated and
 removed.
 
 @param error Contains a pointer to an error object (if any) indicating why the
    pack could not be invalidated or removed.
 */
typedef void (^MGLOfflinePackRemovalCompletionHandler)(NSError * _Nullable error);

/**
 A block to be called with a complete list of offline packs.
 
 @param pack Contains a pointer an array of packs, or `nil` if there was an
    error obtaining the packs.
 @param error Contains a pointer to an error object (if any) indicating why the
    list of packs could not be obtained.
 */
typedef void (^MGLOfflinePackListingCompletionHandler)(NS_ARRAY_OF(MGLOfflinePack *) *packs, NSError * _Nullable error);

/**
 MGLOfflineStorage implements a singleton (shared object) that manages offline
 packs. All of this class’s instance methods are asynchronous, reflecting the
 fact that offline resources are stored in a database.
 */
@interface MGLOfflineStorage : NSObject

/**
 Returns the shared offline storage object.
 */
+ (instancetype)sharedOfflineStorage;

- (instancetype)init NS_UNAVAILABLE;

/**
 Creates and registers an offline pack that downloads the resources needed to
 use the given region offline.
 
 The resulting pack starts out with a state of `MGLOfflinePackStateInactive`. To
 begin downloading resources, call `-[MGLOfflinePack resume]`. To monitor
 download progress, set the pack’s `delegate` property to an object that
 conforms to the `MGLOfflinePackDelegate` protocol.
 
 @param region A region to download.
 @param context Arbitrary data to store alongside the downloaded resources.
 @param completion The completion handler to call once the pack has been added.
    This handler is executed asynchronously on the main queue.
 */
- (void)addPackForRegion:(id <MGLOfflineRegion>)region withContext:(NSData *)context completionHandler:(nullable MGLOfflinePackAdditionCompletionHandler)completion;

/**
 Unregisters the given offline pack and frees any resources that are no longer
 required by any remaining packs.
 
 As soon as this method is called on a pack, the pack becomes invalid; any
 attempt to send it a message will result in an exception being thrown. If an
 error occurs and the pack cannot be removed, do not attempt to reuse the pack
 object. Instead, use the `-getPacksWithCompletionHandler:` method to obtain a
 valid pointer to the pack object.
 
 @param pack The offline pack to remove.
 @param completion The completion handler to call once the pack has been
    removed. This handler is executed asynchronously on the main queue.
 */
- (void)removePack:(MGLOfflinePack *)pack withCompletionHandler:(nullable MGLOfflinePackRemovalCompletionHandler)completion;

/**
 Asynchronously calls a completion callback with all existing offline packs.
 
 @param completion The completion handler to call with the list of packs. This
     handler is executed asynchronously on the main queue.
 */
- (void)getPacksWithCompletionHandler:(MGLOfflinePackListingCompletionHandler)completion;

/**
 Sets the maximum number of Mapbox-hosted tiles that may be downloaded and
 stored on the current device.
 
 Once this limit is reached,
 `-[MGLOfflinePackDelegate offlinePack:didReceiveMaximumAllowedMapboxTiles:]` is
 called on every delegate of `MGLOfflinePack` until already downloaded tiles are
 removed by calling the `-removePack:withCompletionHandler:` method.
 
 @note The [Mapbox Terms of Service](https://www.mapbox.com/tos/) prohibits
    changing or bypassing this limit without permission from Mapbox. Contact
    your Mapbox sales representative to have the limit raised.
 */
- (void)setMaximumAllowedMapboxTiles:(uint64_t)maximumCount;

@end

NS_ASSUME_NONNULL_END