mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-11 21:55:49 +08:00
同时收敛启动与运维脚本默认行为(含 wiki worker)、更新 Admin 可观测性与相关测试,降低首轮时延并提高运行稳定性。 Made-with: Cursor
44 lines
1.3 KiB
Swift
44 lines
1.3 KiB
Swift
import CoreLocation
|
|
import Foundation
|
|
|
|
public enum LocationCurrentRequest {
|
|
public typealias TimeoutRunner = @Sendable (
|
|
_ timeoutMs: Int,
|
|
_ operation: @escaping @Sendable () async throws -> CLLocation
|
|
) async throws -> CLLocation
|
|
|
|
@MainActor
|
|
public static func resolve(
|
|
manager: CLLocationManager,
|
|
desiredAccuracy: OpenClawLocationAccuracy,
|
|
maxAgeMs: Int?,
|
|
timeoutMs: Int?,
|
|
request: @escaping @Sendable () async throws -> CLLocation,
|
|
withTimeout: TimeoutRunner) async throws -> CLLocation
|
|
{
|
|
let now = Date()
|
|
if let maxAgeMs,
|
|
let cached = manager.location,
|
|
now.timeIntervalSince(cached.timestamp) * 1000 <= Double(maxAgeMs)
|
|
{
|
|
return cached
|
|
}
|
|
|
|
manager.desiredAccuracy = self.accuracyValue(desiredAccuracy)
|
|
let timeout = max(0, timeoutMs ?? 10000)
|
|
return try await withTimeout(timeout) {
|
|
try await request()
|
|
}
|
|
}
|
|
|
|
public static func accuracyValue(_ accuracy: OpenClawLocationAccuracy) -> CLLocationAccuracy {
|
|
switch accuracy {
|
|
case .coarse:
|
|
kCLLocationAccuracyKilometer
|
|
case .balanced:
|
|
kCLLocationAccuracyHundredMeters
|
|
case .precise:
|
|
kCLLocationAccuracyBest
|
|
}
|
|
}
|
|
}
|