| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import SwiftUI
- /// Compact track row for track lists.
- struct TrackRow: View {
- let track: Track
- var uploadingFileName: String? = nil
- var body: some View {
- HStack(spacing: 8) {
- // Album art placeholder / format badge
- ZStack {
- RoundedRectangle(cornerRadius: 4)
- .fill(trackColor.opacity(0.15))
- .frame(width: 32, height: 32)
- Image(systemName: "music.note")
- .font(.caption)
- .foregroundStyle(trackColor)
- }
- VStack(alignment: .leading, spacing: 1) {
- HStack(spacing: 4) {
- Text(track.title)
- .lineLimit(1)
- .font(.body)
- if let uploadingFileName, track.fileURL.lastPathComponent == uploadingFileName {
- Image(systemName: "arrow.up.circle.fill")
- .font(.system(size: 11))
- .foregroundStyle(.orange)
- } else if track.isCloud {
- if track.downloadState == .downloaded || track.localCachePath != nil {
- Image(systemName: "arrow.down.circle.fill")
- .font(.system(size: 11))
- .foregroundStyle(.green)
- } else {
- Image(systemName: "cloud.fill")
- .font(.system(size: 11))
- .foregroundStyle(Color.accentColor.opacity(0.85))
- }
- }
- }
- if !track.artist.isEmpty {
- Text(track.artist)
- .lineLimit(1)
- .font(.caption)
- .foregroundStyle(.secondary)
- }
- }
- }
- }
- private var trackColor: Color {
- if let hex = track.color {
- return Color(hex: hex) ?? .accentColor
- }
- return .accentColor
- }
- }
|