git.iko.soy/parseable-macos
on master help sign in
Suppress spurious 'Network error: cancelled' when switching datasets (#44)
commitcc502cfb996c385acb8b3ae2d449226d240b692e authoriko <mail@iko.soy> dateMon 16 Feb 2026, 02:17 (8 months ago) parentce7a5dc
3 files changed+6−3
ParseableViewer/Services/ParseableClient.swift+2 ParseableViewer/ViewModels/LiveTailViewModel.swift+1 ParseableViewer/ViewModels/QueryViewModel.swift+3−3
ParseableViewer/Services/ParseableClient.swift+2
@@ -51,6 +51,8 @@ enum ParseableError: LocalizedError {
5151 return "Connection timed out. The server may be unreachable."
5252 case NSURLErrorSecureConnectionFailed, NSURLErrorServerCertificateUntrusted:
5353 return "SSL/TLS error. The server certificate may be invalid or untrusted."
54+ case NSURLErrorCancelled:
55+ return "Request cancelled"
5456 default:
5557 return "Network error: \(error.localizedDescription)"
5658 }
ParseableViewer/ViewModels/LiveTailViewModel.swift+1
@@ -342,6 +342,7 @@ final class LiveTailViewModel {
342342 errorMessage = nil
343343 consecutiveErrors = 0
344344 } catch {
345+ guard !Task.isCancelled else { return }
345346 consecutiveErrors += 1
346347 if consecutiveErrors >= Self.maxConsecutiveErrors {
347348 errorMessage = "\(ParseableError.userFriendlyMessage(for: error)) — stopped after \(consecutiveErrors) consecutive failures"
ParseableViewer/ViewModels/QueryViewModel.swift+3−3
@@ -341,10 +341,10 @@ final class QueryViewModel {
341341 let entry = QueryHistoryEntry(sql: sql, resultCount: resultCount, duration: queryDuration ?? 0)
342342 addToHistory(entry)
343343 } catch is CancellationError {
344− errorMessage = "Query cancelled"
345− results = []
346− columns = []
344+ // Silently ignore — cancelQuery() or a new executeQuery() handles state
345+ return
347346 } catch {
347+ guard !Task.isCancelled else { return }
348348 errorMessage = ParseableError.userFriendlyMessage(for: error)
349349 if let serverError = error as? ParseableError,
350350 case .serverError(_, let msg) = serverError,