fix requested changes
This commit is contained in:
parent
60414101ad
commit
dd480def5c
|
@ -83,7 +83,7 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"package": "swift-protobuf",
|
||||
"package": "SwiftProtobuf",
|
||||
"repositoryURL": "https://github.com/apple/swift-protobuf.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
|
|
|
@ -28,31 +28,31 @@ struct LibraryFilterView: View {
|
|||
Form {
|
||||
if viewModel.enabledFilterType.contains(.genre) {
|
||||
MultiSelector(label: "Genres",
|
||||
options: viewModel.allGenres,
|
||||
options: viewModel.possibleGenres,
|
||||
optionToString: { $0.name ?? "" },
|
||||
selected: $viewModel.modifyedFilters.withGenres)
|
||||
}
|
||||
if viewModel.enabledFilterType.contains(.filter) {
|
||||
MultiSelector(label: "Filters",
|
||||
options: viewModel.allItemFilters,
|
||||
options: viewModel.possibleItemFilters,
|
||||
optionToString: { $0.localized },
|
||||
selected: $viewModel.modifyedFilters.filters)
|
||||
}
|
||||
if viewModel.enabledFilterType.contains(.tag) {
|
||||
MultiSelector(label: "Tags",
|
||||
options: viewModel.allTags,
|
||||
options: viewModel.possibleTags,
|
||||
optionToString: { $0 },
|
||||
selected: $viewModel.modifyedFilters.tags)
|
||||
}
|
||||
if viewModel.enabledFilterType.contains(.sortBy) {
|
||||
MultiSelector(label: "Sort by",
|
||||
options: viewModel.allSortBys,
|
||||
options: viewModel.possibleSortBys,
|
||||
optionToString: { $0.localized },
|
||||
selected: $viewModel.modifyedFilters.sortBy)
|
||||
}
|
||||
if viewModel.enabledFilterType.contains(.sortOrder) {
|
||||
MultiSelector(label: "Sort Order",
|
||||
options: viewModel.allSortOrders,
|
||||
options: viewModel.possibleSortOrders,
|
||||
optionToString: { $0.localized },
|
||||
selected: $viewModel.modifyedFilters.sortOrder)
|
||||
}
|
||||
|
|
|
@ -64,7 +64,7 @@ struct LibraryView: View {
|
|||
}.onRotate { _ in
|
||||
recalcTracks()
|
||||
}
|
||||
if viewModel.isCanNextPaging || viewModel.isCanPreviousPaging {
|
||||
if viewModel.hasNextPage || viewModel.hasPreviousPage {
|
||||
HStack {
|
||||
Spacer()
|
||||
HStack {
|
||||
|
@ -73,7 +73,7 @@ struct LibraryView: View {
|
|||
} label: {
|
||||
Image(systemName: "chevron.left")
|
||||
.font(.system(size: 25))
|
||||
}.disabled(viewModel.isCanPreviousPaging)
|
||||
}.disabled(viewModel.hasPreviousPage)
|
||||
Text("Page \(String(viewModel.currentPage + 1)) of \(String(viewModel.totalPages))")
|
||||
.font(.headline)
|
||||
.fontWeight(.semibold)
|
||||
|
@ -82,7 +82,7 @@ struct LibraryView: View {
|
|||
} label: {
|
||||
Image(systemName: "chevron.right")
|
||||
.font(.system(size: 25))
|
||||
}.disabled(viewModel.isCanNextPaging)
|
||||
}.disabled(viewModel.hasNextPage)
|
||||
}
|
||||
Spacer()
|
||||
}
|
||||
|
@ -97,14 +97,14 @@ struct LibraryView: View {
|
|||
.navigationBarTitle(title, displayMode: .inline)
|
||||
.toolbar {
|
||||
ToolbarItemGroup(placement: .navigationBarTrailing) {
|
||||
if viewModel.isCanPreviousPaging {
|
||||
if viewModel.hasPreviousPage {
|
||||
Button {
|
||||
viewModel.requestPreviousPage()
|
||||
} label: {
|
||||
Image(systemName: "chevron.left")
|
||||
}
|
||||
}
|
||||
if viewModel.isCanNextPaging {
|
||||
if viewModel.hasNextPage {
|
||||
Button {
|
||||
viewModel.requestNextPage()
|
||||
} label: {
|
||||
|
|
|
@ -28,38 +28,36 @@ extension SortBy {
|
|||
var localized: String {
|
||||
switch self {
|
||||
case .productionYear:
|
||||
return "Production year"
|
||||
return "Release Year"
|
||||
case .premiereDate:
|
||||
return "Premiere date"
|
||||
case .name:
|
||||
return "Name"
|
||||
return "Title"
|
||||
case .dateAdded:
|
||||
return "Date created"
|
||||
return "Date added"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension ItemFilter {
|
||||
static var supportedTypes: [ItemFilter] {
|
||||
[.isUnplayed, isPlayed, .isFavorite, .likes, .isFavoriteOrLikes]
|
||||
}
|
||||
|
||||
var localized: String {
|
||||
switch self {
|
||||
case .isFolder:
|
||||
return "Is folder"
|
||||
case .isNotFolder:
|
||||
return "Is not folder"
|
||||
case .isUnplayed:
|
||||
return "Is unplayed"
|
||||
return "Unplayed"
|
||||
case .isPlayed:
|
||||
return "Is played"
|
||||
return "Played"
|
||||
case .isFavorite:
|
||||
return "Is favorite"
|
||||
case .isResumable:
|
||||
return "Is resumable"
|
||||
return "Favorites"
|
||||
case .likes:
|
||||
return "Likes"
|
||||
case .dislikes:
|
||||
return "Dislikes"
|
||||
return "Liked"
|
||||
case .isFavoriteOrLikes:
|
||||
return "Is favorite or likes"
|
||||
return "Favorites or Liked"
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,9 +28,8 @@ class DetailItemViewModel: ViewModel {
|
|||
}
|
||||
|
||||
func updateWatchState() {
|
||||
guard let id = item.id else { return }
|
||||
if isWatched {
|
||||
PlaystateAPI.markUnplayedItem(userId: SessionManager.current.user.user_id!, itemId: id)
|
||||
PlaystateAPI.markUnplayedItem(userId: SessionManager.current.user.user_id!, itemId: item.id!)
|
||||
.trackActivity(loading)
|
||||
.sink(receiveCompletion: { [weak self] completion in
|
||||
self?.handleAPIRequestCompletion(completion: completion)
|
||||
|
@ -39,7 +38,7 @@ class DetailItemViewModel: ViewModel {
|
|||
})
|
||||
.store(in: &cancellables)
|
||||
} else {
|
||||
PlaystateAPI.markPlayedItem(userId: SessionManager.current.user.user_id!, itemId: id)
|
||||
PlaystateAPI.markPlayedItem(userId: SessionManager.current.user.user_id!, itemId: item.id!)
|
||||
.trackActivity(loading)
|
||||
.sink(receiveCompletion: { [weak self] completion in
|
||||
self?.handleAPIRequestCompletion(completion: completion)
|
||||
|
@ -51,9 +50,8 @@ class DetailItemViewModel: ViewModel {
|
|||
}
|
||||
|
||||
func updateFavoriteState() {
|
||||
guard let id = item.id else { return }
|
||||
if isFavorited {
|
||||
UserLibraryAPI.unmarkFavoriteItem(userId: SessionManager.current.user.user_id!, itemId: id)
|
||||
UserLibraryAPI.unmarkFavoriteItem(userId: SessionManager.current.user.user_id!, itemId: item.id!)
|
||||
.trackActivity(loading)
|
||||
.sink(receiveCompletion: { [weak self] completion in
|
||||
self?.handleAPIRequestCompletion(completion: completion)
|
||||
|
@ -62,7 +60,7 @@ class DetailItemViewModel: ViewModel {
|
|||
})
|
||||
.store(in: &cancellables)
|
||||
} else {
|
||||
UserLibraryAPI.markFavoriteItem(userId: SessionManager.current.user.user_id!, itemId: id)
|
||||
UserLibraryAPI.markFavoriteItem(userId: SessionManager.current.user.user_id!, itemId: item.id!)
|
||||
.trackActivity(loading)
|
||||
.sink(receiveCompletion: { [weak self] completion in
|
||||
self?.handleAPIRequestCompletion(completion: completion)
|
||||
|
|
|
@ -21,10 +21,10 @@ final class LatestMediaViewModel: ViewModel {
|
|||
self.libraryID = libraryID
|
||||
super.init()
|
||||
|
||||
refresh()
|
||||
requestLatestMedia()
|
||||
}
|
||||
|
||||
func refresh() {
|
||||
func requestLatestMedia() {
|
||||
UserLibraryAPI.getLatestMedia(userId: SessionManager.current.user.user_id!, parentId: libraryID,
|
||||
fields: [
|
||||
.primaryImageAspectRatio,
|
||||
|
|
|
@ -24,15 +24,15 @@ final class LibraryFilterViewModel: ViewModel {
|
|||
var modifyedFilters = LibraryFilters()
|
||||
|
||||
@Published
|
||||
var allGenres = [NameGuidPair]()
|
||||
var possibleGenres = [NameGuidPair]()
|
||||
@Published
|
||||
var allTags = [String]()
|
||||
var possibleTags = [String]()
|
||||
@Published
|
||||
var allSortOrders = APISortOrder.allCases
|
||||
var possibleSortOrders = APISortOrder.allCases
|
||||
@Published
|
||||
var allSortBys = SortBy.allCases
|
||||
var possibleSortBys = SortBy.allCases
|
||||
@Published
|
||||
var allItemFilters = ItemFilter.allCases
|
||||
var possibleItemFilters = ItemFilter.supportedTypes
|
||||
@Published
|
||||
var enabledFilterType: [FilterType]
|
||||
|
||||
|
@ -43,18 +43,18 @@ final class LibraryFilterViewModel: ViewModel {
|
|||
if let filters = filters {
|
||||
self.modifyedFilters = filters
|
||||
}
|
||||
refresh()
|
||||
requestQueryFilters()
|
||||
}
|
||||
|
||||
func refresh() {
|
||||
func requestQueryFilters() {
|
||||
FilterAPI.getQueryFilters(userId: SessionManager.current.user.user_id!)
|
||||
.trackActivity(loading)
|
||||
.sink(receiveCompletion: { [weak self] completion in
|
||||
self?.handleAPIRequestCompletion(completion: completion)
|
||||
}, receiveValue: { [weak self] quertFilters in
|
||||
}, receiveValue: { [weak self] queryFilters in
|
||||
guard let self = self else { return }
|
||||
self.allGenres = quertFilters.genres ?? []
|
||||
self.allTags = quertFilters.tags ?? []
|
||||
self.possibleGenres = queryFilters.genres ?? []
|
||||
self.possibleTags = queryFilters.tags ?? []
|
||||
})
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
|
|
@ -22,10 +22,10 @@ final class LibraryListViewModel: ViewModel {
|
|||
|
||||
libraries.append(.init(name: "Favorites", id: "favorites"))
|
||||
libraries.append(.init(name: "Genres", id: "genres"))
|
||||
refresh()
|
||||
requsetLibraries()
|
||||
}
|
||||
|
||||
func refresh() {
|
||||
func requsetLibraries() {
|
||||
UserViewsAPI.getUserViews(userId: SessionManager.current.user.user_id!)
|
||||
.trackActivity(loading)
|
||||
.sink(receiveCompletion: { completion in
|
||||
|
|
|
@ -25,9 +25,9 @@ final class LibraryViewModel: ViewModel {
|
|||
@Published
|
||||
var currentPage = 0
|
||||
@Published
|
||||
var isCanNextPaging = false
|
||||
var hasNextPage = false
|
||||
@Published
|
||||
var isCanPreviousPaging = false
|
||||
var hasPreviousPage = false
|
||||
|
||||
// temp
|
||||
@Published
|
||||
|
@ -55,11 +55,11 @@ final class LibraryViewModel: ViewModel {
|
|||
super.init()
|
||||
|
||||
$filters
|
||||
.sink(receiveValue: refresh(with:))
|
||||
.sink(receiveValue: requestItems(with:))
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
||||
func refresh(with filters: LibraryFilters) {
|
||||
func requestItems(with filters: LibraryFilters) {
|
||||
let personIDs: [String] = [person].compactMap(\.?.id)
|
||||
let studioIDs: [String] = [studio].compactMap(\.?.id)
|
||||
let genreIDs: [String]
|
||||
|
@ -82,8 +82,8 @@ final class LibraryViewModel: ViewModel {
|
|||
guard let self = self else { return }
|
||||
let totalPages = ceil(Double(response.totalRecordCount ?? 0) / 100.0)
|
||||
self.totalPages = Int(totalPages)
|
||||
self.isCanPreviousPaging = self.currentPage > 0
|
||||
self.isCanNextPaging = self.currentPage < self.totalPages - 1
|
||||
self.hasPreviousPage = self.currentPage > 0
|
||||
self.hasNextPage = self.currentPage < self.totalPages - 1
|
||||
self.items = response.items ?? []
|
||||
})
|
||||
.store(in: &cancellables)
|
||||
|
@ -91,11 +91,11 @@ final class LibraryViewModel: ViewModel {
|
|||
|
||||
func requestNextPage() {
|
||||
currentPage += 1
|
||||
refresh(with: filters)
|
||||
requestItems(with: filters)
|
||||
}
|
||||
|
||||
func requestPreviousPage() {
|
||||
currentPage -= 1
|
||||
refresh(with: filters)
|
||||
requestItems(with: filters)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,10 +22,10 @@ final class SeasonItemViewModel: ViewModel {
|
|||
self.item = item
|
||||
super.init()
|
||||
|
||||
refresh()
|
||||
requestEpisodes()
|
||||
}
|
||||
|
||||
func refresh() {
|
||||
func requestEpisodes() {
|
||||
TvShowsAPI.getEpisodes(seriesId: item.seriesId ?? "", userId: SessionManager.current.user.user_id!,
|
||||
fields: [.primaryImageAspectRatio, .seriesPrimaryImage, .seasonUserData, .overview, .genres, .people],
|
||||
seasonId: item.id ?? "")
|
||||
|
|
|
@ -22,10 +22,10 @@ final class SeriesItemViewModel: ViewModel {
|
|||
self.item = item
|
||||
super.init()
|
||||
|
||||
refresh()
|
||||
requestSeasons()
|
||||
}
|
||||
|
||||
func refresh() {
|
||||
func requestSeasons() {
|
||||
TvShowsAPI.getSeasons(seriesId: item.id ?? "", fields: [.primaryImageAspectRatio, .seriesPrimaryImage, .seasonUserData, .overview, .genres, .people])
|
||||
.trackActivity(loading)
|
||||
.sink(receiveCompletion: { [weak self] completion in
|
||||
|
|
Loading…
Reference in New Issue