Skip to content

Commit

Permalink
Restored custom Quick Look previews
Browse files Browse the repository at this point in the history
  • Loading branch information
1ec5 committed Dec 10, 2019
1 parent 373a6e0 commit 9600677
Show file tree
Hide file tree
Showing 7 changed files with 112 additions and 1 deletion.
10 changes: 10 additions & 0 deletions MapboxDirections.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,10 @@
DAD06E35239F0B19001A917D /* DirectionsErrorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAD06E34239F0B19001A917D /* DirectionsErrorTests.swift */; };
DAD06E36239F0B19001A917D /* DirectionsErrorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAD06E34239F0B19001A917D /* DirectionsErrorTests.swift */; };
DAD06E37239F0B19001A917D /* DirectionsErrorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAD06E34239F0B19001A917D /* DirectionsErrorTests.swift */; };
DAD06E3C23A00A01001A917D /* QuickLook.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAD06E3823A008EB001A917D /* QuickLook.swift */; };
DAD06E3D23A00A01001A917D /* QuickLook.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAD06E3823A008EB001A917D /* QuickLook.swift */; };
DAD06E3E23A00A02001A917D /* QuickLook.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAD06E3823A008EB001A917D /* QuickLook.swift */; };
DAD06E3F23A00A02001A917D /* QuickLook.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAD06E3823A008EB001A917D /* QuickLook.swift */; };
DADD27B81E5AAAD800D31FAD /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DADD27B71E5AAAD800D31FAD /* AppDelegate.swift */; };
DADD27BA1E5AAAD800D31FAD /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DADD27B91E5AAAD800D31FAD /* ViewController.swift */; };
DADD27BF1E5AAAD800D31FAD /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DADD27BE1E5AAAD800D31FAD /* Assets.xcassets */; };
Expand Down Expand Up @@ -390,6 +394,7 @@
DAC05F1B1CFC1E5300FA0071 /* v5_driving_dc_polyline.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = v5_driving_dc_polyline.json; sourceTree = "<group>"; };
DACCFCA82225359500110FC9 /* v5_driving_oldenburg_polyline.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = v5_driving_oldenburg_polyline.json; sourceTree = "<group>"; };
DAD06E34239F0B19001A917D /* DirectionsErrorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DirectionsErrorTests.swift; sourceTree = "<group>"; };
DAD06E3823A008EB001A917D /* QuickLook.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuickLook.swift; sourceTree = "<group>"; };
DADD27B51E5AAAD800D31FAD /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; };
DADD27B71E5AAAD800D31FAD /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
DADD27B91E5AAAD800D31FAD /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -598,6 +603,7 @@
DAA76D671DD127CB0015EC78 /* LaneIndication.swift */,
DA6C9D8A1CAE442B00094FBC /* MapboxDirections.h */,
35828C9D217A003F00ED546E /* OfflineDirections.swift */,
DAD06E3823A008EB001A917D /* QuickLook.swift */,
C59426061F1EA6C400C8E59C /* RoadClasses.swift */,
DAC05F171CFC075300FA0071 /* Route.swift */,
DAC05F191CFC077C00FA0071 /* RouteLeg.swift */,
Expand Down Expand Up @@ -1163,6 +1169,7 @@
C5DAACA220195AB2001F9261 /* MatchOptions.swift in Sources */,
DA1A10CC1D00F969009F82FA /* Waypoint.swift in Sources */,
35DBF006217DF0D90009D2AE /* CoordinateBounds.swift in Sources */,
DAD06E3D23A00A01001A917D /* QuickLook.swift in Sources */,
DA1A10CA1D00F969009F82FA /* RouteOptions.swift in Sources */,
DA1A10C81D00F969009F82FA /* Route.swift in Sources */,
431E93D023466D7500A71B44 /* Codable.swift in Sources */,
Expand Down Expand Up @@ -1231,6 +1238,7 @@
C5DAACA320195AB2001F9261 /* MatchOptions.swift in Sources */,
DA1A10F21D010247009F82FA /* Waypoint.swift in Sources */,
35DBF007217DF0D90009D2AE /* CoordinateBounds.swift in Sources */,
DAD06E3E23A00A02001A917D /* QuickLook.swift in Sources */,
DA1A10F01D010247009F82FA /* RouteOptions.swift in Sources */,
DA1A10EE1D010247009F82FA /* Route.swift in Sources */,
431E93D123466D7600A71B44 /* Codable.swift in Sources */,
Expand Down Expand Up @@ -1299,6 +1307,7 @@
C5DAACA420195AB3001F9261 /* MatchOptions.swift in Sources */,
DA1A11091D0103A3009F82FA /* Waypoint.swift in Sources */,
35DBF008217DF0D90009D2AE /* CoordinateBounds.swift in Sources */,
DAD06E3F23A00A02001A917D /* QuickLook.swift in Sources */,
DA1A11071D0103A3009F82FA /* RouteOptions.swift in Sources */,
DA1A11051D0103A3009F82FA /* Route.swift in Sources */,
431E93D223466D7700A71B44 /* Codable.swift in Sources */,
Expand Down Expand Up @@ -1342,6 +1351,7 @@
DAC05F181CFC075300FA0071 /* Route.swift in Sources */,
C59094BF203B800300EB2417 /* DirectionsOptions.swift in Sources */,
35DBF005217DF0D90009D2AE /* CoordinateBounds.swift in Sources */,
DAD06E3C23A00A01001A917D /* QuickLook.swift in Sources */,
C5434B8C200695A50069E887 /* MatchOptions.swift in Sources */,
DAA76D681DD127CB0015EC78 /* LaneIndication.swift in Sources */,
431E93CF23466D7400A71B44 /* Codable.swift in Sources */,
Expand Down
9 changes: 9 additions & 0 deletions Sources/MapboxDirections/DirectionsResult.swift
Original file line number Diff line number Diff line change
Expand Up @@ -202,3 +202,12 @@ extension DirectionsResult: CustomStringConvertible {
return legs.map { $0.name }.joined(separator: "")
}
}

