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) } .onAppear(perform: initialiseManager) } @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) NavigationStack { 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 { if self.manager.searchText.isEmpty { await self.manager.fetchPosts() } else { self.manager.performSearch() } } } private func initialiseManager() { manager = BooruManager(settings.preferredBooru) Task { if manager.posts.isEmpty { await manager.fetchPosts() } } } }