diff --git a/Sources/Firelink/DownloadController.swift b/Sources/Firelink/DownloadController.swift index 7e4c32b..4724401 100644 --- a/Sources/Firelink/DownloadController.swift +++ b/Sources/Firelink/DownloadController.swift @@ -31,6 +31,7 @@ final class DownloadController: ObservableObject { private var pendingNotifications: [(title: String, body: String)] = [] private var notificationDebounceTask: Task? private var lastProgressUpdateTimes: [UUID: Date] = [:] + private var speedUnknownSince: [UUID: Date] = [:] init(settings: AppSettings) { self.settings = settings @@ -557,6 +558,17 @@ final class DownloadController: ObservableObject { let isUnknown = progress.speedText.lowercased() == "unknown" || progress.speedText == "-" if !isUnknown || $0.speedText == "-" || $0.speedText.lowercased() == "unknown" { $0.speedText = progress.speedText + self?.speedUnknownSince[item.id] = nil + } else { + if self?.speedUnknownSince[item.id] == nil { + self?.speedUnknownSince[item.id] = Date() + } + if let since = self?.speedUnknownSince[item.id], Date().timeIntervalSince(since) > 3.0 { + $0.speedText = "0 KiB/s" + } + } + let isEtaUnknown = progress.etaText.lowercased() == "unknown" || progress.etaText == "-" + if !isEtaUnknown || $0.etaText == "-" || $0.etaText.lowercased() == "unknown" { $0.etaText = progress.etaText } $0.connectionCount = progress.connectionCount @@ -618,6 +630,17 @@ final class DownloadController: ObservableObject { let isUnknown = progress.speedText.lowercased() == "unknown" || progress.speedText == "-" if !isUnknown || $0.speedText == "-" || $0.speedText.lowercased() == "unknown" { $0.speedText = progress.speedText + self?.speedUnknownSince[item.id] = nil + } else { + if self?.speedUnknownSince[item.id] == nil { + self?.speedUnknownSince[item.id] = Date() + } + if let since = self?.speedUnknownSince[item.id], Date().timeIntervalSince(since) > 3.0 { + $0.speedText = "0 KiB/s" + } + } + let isEtaUnknown = progress.etaText.lowercased() == "unknown" || progress.etaText == "-" + if !isEtaUnknown || $0.etaText == "-" || $0.etaText.lowercased() == "unknown" { $0.etaText = progress.etaText } $0.connectionCount = progress.connectionCount diff --git a/Sources/Firelink/Models.swift b/Sources/Firelink/Models.swift index 41386c5..219b3e5 100644 --- a/Sources/Firelink/Models.swift +++ b/Sources/Firelink/Models.swift @@ -199,11 +199,13 @@ struct DownloadItem: Identifiable, Codable, Equatable, Sendable { } var displaySpeedText: String { - status == .downloading ? speedText : "-" + if status == .completed || status == .paused || status == .queued || status == .canceled { return "-" } + return speedText } var displayETAText: String { - status == .downloading ? etaText : "-" + if status == .completed || status == .queued || status == .canceled { return "-" } + return etaText } var destinationPath: String {