Restore last opened documents in directory document

This commit is contained in:
1024jp 2024-05-19 23:55:02 +09:00
parent 9add81cb6a
commit 4f838b2b2d

View File

@ -26,9 +26,16 @@
import AppKit
import Observation
import UniformTypeIdentifiers
import OSLog
@Observable final class DirectoryDocument: NSDocument {
private enum SerializationKey {
static let documents = "documents"
}
// MARK: Public Properties
private(set) var fileNode: FileNode?
@ -56,6 +63,35 @@ import UniformTypeIdentifiers
}
override func encodeRestorableState(with coder: NSCoder, backgroundQueue queue: OperationQueue) {
super.encodeRestorableState(with: coder, backgroundQueue: queue)
let fileData = self.documents
.compactMap(\.fileURL)
.compactMap { try? $0.bookmarkData(options: .withSecurityScope) }
coder.encode(fileData, forKey: SerializationKey.documents)
}
override func restoreState(with coder: NSCoder) {
super.restoreState(with: coder)
if let fileData = coder.decodeArrayOfObjects(ofClass: NSData.self, forKey: SerializationKey.documents) as? [Data] {
let fileURLs = fileData.compactMap {
var isStale = false
return try? URL(resolvingBookmarkData: $0, options: .withSecurityScope, bookmarkDataIsStale: &isStale)
}
Task {
for fileURL in fileURLs {
await self.openDocument(at: fileURL)
}
}
}
}
override func makeWindowControllers() {
let document = Document()
@ -237,6 +273,7 @@ import UniformTypeIdentifiers
document.close()
self.documents.removeFirst(document)
}
self.invalidateRestorableState()
}
}