jellyflood/Shared/Extensions/JellyfinAPI/BaseItemKind.swift

196 lines
5.4 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) 2025 Jellyfin & Jellyfin Contributors
//
import JellyfinAPI
extension BaseItemKind: SupportedCaseIterable {
/// The base supported cases for media navigation.
/// This differs from media viewing, which may include
/// `.episode`.
///
/// These is the *base* supported cases and other objects
/// like `LibararyParent` may have additional supported
/// cases for querying a library.
static var supportedCases: [BaseItemKind] {
[.movie, .series, .boxSet]
}
}
extension BaseItemKind: ItemFilter {
var displayTitle: String {
switch self {
case .aggregateFolder:
return L10n.aggregateFolder
case .audio:
return L10n.audio
case .audioBook:
return L10n.audioBook
case .basePluginFolder:
return L10n.basePluginFolder
case .book:
return L10n.book
case .boxSet:
return L10n.collection
case .channel:
return L10n.channel
case .channelFolderItem:
return L10n.channelFolderItem
case .collectionFolder:
return L10n.collectionFolder
case .episode:
return L10n.episode
case .folder:
return L10n.folder
case .genre:
return L10n.genre
case .manualPlaylistsFolder:
return L10n.manualPlaylistsFolder
case .movie:
return L10n.movie
case .liveTvChannel:
return L10n.liveTVChannel
case .liveTvProgram:
return L10n.liveTVProgram
case .musicAlbum:
return L10n.album
case .musicArtist:
return L10n.artist
case .musicGenre:
return L10n.genre
case .musicVideo:
return L10n.musicVideo
case .person:
return L10n.person
case .photo:
return L10n.photo
case .photoAlbum:
return L10n.photoAlbum
case .playlist:
return L10n.playlist
case .playlistsFolder:
return L10n.playlistsFolder
case .program:
return L10n.program
case .recording:
return L10n.recording
case .season:
return L10n.season
case .series:
return L10n.series
case .studio:
return L10n.studio
case .trailer:
return L10n.trailer
case .tvChannel:
return L10n.tvChannel
case .tvProgram:
return L10n.tvProgram
case .userRootFolder:
return L10n.userRootFolder
case .userView:
return L10n.userView
case .video:
return L10n.video
case .year:
return L10n.year
}
}
}
extension BaseItemKind {
var pluralDisplayTitle: String {
switch self {
case .aggregateFolder:
return L10n.aggregateFolders
case .audio:
return L10n.audio
case .audioBook:
return L10n.audioBooks
case .basePluginFolder:
return L10n.basePluginFolders
case .book:
return L10n.books
case .boxSet:
return L10n.collections
case .channel:
return L10n.channels
case .channelFolderItem:
return L10n.channelFolderItems
case .collectionFolder:
return L10n.collectionFolders
case .episode:
return L10n.episodes
case .folder:
return L10n.folders
case .genre:
return L10n.genres
case .manualPlaylistsFolder:
return L10n.manualPlaylistsFolders
case .movie:
return L10n.movies
case .liveTvChannel:
return L10n.liveTVChannels
case .liveTvProgram:
return L10n.liveTVPrograms
case .musicAlbum:
return L10n.albums
case .musicArtist:
return L10n.artists
case .musicGenre:
return L10n.genres
case .musicVideo:
return L10n.musicVideos
case .person:
return L10n.people
case .photo:
return L10n.photos
case .photoAlbum:
return L10n.photoAlbums
case .playlist:
return L10n.playlists
case .playlistsFolder:
return L10n.playlistsFolders
case .program:
return L10n.programs
case .recording:
return L10n.recordings
case .season:
return L10n.seasons
case .series:
return L10n.series
case .studio:
return L10n.studios
case .trailer:
return L10n.trailers
case .tvChannel:
return L10n.tvChannels
case .tvProgram:
return L10n.tvPrograms
case .userRootFolder:
return L10n.userRootFolders
case .userView:
return L10n.userViews
case .video:
return L10n.videos
case .year:
return L10n.years
}
}
}
extension BaseItemKind {
/// Item types that can be identified on the server.
static var itemIdentifiableCases: [BaseItemKind] {
[.boxSet, .movie, .person, .series]
}
}