import AppKit import Foundation import VelodyPersistence @MainActor final class FolderAccessService: VelodyPersistence.FolderAccessService { private let bookmarkKey = "velody.selected-folder.bookmark" func chooseFolder() -> URL? { let panel = NSOpenPanel() panel.canChooseDirectories = true panel.canChooseFiles = false panel.allowsMultipleSelection = false panel.prompt = "Choose Folder" guard panel.runModal() == .OK, let url = panel.url else { return nil } saveBookmark(for: url) return url } func storedFolderURL() -> URL? { guard let bookmark = UserDefaults.standard.data(forKey: bookmarkKey) else { return nil } var isStale = false guard let url = try? URL( resolvingBookmarkData: bookmark, options: [.withSecurityScope], relativeTo: nil, bookmarkDataIsStale: &isStale ) else { return nil } if isStale { saveBookmark(for: url) } return url } private func saveBookmark(for url: URL) { guard let bookmark = try? url.bookmarkData( options: [.withSecurityScope], includingResourceValuesForKeys: nil, relativeTo: nil ) else { return } UserDefaults.standard.set(bookmark, forKey: bookmarkKey) } }