59 lines
2.1 KiB
Swift
59 lines
2.1 KiB
Swift
import Foundation
|
|
|
|
enum PlaybackError: Equatable, Sendable {
|
|
case connectionTimeout
|
|
case stationOffline
|
|
case httpError(Int)
|
|
case codecNotSupported
|
|
case streamInterrupted
|
|
case dnsResolutionFailed
|
|
case unknown(String)
|
|
|
|
var title: String {
|
|
switch self {
|
|
case .connectionTimeout:
|
|
String(localized: "Connection timed out")
|
|
case .stationOffline:
|
|
String(localized: "Station is offline")
|
|
case .httpError:
|
|
String(localized: "Server error")
|
|
case .codecNotSupported:
|
|
String(localized: "Codec not supported")
|
|
case .streamInterrupted:
|
|
String(localized: "Stream interrupted")
|
|
case .dnsResolutionFailed:
|
|
String(localized: "Could not resolve host")
|
|
case .unknown:
|
|
String(localized: "Playback failed")
|
|
}
|
|
}
|
|
|
|
var detail: String {
|
|
switch self {
|
|
case .connectionTimeout:
|
|
String(localized: "The station did not respond in time. It may be overloaded or temporarily unavailable.")
|
|
case .stationOffline:
|
|
String(localized: "The stream URL is no longer available. The station may have shut down or changed its address.")
|
|
case let .httpError(code):
|
|
String(localized: "The server responded with HTTP \(code). The stream may be temporarily unavailable.")
|
|
case .codecNotSupported:
|
|
String(localized: "macOS cannot decode this stream format. Try a different station.")
|
|
case .streamInterrupted:
|
|
String(localized: "The connection was lost. The station may have ended the broadcast.")
|
|
case .dnsResolutionFailed:
|
|
String(localized: "The stream server address could not be found. Check your internet connection.")
|
|
case let .unknown(message):
|
|
message
|
|
}
|
|
}
|
|
|
|
var isRetryable: Bool {
|
|
switch self {
|
|
case .connectionTimeout, .stationOffline, .httpError, .streamInterrupted:
|
|
true
|
|
case .codecNotSupported, .dnsResolutionFailed, .unknown:
|
|
false
|
|
}
|
|
}
|
|
}
|