43 lines
861 B
Swift
43 lines
861 B
Swift
import Foundation
|
|
import AVFoundation
|
|
|
|
// 媒体类型
|
|
enum MediaType: String, Codable {
|
|
case video, audio, stream
|
|
}
|
|
|
|
// 循环模式
|
|
enum RepeatMode: String, CaseIterable {
|
|
case none // 不循环
|
|
case single // 单曲循环
|
|
case all // 列表循环
|
|
|
|
var icon: String {
|
|
switch self {
|
|
case .none: return "repeat"
|
|
case .single: return "repeat.1"
|
|
case .all: return "repeat"
|
|
}
|
|
}
|
|
|
|
var next: RepeatMode {
|
|
switch self {
|
|
case .none: return .single
|
|
case .single: return .all
|
|
case .all: return .none
|
|
}
|
|
}
|
|
}
|
|
|
|
// 媒体项
|
|
struct MediaItem: Identifiable, Equatable {
|
|
let id = UUID()
|
|
let url: URL
|
|
let name: String
|
|
let type: MediaType
|
|
|
|
static func == (lhs: MediaItem, rhs: MediaItem) -> Bool {
|
|
lhs.id == rhs.id
|
|
}
|
|
}
|