From bcbd8f335030a05c1cb748ed4e5c96604f130bc1 Mon Sep 17 00:00:00 2001 From: Arkadiusz Fal Date: Thu, 12 Feb 2026 08:30:45 +0100 Subject: [PATCH] Persist media browser view options per source Save sort order, sort direction, and show-only-playable filter to UserDefaults keyed by source ID so preferences survive navigation. --- .../Views/MediaBrowser/MediaBrowserView.swift | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/Yattee/Views/MediaBrowser/MediaBrowserView.swift b/Yattee/Views/MediaBrowser/MediaBrowserView.swift index 00a09f50..f5512c71 100644 --- a/Yattee/Views/MediaBrowser/MediaBrowserView.swift +++ b/Yattee/Views/MediaBrowser/MediaBrowserView.swift @@ -19,8 +19,8 @@ struct MediaBrowserView: View { @State private var isLoading = false @State private var error: MediaSourceError? @State private var showOnlyPlayable: Bool - @State private var sortOrder: MediaBrowserSortOrder = .name - @State private var sortAscending = true + @State private var sortOrder: MediaBrowserSortOrder + @State private var sortAscending: Bool @State private var showViewOptions = false private var listStyle: VideoListStyle { @@ -31,7 +31,19 @@ struct MediaBrowserView: View { self.source = source self.initialPath = path _currentPath = State(initialValue: path) - _showOnlyPlayable = State(initialValue: showOnlyPlayable) + + let defaults = UserDefaults.standard + let key = "mediaBrowser.\(source.id.uuidString)" + + if let raw = defaults.string(forKey: "\(key).sortOrder"), + let saved = MediaBrowserSortOrder(rawValue: raw) { + _sortOrder = State(initialValue: saved) + } else { + _sortOrder = State(initialValue: .name) + } + + _sortAscending = State(initialValue: defaults.object(forKey: "\(key).sortAscending") as? Bool ?? true) + _showOnlyPlayable = State(initialValue: defaults.object(forKey: "\(key).showOnlyPlayable") as? Bool ?? showOnlyPlayable) } /// Files filtered and sorted based on current settings. @@ -114,6 +126,15 @@ struct MediaBrowserView: View { .task { await loadFiles() } + .onChange(of: sortOrder) { _, newValue in + savePreference(newValue.rawValue, forKey: "sortOrder") + } + .onChange(of: sortAscending) { _, newValue in + savePreference(newValue, forKey: "sortAscending") + } + .onChange(of: showOnlyPlayable) { _, newValue in + savePreference(newValue, forKey: "showOnlyPlayable") + } } private var navigationTitle: String { @@ -173,6 +194,12 @@ struct MediaBrowserView: View { } } + // MARK: - Preferences + + private func savePreference(_ value: Any, forKey suffix: String) { + UserDefaults.standard.set(value, forKey: "mediaBrowser.\(source.id.uuidString).\(suffix)") + } + // MARK: - Loading @MainActor