diff --git a/Shared/Generated/Strings.swift b/Shared/Generated/Strings.swift index 561ba3af..dd87548e 100644 --- a/Shared/Generated/Strings.swift +++ b/Shared/Generated/Strings.swift @@ -324,6 +324,8 @@ internal enum L10n { internal static var settings: String { return L10n.tr("Localizable", "settings") } /// Show Cast & Crew internal static var showCastAndCrew: String { return L10n.tr("Localizable", "showCastAndCrew") } + /// Show Flatten Library View + internal static var showFlattenView: String { return L10n.tr("Localizable", "showFlattenView") } /// Show Missing Episodes internal static var showMissingEpisodes: String { return L10n.tr("Localizable", "showMissingEpisodes") } /// Show Missing Seasons diff --git a/Shared/SwiftfinStore/SwiftfinStoreDefaults.swift b/Shared/SwiftfinStore/SwiftfinStoreDefaults.swift index 3cf1480c..c94abfc8 100644 --- a/Shared/SwiftfinStore/SwiftfinStoreDefaults.swift +++ b/Shared/SwiftfinStore/SwiftfinStoreDefaults.swift @@ -41,6 +41,7 @@ extension Defaults.Keys { // Customize settings static let showPosterLabels = Key("showPosterLabels", default: true, suite: SwiftfinStore.Defaults.generalSuite) static let showCastAndCrew = Key("showCastAndCrew", default: true, suite: SwiftfinStore.Defaults.generalSuite) + static let showFlattenView = Key("showFlattenView", default: true, suite: SwiftfinStore.Defaults.generalSuite) // Video player / overlay settings static let overlayType = Key("overlayType", default: .normal, suite: SwiftfinStore.Defaults.generalSuite) diff --git a/Shared/ViewModels/LibraryViewModel.swift b/Shared/ViewModels/LibraryViewModel.swift index 3f65aed9..0a9bd1db 100644 --- a/Shared/ViewModels/LibraryViewModel.swift +++ b/Shared/ViewModels/LibraryViewModel.swift @@ -7,6 +7,7 @@ // import Combine +import Defaults import Foundation import JellyfinAPI import SwiftUICollection @@ -94,10 +95,16 @@ final class LibraryViewModel: ViewModel { genreIDs = filters.withGenres.compactMap(\.id) } let sortBy = filters.sortBy.map(\.rawValue) - let queryRecursive = filters.filters.contains(.isFavorite) || + let queryRecursive = Defaults[.showFlattenView] || filters.filters.contains(.isFavorite) || self.person != nil || self.genre != nil || self.studio != nil + let includeItemTypes: [String] + if filters.filters.contains(.isFavorite) { + includeItemTypes = ["Movie", "Series", "Season", "Episode", "BoxSet"] + } else { + includeItemTypes = ["Movie", "Series", "BoxSet"] + (Defaults[.showFlattenView] ? [] : ["Folder"]) + } ItemsAPI.getItemsByUserId(userId: SessionManager.main.currentLogin.user.id, startIndex: currentPage * pageItemSize, limit: pageItemSize, @@ -114,9 +121,7 @@ final class LibraryViewModel: ViewModel { .people, .chapters, ], - includeItemTypes: filters.filters - .contains(.isFavorite) ? ["Movie", "Series", "Season", "Episode", "BoxSet"] : - ["Movie", "Series", "BoxSet", "Folder"], + includeItemTypes: includeItemTypes, filters: filters.filters, sortBy: sortBy, tags: filters.tags, diff --git a/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings.swift b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings.swift index 65764e6f..78ccb5b6 100644 --- a/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings.swift +++ b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings.swift @@ -15,6 +15,8 @@ struct CustomizeViewsSettings: View { var showPosterLabels @Default(.showCastAndCrew) var showCastAndCrew + @Default(.showFlattenView) + var showFlattenView var body: some View { Form { @@ -24,6 +26,7 @@ struct CustomizeViewsSettings: View { // TODO: Uncomment when cast and crew implemented in item views // Toggle(L10n.showCastAndCrew, isOn: $showCastAndCrew) + Toggle(L10n.showFlattenView, isOn: $showFlattenView) } header: { L10n.customize.text diff --git a/Swiftfin/Views/SettingsView/CustomizeViewsSettings.swift b/Swiftfin/Views/SettingsView/CustomizeViewsSettings.swift index 2cbe816d..e443a738 100644 --- a/Swiftfin/Views/SettingsView/CustomizeViewsSettings.swift +++ b/Swiftfin/Views/SettingsView/CustomizeViewsSettings.swift @@ -15,6 +15,8 @@ struct CustomizeViewsSettings: View { var showPosterLabels @Default(.showCastAndCrew) var showCastAndCrew + @Default(.showFlattenView) + var showFlattenView var body: some View { Form { @@ -22,6 +24,7 @@ struct CustomizeViewsSettings: View { Toggle(L10n.showPosterLabels, isOn: $showPosterLabels) Toggle(L10n.showCastAndCrew, isOn: $showCastAndCrew) + Toggle(L10n.showFlattenView, isOn: $showFlattenView) } header: { L10n.customize.text diff --git a/Translations/en.lproj/Localizable.strings b/Translations/en.lproj/Localizable.strings index 454c8e7e..d83b11a8 100644 Binary files a/Translations/en.lproj/Localizable.strings and b/Translations/en.lproj/Localizable.strings differ