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) } } }