From 468d89b983f5fcbe30e00df719187e8197851bb1 Mon Sep 17 00:00:00 2001 From: kingbri Date: Sun, 23 Apr 2023 15:07:44 -0400 Subject: [PATCH] Scraping: Add configurable URLRequest timeout Some websites and networks may be slow. Add the option to override the request timeout of 15 seconds for search requests. Signed-off-by: kingbri --- Ferrite/ViewModels/ScrapingViewModel.swift | 14 ++++++++++++- Ferrite/Views/SettingsView.swift | 23 +++++++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/Ferrite/ViewModels/ScrapingViewModel.swift b/Ferrite/ViewModels/ScrapingViewModel.swift index fe21c9e..5c538ab 100644 --- a/Ferrite/ViewModels/ScrapingViewModel.swift +++ b/Ferrite/ViewModels/ScrapingViewModel.swift @@ -375,7 +375,19 @@ class ScrapingViewModel: ObservableObject { return nil } - let request = URLRequest(url: url, timeoutInterval: 15) + var timeout: Double = 15 + + let disableRequestTimeout = UserDefaults.standard.bool(forKey: "Behavior.DisableRequestTimeout") + if disableRequestTimeout { + timeout = Double.infinity + } else { + let requestTimeoutSecs = UserDefaults.standard.double(forKey: "Behavior.RequestTimeoutSecs") + if requestTimeoutSecs != 0 { + timeout = requestTimeoutSecs + } + } + + let request = URLRequest(url: url, timeoutInterval: timeout) do { let (data, _) = try await URLSession.shared.data(for: request) diff --git a/Ferrite/Views/SettingsView.swift b/Ferrite/Views/SettingsView.swift index 66a5e70..d54438d 100644 --- a/Ferrite/Views/SettingsView.swift +++ b/Ferrite/Views/SettingsView.swift @@ -24,6 +24,8 @@ struct SettingsView: View { @AppStorage("Behavior.AutocorrectSearch") var autocorrectSearch = true @AppStorage("Behavior.UsesRandomSearchText") var usesRandomSearchText = false + @AppStorage("Behavior.DisableRequestTimeout") var disableRequestTimeout = false + @AppStorage("Behavior.RequestTimeoutSecs") var requestTimeoutSecs: Double = 15 @AppStorage("Updates.AutomaticNotifs") var autoUpdateNotifs = true @@ -63,7 +65,10 @@ struct SettingsView: View { } } - Section(header: InlineHeader("Behavior")) { + Section( + header: InlineHeader("Behavior"), + footer: Text("Only disable search timeout if results are slow to fetch") + ) { Toggle(isOn: $autocorrectSearch) { Text("Autocorrect search") } @@ -71,6 +76,22 @@ struct SettingsView: View { Toggle(isOn: $usesRandomSearchText) { Text("Random searchbar text") } + + Toggle(isOn: $disableRequestTimeout) { + Text("Disable search timeout") + } + + if !disableRequestTimeout { + HStack { + Text("Search timeout seconds") + + Spacer() + + TextField("", value: $requestTimeoutSecs, formatter: NumberFormatter()) + .fixedSize() + .keyboardType(.numberPad) + } + } } Section(header: InlineHeader("Plugin management")) {