mirror of
https://github.com/yattee/yattee.git
synced 2025-08-09 20:24:06 +00:00
UI improvements, player state refactor
This commit is contained in:
@@ -2,20 +2,53 @@ import AVFoundation
|
||||
import Foundation
|
||||
|
||||
// swiftlint:disable:next final_class
|
||||
class Stream: Equatable {
|
||||
class Stream: Equatable, Hashable {
|
||||
enum Resolution: String, CaseIterable, Comparable {
|
||||
case hd1080p, hd720p, sd480p, sd360p, sd240p, sd144p
|
||||
|
||||
var height: Int {
|
||||
Int(rawValue.components(separatedBy: CharacterSet.decimalDigits.inverted).joined())!
|
||||
}
|
||||
|
||||
static func from(resolution: String) -> Resolution? {
|
||||
allCases.first { "\($0)".contains(resolution) }
|
||||
}
|
||||
|
||||
static func < (lhs: Resolution, rhs: Resolution) -> Bool {
|
||||
lhs.height < rhs.height
|
||||
}
|
||||
}
|
||||
|
||||
enum Kind: String, Comparable {
|
||||
case stream, adaptive
|
||||
|
||||
private var sortOrder: Int {
|
||||
switch self {
|
||||
case .stream:
|
||||
return 0
|
||||
case .adaptive:
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
static func < (lhs: Kind, rhs: Kind) -> Bool {
|
||||
lhs.sortOrder < rhs.sortOrder
|
||||
}
|
||||
}
|
||||
|
||||
var audioAsset: AVURLAsset
|
||||
var videoAsset: AVURLAsset
|
||||
|
||||
var resolution: StreamResolution
|
||||
var type: StreamType
|
||||
var resolution: Resolution
|
||||
var kind: Kind
|
||||
|
||||
var encoding: String
|
||||
|
||||
init(audioAsset: AVURLAsset, videoAsset: AVURLAsset, resolution: StreamResolution, type: StreamType, encoding: String) {
|
||||
init(audioAsset: AVURLAsset, videoAsset: AVURLAsset, resolution: Resolution, kind: Kind, encoding: String) {
|
||||
self.audioAsset = audioAsset
|
||||
self.videoAsset = videoAsset
|
||||
self.resolution = resolution
|
||||
self.type = type
|
||||
self.kind = kind
|
||||
self.encoding = encoding
|
||||
}
|
||||
|
||||
@@ -27,6 +60,10 @@ class Stream: Equatable {
|
||||
[audioAsset, videoAsset]
|
||||
}
|
||||
|
||||
var oneMeaningfullAsset: Bool {
|
||||
assets.dropFirst().allSatisfy { $0 == assets.first }
|
||||
}
|
||||
|
||||
var assetsLoaded: Bool {
|
||||
assets.allSatisfy { $0.statusOfValue(forKey: "playable", error: nil) == .loaded }
|
||||
}
|
||||
@@ -40,6 +77,10 @@ class Stream: Equatable {
|
||||
}
|
||||
|
||||
static func == (lhs: Stream, rhs: Stream) -> Bool {
|
||||
lhs.resolution == rhs.resolution && lhs.type == rhs.type
|
||||
lhs.resolution == rhs.resolution && lhs.kind == rhs.kind
|
||||
}
|
||||
|
||||
func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(videoAsset.url)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user