From 7ada918ea563e8122cc8b30b40cd9dc7ce131b45 Mon Sep 17 00:00:00 2001 From: PangMo5 Date: Thu, 27 May 2021 17:54:42 +0900 Subject: [PATCH] JellyfinAPI applied in Library, Search --- JellyfinPlayer/APIs/JellyfinAPI.swift | 14 +++++++------- .../Library/ViewModels/LibraryViewModel.swift | 3 +++ .../Search/ViewModels/LibrarySearchViewModel.swift | 2 ++ JellyfinPlayer/LibraryView.swift | 4 ++-- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/JellyfinPlayer/APIs/JellyfinAPI.swift b/JellyfinPlayer/APIs/JellyfinAPI.swift index 592ccc5e..b2941331 100644 --- a/JellyfinPlayer/APIs/JellyfinAPI.swift +++ b/JellyfinPlayer/APIs/JellyfinAPI.swift @@ -62,7 +62,7 @@ extension Filter { parameters["ImageTypeLimit"] = imageTypeLimit parameters["IncludeItemTypes"] = itemTypes.map(\.rawValue).joined(separator: ",") parameters["ParentId"] = parentID - parameters["Recursive"] = recursive + parameters["Recursive"] = recursive.description parameters["SortBy"] = sort?.rawValue parameters["SortOrder"] = asc?.rawValue parameters["Genres"] = genres.joined(separator: ",") @@ -108,15 +108,15 @@ extension JellyfinAPI: TargetType { switch self { case let .search(_, filter, searchQuery, page): var parameters = filter.toParamters - parameters["searchTerm"] = searchQuery.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) - parameters["StartIndex"] = page * 100 + parameters["searchTerm"] = searchQuery + parameters["StartIndex"] = (page - 1) * 100 parameters["Limit"] = 100 - return .requestParameters(parameters: parameters, encoding: JSONEncoding.default) + return .requestParameters(parameters: parameters, encoding: URLEncoding.default) case let .items(_, filter, page): var parameters = filter.toParamters - parameters["StartIndex"] = page * 100 + parameters["StartIndex"] = (page - 1) * 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, _, _), let .search(global, _, _, _): return [ - "X-Emby-Authorization": global.authHeader, + "X-Emby-Authorization": global.authHeader ] } } diff --git a/JellyfinPlayer/Domains/Library/ViewModels/LibraryViewModel.swift b/JellyfinPlayer/Domains/Library/ViewModels/LibraryViewModel.swift index b472c7e4..0dae2938 100644 --- a/JellyfinPlayer/Domains/Library/ViewModels/LibraryViewModel.swift +++ b/JellyfinPlayer/Domains/Library/ViewModels/LibraryViewModel.swift @@ -70,6 +70,9 @@ final class LibraryViewModel: ObservableObject { } fileprivate func requestItems() { + print(globalData.server?.baseURI) + print(globalData.authHeader) + print(filter) isLoading = true provider.requestPublisher(.items(globalData: globalData, filter: filter, page: page)) // .map(ResumeItem.self) TO DO diff --git a/JellyfinPlayer/Domains/Search/ViewModels/LibrarySearchViewModel.swift b/JellyfinPlayer/Domains/Search/ViewModels/LibrarySearchViewModel.swift index 25978768..92d28ca5 100644 --- a/JellyfinPlayer/Domains/Search/ViewModels/LibrarySearchViewModel.swift +++ b/JellyfinPlayer/Domains/Search/ViewModels/LibrarySearchViewModel.swift @@ -42,6 +42,7 @@ final class LibrarySearchViewModel: ObservableObject { cancellables.removeAll() $searchQuery + .debounce(for: 0.25, scheduler: DispatchQueue.main) .sink(receiveValue: requestSearch(query:)) .store(in: &cancellables) } @@ -55,6 +56,7 @@ final class LibrarySearchViewModel: ObservableObject { self.isLoading = false }, receiveValue: { response in let body = response.data + self.items.removeAll() do { let json = try JSON(data: body) for (_, item): (String, JSON) in json["Items"] { diff --git a/JellyfinPlayer/LibraryView.swift b/JellyfinPlayer/LibraryView.swift index 8d5182ec..d8ce2475 100644 --- a/JellyfinPlayer/LibraryView.swift +++ b/JellyfinPlayer/LibraryView.swift @@ -92,14 +92,14 @@ struct LibraryView: View { .navigationTitle(title) .toolbar { ToolbarItemGroup(placement: .navigationBarTrailing) { - if viewModel.isHiddenPreviousButton { + if !viewModel.isHiddenPreviousButton { Button { viewModel.requestPreviousPage() } label: { Image(systemName: "chevron.left") } } - if viewModel.isHiddenNextButton { + if !viewModel.isHiddenNextButton { Button { viewModel.requestNextPage() } label: {