summaryrefslogtreecommitdiff
path: root/Sora/Views
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-04-01 13:59:52 +0000
committerFuwn <[email protected]>2026-04-01 13:59:52 +0000
commitddaa9cbfe0cc8d254d4901ad192918d91dd627d4 (patch)
treeb0d1cf6642ae97ce41ff570f2bcd4a06b359685e /Sora/Views
parentFix iOS install recipe app path resolution (diff)
downloadsora-testing-ddaa9cbfe0cc8d254d4901ad192918d91dd627d4.tar.xz
sora-testing-ddaa9cbfe0cc8d254d4901ad192918d91dd627d4.zip
Migrate settings manager to Swift Observation
Diffstat (limited to 'Sora/Views')
-rw-r--r--Sora/Views/BookmarkMenuButtonView.swift3
-rw-r--r--Sora/Views/BookmarksView.swift5
-rw-r--r--Sora/Views/FavoriteMenuButtonView.swift3
-rw-r--r--Sora/Views/FavoritePostThumbnailView.swift5
-rw-r--r--Sora/Views/FavoritesView.swift5
-rw-r--r--Sora/Views/Generic/GenericItemView.swift3
-rw-r--r--Sora/Views/Generic/GenericListView.swift3
-rw-r--r--Sora/Views/MainView.swift74
-rw-r--r--Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift3
-rw-r--r--Sora/Views/Post/Details/PostDetailsImageView.swift3
-rw-r--r--Sora/Views/Post/Details/PostDetailsTagsView.swift5
-rw-r--r--Sora/Views/Post/Details/PostDetailsView.swift3
-rw-r--r--Sora/Views/Post/Grid/PostGridBookmarkButtonView.swift3
-rw-r--r--Sora/Views/Post/Grid/PostGridFavoriteButtonView.swift5
-rw-r--r--Sora/Views/Post/Grid/PostGridSearchHistoryView.swift5
-rw-r--r--Sora/Views/Post/Grid/PostGridThumbnailView.swift3
-rw-r--r--Sora/Views/Post/Grid/PostGridView.swift3
-rw-r--r--Sora/Views/Settings/Collections/SettingsCollectionsListView.swift3
-rw-r--r--Sora/Views/Settings/Collections/SettingsCollectionsView.swift3
-rw-r--r--Sora/Views/Settings/Section/SettingsSectionContentRatingsView.swift5
-rw-r--r--Sora/Views/Settings/Section/SettingsSectionDebugView.swift3
-rw-r--r--Sora/Views/Settings/Section/SettingsSectionDetailsView.swift7
-rw-r--r--Sora/Views/Settings/Section/SettingsSectionImportExportView.swift3
-rw-r--r--Sora/Views/Settings/Section/SettingsSectionProviderView.swift11
-rw-r--r--Sora/Views/Settings/Section/SettingsSectionSearchView.swift5
-rw-r--r--Sora/Views/Settings/Section/SettingsSectionSettingsView.swift11
-rw-r--r--Sora/Views/Settings/Section/SettingsSectionThumbnailsView.swift7
-rw-r--r--Sora/Views/Settings/SettingsView.swift2
28 files changed, 125 insertions, 69 deletions
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<T: GenericItem>: 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<T: Identifiable & Hashable & GenericItem>: 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<Placeholder: View>: 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))
}