Files
bearwave-mac/Sources/BearWaveCore/Models/PlaybackError.swift
2026-06-25 09:21:42 +02:00

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
}
}
}