Files
openclaw-openclaw/apps/ios/WatchApp/Sources/WatchDeferredPayloadOrdering.swift
PollyBot13 a320f775f0 fix(ios): defer QR pairing after scanner dismissal (#99572)
* 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>
2026-07-05 12:31:53 -07:00

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
}
}
}