BookmarkManager // Better compatibility with URL bookmarks.

This commit is contained in:
ShikiSuen 2023-12-02 00:22:21 +08:00
parent de1272f389
commit 2880901491
2 changed files with 29 additions and 10 deletions

View File

@ -4,7 +4,7 @@ import PackageDescription
let package = Package( let package = Package(
name: "BookmarkManager", name: "BookmarkManager",
platforms: [ platforms: [
.macOS(.v11), .macOS(.v10_13),
], ],
products: [ products: [
.library( .library(

View File

@ -14,16 +14,19 @@ public class BookmarkManager {
return return
} }
if #available(macOS 10.13, *) {
do { do {
let data = try NSKeyedArchiver.archivedData(withRootObject: bookmarkDic, requiringSecureCoding: false) var data: Data?
try data.write(to: bookmarkURL) if #unavailable(macOS 10.13) {
data = NSKeyedArchiver.archivedData(withRootObject: bookmarkDic)
} else {
data = try NSKeyedArchiver.archivedData(withRootObject: bookmarkDic, requiringSecureCoding: false)
}
try data?.write(to: bookmarkURL)
NSLog("Did save data to url") NSLog("Did save data to url")
} catch { } catch {
NSLog("Couldn't save bookmarks") NSLog("Couldn't save bookmarks")
} }
} }
}
// Load bookmarks when your app launch for example // Load bookmarks when your app launch for example
public func loadBookmarks() { public func loadBookmarks() {
@ -34,9 +37,25 @@ public class BookmarkManager {
if fileExists(url) { if fileExists(url) {
do { do {
let fileData = try Data(contentsOf: url) let fileData = try Data(contentsOf: url)
try (NSKeyedUnarchiver.unarchivedObject(ofClass: NSDictionary.self, from: fileData) as? [URL: Data])?.forEach { bookmark in if #available(macOS 11.0, *) {
if let fileBookmarks = try NSKeyedUnarchiver.unarchivedDictionary(ofKeyClass: NSURL.self, objectClass: NSData.self, from: fileData) as [URL: Data]? {
for bookmark in fileBookmarks {
restoreBookmark(key: bookmark.key, value: bookmark.value) restoreBookmark(key: bookmark.key, value: bookmark.value)
} }
}
} else if #available(macOS 10.11, *) {
if let fileBookmarks = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(fileData) as! [URL: Data]? {
for bookmark in fileBookmarks {
restoreBookmark(key: bookmark.key, value: bookmark.value)
}
}
} else {
if let fileBookmarks = NSKeyedUnarchiver.unarchiveObject(with: fileData) as! [URL: Data]? {
for bookmark in fileBookmarks {
restoreBookmark(key: bookmark.key, value: bookmark.value)
}
}
}
} catch { } catch {
NSLog("Couldn't load bookmarks") NSLog("Couldn't load bookmarks")
} }