velody/apps/apple/VelodyMac/Sources/FolderAccessService.swift

60 lines
1.4 KiB
Swift

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