fix(iOS): connect flow — new SMB opens Files for auth, saved servers use FileManager directly. Both flows save to history.
This commit is contained in:
parent
6a605451e4
commit
3cb5b1d8a4
@ -422,13 +422,15 @@ struct NetworkFileBrowserIOS: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - 连接逻辑
|
// MARK: - 连接逻辑
|
||||||
|
/// iOS 必须通过 Files 应用认证 SMB。新连接先打开 Files 登录,之后 FileManager 可直接浏览
|
||||||
private func connectToServer(_ urlStr: String) {
|
private func connectToServer(_ urlStr: String) {
|
||||||
let t = urlStr.trimmingCharacters(in: .whitespaces)
|
let t = urlStr.trimmingCharacters(in: .whitespaces)
|
||||||
guard !t.isEmpty, let url = URL(string: t) else { return }
|
guard !t.isEmpty, let url = URL(string: t) else { return }
|
||||||
|
|
||||||
isConnecting = true; connectError = nil; smbURL = t
|
isConnecting = true; connectError = nil; smbURL = t
|
||||||
|
|
||||||
DispatchQueue.global(qos: .userInitiated).async {
|
// 先尝试 FileManager 直接浏览(已认证过的共享)
|
||||||
|
DispatchQueue.global(qos: .userInitiated).async { [self] in
|
||||||
do {
|
do {
|
||||||
let contents = try FileManager.default.contentsOfDirectory(
|
let contents = try FileManager.default.contentsOfDirectory(
|
||||||
at: url, includingPropertiesForKeys: [.isDirectoryKey, .fileSizeKey],
|
at: url, includingPropertiesForKeys: [.isDirectoryKey, .fileSizeKey],
|
||||||
@ -440,19 +442,19 @@ struct NetworkFileBrowserIOS: View {
|
|||||||
|
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
self.items = fi; self.browseURL = url; self.isConnecting = false
|
self.items = fi; self.browseURL = url; self.isConnecting = false
|
||||||
// 保存到历史
|
self.addToSaved(t)
|
||||||
if !self.savedServers.contains(t) {
|
|
||||||
self.savedServers.insert(t, at: 0)
|
|
||||||
UserDefaults.standard.set(self.savedServers, forKey: "MiniPlayer.smbServers")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
|
// FileManager 失败 → 需要通过 Files 认证
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
self.isConnecting = false
|
self.isConnecting = false
|
||||||
self.connectError = "Connection failed. Opening Files app..."
|
self.addToSaved(t) // 先保存,下次就能直接浏览了
|
||||||
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
|
// 打开 Files 应用认证
|
||||||
UIApplication.shared.open(url) { ok in
|
UIApplication.shared.open(url) { ok in
|
||||||
self.connectError = ok ? "Login in Files, then come back." : "Invalid URL"
|
if ok {
|
||||||
|
self.connectError = "Login in Files, then tap this server again."
|
||||||
|
} else {
|
||||||
|
self.connectError = "Cannot open. Check URL format."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -460,6 +462,13 @@ struct NetworkFileBrowserIOS: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func addToSaved(_ url: String) {
|
||||||
|
if !savedServers.contains(url) {
|
||||||
|
savedServers.insert(url, at: 0)
|
||||||
|
UserDefaults.standard.set(savedServers, forKey: "MiniPlayer.smbServers")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private func goUp() {
|
private func goUp() {
|
||||||
if pathStack.isEmpty { browseURL = nil; items = [] }
|
if pathStack.isEmpty { browseURL = nil; items = [] }
|
||||||
else { let p = pathStack.removeLast(); navigateTo(p) }
|
else { let p = pathStack.removeLast(); navigateTo(p) }
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user