From ddaa9cbfe0cc8d254d4901ad192918d91dd627d4 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Wed, 1 Apr 2026 13:59:52 +0000 Subject: Migrate settings manager to Swift Observation --- Sora/Views/BookmarkMenuButtonView.swift | 3 +- Sora/Views/BookmarksView.swift | 5 +- Sora/Views/FavoriteMenuButtonView.swift | 3 +- Sora/Views/FavoritePostThumbnailView.swift | 5 +- Sora/Views/FavoritesView.swift | 5 +- Sora/Views/Generic/GenericItemView.swift | 3 +- Sora/Views/Generic/GenericListView.swift | 3 +- Sora/Views/MainView.swift | 74 +++++++++++++--------- .../Details/Carousel/PostDetailsCarouselView.swift | 3 +- Sora/Views/Post/Details/PostDetailsImageView.swift | 3 +- Sora/Views/Post/Details/PostDetailsTagsView.swift | 5 +- Sora/Views/Post/Details/PostDetailsView.swift | 3 +- .../Post/Grid/PostGridBookmarkButtonView.swift | 3 +- .../Post/Grid/PostGridFavoriteButtonView.swift | 5 +- .../Post/Grid/PostGridSearchHistoryView.swift | 5 +- Sora/Views/Post/Grid/PostGridThumbnailView.swift | 3 +- Sora/Views/Post/Grid/PostGridView.swift | 3 +- .../Collections/SettingsCollectionsListView.swift | 3 +- .../Collections/SettingsCollectionsView.swift | 3 +- .../SettingsSectionContentRatingsView.swift | 5 +- .../Section/SettingsSectionDebugView.swift | 3 +- .../Section/SettingsSectionDetailsView.swift | 7 +- .../Section/SettingsSectionImportExportView.swift | 3 +- .../Section/SettingsSectionProviderView.swift | 11 +++- .../Section/SettingsSectionSearchView.swift | 5 +- .../Section/SettingsSectionSettingsView.swift | 11 +++- .../Section/SettingsSectionThumbnailsView.swift | 7 +- Sora/Views/Settings/SettingsView.swift | 2 +- 28 files changed, 125 insertions(+), 69 deletions(-) (limited to 'Sora/Views') diff --git a/Sora/Views/BookmarkMenuButtonView.swift b/Sora/Views/BookmarkMenuButtonView.swift index 8446539..6cd6812 100644 --- a/Sora/Views/BookmarkMenuButtonView.swift +++ b/Sora/Views/BookmarkMenuButtonView.swift @@ -1,7 +1,8 @@ import SwiftUI struct BookmarkMenuButtonView: View { - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings let tags: [String] let provider: BooruProvider var disableNewCollection = false diff --git a/Sora/Views/BookmarksView.swift b/Sora/Views/BookmarksView.swift index a20d9f0..bda4136 100644 --- a/Sora/Views/BookmarksView.swift +++ b/Sora/Views/BookmarksView.swift @@ -1,7 +1,8 @@ import SwiftUI struct BookmarksView: View { - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings @Binding var selectedTab: Int var body: some View { @@ -26,6 +27,6 @@ struct BookmarksView: View { #Preview { BookmarksView(selectedTab: .constant(1)) - .environmentObject(SettingsManager()) + .environment(SettingsManager()) .environmentObject(BooruManager(.yandere)) } diff --git a/Sora/Views/FavoriteMenuButtonView.swift b/Sora/Views/FavoriteMenuButtonView.swift index a29b2b0..d1c78fe 100644 --- a/Sora/Views/FavoriteMenuButtonView.swift +++ b/Sora/Views/FavoriteMenuButtonView.swift @@ -1,7 +1,8 @@ import SwiftUI struct FavoriteMenuButtonView: View { - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings @EnvironmentObject var manager: BooruManager let post: BooruPost var disableNewCollection = false diff --git a/Sora/Views/FavoritePostThumbnailView.swift b/Sora/Views/FavoritePostThumbnailView.swift index 41113b9..b1f727b 100644 --- a/Sora/Views/FavoritePostThumbnailView.swift +++ b/Sora/Views/FavoritePostThumbnailView.swift @@ -2,7 +2,8 @@ import NetworkImage import SwiftUI struct FavoritePostThumbnailView: View { - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings let favorite: SettingsFavoritePost let onRemove: () -> Void private var networkImageLoader: BooruNetworkImageLoader { @@ -95,5 +96,5 @@ struct FavoritePostThumbnailView: View { ) FavoritePostThumbnailView(favorite: sampleFavorite) { () } - .environmentObject(SettingsManager()) + .environment(SettingsManager()) } diff --git a/Sora/Views/FavoritesView.swift b/Sora/Views/FavoritesView.swift index 007500b..50de8ed 100644 --- a/Sora/Views/FavoritesView.swift +++ b/Sora/Views/FavoritesView.swift @@ -3,7 +3,8 @@ import SwiftUI struct FavoritesView: View { // swiftlint:disable:this type_body_length - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings @EnvironmentObject var manager: BooruManager @Binding var selectedTab: Int @State private var searchText: String = "" @@ -701,6 +702,6 @@ extension SettingsFavoritePost { #Preview { FavoritesView(selectedTab: .constant(1), isPresented: .constant(false)) - .environmentObject(SettingsManager()) + .environment(SettingsManager()) .environmentObject(BooruManager(.yandere)) } diff --git a/Sora/Views/Generic/GenericItemView.swift b/Sora/Views/Generic/GenericItemView.swift index 99c4f0a..a22d6c1 100644 --- a/Sora/Views/Generic/GenericItemView.swift +++ b/Sora/Views/Generic/GenericItemView.swift @@ -1,7 +1,8 @@ import SwiftUI struct GenericItemView: View { - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings let item: T let removeAction: (UUID) -> Void diff --git a/Sora/Views/Generic/GenericListView.swift b/Sora/Views/Generic/GenericListView.swift index d1c1436..58ae099 100644 --- a/Sora/Views/Generic/GenericListView.swift +++ b/Sora/Views/Generic/GenericListView.swift @@ -4,7 +4,8 @@ import SwiftUI // swiftlint:disable:next type_body_length struct GenericListView: View { - @EnvironmentObject private var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings @EnvironmentObject private var manager: BooruManager @Binding var selectedTab: Int @State private var searchText: String = "" diff --git a/Sora/Views/MainView.swift b/Sora/Views/MainView.swift index 06e067b..834b192 100644 --- a/Sora/Views/MainView.swift +++ b/Sora/Views/MainView.swift @@ -1,6 +1,14 @@ import SwiftUI struct MainView: View { + private struct ManagerConfiguration: Equatable { + let provider: BooruProvider + let credentials: BooruProviderCredentials? + let sendUserAgent: Bool + let customUserAgent: String + let showHeldMoebooruPosts: Bool + } + private enum MainSidebarSection: Int, CaseIterable, Hashable { case posts = 0 case bookmarks = 1 @@ -33,28 +41,34 @@ struct MainView: View { } } - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings @State private var selectedTab: Int = 0 @State private var selectedSidebarSection: MainSidebarSection? = .posts @State private var manager = BooruManager(.yandere) + private var managerConfiguration: ManagerConfiguration { + ManagerConfiguration( + provider: settings.preferredBooru, + credentials: settings.providerCredentials + .first { $0.provider == settings.preferredBooru }, + sendUserAgent: settings.sendBooruUserAgent, + customUserAgent: settings.customBooruUserAgent, + showHeldMoebooruPosts: settings.showHeldMoebooruPosts + ) + } + var body: some View { platformSpecificContent - .environmentObject(settings) + .environment(settings) .environmentObject(manager) - .onChange(of: settings.preferredBooru) { _, newState in - updateManager(newState) + .onChange(of: managerConfiguration) { _, newConfiguration in + updateManager(using: newConfiguration) } .onChange(of: manager.historyIndex) { _, _ in - if manager.isNavigatingHistory { - manager.selectedPost = nil - } + handleHistoryIndexChange() } .onAppear(perform: initializeManager) - .onChange(of: settings.providerCredentials) { updateManager(settings.preferredBooru) } - .onChange(of: settings.showHeldMoebooruPosts) { updateManager(settings.preferredBooru) } - .onChange(of: settings.sendBooruUserAgent) { updateManager(settings.preferredBooru) } - .onChange(of: settings.customBooruUserAgent) { updateManager(settings.preferredBooru) } #if os(macOS) .onChange(of: selectedSidebarSection) { _, newValue in guard let newValue else { return } @@ -159,17 +173,26 @@ struct MainView: View { #endif } - private func updateManager(_ provider: BooruProvider) { - let previousSearchText = manager.searchText + private func handleHistoryIndexChange() { + if manager.isNavigatingHistory { + manager.selectedPost = nil + } + } - manager = BooruManager( - provider, - credentials: settings.providerCredentials - .first { $0.provider == settings.preferredBooru }, - sendUserAgent: settings.sendBooruUserAgent, - customUserAgent: settings.customBooruUserAgent, - showHeldMoebooruPosts: settings.showHeldMoebooruPosts + private func makeManager(from configuration: ManagerConfiguration) -> BooruManager { + BooruManager( + configuration.provider, + credentials: configuration.credentials, + sendUserAgent: configuration.sendUserAgent, + customUserAgent: configuration.customUserAgent, + showHeldMoebooruPosts: configuration.showHeldMoebooruPosts ) + } + + private func updateManager(using configuration: ManagerConfiguration) { + let previousSearchText = manager.searchText + + manager = makeManager(from: configuration) manager.searchText = previousSearchText Task(priority: .userInitiated) { @@ -182,14 +205,7 @@ struct MainView: View { } private func initializeManager() { - manager = BooruManager( - settings.preferredBooru, - credentials: settings.providerCredentials - .first { $0.provider == settings.preferredBooru }, - sendUserAgent: settings.sendBooruUserAgent, - customUserAgent: settings.customBooruUserAgent, - showHeldMoebooruPosts: settings.showHeldMoebooruPosts - ) + manager = makeManager(from: managerConfiguration) Task(priority: .userInitiated) { if manager.posts.isEmpty { @@ -207,7 +223,7 @@ struct MainView: View { #endif MainView() - .environmentObject(SettingsManager()) + .environment(SettingsManager()) #if os(macOS) .frame( width: screenSize.width / widthCoefficient, diff --git a/Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift b/Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift index e43be47..55d6243 100644 --- a/Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift +++ b/Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift @@ -2,7 +2,8 @@ import SwiftUI struct PostDetailsCarouselView: View { @EnvironmentObject var manager: BooruManager - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings let posts: [BooruPost] let focusedPost: BooruPost? let onFocusedPostChange: (BooruPost) -> Void diff --git a/Sora/Views/Post/Details/PostDetailsImageView.swift b/Sora/Views/Post/Details/PostDetailsImageView.swift index 5b954a6..009dbed 100644 --- a/Sora/Views/Post/Details/PostDetailsImageView.swift +++ b/Sora/Views/Post/Details/PostDetailsImageView.swift @@ -3,7 +3,8 @@ import SwiftUI import UserNotifications struct PostDetailsImageView: View { // swiftlint:disable:this type_body_length - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings @EnvironmentObject var manager: BooruManager var url: URL? @Binding var loadingState: BooruPostLoadingState diff --git a/Sora/Views/Post/Details/PostDetailsTagsView.swift b/Sora/Views/Post/Details/PostDetailsTagsView.swift index 72ba757..f843b6c 100644 --- a/Sora/Views/Post/Details/PostDetailsTagsView.swift +++ b/Sora/Views/Post/Details/PostDetailsTagsView.swift @@ -2,7 +2,8 @@ import SwiftUI struct PostDetailsTagsView: View { @EnvironmentObject var manager: BooruManager - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings @Binding var isPresented: Bool @Binding var navigationPath: NavigationPath var tags: [String] @@ -101,5 +102,5 @@ struct PostDetailsTagsView: View { tags: ["hololive", "absurdres", "nekomimi"] ) .environmentObject(BooruManager(.danbooru)) - .environmentObject(SettingsManager()) + .environment(SettingsManager()) } diff --git a/Sora/Views/Post/Details/PostDetailsView.swift b/Sora/Views/Post/Details/PostDetailsView.swift index bb58c49..d8a77c6 100644 --- a/Sora/Views/Post/Details/PostDetailsView.swift +++ b/Sora/Views/Post/Details/PostDetailsView.swift @@ -2,7 +2,8 @@ import SwiftUI struct PostDetailsView: View { @EnvironmentObject var manager: BooruManager - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings let post: BooruPost @Binding var navigationPath: NavigationPath @State private var loadingStage: BooruPostLoadingState = .loadingPreview diff --git a/Sora/Views/Post/Grid/PostGridBookmarkButtonView.swift b/Sora/Views/Post/Grid/PostGridBookmarkButtonView.swift index 2dadfc3..020e0ce 100644 --- a/Sora/Views/Post/Grid/PostGridBookmarkButtonView.swift +++ b/Sora/Views/Post/Grid/PostGridBookmarkButtonView.swift @@ -2,7 +2,8 @@ import SwiftUI struct PostGridBookmarkButtonView: View { @EnvironmentObject private var manager: BooruManager - @EnvironmentObject private var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings let tags: [String] let provider: BooruProvider diff --git a/Sora/Views/Post/Grid/PostGridFavoriteButtonView.swift b/Sora/Views/Post/Grid/PostGridFavoriteButtonView.swift index bd6b6f9..c6ecd7f 100644 --- a/Sora/Views/Post/Grid/PostGridFavoriteButtonView.swift +++ b/Sora/Views/Post/Grid/PostGridFavoriteButtonView.swift @@ -2,7 +2,8 @@ import SwiftUI struct PostGridFavoriteButtonView: View { @EnvironmentObject private var manager: BooruManager - @EnvironmentObject private var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings let post: BooruPost var isFavorited: Bool { @@ -40,6 +41,6 @@ struct PostGridFavoriteButtonView: View { ) PostGridFavoriteButtonView(post: samplePost) - .environmentObject(SettingsManager()) + .environment(SettingsManager()) .environmentObject(BooruManager(.yandere)) } diff --git a/Sora/Views/Post/Grid/PostGridSearchHistoryView.swift b/Sora/Views/Post/Grid/PostGridSearchHistoryView.swift index bc7c52a..fcadea1 100644 --- a/Sora/Views/Post/Grid/PostGridSearchHistoryView.swift +++ b/Sora/Views/Post/Grid/PostGridSearchHistoryView.swift @@ -1,7 +1,8 @@ import SwiftUI struct PostGridSearchHistoryView: View { - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings @Binding var selectedTab: Int @Binding var isPresented: Bool @@ -30,6 +31,6 @@ struct PostGridSearchHistoryView: View { selectedTab: .constant(0), isPresented: .constant(true) ) - .environmentObject(SettingsManager()) + .environment(SettingsManager()) .environmentObject(BooruManager(.safebooru)) } diff --git a/Sora/Views/Post/Grid/PostGridThumbnailView.swift b/Sora/Views/Post/Grid/PostGridThumbnailView.swift index 5f7829e..fade59b 100644 --- a/Sora/Views/Post/Grid/PostGridThumbnailView.swift +++ b/Sora/Views/Post/Grid/PostGridThumbnailView.swift @@ -2,7 +2,8 @@ import NetworkImage import SwiftUI struct PostGridThumbnailView: View { - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings @EnvironmentObject var manager: BooruManager let post: BooruPost let posts: [BooruPost] diff --git a/Sora/Views/Post/Grid/PostGridView.swift b/Sora/Views/Post/Grid/PostGridView.swift index 330e294..77e96aa 100644 --- a/Sora/Views/Post/Grid/PostGridView.swift +++ b/Sora/Views/Post/Grid/PostGridView.swift @@ -3,7 +3,8 @@ import SwiftUI struct PostGridView: View { // swiftlint:disable:this type_body_length - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings @EnvironmentObject var manager: BooruManager @State private var isSearchHistoryPresented = false @State private var isSettingsPresented = false diff --git a/Sora/Views/Settings/Collections/SettingsCollectionsListView.swift b/Sora/Views/Settings/Collections/SettingsCollectionsListView.swift index c474b79..1cd9121 100644 --- a/Sora/Views/Settings/Collections/SettingsCollectionsListView.swift +++ b/Sora/Views/Settings/Collections/SettingsCollectionsListView.swift @@ -1,7 +1,8 @@ import SwiftUI struct SettingsCollectionsListView: View { - @EnvironmentObject private var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings var body: some View { List { diff --git a/Sora/Views/Settings/Collections/SettingsCollectionsView.swift b/Sora/Views/Settings/Collections/SettingsCollectionsView.swift index a7ce5a7..f74fef9 100644 --- a/Sora/Views/Settings/Collections/SettingsCollectionsView.swift +++ b/Sora/Views/Settings/Collections/SettingsCollectionsView.swift @@ -1,7 +1,8 @@ import SwiftUI struct SettingsCollectionsView: View { - @EnvironmentObject private var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings @State private var isDeleteConfirmationPresented = false @State private var isRenameAlertPresented = false diff --git a/Sora/Views/Settings/Section/SettingsSectionContentRatingsView.swift b/Sora/Views/Settings/Section/SettingsSectionContentRatingsView.swift index 40a8a7e..353824a 100644 --- a/Sora/Views/Settings/Section/SettingsSectionContentRatingsView.swift +++ b/Sora/Views/Settings/Section/SettingsSectionContentRatingsView.swift @@ -1,7 +1,8 @@ import SwiftUI struct SettingsSectionContentRatingsView: View { - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings var body: some View { List { @@ -70,5 +71,5 @@ struct SettingsSectionContentRatingsView: View { #Preview { SettingsSectionContentRatingsView() - .environmentObject(SettingsManager()) + .environment(SettingsManager()) } diff --git a/Sora/Views/Settings/Section/SettingsSectionDebugView.swift b/Sora/Views/Settings/Section/SettingsSectionDebugView.swift index 83acb81..c97b545 100644 --- a/Sora/Views/Settings/Section/SettingsSectionDebugView.swift +++ b/Sora/Views/Settings/Section/SettingsSectionDebugView.swift @@ -1,7 +1,8 @@ import SwiftUI struct SettingsSectionDebugView: View { - @EnvironmentObject private var settingsManager: SettingsManager + @Environment(SettingsManager.self) + private var settingsManager var body: some View { Button(action: { diff --git a/Sora/Views/Settings/Section/SettingsSectionDetailsView.swift b/Sora/Views/Settings/Section/SettingsSectionDetailsView.swift index 8db6002..c386634 100644 --- a/Sora/Views/Settings/Section/SettingsSectionDetailsView.swift +++ b/Sora/Views/Settings/Section/SettingsSectionDetailsView.swift @@ -1,9 +1,12 @@ import SwiftUI struct SettingsSectionDetailsView: View { - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings var body: some View { + @Bindable var settings = settings + Form { Section("Image Quality") { Picker("Image Quality", selection: $settings.detailViewQuality) { @@ -58,6 +61,6 @@ struct SettingsSectionDetailsView: View { #Preview { NavigationStack { SettingsSectionDetailsView() - .environmentObject(SettingsManager()) + .environment(SettingsManager()) } } diff --git a/Sora/Views/Settings/Section/SettingsSectionImportExportView.swift b/Sora/Views/Settings/Section/SettingsSectionImportExportView.swift index 381b6a4..846e9e5 100644 --- a/Sora/Views/Settings/Section/SettingsSectionImportExportView.swift +++ b/Sora/Views/Settings/Section/SettingsSectionImportExportView.swift @@ -2,7 +2,8 @@ import SwiftUI import UniformTypeIdentifiers struct SettingsSectionImportExportView: View { - @EnvironmentObject private var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings @State private var isFileExporterPresented = false @State private var isFileImporterPresented = false @State private var bookmarksExportDocument: JSONFileDocument? diff --git a/Sora/Views/Settings/Section/SettingsSectionProviderView.swift b/Sora/Views/Settings/Section/SettingsSectionProviderView.swift index b9a7900..02a8be6 100644 --- a/Sora/Views/Settings/Section/SettingsSectionProviderView.swift +++ b/Sora/Views/Settings/Section/SettingsSectionProviderView.swift @@ -1,13 +1,16 @@ import SwiftUI struct SettingsSectionProviderView: View { - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings @State private var showingCustomBooruSheet = false @State private var newDomain: String = "" @State private var newFlavor: BooruProviderFlavor = .danbooru @State private var domainError: String? var body: some View { + @Bindable var settings = settings + Form { Section("Source") { Picker("Website", selection: $settings.preferredBooru) { @@ -173,7 +176,9 @@ struct SettingsSectionProviderView: View { ) { Button("OK", role: .cancel) { () } } message: { - Text(domainError ?? "An unknown error occurred while validating the domain.") + if let domainError { + Text(domainError) + } } } @@ -271,6 +276,6 @@ struct SettingsSectionProviderView: View { #Preview { NavigationStack { SettingsSectionProviderView() - .environmentObject(SettingsManager()) + .environment(SettingsManager()) } } diff --git a/Sora/Views/Settings/Section/SettingsSectionSearchView.swift b/Sora/Views/Settings/Section/SettingsSectionSearchView.swift index b702cd4..e82f872 100644 --- a/Sora/Views/Settings/Section/SettingsSectionSearchView.swift +++ b/Sora/Views/Settings/Section/SettingsSectionSearchView.swift @@ -1,9 +1,12 @@ import SwiftUI struct SettingsSectionSearchView: View { - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings var body: some View { + @Bindable var settings = settings + Picker("Suggestions", selection: $settings.searchSuggestionsMode) { ForEach(SettingsSearchSuggestionsMode.allCases, id: \.self) { type in Text(type.rawValue.capitalized).tag(type) diff --git a/Sora/Views/Settings/Section/SettingsSectionSettingsView.swift b/Sora/Views/Settings/Section/SettingsSectionSettingsView.swift index 784ee2a..ad7fe83 100644 --- a/Sora/Views/Settings/Section/SettingsSectionSettingsView.swift +++ b/Sora/Views/Settings/Section/SettingsSectionSettingsView.swift @@ -1,17 +1,22 @@ import SwiftUI struct SettingsSectionSettingsView: View { - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings var body: some View { + @Bindable var settings = settings + Toggle(isOn: $settings.enableSync) { Text("Sync with iCloud") Text("Keep bookmarks, collections, search history, and sources in sync across your devices.") .font(.caption) } - .onChange(of: settings.enableSync) { _, _ in - settings.triggerSyncIfNeededForAll() + .onChange(of: settings.enableSync) { _, isEnabled in + if isEnabled { + settings.triggerSyncIfNeededForAll() + } } Button("Reset Settings") { diff --git a/Sora/Views/Settings/Section/SettingsSectionThumbnailsView.swift b/Sora/Views/Settings/Section/SettingsSectionThumbnailsView.swift index f8dffc8..dc9d87e 100644 --- a/Sora/Views/Settings/Section/SettingsSectionThumbnailsView.swift +++ b/Sora/Views/Settings/Section/SettingsSectionThumbnailsView.swift @@ -1,10 +1,13 @@ import SwiftUI struct SettingsSectionThumbnailsView: View { - @EnvironmentObject var settings: SettingsManager + @Environment(SettingsManager.self) + private var settings @State private var isShowingContentFiltering = false var body: some View { + @Bindable var settings = settings + Form { Section("Image Quality") { Picker("Thumbnail Quality", selection: $settings.thumbnailQuality) { @@ -62,6 +65,6 @@ struct SettingsSectionThumbnailsView: View { #Preview { NavigationStack { SettingsSectionThumbnailsView() - .environmentObject(SettingsManager()) + .environment(SettingsManager()) } } diff --git a/Sora/Views/Settings/SettingsView.swift b/Sora/Views/Settings/SettingsView.swift index 4ea60b8..ae5a620 100644 --- a/Sora/Views/Settings/SettingsView.swift +++ b/Sora/Views/Settings/SettingsView.swift @@ -56,6 +56,6 @@ struct SettingsView: View { #Preview { SettingsView() - .environmentObject(SettingsManager()) + .environment(SettingsManager()) .environmentObject(BooruManager(.yandere)) } -- cgit v1.2.3