jellyflood/Shared/Objects/ItemFilters.swift

40 lines
1.2 KiB
Swift

//
// Swiftfin is subject to the terms of the Mozilla Public
// License, v2.0. If a copy of the MPL was not distributed with this
// file, you can obtain one at https://mozilla.org/MPL/2.0/.
//
// Copyright (c) 2024 Jellyfin & Jellyfin Contributors
//
import Combine
import Defaults
import Foundation
import JellyfinAPI
struct ItemFilters: Codable, Defaults.Serializable, Hashable {
var genres: [Filter] = []
var filters: [Filter] = []
var sortOrder: [Filter] = [APISortOrder.ascending.filter]
var sortBy: [Filter] = [SortBy.name.filter]
static let favorites: ItemFilters = .init(filters: [ItemFilter.isFavorite.filter])
static let recent: ItemFilters = .init(sortOrder: [APISortOrder.descending.filter], sortBy: [SortBy.dateAdded.filter])
static let all: ItemFilters = .init(
filters: ItemFilter.supportedCases.map(\.filter),
sortOrder: APISortOrder.allCases.map(\.filter),
sortBy: SortBy.allCases.map(\.filter)
)
var hasFilters: Bool {
self != .init()
}
// Type-erased object for use with WritableKeyPath
struct Filter: Codable, Defaults.Serializable, Displayable, Hashable, Identifiable {
var displayTitle: String
var id: String?
var filterName: String
}
}