import CodexBarCore @MainActorextension StatusItemController { func runCursorLoginFlow() async { let cursorRunner = CursorLoginRunner(browserDetection: self.store.browserDetection) let phaseHandler: @MainActor (CursorLoginRunner.Phase) -> Void = { [weak self] phase in switch phase { case .loading, .waitingLogin: self?.loginPhase = .waitingBrowser case .success, .failed: self?.loginPhase = .idle } } let result = await cursorRunner.run(onPhaseChange: phaseHandler) guard !Task.isCancelled else { return } self.loginPhase = .idle self.presentCursorLoginResult(result) let outcome = self.describe(result.outcome) self.loginLogger.info("Cursor login", metadata: ["outcome": outcome]) if case .success = result.outcome { self.postLoginNotification(for: .cursor) } }}
import CodexBarCore
@MainActor
extension StatusItemController {
func runCursorLoginFlow() async {
let cursorRunner = CursorLoginRunner(browserDetection: self.store.browserDetection)
let phaseHandler: @MainActor (CursorLoginRunner.Phase) -> Void = { [weak self] phase in
switch phase {
case .loading, .waitingLogin:
self?.loginPhase = .waitingBrowser
case .success, .failed:
self?.loginPhase = .idle
}
}
let result = await cursorRunner.run(onPhaseChange: phaseHandler)
guard !Task.isCancelled else { return }
self.loginPhase = .idle
self.presentCursorLoginResult(result)
let outcome = self.describe(result.outcome)
self.loginLogger.info("Cursor login", metadata: ["outcome": outcome])
if case .success = result.outcome {
self.postLoginNotification(for: .cursor)
}
}
}