Create BearWave macOS radio-first app
This commit is contained in:
58
Sources/BearWaveCore/Models/PlaybackError.swift
Normal file
58
Sources/BearWaveCore/Models/PlaybackError.swift
Normal file
@@ -0,0 +1,58 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user