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: - 连接逻辑
|
||||
/// iOS 必须通过 Files 应用认证 SMB。新连接先打开 Files 登录,之后 FileManager 可直接浏览
|
||||
private func connectToServer(_ urlStr: String) {
|
||||
let t = urlStr.trimmingCharacters(in: .whitespaces)
|
||||
guard !t.isEmpty, let url = URL(string: t) else { return }
|
||||
|
||||
isConnecting = true; connectError = nil; smbURL = t
|
||||
|
||||
DispatchQueue.global(qos: .userInitiated).async {
|
||||
// 先尝试 FileManager 直接浏览(已认证过的共享)
|
||||
DispatchQueue.global(qos: .userInitiated).async { [self] in
|
||||
do {
|
||||
let contents = try FileManager.default.contentsOfDirectory(
|
||||
at: url, includingPropertiesForKeys: [.isDirectoryKey, .fileSizeKey],
|
||||
@ -440,19 +442,19 @@ struct NetworkFileBrowserIOS: View {
|
||||
|
||||
DispatchQueue.main.async {
|
||||
self.items = fi; self.browseURL = url; self.isConnecting = false
|
||||
// 保存到历史
|
||||
if !self.savedServers.contains(t) {
|
||||
self.savedServers.insert(t, at: 0)
|
||||
UserDefaults.standard.set(self.savedServers, forKey: "MiniPlayer.smbServers")
|
||||
}
|
||||
self.addToSaved(t)
|
||||
}
|
||||
} catch {
|
||||
// FileManager 失败 → 需要通过 Files 认证
|
||||
DispatchQueue.main.async {
|
||||
self.isConnecting = false
|
||||
self.connectError = "Connection failed. Opening Files app..."
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
|
||||
UIApplication.shared.open(url) { ok in
|
||||
self.connectError = ok ? "Login in Files, then come back." : "Invalid URL"
|
||||
self.addToSaved(t) // 先保存,下次就能直接浏览了
|
||||
// 打开 Files 应用认证
|
||||
UIApplication.shared.open(url) { ok in
|
||||
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() {
|
||||
if pathStack.isEmpty { browseURL = nil; items = [] }
|
||||
else { let p = pathStack.removeLast(); navigateTo(p) }
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user