diff options
| author | Fuwn <[email protected]> | 2025-03-12 03:09:23 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-03-12 03:09:23 -0700 |
| commit | 872f2b0106ad5dafd98c2843d5099d73a02e81be (patch) | |
| tree | a908d050cc877b502d7ac29d8d9697b88d1b9aee /Sora | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-872f2b0106ad5dafd98c2843d5099d73a02e81be.tar.xz sora-testing-872f2b0106ad5dafd98c2843d5099d73a02e81be.zip | |
feat: Development commit
Diffstat (limited to 'Sora')
| -rw-r--r-- | Sora/Views/Bookmarks/BookmarksView.swift | 8 | ||||
| -rw-r--r-- | Sora/Views/ContentView.swift | 16 | ||||
| -rw-r--r-- | Sora/Views/Generic/GenericListView.swift | 6 | ||||
| -rw-r--r-- | Sora/Views/MainView.swift | 35 | ||||
| -rw-r--r-- | Sora/Views/Post/Details/Carousel/PostDetailsCarouselItemView.swift | 5 | ||||
| -rw-r--r-- | Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift | 7 | ||||
| -rw-r--r-- | Sora/Views/Post/Details/PostDetailsImageView.swift | 4 | ||||
| -rw-r--r-- | Sora/Views/Post/Details/PostDetailsTagsView.swift | 11 | ||||
| -rw-r--r-- | Sora/Views/Post/Details/PostDetailsView.swift | 17 | ||||
| -rw-r--r-- | Sora/Views/Post/Grid/PostGridBookmarkButtonView.swift | 2 | ||||
| -rw-r--r-- | Sora/Views/Post/Grid/PostGridSearchHistoryView.swift | 11 | ||||
| -rw-r--r-- | Sora/Views/Post/Grid/PostGridThumbnailView.swift | 2 | ||||
| -rw-r--r-- | Sora/Views/Post/Grid/PostGridView.swift | 11 | ||||
| -rw-r--r-- | Sora/Views/Settings/Section/SettingsSearchView.swift | 27 |
14 files changed, 89 insertions, 73 deletions
diff --git a/Sora/Views/Bookmarks/BookmarksView.swift b/Sora/Views/Bookmarks/BookmarksView.swift index fa7734e..a426be0 100644 --- a/Sora/Views/Bookmarks/BookmarksView.swift +++ b/Sora/Views/Bookmarks/BookmarksView.swift @@ -3,9 +3,11 @@ import SwiftUI struct BookmarksView: View { @EnvironmentObject var settings: SettingsManager @Binding var selectedTab: Int + @ObservedObject var manager: BooruManager var body: some View { GenericListView( + manager: manager, selectedTab: $selectedTab, isPresented: .constant(false), title: "Bookmarks", @@ -21,9 +23,3 @@ struct BookmarksView: View { ) { settings.bookmarks.removeAll() } } } - -#Preview { - BookmarksView(selectedTab: .constant(1)) - .environmentObject(SettingsManager()) - .environmentObject(BooruManager(.yandere)) -} diff --git a/Sora/Views/ContentView.swift b/Sora/Views/ContentView.swift index a809f90..63f128a 100644 --- a/Sora/Views/ContentView.swift +++ b/Sora/Views/ContentView.swift @@ -1,14 +1,13 @@ import SwiftUI struct ContentView: View { - @EnvironmentObject var manager: BooruManager @Binding var selectedTab: Int @State private var tabs = [ "Posts", "Search History", "Bookmarks", ] - @State private var selectedPost: (post: BooruPost?, manager: BooruManager?) + @Binding var selectedPost: (post: BooruPost?, manager: BooruManager?) var body: some View { #if os(macOS) @@ -23,11 +22,12 @@ struct ContentView: View { case 1: PostGridSearchHistoryView( selectedTab: $selectedTab, - isPresented: .constant(false) + isPresented: .constant(false), + manager: selectedPost.manager ?? .init() ) case 2: - BookmarksView(selectedTab: $selectedTab) + BookmarksView(selectedTab: $selectedTab, manager: selectedPost.manager ?? .init()) case 3: SettingsView() @@ -37,7 +37,11 @@ struct ContentView: View { } } detail: { if let post = selectedPost.post, let manager = selectedPost.manager { - PostDetailsView(post: post, manager: manager) + PostDetailsView( + post: post, + manager: manager, + selectedPost: $selectedPost + ) } else { Text("Select a Post") .foregroundColor(.secondary) @@ -56,7 +60,7 @@ struct ContentView: View { ) ) { if let post = selectedPost.post, let manager = selectedPost.manager { - PostDetailsView(post: post, manager: manager) + PostDetailsView(post: post, manager: manager, selectedPost: $selectedPost) } } } diff --git a/Sora/Views/Generic/GenericListView.swift b/Sora/Views/Generic/GenericListView.swift index d9771ca..1460487 100644 --- a/Sora/Views/Generic/GenericListView.swift +++ b/Sora/Views/Generic/GenericListView.swift @@ -2,7 +2,7 @@ import SwiftUI struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { @EnvironmentObject private var settings: SettingsManager - @EnvironmentObject private var manager: BooruManager + @ObservedObject var manager: BooruManager @Binding var selectedTab: Int @State private var searchText: String = "" @State private var isShowingRemoveAllConfirmation = false @@ -86,11 +86,11 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { manager.searchText = item.tags.joined(separator: " ") selectedTab = 0 - isPresented.toggle() - if previousProvider == settings.preferredBooru { manager.performSearch(settings: settings) } + + isPresented.toggle() }) { GenericItemView( item: item, diff --git a/Sora/Views/MainView.swift b/Sora/Views/MainView.swift index 2afcfb7..389cf53 100644 --- a/Sora/Views/MainView.swift +++ b/Sora/Views/MainView.swift @@ -3,13 +3,11 @@ import SwiftUI struct MainView: View { @EnvironmentObject var settings: SettingsManager @State private var selectedTab: Int = 0 - @State private var manager = BooruManager(.yandere) @State private var selectedPost: (post: BooruPost?, manager: BooruManager?) var body: some View { platformSpecificContent .environmentObject(settings) - .environmentObject(manager) .onChange(of: settings.preferredBooru) { _, newState in updateManager(newState) } @@ -23,15 +21,18 @@ struct MainView: View { @ViewBuilder private var platformSpecificContent: some View { #if os(macOS) - ContentView(selectedTab: $selectedTab) + ContentView(selectedTab: $selectedTab, selectedPost: $selectedPost) #else TabView(selection: $selectedTab) { - ContentView(selectedTab: $selectedTab) + ContentView(selectedTab: $selectedTab, selectedPost: $selectedPost) .tabItem { Label("Posts", systemImage: "rectangle.stack") } .tag(0) NavigationStack { - BookmarksView(selectedTab: $selectedTab) + BookmarksView( + selectedTab: $selectedTab, + manager: selectedPost.manager ?? BooruManager() + ) } .tabItem { Label("Bookmarks", systemImage: "bookmark") } .tag(1) @@ -44,6 +45,7 @@ struct MainView: View { } private func updateManager(_ provider: BooruProvider) { + if var manager = selectedPost.manager { let previousSearchText = manager.searchText manager = BooruManager(provider) @@ -58,26 +60,31 @@ struct MainView: View { manager.performSearch(settings: settings) } } + } } private func initializeManager() { + if var manager = selectedPost.manager { manager = BooruManager(settings.preferredBooru) - Task { - refreshTags() + Task { + refreshTags() - if manager.posts.isEmpty { - await manager.fetchPosts() + if manager.posts.isEmpty { + await manager.fetchPosts() + } } } } private func refreshTags() { - Task { - if settings.searchSuggestionsMode != .disabled { - manager.initializeTags() - } else { - manager.updateTagsCacheSize() + if let manager = selectedPost.manager { + Task { + if settings.searchSuggestionsMode != .disabled { + manager.initializeTags() + } else { + manager.updateTagsCacheSize() + } } } } diff --git a/Sora/Views/Post/Details/Carousel/PostDetailsCarouselItemView.swift b/Sora/Views/Post/Details/Carousel/PostDetailsCarouselItemView.swift index 5aaa209..9d2d95e 100644 --- a/Sora/Views/Post/Details/Carousel/PostDetailsCarouselItemView.swift +++ b/Sora/Views/Post/Details/Carousel/PostDetailsCarouselItemView.swift @@ -2,6 +2,7 @@ import SwiftUI struct PostDetailsCarouselItemView: View { var post: BooruPost + var manager: BooruManager var index: Int @Binding var loadingStage: BooruPostLoadingState var imageURL: (BooruPost) -> URL? @@ -19,7 +20,8 @@ struct PostDetailsCarouselItemView: View { ZStack { PostDetailsImageView( url: post.previewURL, - loadingStage: $loadingStage + loadingStage: $loadingStage, + manager: manager ) { GeometryReader { geometry in ProgressView() @@ -32,6 +34,7 @@ struct PostDetailsCarouselItemView: View { PostDetailsImageView( url: imageURL(post), loadingStage: $loadingStage, + manager: manager, finalLoadingState: .loaded, post: post ) diff --git a/Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift b/Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift index 4452b22..88714c3 100644 --- a/Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift +++ b/Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift @@ -1,7 +1,7 @@ import SwiftUI struct PostDetailsCarouselView: View { - @EnvironmentObject var manager: BooruManager + @ObservedObject var manager: BooruManager @EnvironmentObject var settings: SettingsManager let posts: [BooruPost] let focusedPost: BooruPost? @@ -12,11 +12,13 @@ struct PostDetailsCarouselView: View { init( posts: [BooruPost], loadingStage: Binding<BooruPostLoadingState>, - focusedPost: BooruPost? = nil + focusedPost: BooruPost? = nil, + manager: ObservedObject<BooruManager> ) { self.posts = posts self.focusedPost = focusedPost _loadingStage = loadingStage + _manager = manager if let focused = focusedPost, let index = posts.firstIndex(where: { $0.id == focused.id }) @@ -45,6 +47,7 @@ struct PostDetailsCarouselView: View { ForEach(Array(posts.enumerated()), id: \.offset) { index, post in PostDetailsCarouselItemView( post: post, + manager: manager, index: index, loadingStage: $loadingStage, imageURL: imageURL diff --git a/Sora/Views/Post/Details/PostDetailsImageView.swift b/Sora/Views/Post/Details/PostDetailsImageView.swift index 483d435..7d818f2 100644 --- a/Sora/Views/Post/Details/PostDetailsImageView.swift +++ b/Sora/Views/Post/Details/PostDetailsImageView.swift @@ -4,7 +4,7 @@ import UserNotifications struct PostDetailsImageView<Placeholder: View>: View { @EnvironmentObject var settings: SettingsManager - @EnvironmentObject var manager: BooruManager + @ObservedObject var manager: BooruManager var url: URL? @Binding var loadingState: BooruPostLoadingState var finalLoadingState: BooruPostLoadingState @@ -130,6 +130,7 @@ struct PostDetailsImageView<Placeholder: View>: View { init( url: URL?, loadingStage: Binding<BooruPostLoadingState>, + manager: BooruManager, finalLoadingState: BooruPostLoadingState = .loadingFile, post: BooruPost? = nil, @ViewBuilder placeholder: @escaping () -> Placeholder = { @@ -146,6 +147,7 @@ struct PostDetailsImageView<Placeholder: View>: View { self.finalLoadingState = finalLoadingState self.placeholder = placeholder self.post = post + self.manager = manager } private func postURL(for id: String) -> URL { diff --git a/Sora/Views/Post/Details/PostDetailsTagsView.swift b/Sora/Views/Post/Details/PostDetailsTagsView.swift index a9ab6a4..107c9f3 100644 --- a/Sora/Views/Post/Details/PostDetailsTagsView.swift +++ b/Sora/Views/Post/Details/PostDetailsTagsView.swift @@ -1,16 +1,18 @@ import SwiftUI struct PostDetailsTagsView: View { - @EnvironmentObject var manager: BooruManager + @ObservedObject var manager: BooruManager @EnvironmentObject var settings: SettingsManager @Binding var isPresented: Bool var tags: [String] + @Binding var selectedPost: (post: BooruPost?, manager: BooruManager?) var body: some View { List { ForEach(tags, id: \.self) { tag in Button(action: { manager.searchText = tag + selectedPost = (nil, nil) search() }) { @@ -19,6 +21,7 @@ struct PostDetailsTagsView: View { .contextMenu { Button(action: { manager.searchText += " \(tag)" + selectedPost = (nil, nil) search() }) { @@ -45,9 +48,3 @@ struct PostDetailsTagsView: View { isPresented.toggle() } } - -#Preview { - PostDetailsTagsView( - isPresented: .constant(true), tags: ["hololive", "absurdres", "nekomimi"] - ) -} diff --git a/Sora/Views/Post/Details/PostDetailsView.swift b/Sora/Views/Post/Details/PostDetailsView.swift index 3b6ef49..c75f022 100644 --- a/Sora/Views/Post/Details/PostDetailsView.swift +++ b/Sora/Views/Post/Details/PostDetailsView.swift @@ -3,7 +3,7 @@ import SwiftUI struct PostDetailsView: View { @EnvironmentObject var settings: SettingsManager let post: BooruPost - let manager: BooruManager + @ObservedObject var manager: BooruManager @State private var loadingStage: BooruPostLoadingState = .loadingPreview private var imageURL: URL? { switch settings.detailViewQuality { @@ -18,6 +18,7 @@ struct PostDetailsView: View { } } @State private var isTagsSheetPresented = false + @Binding var selectedPost: (post: BooruPost?, manager: BooruManager?) var filteredPosts: [BooruPost] { manager.posts @@ -30,12 +31,14 @@ struct PostDetailsView: View { PostDetailsImageView( url: imageURL, loadingStage: $loadingStage, + manager: manager, finalLoadingState: .loaded, post: post ) { PostDetailsImageView( url: post.previewURL, - loadingStage: $loadingStage + loadingStage: $loadingStage, + manager: manager ) .id(post.previewURL) } @@ -44,7 +47,8 @@ struct PostDetailsView: View { PostDetailsCarouselView( posts: filteredPosts, loadingStage: $loadingStage, - focusedPost: post + focusedPost: post, + manager: _manager ) .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center) #endif @@ -118,7 +122,12 @@ struct PostDetailsView: View { #endif } .sheet(isPresented: $isTagsSheetPresented) { - PostDetailsTagsView(isPresented: $isTagsSheetPresented, tags: post.tags) + PostDetailsTagsView( + manager: manager, + isPresented: $isTagsSheetPresented, + tags: post.tags, + selectedPost: $selectedPost + ) .frame(minHeight: 250) } } diff --git a/Sora/Views/Post/Grid/PostGridBookmarkButtonView.swift b/Sora/Views/Post/Grid/PostGridBookmarkButtonView.swift index c8478ee..bb6d0c7 100644 --- a/Sora/Views/Post/Grid/PostGridBookmarkButtonView.swift +++ b/Sora/Views/Post/Grid/PostGridBookmarkButtonView.swift @@ -1,7 +1,7 @@ import SwiftUI struct PostGridBookmarkButtonView: View { - @EnvironmentObject private var manager: BooruManager + @ObservedObject var manager: BooruManager @EnvironmentObject private var settings: SettingsManager var contained: Bool { diff --git a/Sora/Views/Post/Grid/PostGridSearchHistoryView.swift b/Sora/Views/Post/Grid/PostGridSearchHistoryView.swift index ae33c53..390fd4c 100644 --- a/Sora/Views/Post/Grid/PostGridSearchHistoryView.swift +++ b/Sora/Views/Post/Grid/PostGridSearchHistoryView.swift @@ -4,9 +4,11 @@ struct PostGridSearchHistoryView: View { @EnvironmentObject var settings: SettingsManager @Binding var selectedTab: Int @Binding var isPresented: Bool + @ObservedObject var manager: BooruManager var body: some View { GenericListView( + manager: manager, selectedTab: $selectedTab, isPresented: $isPresented, title: "Search History", @@ -22,12 +24,3 @@ struct PostGridSearchHistoryView: View { ) { settings.searchHistory.removeAll() } } } - -#Preview { - PostGridSearchHistoryView( - selectedTab: .constant(0), - isPresented: .constant(true) - ) - .environmentObject(SettingsManager()) - .environmentObject(BooruManager(.safebooru)) -} diff --git a/Sora/Views/Post/Grid/PostGridThumbnailView.swift b/Sora/Views/Post/Grid/PostGridThumbnailView.swift index 4973c1e..e2a4c77 100644 --- a/Sora/Views/Post/Grid/PostGridThumbnailView.swift +++ b/Sora/Views/Post/Grid/PostGridThumbnailView.swift @@ -3,9 +3,9 @@ import SwiftUI struct PostGridThumbnailView: View { @EnvironmentObject var settings: SettingsManager - @EnvironmentObject var manager: BooruManager let post: BooruPost let posts: [BooruPost] + let manager: BooruManager private var thumbnailURL: URL? { switch settings.thumbnailQuality { case .preview: diff --git a/Sora/Views/Post/Grid/PostGridView.swift b/Sora/Views/Post/Grid/PostGridView.swift index a03463b..7a0091d 100644 --- a/Sora/Views/Post/Grid/PostGridView.swift +++ b/Sora/Views/Post/Grid/PostGridView.swift @@ -45,7 +45,7 @@ struct PostGridView: View { manager.performSearch(settings: settings) } .navigationDestination(for: BooruPost.self) { post in - PostDetailsView(post: post, manager: manager) + PostDetailsView(post: post, manager: manager, selectedPost: $selectedPost) } .onChange(of: manager.searchText) { _, _ in if manager.searchText.isEmpty, !isSearching { @@ -98,9 +98,9 @@ struct PostGridView: View { if !manager.tags.isEmpty { #if os(macOS) - ToolbarItem { PostGridBookmarkButtonView() } + ToolbarItem { PostGridBookmarkButtonView(manager: manager) } #else - ToolbarItem(placement: .bottomBar) { PostGridBookmarkButtonView() } + ToolbarItem(placement: .bottomBar) { PostGridBookmarkButtonView(manager: manager) } #endif } } @@ -116,7 +116,8 @@ struct PostGridView: View { .sheet(isPresented: $isSearchHistoryPresented) { PostGridSearchHistoryView( selectedTab: $selectedTab, - isPresented: $isSearchHistoryPresented + isPresented: $isSearchHistoryPresented, + manager: manager ) .frame(minHeight: 250) } @@ -130,7 +131,7 @@ struct PostGridView: View { selectedPost.manager = manager } } label: { - PostGridThumbnailView(post: post, posts: filteredPosts) + PostGridThumbnailView(post: post, posts: filteredPosts, manager: manager) } .buttonStyle(PlainButtonStyle()) .contextMenu { diff --git a/Sora/Views/Settings/Section/SettingsSearchView.swift b/Sora/Views/Settings/Section/SettingsSearchView.swift index fbe1656..3408d06 100644 --- a/Sora/Views/Settings/Section/SettingsSearchView.swift +++ b/Sora/Views/Settings/Section/SettingsSearchView.swift @@ -3,11 +3,11 @@ import SwiftUI struct SettingsSearchView: View { @EnvironmentObject var settings: SettingsManager - #if os(macOS) - var manager = BooruManager(.yandere) - #else - @EnvironmentObject var manager: BooruManager - #endif +// #if os(macOS) +// var manager = BooruManager(.yandere) +// #else +// @EnvironmentObject var manager: BooruManager +// #endif var body: some View { Picker("Suggestion Mode", selection: $settings.searchSuggestionsMode) { @@ -16,14 +16,15 @@ struct SettingsSearchView: View { } } - Button( - "Clear Cached Tags (\(manager.cacheSize ?? "Unknown size"))" - ) { - manager.clearCachedTags() - } - #if os(macOS) - .frame(maxWidth: .infinity, alignment: .trailing) - #endif + // TODO: Fix for iOS +// Button( +// "Clear Cached Tags (\(manager.cacheSize ?? "Unknown size"))" +// ) { +// manager.clearCachedTags() +// } +// #if os(macOS) +// .frame(maxWidth: .infinity, alignment: .trailing) +// #endif Button("Clear History") { settings.searchHistory.removeAll() |