Skip to content

Commit b7f85bb

Browse files
author
“Malcolm
committed
Adding more properties to the platform request
1 parent 9f9f84c commit b7f85bb

3 files changed

Lines changed: 106 additions & 0 deletions

File tree

platform/darwin/src/MLNPluginProtocolHandler.h

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,47 @@
22

33
NS_ASSUME_NONNULL_BEGIN
44

5+
typedef enum {
6+
MLNPluginProtocolHandlerResourceKindUnknown,
7+
MLNPluginProtocolHandlerResourceKindStyle,
8+
MLNPluginProtocolHandlerResourceKindSource,
9+
MLNPluginProtocolHandlerResourceKindTile,
10+
MLNPluginProtocolHandlerResourceKindGlyphs,
11+
MLNPluginProtocolHandlerResourceKindSpriteImage,
12+
MLNPluginProtocolHandlerResourceKindSpriteJSON,
13+
MLNPluginProtocolHandlerResourceKindImage
14+
} MLNPluginProtocolHandlerResourceKind;
15+
16+
typedef enum {
17+
MLNPluginProtocolHandlerResourceLoadingMethodUnknown,
18+
MLNPluginProtocolHandlerResourceLoadingMethodCacheOnly,
19+
MLNPluginProtocolHandlerResourceLoadingMethodNetworkOnly,
20+
MLNPluginProtocolHandlerResourceLoadingMethodAll
21+
} MLNPluginProtocolHandlerResourceLoadingMethod;
22+
23+
// TODO: Might make sense to add this to it's own file
24+
@interface MLNTileData : NSObject
25+
26+
// Optional Tile Data
27+
@property NSString *tileURLTemplate;
28+
@property int tilePixelRatio;
29+
@property int tileX;
30+
@property int tileY;
31+
@property int tileZoom;
32+
33+
@end
34+
535
@interface MLNPluginProtocolHandlerResource : NSObject
636

37+
@property MLNPluginProtocolHandlerResourceKind resourceKind;
38+
39+
@property MLNPluginProtocolHandlerResourceLoadingMethod loadingMethod;
40+
741
@property NSString *resourceURL;
842

43+
// This is optional
44+
@property MLNTileData * __nullable tileData;
45+
946
@end
1047

1148
@interface MLNPluginProtocolHandlerResponse : NSObject

platform/darwin/src/MLNPluginProtocolHandler.mm

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,6 @@ @implementation MLNPluginProtocolHandlerResource
2121

2222
@implementation MLNPluginProtocolHandlerResponse
2323
@end
24+
25+
@implementation MLNTileData
26+
@end

platform/ios/src/MLNMapView.mm

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7808,7 +7808,71 @@ -(void)addPluginLayerType:(Class)pluginLayerClass {
78087808
- (MLNPluginProtocolHandlerResource *)resourceFromCoreResource:(const mbgl::Resource &)resource {
78097809

78107810
MLNPluginProtocolHandlerResource *tempResult = [[MLNPluginProtocolHandlerResource alloc] init];
7811+
7812+
// The URL of the request
78117813
tempResult.resourceURL = [NSString stringWithUTF8String:resource.url.c_str()];
7814+
7815+
// The kind of request
7816+
switch (resource.kind) {
7817+
case mbgl::Resource::Kind::Style:
7818+
tempResult.resourceKind = MLNPluginProtocolHandlerResourceKindStyle;
7819+
break;
7820+
case mbgl::Resource::Kind::Source:
7821+
tempResult.resourceKind = MLNPluginProtocolHandlerResourceKindSource;
7822+
break;
7823+
case mbgl::Resource::Kind::Tile:
7824+
tempResult.resourceKind = MLNPluginProtocolHandlerResourceKindTile;
7825+
break;
7826+
case mbgl::Resource::Kind::Glyphs:
7827+
tempResult.resourceKind = MLNPluginProtocolHandlerResourceKindGlyphs;
7828+
break;
7829+
case mbgl::Resource::Kind::SpriteImage:
7830+
tempResult.resourceKind = MLNPluginProtocolHandlerResourceKindSpriteImage;
7831+
break;
7832+
case mbgl::Resource::Kind::Image:
7833+
tempResult.resourceKind = MLNPluginProtocolHandlerResourceKindImage;
7834+
break;
7835+
case mbgl::Resource::Kind::SpriteJSON:
7836+
tempResult.resourceKind = MLNPluginProtocolHandlerResourceKindSpriteJSON;
7837+
break;
7838+
default:
7839+
tempResult.resourceKind = MLNPluginProtocolHandlerResourceKindUnknown;
7840+
break;
7841+
}
7842+
7843+
// The loading method
7844+
if (resource.loadingMethod == mbgl::Resource::LoadingMethod::CacheOnly) {
7845+
tempResult.loadingMethod = MLNPluginProtocolHandlerResourceLoadingMethodCacheOnly;
7846+
} else if (resource.loadingMethod == mbgl::Resource::LoadingMethod::NetworkOnly) {
7847+
tempResult.loadingMethod = MLNPluginProtocolHandlerResourceLoadingMethodNetworkOnly;
7848+
} else if (resource.loadingMethod == mbgl::Resource::LoadingMethod::All) {
7849+
tempResult.loadingMethod = MLNPluginProtocolHandlerResourceLoadingMethodAll;
7850+
}
7851+
7852+
if (resource.tileData) {
7853+
auto td = *resource.tileData;
7854+
MLNTileData *tileData = [[MLNTileData alloc] init];
7855+
tileData.tileURLTemplate = [NSString stringWithUTF8String:td.urlTemplate.c_str()];
7856+
tileData.tilePixelRatio = td.pixelRatio;
7857+
tileData.tileX = td.x;
7858+
tileData.tileY = td.y;
7859+
tileData.tileZoom = td.z;
7860+
tempResult.tileData = tileData;
7861+
}
7862+
7863+
// TODO: Figure out which other properties from resource should be passed along here
7864+
/*
7865+
Usage usage{Usage::Online};
7866+
Priority priority{Priority::Regular};
7867+
std::optional<std::pair<uint64_t, uint64_t>> dataRange = std::nullopt;
7868+
std::optional<Timestamp> priorModified = std::nullopt;
7869+
std::optional<Timestamp> priorExpires = std::nullopt;
7870+
std::optional<std::string> priorEtag = std::nullopt;
7871+
std::shared_ptr<const std::string> priorData;
7872+
Duration minimumUpdateInterval{Duration::zero()};
7873+
StoragePolicy storagePolicy{StoragePolicy::Permanent};
7874+
*/
7875+
78127876
return tempResult;
78137877

78147878
}
@@ -7840,6 +7904,8 @@ - (void)addPluginProtocolHandler:(Class)pluginProtocolHandlerClass {
78407904
if (strongHandler) {
78417905

78427906
MLNPluginProtocolHandlerResource *res = [weakSelf resourceFromCoreResource:resource];
7907+
7908+
// TODO: Figure out what other fields in response need to be passed back from requestResource
78437909
MLNPluginProtocolHandlerResponse *response = [strongHandler requestResource:res];
78447910
if (response.data) {
78457911
tempResult.data = std::make_shared<std::string>((const char*)[response.data bytes],

0 commit comments

Comments
 (0)