ArtworkView.swift 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import SwiftUI
  2. /// Displays album artwork for a track, loading from folder or embedded metadata.
  3. struct ArtworkView: View {
  4. let track: Track
  5. let size: CGFloat
  6. @State private var image: NSImage?
  7. @State private var isLoading = true
  8. var body: some View {
  9. Group {
  10. if let image {
  11. Image(nsImage: image)
  12. .resizable()
  13. .aspectRatio(contentMode: .fill)
  14. .frame(width: size, height: size)
  15. .clipShape(RoundedRectangle(cornerRadius: 4))
  16. } else {
  17. ZStack {
  18. RoundedRectangle(cornerRadius: 4)
  19. .fill(.quaternary)
  20. Image(systemName: "music.note")
  21. .font(.system(size: size * 0.4))
  22. .foregroundStyle(.tertiary)
  23. }
  24. .frame(width: size, height: size)
  25. }
  26. }
  27. .task(id: track.filePath) {
  28. isLoading = true
  29. image = await ArtworkService.shared.artwork(for: track)
  30. isLoading = false
  31. }
  32. }
  33. }