增加 Markdown 文件分享支持
This commit is contained in:
@@ -60,11 +60,17 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||
}
|
||||
|
||||
private func handleSharedFile(_ url: URL) {
|
||||
guard url.isFileURL,
|
||||
let navigationController = window?.rootViewController as? UINavigationController else {
|
||||
guard let navigationController = window?.rootViewController as? UINavigationController else {
|
||||
return
|
||||
}
|
||||
|
||||
if url.scheme == "noteapp", url.host == "share" {
|
||||
handleShareURL(url, navigationController: navigationController)
|
||||
return
|
||||
}
|
||||
|
||||
guard url.isFileURL else { return }
|
||||
|
||||
let shouldStopAccessing = url.startAccessingSecurityScopedResource()
|
||||
defer {
|
||||
if shouldStopAccessing {
|
||||
@@ -86,6 +92,40 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||
}
|
||||
}
|
||||
|
||||
private func handleShareURL(_ url: URL, navigationController: UINavigationController) {
|
||||
guard let components = URLComponents(url: url, resolvingAgainstBaseURL: false),
|
||||
let queryItems = components.queryItems else { return }
|
||||
|
||||
let fileManager = FileManager.default
|
||||
let containerURL = fileManager.containerURL(forSecurityApplicationGroupIdentifier: "group.com.fishestlife.note")
|
||||
let sharedDir = containerURL?.appendingPathComponent("SharedFiles", isDirectory: true)
|
||||
|
||||
var contents: [(text: String, fileName: String)] = []
|
||||
|
||||
for item in queryItems {
|
||||
if item.name.hasPrefix("text"), let text = item.value, !text.isEmpty {
|
||||
contents.append((text: text, fileName: "shared.md"))
|
||||
} else if item.name.hasPrefix("file"), let fileName = item.value, !fileName.isEmpty {
|
||||
if let sharedDir = sharedDir {
|
||||
let fileURL = sharedDir.appendingPathComponent(fileName)
|
||||
if let text = try? String(contentsOf: fileURL, encoding: .utf8) {
|
||||
contents.append((text: text, fileName: fileName))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
guard let first = contents.first else { return }
|
||||
|
||||
DispatchQueue.main.async {
|
||||
let viewController = PreviewViewController()
|
||||
viewController.initialText = first.text
|
||||
viewController.fileName = first.fileName
|
||||
viewController.title = first.fileName
|
||||
navigationController.pushViewController(viewController, animated: true)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user