summaryrefslogtreecommitdiff
path: root/Sora/Views/Post
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-03-12 03:09:23 -0700
committerFuwn <[email protected]>2025-03-12 03:09:23 -0700
commit872f2b0106ad5dafd98c2843d5099d73a02e81be (patch)
treea908d050cc877b502d7ac29d8d9697b88d1b9aee /Sora/Views/Post
parentfeat: Development commit (diff)
downloadsora-testing-872f2b0106ad5dafd98c2843d5099d73a02e81be.tar.xz
sora-testing-872f2b0106ad5dafd98c2843d5099d73a02e81be.zip
feat: Development commit
Diffstat (limited to 'Sora/Views/Post')
-rw-r--r--Sora/Views/Post/Details/Carousel/PostDetailsCarouselItemView.swift5
-rw-r--r--Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift7
-rw-r--r--Sora/Views/Post/Details/PostDetailsImageView.swift4
-rw-r--r--Sora/Views/Post/Details/PostDetailsTagsView.swift11
-rw-r--r--Sora/Views/Post/Details/PostDetailsView.swift17
-rw-r--r--Sora/Views/Post/Grid/PostGridBookmarkButtonView.swift2
-rw-r--r--Sora/Views/Post/Grid/PostGridSearchHistoryView.swift11
-rw-r--r--Sora/Views/Post/Grid/PostGridThumbnailView.swift2
-rw-r--r--Sora/Views/Post/Grid/PostGridView.swift11
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 {