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:
yumoqing 2026-07-04 19:57:33 +08:00
parent 6a605451e4
commit 3cb5b1d8a4

View File

@ -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) }