Skip to content

Commit 143145e

Browse files
committed
Updated "Movie Timecode" example project
1 parent 18e7a44 commit 143145e

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

Examples/Movie Timecode/Movie Timecode/Model/Model+Movie.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,34 @@ import TimecodeKit
1111
extension Model {
1212
struct Movie: Equatable, Hashable, Sendable {
1313
let avMovie: AVMovie
14+
let url: URL?
1415

1516
// cached metadata
1617
let frameRate: TimecodeFrameRate?
1718
let timecodeStart: Timecode?
1819
let containsTimecodeTrack: Bool
1920

21+
init(
22+
url: URL,
23+
frameRate: TimecodeFrameRate?,
24+
timecodeStart: Timecode?,
25+
containsTimecodeTrack: Bool
26+
) {
27+
avMovie = AVMovie(url: url)
28+
self.url = url
29+
self.frameRate = frameRate
30+
self.timecodeStart = timecodeStart
31+
self.containsTimecodeTrack = containsTimecodeTrack
32+
}
33+
2034
init(
2135
avMovie: AVMovie,
2236
frameRate: TimecodeFrameRate?,
2337
timecodeStart: Timecode?,
2438
containsTimecodeTrack: Bool
2539
) {
2640
self.avMovie = avMovie
41+
url = avMovie.url
2742
self.frameRate = frameRate
2843
self.timecodeStart = timecodeStart
2944
self.containsTimecodeTrack = containsTimecodeTrack

Examples/Movie Timecode/Movie Timecode/Model/Model.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,13 @@ extension Model {
2020
switch result {
2121
case let .success(url):
2222
Task {
23+
movie?.url?.stopAccessingSecurityScopedResource()
2324
movie = nil // forces views to update
25+
26+
guard url.startAccessingSecurityScopedResource() else {
27+
error = .permissionError
28+
return
29+
}
2430
await updateMetadata(newMovie: AVMovie(url: url))
2531
error = nil
2632
}

Examples/Movie Timecode/Movie Timecode/Model/ModelError.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ enum ModelError: LocalizedError {
1313
case exportError(_ details: Error?)
1414
case pathDoesNotExist
1515
case pathIsNotFolder
16+
case permissionError
1617
}
1718

1819
extension ModelError {
@@ -34,6 +35,8 @@ extension ModelError {
3435
"Path does not exist"
3536
case .pathIsNotFolder:
3637
"Path is not a folder"
38+
case .permissionError:
39+
"Disk permission error"
3740
}
3841
}
3942
}

0 commit comments

Comments
 (0)