Skip to content

Commit

Permalink
Remove warnings
Browse files Browse the repository at this point in the history
  • Loading branch information
gre4ixin committed Nov 2, 2022
1 parent 49fe1cc commit 485a6e1
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 15 deletions.
2 changes: 1 addition & 1 deletion AsyncLocationKit.podspec
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Pod::Spec.new do |s|
s.name = 'AsyncLocationKit'
s.module_name = 'AsyncLocationKit'
s.version = '1.5.5'
s.version = '1.5.6'
s.summary = '📍async/await CoreLocation'
s.homepage = 'https://github.com/AsyncSwift/AsyncLocationKit'
s.license = 'MIT'
Expand Down
65 changes: 51 additions & 14 deletions Sources/AsyncLocationKit/AsyncLocationManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,7 @@ public final class AsyncLocationManager {
@available(*, deprecated, message: "Use new function requestPermission(with:)")
public func requestAuthorizationWhenInUse() async -> CLAuthorizationStatus {
let authorizationPerformer = RequestAuthorizationPerformer()
return await withTaskCancellationHandler {
proxyDelegate.cancel(for: authorizationPerformer.uniqueIdentifier)
} operation: {
return await withTaskCancellationHandler(operation: {
await withCheckedContinuation { continuation in
let authorizationStatus = getAuthorizationStatus()
if authorizationStatus != .notDetermined {
Expand All @@ -86,16 +84,16 @@ public final class AsyncLocationManager {
locationManager.requestWhenInUseAuthorization()
}
}
}
}, onCancel: {
proxyDelegate.cancel(for: authorizationPerformer.uniqueIdentifier)
})
}

#if !APPCLIP
@available(*, deprecated, message: "Use new function requestPermission(with:)")
public func requestAuthorizationAlways() async -> CLAuthorizationStatus {
let authorizationPerformer = RequestAuthorizationPerformer()
return await withTaskCancellationHandler {
proxyDelegate.cancel(for: authorizationPerformer.uniqueIdentifier)
} operation: {
return await withTaskCancellationHandler(operation: {
await withCheckedContinuation { continuation in
if #available(iOS 14, *), locationManager.authorizationStatus != .notDetermined {
continuation.resume(with: .success(locationManager.authorizationStatus))
Expand All @@ -105,20 +103,22 @@ public final class AsyncLocationManager {
locationManager.requestAlwaysAuthorization()
}
}
}
}, onCancel: {
proxyDelegate.cancel(for: authorizationPerformer.uniqueIdentifier)
})
}
#endif

public func requestPermission(with permissionType: LocationPermission) async -> CLAuthorizationStatus {
switch permissionType {
case .always:
#if APPCLIP
return await requestAuthorizationWhenInUse()
return await locationPermissionWhenInUse()
#else
return await requestAuthorizationAlways()
return await locationPermissionAlways()
#endif
case .whenInUsage:
return await requestAuthorizationWhenInUse()
return await locationPermissionWhenInUse()
}
}

Expand All @@ -141,14 +141,14 @@ public final class AsyncLocationManager {

public func requestLocation() async throws -> LocationUpdateEvent? {
let performer = SingleLocationUpdatePerformer()
return try await withTaskCancellationHandler(handler: {
proxyDelegate.cancel(for: performer.uniqueIdentifier)
}, operation: {
return try await withTaskCancellationHandler(operation: {
return try await withCheckedThrowingContinuation({ continuation in
performer.linkContinuation(continuation)
self.proxyDelegate.addPerformer(performer)
self.locationManager.requestLocation()
})
}, onCancel: {
proxyDelegate.cancel(for: performer.uniqueIdentifier)
})
}

Expand Down Expand Up @@ -228,3 +228,40 @@ public final class AsyncLocationManager {
locationManager.stopRangingBeacons(satisfying: satisfying)
}
}

extension AsyncLocationManager {
private func locationPermissionWhenInUse() async -> CLAuthorizationStatus {
let authorizationPerformer = RequestAuthorizationPerformer()
return await withTaskCancellationHandler(operation: {
await withCheckedContinuation { continuation in
let authorizationStatus = getAuthorizationStatus()
if authorizationStatus != .notDetermined {
continuation.resume(with: .success(authorizationStatus))
} else {
authorizationPerformer.linkContinuation(continuation)
proxyDelegate.addPerformer(authorizationPerformer)
locationManager.requestWhenInUseAuthorization()
}
}
}, onCancel: {
proxyDelegate.cancel(for: authorizationPerformer.uniqueIdentifier)
})
}

private func locationPermissionAlways() async -> CLAuthorizationStatus {
let authorizationPerformer = RequestAuthorizationPerformer()
return await withTaskCancellationHandler(operation: {
await withCheckedContinuation { continuation in
if #available(iOS 14, *), locationManager.authorizationStatus != .notDetermined {
continuation.resume(with: .success(locationManager.authorizationStatus))
} else {
authorizationPerformer.linkContinuation(continuation)
proxyDelegate.addPerformer(authorizationPerformer)
locationManager.requestAlwaysAuthorization()
}
}
}, onCancel: {
proxyDelegate.cancel(for: authorizationPerformer.uniqueIdentifier)
})
}
}

0 comments on commit 485a6e1

Please sign in to comment.