TeraTodayRelayPresentation.swift (1370B)
1 import Foundation 2 3 extension TeraTodayPresentation { 4 var relayMessages: [String] { 5 guard let receipt = relayReceipt else { return [] } 6 let message: String 7 switch receipt.relayState { 8 case .complete: return [] 9 case .partial: message = "Refresh incomplete. Showing available posts." 10 case .offline: message = "Network refresh unavailable. Showing saved posts." 11 } 12 return [message] + receipt.targets.enumerated().map { index, target in 13 "Relay \(index + 1): \(target.statusMessage)" 14 } 15 } 16 } 17 18 extension TeraTodayTargetSyncReceipt { 19 var statusMessage: String { 20 guard let summary, summary.pagesObserved > 0 else { return "Response unconfirmed." } 21 if summary.missingOutcomePages > 0 { 22 return "Some responses unconfirmed." 23 } 24 if let state = summary.lastIncomplete { 25 switch state { 26 case .complete: return "Response unconfirmed." 27 case .partial: return "Some requested posts were unavailable." 28 case .unavailable: return "A response was unavailable." 29 case .failedRetryable: return "A response failed. Try again." 30 case .failedTerminal: return "A response failed." 31 case .cancelled: return "A request was cancelled." 32 } 33 } 34 guard summary.incompletePages == 0, finalState == .complete else { return "Response unconfirmed." } 35 return "Returned pages finished." 36 } 37 }