mirror of
				https://github.com/yattee/yattee.git
				synced 2025-10-31 20:52:04 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			39 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
| import CoreMedia
 | |
| import Foundation
 | |
| import SwiftUI
 | |
| 
 | |
| final class PlayerTimeModel: ObservableObject {
 | |
|     static let shared = PlayerTimeModel()
 | |
|     static let timePlaceholder = "--:--"
 | |
| 
 | |
|     @Published var currentTime = CMTime.zero
 | |
|     @Published var duration = CMTime.zero
 | |
| 
 | |
|     var player: PlayerModel { .shared }
 | |
| 
 | |
|     var forceHours: Bool {
 | |
|         duration.seconds >= 60 * 60
 | |
|     }
 | |
| 
 | |
|     var currentPlaybackTime: String {
 | |
|         if player.currentItem.isNil || duration.seconds.isZero {
 | |
|             return Self.timePlaceholder
 | |
|         }
 | |
| 
 | |
|         return currentTime.seconds.formattedAsPlaybackTime(allowZero: true, forceHours: forceHours) ?? Self.timePlaceholder
 | |
|     }
 | |
| 
 | |
|     var durationPlaybackTime: String {
 | |
|         if player.currentItem.isNil {
 | |
|             return Self.timePlaceholder
 | |
|         }
 | |
| 
 | |
|         return duration.seconds.formattedAsPlaybackTime() ?? Self.timePlaceholder
 | |
|     }
 | |
| 
 | |
|     var withoutSegmentsPlaybackTime: String {
 | |
|         guard let withoutSegmentsDuration = player.playerItemDurationWithoutSponsorSegments?.seconds else { return Self.timePlaceholder }
 | |
|         return withoutSegmentsDuration.formattedAsPlaybackTime(forceHours: forceHours) ?? Self.timePlaceholder
 | |
|     }
 | |
| }
 | 
