summaryrefslogtreecommitdiff
path: root/Sora/Views/Post/Details/PostDetailsImageView.swift
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-03-15 04:59:40 -0700
committerFuwn <[email protected]>2025-03-15 04:59:40 -0700
commitd9083c57c8665f018c302367a23a02dbe274b400 (patch)
treeb6348709a83a28440d6f7fc08708f8c44962acc8 /Sora/Views/Post/Details/PostDetailsImageView.swift
parentfeat: Development commit (diff)
downloadsora-testing-tabs.tar.xz
sora-testing-tabs.zip
feat: Development committabs
Diffstat (limited to 'Sora/Views/Post/Details/PostDetailsImageView.swift')
-rw-r--r--Sora/Views/Post/Details/PostDetailsImageView.swift44
1 files changed, 24 insertions, 20 deletions
diff --git a/Sora/Views/Post/Details/PostDetailsImageView.swift b/Sora/Views/Post/Details/PostDetailsImageView.swift
index 7d818f2..334dcc8 100644
--- a/Sora/Views/Post/Details/PostDetailsImageView.swift
+++ b/Sora/Views/Post/Details/PostDetailsImageView.swift
@@ -4,16 +4,15 @@ import UserNotifications
struct PostDetailsImageView<Placeholder: View>: View {
@EnvironmentObject var settings: SettingsManager
- @ObservedObject var manager: BooruManager
var url: URL?
@Binding var loadingState: BooruPostLoadingState
var finalLoadingState: BooruPostLoadingState
let placeholder: () -> Placeholder
- let post: BooruPost?
@State private var currentScale: CGFloat = 1.0
@State private var finalScale: CGFloat = 1.0
@State private var currentOffset: CGSize = .zero
@State private var finalOffset: CGSize = .zero
+ @Binding private var selectedPost: (post: BooruPost?, manager: BooruManager?)
#if os(iOS)
var keyWindow: UIWindow? {
@@ -74,12 +73,12 @@ struct PostDetailsImageView<Placeholder: View>: View {
#endif
Button {
- openURL(postURL(for: post?.id ?? ""))
+ openURL(postURL(for: selectedPost.post?.id ?? ""))
} label: {
Label("Open Post in Safari", systemImage: "safari")
}
- if let source = post?.source {
+ if let source = selectedPost.post?.source {
Button {
openURL(URL(string: source)!)
} label: {
@@ -119,20 +118,20 @@ struct PostDetailsImageView<Placeholder: View>: View {
}
func movePostCursor(by direction: Int) {
- guard let selectedPost = manager.selectedPost,
- let index = manager.postIndexMap[selectedPost.id],
+ guard let post = selectedPost.post,
+ let manager = selectedPost.manager,
+ let index = manager.postIndexMap[post.id],
(0..<manager.posts.count).contains(index + direction)
else { return }
- manager.selectedPost = manager.posts[index + direction]
+ selectedPost.post = manager.posts[index + direction]
}
init(
url: URL?,
loadingStage: Binding<BooruPostLoadingState>,
- manager: BooruManager,
+ selectedPost: Binding<(post: BooruPost?, manager: BooruManager?)>,
finalLoadingState: BooruPostLoadingState = .loadingFile,
- post: BooruPost? = nil,
@ViewBuilder placeholder: @escaping () -> Placeholder = {
GeometryReader { _ in
// ProgressView()
@@ -146,31 +145,36 @@ struct PostDetailsImageView<Placeholder: View>: View {
_loadingState = loadingStage
self.finalLoadingState = finalLoadingState
self.placeholder = placeholder
- self.post = post
- self.manager = manager
+ _selectedPost = selectedPost
}
private func postURL(for id: String) -> URL {
- switch manager.flavor {
- case .moebooru:
- return URL(string: "https://\(manager.domain)/post/show/\(id)")!
+ if let manager = selectedPost.manager {
+ switch manager.flavor {
+ case .moebooru:
+ return URL(string: "https://\(manager.domain)/post/show/\(id)")!
- case .gelbooru:
- return URL(string: "https://\(manager.domain)/index.php?page=post&s=view&id=\(id)")!
+ case .gelbooru:
+ return URL(string: "https://\(manager.domain)/index.php?page=post&s=view&id=\(id)")!
- case .danbooru:
- return URL(string: "https://\(manager.domain)/posts/\(id)")!
+ case .danbooru:
+ return URL(string: "https://\(manager.domain)/posts/\(id)")!
+ }
}
+
+ return URL(string: "#")!
}
#if os(macOS)
private func saveImageToPicturesFolder() {
- guard let url = self.url else { return }
+ guard let url = self.url, let manager = selectedPost.manager else {
+ return
+ }
let provider = manager.provider
URLSession.shared.dataTask(with: url) { data, _, _ in
- guard let data, let post else { return }
+ guard let data, let post = selectedPost.post else { return }
let picturesURL = FileManager.default.homeDirectoryForCurrentUser
.appendingPathComponent("Pictures/Sora/\(provider.rawValue)")