feat: show media format section with loading state while fetching

This commit is contained in:
NimBold
2026-06-10 01:53:58 +03:30
parent 3b4402def3
commit f93f0daef5
+22 -2
View File
@@ -138,7 +138,7 @@ struct AddDownloadsView: View {
private var optionsSection: some View { private var optionsSection: some View {
Group { Group {
if let firstMedia = pendingDownloads.first(where: { $0.isMedia }), !firstMedia.mediaOptions.isEmpty { if let firstMedia = pendingDownloads.first(where: { $0.isMedia }) {
mediaFormatSection(for: firstMedia) mediaFormatSection(for: firstMedia)
} }
@@ -313,7 +313,27 @@ struct AddDownloadsView: View {
} }
} }
@ViewBuilder
private func mediaFormatSection(for firstMedia: PendingDownload) -> some View { private func mediaFormatSection(for firstMedia: PendingDownload) -> some View {
Section {
if firstMedia.mediaOptions.isEmpty {
HStack(spacing: 8) {
if case .loading = firstMedia.state {
ProgressView().controlSize(.small)
Text("Fetching media options...")
.foregroundStyle(.secondary)
} else if case .failed(let error) = firstMedia.state {
Image(systemName: "exclamationmark.triangle.fill").foregroundStyle(.red)
Text("Failed to load options.")
.foregroundStyle(.secondary)
} else {
ProgressView().controlSize(.small)
Text("Waiting for metadata...")
.foregroundStyle(.secondary)
}
}
.padding(.vertical, 4)
} else {
let currentOption = firstMedia.selectedMediaOption ?? firstMedia.mediaOptions.first! let currentOption = firstMedia.selectedMediaOption ?? firstMedia.mediaOptions.first!
let availableTypes = Array(Set(firstMedia.mediaOptions.map(\.mediaType))).sorted(by: { $0.rawValue > $1.rawValue }) let availableTypes = Array(Set(firstMedia.mediaOptions.map(\.mediaType))).sorted(by: { $0.rawValue > $1.rawValue })
let optionsForType = firstMedia.mediaOptions.filter { $0.mediaType == currentOption.mediaType } let optionsForType = firstMedia.mediaOptions.filter { $0.mediaType == currentOption.mediaType }
@@ -326,7 +346,6 @@ struct AddDownloadsView: View {
return $0 > $1 return $0 > $1
}) })
return Section {
Picker("Type", selection: Binding( Picker("Type", selection: Binding(
get: { currentOption.mediaType }, get: { currentOption.mediaType },
set: { newType in set: { newType in
@@ -376,6 +395,7 @@ struct AddDownloadsView: View {
} }
.disabled(true) .disabled(true)
} }
} // End of else block
} header: { } header: {
Text("Media Format").foregroundStyle(.blue) Text("Media Format").foregroundStyle(.blue)
} }