35 lines
1.0 KiB
Swift
35 lines
1.0 KiB
Swift
import Foundation
|
|
|
|
struct MusicFolder: Identifiable, Hashable, Sendable {
|
|
let number: Int
|
|
let url: URL
|
|
var tracks: [MusicTrack]
|
|
var customName: String? = nil
|
|
var id: Int { number }
|
|
var title: String { customName ?? tracks.first(where: { !$0.album.isEmpty })?.album ?? "Ordner \(String(format: "%02d", number))" }
|
|
}
|
|
|
|
struct MusicTrack: Identifiable, Hashable, Sendable {
|
|
let url: URL
|
|
var title: String
|
|
var artist: String
|
|
var album: String
|
|
var albumArtist: String = ""
|
|
var trackNumber: String = ""
|
|
var discNumber: String = ""
|
|
var year: String = ""
|
|
var genre: String = ""
|
|
var acoustID: String = ""
|
|
var musicBrainzRecordingID: String = ""
|
|
var musicBrainzReleaseID: String = ""
|
|
var id: String { url.path }
|
|
var displayTitle: String { title.isEmpty ? url.deletingPathExtension().lastPathComponent : title }
|
|
}
|
|
|
|
struct SystemMusicFolder: Identifiable, Hashable, Sendable {
|
|
let name: String
|
|
let url: URL
|
|
var tracks: [MusicTrack]
|
|
var id: String { name }
|
|
}
|