From e8ae1cbec42576b8cc8ed472406f6b3765424565 Mon Sep 17 00:00:00 2001 From: Stepan Usatiuk Date: Mon, 20 Oct 2025 00:58:33 +0200 Subject: [PATCH] overlay fixes --- .../cardboy-companion/ContentView.swift | 5 ++ .../cardboy-companion/TimeSyncManager.swift | 59 ++++++++++--------- 2 files changed, 36 insertions(+), 28 deletions(-) diff --git a/Firmware/cardboy-companion/cardboy-companion/cardboy-companion/ContentView.swift b/Firmware/cardboy-companion/cardboy-companion/cardboy-companion/ContentView.swift index 7eeeb8b..ec7a727 100644 --- a/Firmware/cardboy-companion/cardboy-companion/cardboy-companion/ContentView.swift +++ b/Firmware/cardboy-companion/cardboy-companion/cardboy-companion/ContentView.swift @@ -149,6 +149,11 @@ private struct FileManagerTabView: View { manager.changeDirectory(to: target) } } + .onChange(of: manager.connectionState) { newState in + if newState == .ready, !manager.isFileBusy { + manager.refreshDirectory() + } + } } } diff --git a/Firmware/cardboy-companion/cardboy-companion/cardboy-companion/TimeSyncManager.swift b/Firmware/cardboy-companion/cardboy-companion/cardboy-companion/TimeSyncManager.swift index 8d7e43b..8389e6b 100644 --- a/Firmware/cardboy-companion/cardboy-companion/cardboy-companion/TimeSyncManager.swift +++ b/Firmware/cardboy-companion/cardboy-companion/cardboy-companion/TimeSyncManager.swift @@ -204,6 +204,10 @@ final class TimeSyncManager: NSObject, ObservableObject { // MARK: - File operations exposed to UI func refreshDirectory() { + if isFileBusy { + pendingDirectoryRequest = (path: currentDirectory, operationID: pendingDirectoryRequest?.operationID ?? UUID()) + return + } requestDirectory(path: currentDirectory) } @@ -679,32 +683,27 @@ final class TimeSyncManager: NSObject, ObservableObject { private func requestDirectory(path: String) { let normalizedPath = normalizedPath(path) - guard let commandCharacteristic = fileCommandCharacteristic else { + if let commandCharacteristic = fileCommandCharacteristic { + let opID: UUID + if let pending = pendingDirectoryRequest, pending.path == normalizedPath { + opID = pending.operationID + pendingDirectoryRequest = nil + } else { + opID = UUID() + } + startDirectoryRequest(path: normalizedPath, operationID: opID, characteristic: commandCharacteristic) + } else { let opID = pendingDirectoryRequest?.operationID ?? UUID() pendingDirectoryRequest = (path: normalizedPath, operationID: opID) - pendingListPath = normalizedPath - pendingListData.removeAll() - isFileBusy = true - pendingListOperationID = opID - updateOperation(id: opID, title: "Loading", message: normalizedPath, progress: nil, indeterminate: true) - return - } - let opID: UUID - if let pending = pendingDirectoryRequest, pending.path == normalizedPath { - opID = pending.operationID - pendingDirectoryRequest = nil - } else { - opID = UUID() + if connectionState == .ready { + pendingListPath = normalizedPath + pendingListData.removeAll() + isFileBusy = true + pendingListOperationID = opID + updateOperation(id: opID, title: "Loading", message: normalizedPath, progress: nil, indeterminate: true) + } } - - pendingListPath = normalizedPath - pendingListData.removeAll() - isFileBusy = true - pendingListOperationID = opID - updateOperation(id: opID, title: "Loading", message: normalizedPath, progress: nil, indeterminate: true) - let payload = payloadFor(path: normalizedPath) - enqueueFileCommand(.listDirectory, payload: payload, characteristic: commandCharacteristic) } @discardableResult @@ -713,14 +712,18 @@ final class TimeSyncManager: NSObject, ObservableObject { let commandCharacteristic = fileCommandCharacteristic else { return false } pendingDirectoryRequest = nil - pendingListPath = pending.path + startDirectoryRequest(path: pending.path, operationID: pending.operationID, characteristic: commandCharacteristic) + return true + } + + private func startDirectoryRequest(path: String, operationID: UUID, characteristic: CBCharacteristic) { + pendingListPath = path pendingListData.removeAll() isFileBusy = true - pendingListOperationID = pending.operationID - updateOperation(id: pending.operationID, title: "Loading", message: pending.path, progress: nil, indeterminate: true) - let payload = payloadFor(path: pending.path) - enqueueFileCommand(.listDirectory, payload: payload, characteristic: commandCharacteristic) - return true + pendingListOperationID = operationID + updateOperation(id: operationID, title: "Loading", message: path, progress: nil, indeterminate: true) + let payload = payloadFor(path: path) + enqueueFileCommand(.listDirectory, payload: payload, characteristic: characteristic) } }