@@ -53,29 +53,42 @@ class MediaPlayerWindowController: NSWindowController, NSWindowDelegate {
5353
5454 guard let videoPlayerViewController = contentViewController as? MediaPlayerViewController else { return }
5555
56- let playerItem = AVPlayerItem ( asset: asset)
56+ Task { @MainActor in
57+ do {
58+ let fileReader = try await treeAccessor. fileReader ( path: path)
59+ _ = try await fileReader. read ( offset: 0 , length: 1 )
5760
58- let player = AVPlayer ( playerItem: playerItem)
59- videoPlayerViewController. playerView. player = player
61+ let playerItem = AVPlayerItem ( asset: asset)
6062
61- asset. loadTracks ( withMediaType: . video) { ( tracks, error) in
62- guard let track = tracks? . first else { return }
63- Task {
64- let naturalSize = try await track. load ( . naturalSize)
63+ let player = AVPlayer ( playerItem: playerItem)
64+ videoPlayerViewController. playerView. player = player
6565
66- await MainActor . run {
67- guard let currentScreen = NSScreen . screens. first ( where: { $0 == window. screen } ) else {
68- return
69- }
66+ asset. loadTracks ( withMediaType: . video) { ( tracks, error) in
67+ guard let track = tracks? . first else { return }
68+ Task {
69+ let naturalSize = try await track. load ( . naturalSize)
70+
71+ await MainActor . run {
72+ guard let currentScreen = NSScreen . screens. first ( where: { $0 == window. screen } ) else {
73+ return
74+ }
7075
71- let rect = AVMakeRect (
72- aspectRatio: CGSize ( width: naturalSize. width, height: naturalSize. height) ,
73- insideRect: currentScreen. visibleFrame
74- )
75- let contentSize = NSSize ( width: min ( rect. width, naturalSize. width) , height: min ( rect. height, naturalSize. height) )
76+ let rect = AVMakeRect (
77+ aspectRatio: CGSize ( width: naturalSize. width, height: naturalSize. height) ,
78+ insideRect: currentScreen. visibleFrame
79+ )
80+ let contentSize = NSSize ( width: min ( rect. width, naturalSize. width) , height: min ( rect. height, naturalSize. height) )
7681
77- window. setContentSize ( contentSize)
78- window. center ( )
82+ window. setContentSize ( contentSize)
83+ window. center ( )
84+
85+ player. play ( )
86+ }
87+ }
88+ }
89+ } catch {
90+ _ = await MainActor . run {
91+ NSAlert ( error: error) . runModal ( )
7992 }
8093 }
8194 }
@@ -91,20 +104,4 @@ class MediaPlayerWindowController: NSWindowController, NSWindowDelegate {
91104
92105class MediaPlayerViewController : NSViewController {
93106 @IBOutlet var playerView : AVPlayerView !
94- private var observation : NSKeyValueObservation ?
95-
96- deinit {
97- observation? . invalidate ( )
98- }
99-
100- override func viewDidAppear( ) {
101- super. viewDidAppear ( )
102-
103- let player = playerView. player
104- observation = playerView. player? . currentItem? . observe ( \. status) { ( item, change) in
105- if item. status == . readyToPlay {
106- player? . play ( )
107- }
108- }
109- }
110107}
0 commit comments