VideoController.swift (935B)
1 // 2 // VideoController.swift 3 // damus 4 // 5 // Created by Bryan Montz on 9/3/23. 6 // 7 8 import Combine 9 import Foundation 10 11 struct VideoMetadata { 12 let has_audio: Bool 13 let size: CGSize 14 } 15 16 final class VideoController: ObservableObject { 17 private var mute_states: [URL: Bool] = [:] 18 private var metadatas: [URL: VideoMetadata] = [:] 19 20 @Published var focused_model_id: UUID? 21 22 func toggle_should_mute_video(url: URL) { 23 let state = mute_states[url] ?? true 24 mute_states[url] = !state 25 26 objectWillChange.send() 27 } 28 29 func should_mute_video(url: URL) -> Bool { 30 mute_states[url] ?? true 31 } 32 33 func set_metadata(_ metadata: VideoMetadata, url: URL) { 34 metadatas[url] = metadata 35 } 36 37 func metadata(for url: URL) -> VideoMetadata? { 38 metadatas[url] 39 } 40 41 func size_for_url(_ url: URL) -> CGSize? { 42 metadatas[url]?.size 43 } 44 }