extension DirectionsResult: CustomQuickLookConvertible {
func debugQuickLookObject() -> Any? {
guard let shape = shape else {
return nil
}
return debugQuickLookURL(illustrating: shape, profileIdentifier: directionsOptions.profileIdentifier)
}
}
11 changes: 10 additions & 1 deletion Sources/MapboxDirections/Extensions/Codable.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@ import Foundation
import Polyline
import struct Turf.LineString

extension LineString {
/**
Returns a string representation of the line string in [Polyline Algorithm Format](https://developers.google.com/maps/documentation/utilities/polylinealgorithm).
*/
func polylineEncodedString(precision: Double = 1e5) -> String {
return encodeCoordinates(coordinates, precision: precision)
}
}

enum PolyLineString {
case lineString(_ lineString: LineString)
case polyline(_ encodedPolyline: String, precision: Double)
Expand All @@ -12,7 +21,7 @@ enum PolyLineString {
self = .lineString(lineString)
case .polyline, .polyline6:
let precision = shapeFormat == .polyline6 ? 1e6 : 1e5
let encodedPolyline = encodeCoordinates(lineString.coordinates, precision: precision)
let encodedPolyline = lineString.polylineEncodedString(precision: precision)
self = .polyline(encodedPolyline, precision: precision)
}
}
Expand Down
51 changes: 51 additions & 0 deletions Sources/MapboxDirections/QuickLook.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import Polyline
import struct Turf.LineString

/**
A type with a customized Quick Look representation in the Xcode debugger.
*/
protocol CustomQuickLookConvertible {
/**
Returns a [Quick Look–compatible](https://developer.apple.com/library/archive/documentation/IDEs/Conceptual/CustomClassDisplay_in_QuickLook/CH02-std_objects_support/CH02-std_objects_support.html#//apple_ref/doc/uid/TP40014001-CH3-SW19) representation for display in the Xcode debugger.
*/
func debugQuickLookObject() -> Any?
}

