You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
1.2 KiB
34 lines
1.2 KiB
import AppKit
|
|
import UniformTypeIdentifiers
|
|
|
|
enum FileImport {
|
|
/// Dateiauswahl für Videos, startet im Quellordner. Leer = abgebrochen.
|
|
@MainActor
|
|
static func chooseVideos(startingAt sourceFolder: URL?) -> [URL] {
|
|
let panel = NSOpenPanel()
|
|
panel.allowsMultipleSelection = true
|
|
panel.canChooseDirectories = false
|
|
panel.canChooseFiles = true
|
|
panel.allowedContentTypes = [.movie, .quickTimeMovie, .mpeg4Movie]
|
|
if let sourceFolder { panel.directoryURL = sourceFolder }
|
|
guard panel.runModal() == .OK else { return [] }
|
|
return panel.urls
|
|
}
|
|
|
|
/// Liest die Datei-URLs aus einem Drop und liefert sie gesammelt auf dem Main-Thread.
|
|
static func loadURLs(from providers: [NSItemProvider], completion: @escaping ([URL]) -> Void) {
|
|
let group = DispatchGroup()
|
|
var urls: [URL] = []
|
|
for provider in providers {
|
|
group.enter()
|
|
_ = provider.loadObject(ofClass: URL.self) { url, _ in
|
|
if let url {
|
|
DispatchQueue.main.async { urls.append(url) }
|
|
}
|
|
group.leave()
|
|
}
|
|
}
|
|
group.notify(queue: .main) { completion(urls) }
|
|
}
|
|
}
|