summaryrefslogtreecommitdiff
path: root/Sora/Views/Post/Details
diff options
context:
space:
mode:
Diffstat (limited to 'Sora/Views/Post/Details')
-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
5 files changed, 29 insertions, 15 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)
}
}