mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-19 13:03:36 +00:00
[ios] Support geo-navigation URL
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
This commit is contained in:
@@ -24,7 +24,11 @@ static inline DeeplinkUrlType deeplinkUrlType(url_scheme::ParsedMapApi::UrlType
|
|||||||
|
|
||||||
+ (DeeplinkUrlType)parseAndSetApiURL:(NSURL *)url {
|
+ (DeeplinkUrlType)parseAndSetApiURL:(NSURL *)url {
|
||||||
Framework &f = GetFramework();
|
Framework &f = GetFramework();
|
||||||
return deeplinkUrlType(f.ParseAndSetApiURL(url.absoluteString.UTF8String));
|
if ([url.scheme isEqual: @"geo-navigation"]) {
|
||||||
|
return deeplinkUrlType(f.ParseGeoNav(url.absoluteString.UTF8String, f));
|
||||||
|
} else {
|
||||||
|
return deeplinkUrlType(f.ParseAndSetApiURL(url.absoluteString.UTF8String));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void)executeMapApiRequest {
|
+ (void)executeMapApiRequest {
|
||||||
|
|||||||
@@ -19,6 +19,8 @@
|
|||||||
<string>CloudDocuments</string>
|
<string>CloudDocuments</string>
|
||||||
<string>CloudKit</string>
|
<string>CloudKit</string>
|
||||||
</array>
|
</array>
|
||||||
|
<key>com.apple.developer.navigation-app</key>
|
||||||
|
<true/>
|
||||||
<key>com.apple.developer.ubiquity-container-identifiers</key>
|
<key>com.apple.developer.ubiquity-container-identifiers</key>
|
||||||
<array>
|
<array>
|
||||||
<string>iCloud.app.comaps.debug</string>
|
<string>iCloud.app.comaps.debug</string>
|
||||||
|
|||||||
@@ -19,6 +19,8 @@
|
|||||||
<string>CloudDocuments</string>
|
<string>CloudDocuments</string>
|
||||||
<string>CloudKit</string>
|
<string>CloudKit</string>
|
||||||
</array>
|
</array>
|
||||||
|
<key>com.apple.developer.navigation-app</key>
|
||||||
|
<true/>
|
||||||
<key>com.apple.developer.ubiquity-container-identifiers</key>
|
<key>com.apple.developer.ubiquity-container-identifiers</key>
|
||||||
<array>
|
<array>
|
||||||
<string>iCloud.app.comaps</string>
|
<string>iCloud.app.comaps</string>
|
||||||
|
|||||||
@@ -65,6 +65,7 @@
|
|||||||
<string>mapsme</string>
|
<string>mapsme</string>
|
||||||
<string>ge0</string>
|
<string>ge0</string>
|
||||||
<string>geo</string>
|
<string>geo</string>
|
||||||
|
<string>geo-navigation</string>
|
||||||
<string>om</string>
|
<string>om</string>
|
||||||
<string>mapswithmepro</string>
|
<string>mapswithmepro</string>
|
||||||
</array>
|
</array>
|
||||||
@@ -89,7 +90,7 @@
|
|||||||
<true/>
|
<true/>
|
||||||
<key>NSExceptionDomains</key>
|
<key>NSExceptionDomains</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>comaps.at</key>
|
<key>comaps.app</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSExceptionAllowsInsecureHTTPLoads</key>
|
<key>NSExceptionAllowsInsecureHTTPLoads</key>
|
||||||
<true/>
|
<true/>
|
||||||
@@ -98,7 +99,7 @@
|
|||||||
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
|
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
|
||||||
<false/>
|
<false/>
|
||||||
</dict>
|
</dict>
|
||||||
<key>comaps.app</key>
|
<key>comaps.at</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSExceptionAllowsInsecureHTTPLoads</key>
|
<key>NSExceptionAllowsInsecureHTTPLoads</key>
|
||||||
<true/>
|
<true/>
|
||||||
|
|||||||
@@ -91,7 +91,7 @@
|
|||||||
switch urlType {
|
switch urlType {
|
||||||
case .route:
|
case .route:
|
||||||
if let adapter = DeepLinkRouteStrategyAdapter(url) {
|
if let adapter = DeepLinkRouteStrategyAdapter(url) {
|
||||||
MWMRouter.buildApiRoute(with: adapter.type, start: adapter.p1, finish: adapter.p2)
|
MWMRouter.buildApiRoute(with: adapter.type, start: adapter.pStart, intermediatePoint: adapter.pIntermediate, finish: adapter.pFinish)
|
||||||
MapsAppDelegate.theApp().showMap()
|
MapsAppDelegate.theApp().showMap()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,8 +6,9 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
@class MWMRoutePoint;
|
@class MWMRoutePoint;
|
||||||
@interface DeepLinkRouteStrategyAdapter : NSObject
|
@interface DeepLinkRouteStrategyAdapter : NSObject
|
||||||
|
|
||||||
@property(nonatomic, readonly) MWMRoutePoint* p1;
|
@property(nonatomic, readonly) MWMRoutePoint* pStart;
|
||||||
@property(nonatomic, readonly) MWMRoutePoint* p2;
|
@property(nonatomic, readonly) MWMRoutePoint* pIntermediate;
|
||||||
|
@property(nonatomic, readonly) MWMRoutePoint* pFinish;
|
||||||
@property(nonatomic, readonly) MWMRouterType type;
|
@property(nonatomic, readonly) MWMRouterType type;
|
||||||
|
|
||||||
- (nullable instancetype)init:(NSURL*)url;
|
- (nullable instancetype)init:(NSURL*)url;
|
||||||
|
|||||||
@@ -11,11 +11,29 @@
|
|||||||
auto const parsedData = GetFramework().GetParsedRoutingData();
|
auto const parsedData = GetFramework().GetParsedRoutingData();
|
||||||
auto const points = parsedData.m_points;
|
auto const points = parsedData.m_points;
|
||||||
|
|
||||||
if (points.size() == 2) {
|
for (auto point: points) {
|
||||||
_p1 = [[MWMRoutePoint alloc] initWithURLSchemeRoutePoint:points.front()
|
if (point.m_type == RouteMarkType::Start) {
|
||||||
|
_pStart = [[MWMRoutePoint alloc] initWithURLSchemeRoutePoint:point
|
||||||
|
type:MWMRoutePointTypeStart
|
||||||
|
intermediateIndex:0];
|
||||||
|
} else if (point.m_type == RouteMarkType::Finish) {
|
||||||
|
_pFinish = [[MWMRoutePoint alloc] initWithURLSchemeRoutePoint:point
|
||||||
|
type:MWMRoutePointTypeFinish
|
||||||
|
intermediateIndex:0];
|
||||||
|
} else if (point.m_type == RouteMarkType::Intermediate) {
|
||||||
|
_pIntermediate = [[MWMRoutePoint alloc] initWithURLSchemeRoutePoint:point
|
||||||
|
type:MWMRoutePointTypeIntermediate
|
||||||
|
intermediateIndex:0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_pStart && _pFinish) {
|
||||||
|
_type = routerType(parsedData.m_type);
|
||||||
|
} else if (points.size() == 2) {
|
||||||
|
_pStart = [[MWMRoutePoint alloc] initWithURLSchemeRoutePoint:points.front()
|
||||||
type:MWMRoutePointTypeStart
|
type:MWMRoutePointTypeStart
|
||||||
intermediateIndex:0];
|
intermediateIndex:0];
|
||||||
_p2 = [[MWMRoutePoint alloc] initWithURLSchemeRoutePoint:points.back()
|
_pFinish = [[MWMRoutePoint alloc] initWithURLSchemeRoutePoint:points.back()
|
||||||
type:MWMRoutePointTypeFinish
|
type:MWMRoutePointTypeFinish
|
||||||
intermediateIndex:0];
|
intermediateIndex:0];
|
||||||
_type = routerType(parsedData.m_type);
|
_type = routerType(parsedData.m_type);
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ typedef void (^MWMImageHeightBlock)(UIImage *, NSString *, NSString *);
|
|||||||
+ (void)buildToPoint:(MWMRoutePoint *)finish bestRouter:(BOOL)bestRouter;
|
+ (void)buildToPoint:(MWMRoutePoint *)finish bestRouter:(BOOL)bestRouter;
|
||||||
+ (void)buildApiRouteWithType:(MWMRouterType)type
|
+ (void)buildApiRouteWithType:(MWMRouterType)type
|
||||||
startPoint:(MWMRoutePoint *)startPoint
|
startPoint:(MWMRoutePoint *)startPoint
|
||||||
|
intermediatePoint:(MWMRoutePoint *)intermediatePoint
|
||||||
finishPoint:(MWMRoutePoint *)finishPoint;
|
finishPoint:(MWMRoutePoint *)finishPoint;
|
||||||
+ (void)rebuildWithBestRouter:(BOOL)bestRouter;
|
+ (void)rebuildWithBestRouter:(BOOL)bestRouter;
|
||||||
|
|
||||||
|
|||||||
@@ -255,6 +255,7 @@ char const *kRenderAltitudeImagesQueueLabel = "mapsme.mwmrouter.renderAltitudeIm
|
|||||||
|
|
||||||
+ (void)buildApiRouteWithType:(MWMRouterType)type
|
+ (void)buildApiRouteWithType:(MWMRouterType)type
|
||||||
startPoint:(MWMRoutePoint *)startPoint
|
startPoint:(MWMRoutePoint *)startPoint
|
||||||
|
intermediatePoint:(MWMRoutePoint *)intermediatePoint
|
||||||
finishPoint:(MWMRoutePoint *)finishPoint {
|
finishPoint:(MWMRoutePoint *)finishPoint {
|
||||||
if (!startPoint || !finishPoint)
|
if (!startPoint || !finishPoint)
|
||||||
return;
|
return;
|
||||||
@@ -264,6 +265,9 @@ char const *kRenderAltitudeImagesQueueLabel = "mapsme.mwmrouter.renderAltitudeIm
|
|||||||
auto router = [MWMRouter router];
|
auto router = [MWMRouter router];
|
||||||
router.isAPICall = YES;
|
router.isAPICall = YES;
|
||||||
[self addPoint:startPoint];
|
[self addPoint:startPoint];
|
||||||
|
if (intermediatePoint) {
|
||||||
|
[self addPoint:intermediatePoint];
|
||||||
|
}
|
||||||
[self addPoint:finishPoint];
|
[self addPoint:finishPoint];
|
||||||
router.isAPICall = NO;
|
router.isAPICall = NO;
|
||||||
|
|
||||||
|
|||||||
@@ -585,6 +585,13 @@ public:
|
|||||||
return m_parsedMapApi.SetUrlAndParse(url);
|
return m_parsedMapApi.SetUrlAndParse(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(OMIM_OS_MAC) || defined(OMIM_OS_IPHONE)
|
||||||
|
url_scheme::ParsedMapApi::UrlType ParseGeoNav(std::string const & raw, Framework & fm)
|
||||||
|
{
|
||||||
|
return m_parsedMapApi.ParseGeoNav(raw, fm);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
struct ParsedRoutingData
|
struct ParsedRoutingData
|
||||||
{
|
{
|
||||||
ParsedRoutingData(std::vector<url_scheme::RoutePoint> const & points, routing::RouterType type)
|
ParsedRoutingData(std::vector<url_scheme::RoutePoint> const & points, routing::RouterType type)
|
||||||
|
|||||||
Reference in New Issue
Block a user