JellyfinAPI applied in Library, Search

This commit is contained in:
PangMo5 2021-05-27 17:54:42 +09:00
parent 3b38a20625
commit 7ada918ea5
4 changed files with 14 additions and 9 deletions

View File

@ -62,7 +62,7 @@ extension Filter {
parameters["ImageTypeLimit"] = imageTypeLimit parameters["ImageTypeLimit"] = imageTypeLimit
parameters["IncludeItemTypes"] = itemTypes.map(\.rawValue).joined(separator: ",") parameters["IncludeItemTypes"] = itemTypes.map(\.rawValue).joined(separator: ",")
parameters["ParentId"] = parentID parameters["ParentId"] = parentID
parameters["Recursive"] = recursive parameters["Recursive"] = recursive.description
parameters["SortBy"] = sort?.rawValue parameters["SortBy"] = sort?.rawValue
parameters["SortOrder"] = asc?.rawValue parameters["SortOrder"] = asc?.rawValue
parameters["Genres"] = genres.joined(separator: ",") parameters["Genres"] = genres.joined(separator: ",")
@ -108,15 +108,15 @@ extension JellyfinAPI: TargetType {
switch self { switch self {
case let .search(_, filter, searchQuery, page): case let .search(_, filter, searchQuery, page):
var parameters = filter.toParamters var parameters = filter.toParamters
parameters["searchTerm"] = searchQuery.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) parameters["searchTerm"] = searchQuery
parameters["StartIndex"] = page * 100 parameters["StartIndex"] = (page - 1) * 100
parameters["Limit"] = 100 parameters["Limit"] = 100
return .requestParameters(parameters: parameters, encoding: JSONEncoding.default) return .requestParameters(parameters: parameters, encoding: URLEncoding.default)
case let .items(_, filter, page): case let .items(_, filter, page):
var parameters = filter.toParamters var parameters = filter.toParamters
parameters["StartIndex"] = page * 100 parameters["StartIndex"] = (page - 1) * 100
parameters["Limit"] = 100 parameters["Limit"] = 100
return .requestParameters(parameters: parameters, encoding: JSONEncoding.default) return .requestParameters(parameters: parameters, encoding: URLEncoding.default)
} }
} }
@ -125,7 +125,7 @@ extension JellyfinAPI: TargetType {
case let .items(global, _, _), case let .items(global, _, _),
let .search(global, _, _, _): let .search(global, _, _, _):
return [ return [
"X-Emby-Authorization": global.authHeader, "X-Emby-Authorization": global.authHeader
] ]
} }
} }

View File

@ -70,6 +70,9 @@ final class LibraryViewModel: ObservableObject {
} }
fileprivate func requestItems() { fileprivate func requestItems() {
print(globalData.server?.baseURI)
print(globalData.authHeader)
print(filter)
isLoading = true isLoading = true
provider.requestPublisher(.items(globalData: globalData, filter: filter, page: page)) provider.requestPublisher(.items(globalData: globalData, filter: filter, page: page))
// .map(ResumeItem.self) TO DO // .map(ResumeItem.self) TO DO

View File

@ -42,6 +42,7 @@ final class LibrarySearchViewModel: ObservableObject {
cancellables.removeAll() cancellables.removeAll()
$searchQuery $searchQuery
.debounce(for: 0.25, scheduler: DispatchQueue.main)
.sink(receiveValue: requestSearch(query:)) .sink(receiveValue: requestSearch(query:))
.store(in: &cancellables) .store(in: &cancellables)
} }
@ -55,6 +56,7 @@ final class LibrarySearchViewModel: ObservableObject {
self.isLoading = false self.isLoading = false
}, receiveValue: { response in }, receiveValue: { response in
let body = response.data let body = response.data
self.items.removeAll()
do { do {
let json = try JSON(data: body) let json = try JSON(data: body)
for (_, item): (String, JSON) in json["Items"] { for (_, item): (String, JSON) in json["Items"] {

View File

@ -92,14 +92,14 @@ struct LibraryView: View {
.navigationTitle(title) .navigationTitle(title)
.toolbar { .toolbar {
ToolbarItemGroup(placement: .navigationBarTrailing) { ToolbarItemGroup(placement: .navigationBarTrailing) {
if viewModel.isHiddenPreviousButton { if !viewModel.isHiddenPreviousButton {
Button { Button {
viewModel.requestPreviousPage() viewModel.requestPreviousPage()
} label: { } label: {
Image(systemName: "chevron.left") Image(systemName: "chevron.left")
} }
} }
if viewModel.isHiddenNextButton { if !viewModel.isHiddenNextButton {
Button { Button {
viewModel.requestNextPage() viewModel.requestNextPage()
} label: { } label: {