mirror of
https://github.com/yattee/yattee.git
synced 2025-08-06 10:44:06 +00:00
Search UI fixes
This commit is contained in:
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -2,6 +2,7 @@ import CoreMedia
|
||||
import Foundation
|
||||
|
||||
final class PlaybackState: ObservableObject {
|
||||
@Published var live = false
|
||||
@Published var stream: Stream?
|
||||
@Published var time: CMTime?
|
||||
|
||||
|
@@ -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
|
||||
}
|
||||
|
@@ -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)
|
||||
|
||||
|
Reference in New Issue
Block a user