Skip to content

Commit

Permalink
- ServerSideSearchScope:
Browse files Browse the repository at this point in the history
	- check if server-side search and content-search are supported - and appear only then
	- resume/resend search requests if the connection comes (back) online
- update ios-sdk for more extensive server-side search capability information
  • Loading branch information
felix-schwarz committed Jan 28, 2025
1 parent 930f0f1 commit d831478
Showing 1 changed file with 25 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import ownCloudApp
class ServerSideSearchScope: ItemSearchScope {
open override class var descriptor: SearchScopeDescriptor {
return SearchScopeDescriptor(identifier: "server", localizedName: OCLocalizedString("Server", nil), localizedDescription: OCLocalizedString("Searches using the server.", nil), icon: OCSymbol.icon(forSymbolName: "server.rack"), searchableContent: [.itemName, .contents], scopeCreator: { (clientContext, cellStyle, descriptor) in
if let cellStyle {
if let cellStyle, clientContext.core?.connection.capabilities?.serverSideSearchSupported == true, clientContext.core?.connection.capabilities?.enabledServerSideSearchProperties?.contains("content") == true {
return ServerSideSearchScope(with: clientContext, cellStyle: cellStyle, localizedName: descriptor.localizedName, localizedPlaceholder: OCLocalizedString("Search server", nil), icon: descriptor.icon)
}
return nil
Expand Down Expand Up @@ -78,24 +78,34 @@ class ServerSideSearchScope: ItemSearchScope {
}
}

func sendSearchRequest() {
guard let core = clientContext.core, let kqlQuery else { return }

searchResult?.cancel()

searchResult = core.searchFiles(withPattern: kqlQuery, limit: 100)
if searchResult?.error != nil {
updateWith(results: nil, error: searchResult?.error)
} else {
updateWith(results: searchResult?.results, error: nil)
}
}

func cancelSearchRequest() {
searchResult?.cancel()
searchResult = nil

updateWith(results: nil, error: nil)
}

var kqlQuery: String? {
didSet {
if let kqlQuery {
if kqlQuery != searchResult?.kqlQuery, let core = clientContext.core {
searchResult?.cancel()

searchResult = core.searchFiles(withPattern: kqlQuery, limit: 100)
if searchResult?.error != nil {
updateWith(results: nil, error: searchResult?.error)
} else {
updateWith(results: searchResult?.results, error: nil)
}
if kqlQuery != searchResult?.kqlQuery {
sendSearchRequest()
}
} else {
searchResult?.cancel()
searchResult = nil

updateWith(results: nil, error: nil)
cancelSearchRequest()
}
}
}
Expand All @@ -111,7 +121,7 @@ class ServerSideSearchScope: ItemSearchScope {
didSet {
if oldValue != isOnline {
if isOnline {
updateSearch()
sendSearchRequest()
}
updateDisplay()
}
Expand Down

0 comments on commit d831478

Please sign in to comment.