Search UI fixes

This commit is contained in:
Arkadiusz Fal
2021-09-13 22:41:16 +02:00
parent b00b54ad2a
commit 5e403c7f15
20 changed files with 188 additions and 50 deletions

View File

@@ -50,6 +50,14 @@ final class InvidiousAPI: Service {
content.json.arrayValue.map(Video.init)
}
configureTransformer("/search/suggestions", requestMethods: [.get]) { (content: Entity<JSON>) -> [String] in
if let suggestions = content.json.dictionaryValue["suggestions"] {
return suggestions.arrayValue.map(String.init)
}
return []
}
configureTransformer("/auth/playlists", requestMethods: [.get]) { (content: Entity<JSON>) -> [Playlist] in
content.json.arrayValue.map(Playlist.init)
}
@@ -148,6 +156,11 @@ final class InvidiousAPI: Service {
return resource
}
func searchSuggestions(query: String) -> Resource {
resource("/search/suggestions")
.withParam("q", query.lowercased())
}
private func searchQuery(_ query: String) -> String {
var searchQuery = query

View File

@@ -28,7 +28,6 @@ final class NavigationState: ObservableObject {
openChannels.insert(channel)
isChannelOpen = true
tabSelection = .channel(channel.id)
}
func closeChannel(_ channel: Channel) {
@@ -43,11 +42,6 @@ final class NavigationState: ObservableObject {
}
}
func closeAllChannels() {
isChannelOpen = false
openChannels.removeAll()
}
func showOpenChannel(_ id: Channel.ID) -> Bool {
if case .channel = tabSelection {
return false

View File

@@ -2,6 +2,7 @@ import CoreMedia
import Foundation
final class PlaybackState: ObservableObject {
@Published var live = false
@Published var stream: Stream?
@Published var time: CMTime?

View File

@@ -62,7 +62,9 @@ final class PlayerState: ObservableObject {
}
fileprivate func playVideo(_ video: Video) {
if video.hlsUrl != nil {
playbackState.live = video.live
if video.live {
playHlsUrl()
return
}

View File

@@ -3,14 +3,16 @@ import Siesta
import SwiftUI
final class SearchState: ObservableObject {
@Published var store = Store<[Video]>()
@Published var query = SearchQuery()
@Published var querySuggestions = Store<[String]>()
@Default(.searchQuery) private var queryText
private var previousResource: Resource?
private var resource: Resource!
@Published var store = Store<[Video]>()
init() {
let newQuery = query
newQuery.query = queryText
@@ -23,6 +25,23 @@ final class SearchState: ObservableObject {
resource.isLoading
}
func loadQuerySuggestions(_ query: String) {
let resource = InvidiousAPI.shared.searchSuggestions(query: query)
resource.addObserver(querySuggestions)
resource.loadIfNeeded()
if let request = resource.loadIfNeeded() {
request.onSuccess { response in
if let suggestions: [String] = response.typedContent() {
self.querySuggestions = Store<[String]>(suggestions)
}
}
} else {
querySuggestions = Store<[String]>(querySuggestions.collection)
}
}
func changeQuery(_ changeHandler: @escaping (SearchQuery) -> Void = { _ in }) {
changeHandler(query)