mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-06 19:32:58 +08:00
* fix(ios): defer QR pairing after scanner dismissal * fix(ios): process QR pairing after scanner dismissal * fix(ios): harden QR scanner handoff * fix(ios): give QR scanner dismissal more time * fix(ios): keep onboarding open for QR trust prompt * fix(ios): keep QR trust prompt owned by onboarding * fix(ios): recover operator pairing after QR bootstrap * fix(ios): cancel stale QR scanner handoffs Co-authored-by: PollyBot13 <pollybot13@gmail.com> * fix(ios): defer QR setup until onboarding closes * fix(ios): keep QR setup links with visible settings * fix(ios): consume setup links during onboarding * fix(ios): handle setup links during onboarding launch * fix(ios): route setup links through active onboarding * fix(ios): harden QR gateway handoff * fix(ios): cancel superseded gateway attempts * fix(ios): serialize scanner result delivery * fix(ios): prevent stale gateway reconnects * fix(ios): serialize gateway target handoff * fix(ios): disable stale gateway relaunch route * fix(ios): await staged bootstrap reset * test(ios): bound gateway reset handoff * fix(ios): preserve explicit gateway handoff * fix(ios): harden gateway lifecycle ownership * chore(ios): sync native i18n inventory * test(ios): align gateway ownership assertions * refactor(ios): remove superseded gateway helpers * fix(ios): keep gateway auth route scoped * fix(ios): restore gateway target review state * fix(protocol): refresh Swift plugin approval model * test(ios): isolate state directory overrides * fix(ios): preserve watch alerts across gateway switches * fix(ios): bind deferred work to gateway ownership * docs(changelog): credit iOS gateway handoff fix * chore(i18n): sync native app inventory * test(ios): remove unused Watch approval hooks --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
27 lines
999 B
Swift
27 lines
999 B
Swift
enum WatchDeferredPayloadOrdering {
|
|
static func isExpired(expiresAtMs: Int?, nowMs: Int) -> Bool {
|
|
expiresAtMs.map { $0 <= nowMs } == true
|
|
}
|
|
|
|
static func isNewerThanSnapshot(payloadSentAtMs: Int?, snapshotSentAtMs: Int?) -> Bool {
|
|
guard let payloadSentAtMs, let snapshotSentAtMs else { return true }
|
|
return payloadSentAtMs > snapshotSentAtMs
|
|
}
|
|
|
|
static func isAtOrBeforeSnapshot(payloadSentAtMs: Int?, snapshotSentAtMs: Int?) -> Bool {
|
|
guard let snapshotSentAtMs else { return false }
|
|
return payloadSentAtMs.map { $0 <= snapshotSentAtMs } ?? true
|
|
}
|
|
|
|
static func indicesOldestFirst(for timestamps: [Int?]) -> [Int] {
|
|
timestamps.indices.sorted { lhs, rhs in
|
|
let lhsTimestamp = timestamps[lhs] ?? .min
|
|
let rhsTimestamp = timestamps[rhs] ?? .min
|
|
if lhsTimestamp != rhsTimestamp {
|
|
return lhsTimestamp < rhsTimestamp
|
|
}
|
|
return lhs < rhs
|
|
}
|
|
}
|
|
}
|