/**
Returns a URL to an image representation of the given coordinates via the [Mapbox Static Images API](https://docs.mapbox.com/api/maps/#static-images).
*/
func debugQuickLookURL(illustrating shape: LineString, profileIdentifier: DirectionsProfileIdentifier = .automobile) -> URL? {
guard let accessToken = defaultAccessToken else {
return nil
}

let styleIdentifier: String
let identifierOfLayerAboveOverlays: String
switch profileIdentifier {
case .automobileAvoidingTraffic:
styleIdentifier = "mapbox/navigation-preview-day-v4"
identifierOfLayerAboveOverlays = "waterway-label"
case .cycling, .walking:
styleIdentifier = "mapbox/outdoors-v11"
identifierOfLayerAboveOverlays = "contour-label"
default:
styleIdentifier = "mapbox/streets-v11"
identifierOfLayerAboveOverlays = "building-number-label"
}
let styleIdentifierComponent = "/\(styleIdentifier)/static"

var allowedCharacterSet = CharacterSet.urlPathAllowed
allowedCharacterSet.remove(charactersIn: "/)")
let encodedPolyline = shape.polylineEncodedString(precision: 1e5).addingPercentEncoding(withAllowedCharacters: allowedCharacterSet)!
let overlaysComponent = "/path-10+3802DA-0.6(\(encodedPolyline))"

let path = "/styles/v1\(styleIdentifierComponent)\(overlaysComponent)/auto/680x360@2x"

var components = URLComponents()
components.queryItems = [
URLQueryItem(name: "before_layer", value: identifierOfLayerAboveOverlays),
URLQueryItem(name: "access_token", value: accessToken),
]

return URL(string: "https://api.mapbox.com\(path)?\(components.percentEncodedQuery!)")
}
11 changes: 11 additions & 0 deletions Sources/MapboxDirections/RouteLeg.swift
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import Foundation
import CoreLocation
import Polyline
import struct Turf.LineString

/**
A `RouteLeg` object defines a single leg of a route between two waypoints. If the overall route has only two waypoints, it has a single `RouteLeg` object that covers the entire route. The route leg object includes information about the leg, such as its name, distance, and expected travel time. Depending on the criteria used to calculate the route, the route leg object may also include detailed turn-by-turn instructions.
Expand Down Expand Up @@ -202,3 +203,13 @@ extension RouteLeg: CustomStringConvertible {
return name
}
}

extension RouteLeg: CustomQuickLookConvertible {
func debugQuickLookObject() -> Any? {
let coordinates = steps.reduce([], { $0 + ($1.shape?.coordinates ?? []) })
guard !coordinates.isEmpty else {
return nil
}
return debugQuickLookURL(illustrating: LineString(coordinates))
}
}
15 changes: 15 additions & 0 deletions Sources/MapboxDirections/RouteStep.swift
Original file line number Diff line number Diff line change
Expand Up @@ -707,3 +707,18 @@ extension RouteStep: Equatable {
lhs.shape == rhs.shape
}
}

extension RouteStep: CustomStringConvertible {
public var description: String {
return instructions
}
}

extension RouteStep: CustomQuickLookConvertible {
func debugQuickLookObject() -> Any? {
guard let shape = shape else {
return nil
}
return debugQuickLookURL(illustrating: shape)
}
}
6 changes: 6 additions & 0 deletions Sources/MapboxDirections/Waypoint.swift
Original file line number Diff line number Diff line change
Expand Up @@ -203,3 +203,9 @@ extension Waypoint: CustomStringConvertible {
return name ?? "<latitude: \(coordinate.latitude); longitude: \(coordinate.longitude)>"
}
}

extension Waypoint: CustomQuickLookConvertible {
func debugQuickLookObject() -> Any? {
return CLLocation(coordinate: coordinate, altitude: 0, horizontalAccuracy: coordinateAccuracy ?? -1, verticalAccuracy: -1, course: heading ?? -1, speed: -1, timestamp: Date())
}
}

0 comments on commit 9600677

Please sign in to comment.