Skip to content

Commit

Permalink
fix debouncing suggestions
Browse files Browse the repository at this point in the history
  • Loading branch information
brindy committed Mar 12, 2024
1 parent e6334b1 commit e175c15
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 54 deletions.
39 changes: 0 additions & 39 deletions Core/Debounce.swift

This file was deleted.

4 changes: 0 additions & 4 deletions DuckDuckGo.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -591,7 +591,6 @@
988AC355257E47C100793C64 /* RequeryLogic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988AC354257E47C100793C64 /* RequeryLogic.swift */; };
988F3DCF237D5C0F00AEE34C /* SchemeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988F3DCE237D5C0F00AEE34C /* SchemeHandler.swift */; };
988F3DD3237DE8D900AEE34C /* ForgetDataAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988F3DD2237DE8D900AEE34C /* ForgetDataAlert.swift */; };
98982B3422F8D8E400578AC9 /* Debounce.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98982B3322F8D8E400578AC9 /* Debounce.swift */; };
98983096255B5019003339A2 /* BookmarksCachingSearchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98983095255B5019003339A2 /* BookmarksCachingSearchTests.swift */; };
98999D5922FDA41500CBBE1B /* BasicAuthenticationAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98999D5822FDA41500CBBE1B /* BasicAuthenticationAlert.swift */; };
989B337522D7EF2100437824 /* EmptyCollectionReusableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 989B337422D7EF2100437824 /* EmptyCollectionReusableView.swift */; };
Expand Down Expand Up @@ -2208,7 +2207,6 @@
988F3DCE237D5C0F00AEE34C /* SchemeHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SchemeHandler.swift; sourceTree = "<group>"; };
988F3DD2237DE8D900AEE34C /* ForgetDataAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForgetDataAlert.swift; sourceTree = "<group>"; };
9896632322C56716007BE4FE /* EtagStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EtagStorage.swift; sourceTree = "<group>"; };
98982B3322F8D8E400578AC9 /* Debounce.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Debounce.swift; sourceTree = "<group>"; };
98983095255B5019003339A2 /* BookmarksCachingSearchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksCachingSearchTests.swift; sourceTree = "<group>"; };
98987E6E251EAC3B006F75CD /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
98987E70251EAC3B006F75CD /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
Expand Down Expand Up @@ -5182,7 +5180,6 @@
F143C3251E4A9A0E00CFDE3A /* URLExtension.swift */,
1E4DCF4B27B6A4CB00961E25 /* URLFileExtension.swift */,
F1075C911E9EF827006BE8A8 /* UserDefaultsExtension.swift */,
98982B3322F8D8E400578AC9 /* Debounce.swift */,
1CB7B82023CEA1F800AA24EA /* DateExtension.swift */,
1E8AD1DA27C51AE000ABA377 /* TimeIntervalExtension.swift */,
85449EFA23FDA0BC00512AAF /* UserDefaultsPropertyWrapper.swift */,
Expand Down Expand Up @@ -7246,7 +7243,6 @@
37E615752A5F533E00ACD63D /* SyncCredentialsAdapter.swift in Sources */,
02CA904B24F6C11A00D41DDF /* NavigatorSharePatchUserScript.swift in Sources */,
85BDC3192436161C0053DB07 /* LoginFormDetectionUserScript.swift in Sources */,
98982B3422F8D8E400578AC9 /* Debounce.swift in Sources */,
37DF000A29F9C416002B7D3E /* SyncMetadataDatabase.swift in Sources */,
F143C3291E4A9A0E00CFDE3A /* URLExtension.swift in Sources */,
F143C3271E4A9A0E00CFDE3A /* Logging.swift in Sources */,
Expand Down
26 changes: 15 additions & 11 deletions DuckDuckGo/AutocompleteViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,15 @@ import Networking
import CoreData
import Persistence
import History
import Combine

class AutocompleteViewController: UIViewController {

private static let session = URLSession(configuration: .ephemeral)

struct Constants {
static let debounceDelay: TimeInterval = 0.1
static let debounceDelay = 100 // millis
static let minItems = 1
static let maxLocalItems = 2
}

weak var delegate: AutocompleteViewControllerDelegate?
Expand All @@ -45,7 +45,9 @@ class AutocompleteViewController: UIViewController {
private var receivedResponse = false
private var pendingRequest = false

fileprivate var query = ""
@Published fileprivate var query = ""
fileprivate var queryDebounceCancellable: AnyCancellable?

fileprivate var suggestions = [Suggestion]()
fileprivate var selectedItem = -1

Expand Down Expand Up @@ -74,8 +76,6 @@ class AutocompleteViewController: UIViewController {
}

private var hidesBarsOnSwipeDefault = true

private let debounce = Debounce(queue: .main, seconds: Constants.debounceDelay)

@IBOutlet weak var tableView: UITableView!
var shouldOffsetY = false
Expand All @@ -97,6 +97,12 @@ class AutocompleteViewController: UIViewController {
super.viewDidLoad()
configureTableView()
applyTheme(ThemeManager.shared.currentTheme)

queryDebounceCancellable = $query
.debounce(for: .milliseconds(Constants.debounceDelay), scheduler: RunLoop.main)
.sink { [weak self] query in
self?.requestSuggestions(query: query)
}
}

private func configureTableView() {
Expand Down Expand Up @@ -137,12 +143,9 @@ class AutocompleteViewController: UIViewController {
}

func updateQuery(query: String) {
self.query = query
selectedItem = -1
cancelInFlightRequests()
debounce.schedule { [weak self] in
self?.requestSuggestions(query: query)
}
self.query = query
}

func willDismiss(with query: String) {
Expand Down Expand Up @@ -170,6 +173,7 @@ class AutocompleteViewController: UIViewController {
}

private func requestSuggestions(query: String) {
print("***", #function, query)
selectedItem = -1
tableView.reloadData()

Expand All @@ -185,10 +189,10 @@ class AutocompleteViewController: UIViewController {
})
pendingRequest = true

loader?.getSuggestions(query: query, completion: { [weak self] result, error in
loader?.getSuggestions(query: query) { [weak self] result, _ in
self?.updateSuggestions(result?.all ?? [])
self?.pendingRequest = false
})
}
}

private func updateSuggestions(_ newSuggestions: [Suggestion]) {
Expand Down

0 comments on commit e175c15

Please sign in to comment.