mirror of
https://github.com/nimbold/Firelink.git
synced 2026-08-05 17:08:26 +00:00
feat: enhance speed and ETA display logic during pause and drop
- Keep the ETA visible even when the download is paused so the user knows how much time is left. - When the connection drops, show the last known speed for 3 seconds. If the connection isn't restored, show '0 KiB/s' instead of 'Unknown'. - Clear speed and ETA fields when a download is completed, queued, or canceled.
This commit is contained in:
@@ -31,6 +31,7 @@ final class DownloadController: ObservableObject {
|
||||
private var pendingNotifications: [(title: String, body: String)] = []
|
||||
private var notificationDebounceTask: Task<Void, Never>?
|
||||
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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user