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/Views/Post | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-872f2b0106ad5dafd98c2843d5099d73a02e81be.tar.xz sora-testing-872f2b0106ad5dafd98c2843d5099d73a02e81be.zip | |
feat: Development commit
Diffstat (limited to 'Sora/Views/Post')
9 files changed, 39 insertions, 31 deletions
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 { |