import SwiftUI struct MainView: View { @EnvironmentObject var settings: Settings @State private var selectedTab: Int = 0 @State private var manager = BooruManager(.yandere) var body: some View { platformSpecificContent .environmentObject(settings) .environmentObject(manager) .onChange(of: settings.preferredBooru) { _, newState in updateManager(newState) } .onChange(of: settings.searchSuggestions) { _, newState in if newState { refreshTags() } } .onAppear(perform: initializeManager) } @ViewBuilder private var platformSpecificContent: some View { #if os(macOS) ContentView() #else TabView(selection: $selectedTab) { ContentView() .tabItem { Label("Posts", systemImage: "rectangle.stack") } .tag(0) NavigationStack { BookmarksView(selectedTab: $selectedTab) } .tabItem { Label("Bookmarks", systemImage: "bookmark") } .tag(1) SettingsView() .tabItem { Label("Settings", systemImage: "gear") } .tag(2) } #endif } private func updateManager(_ provider: BooruProvider) { let previousSearchText = manager.searchText manager = BooruManager(provider) manager.searchText = previousSearchText Task { refreshTags() if manager.searchText.isEmpty { await manager.fetchPosts() } else { manager.performSearch() } } } private func initializeManager() { manager = BooruManager(settings.preferredBooru) Task { refreshTags() if manager.posts.isEmpty { await manager.fetchPosts() } } } private func refreshTags() { if settings.searchSuggestions { Task { manager.initializeTags() } } else { Task { manager.updateTagsCacheSize() } } } }