diff options
| author | Fuwn <[email protected]> | 2025-03-15 04:59:40 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-03-15 04:59:40 -0700 |
| commit | d9083c57c8665f018c302367a23a02dbe274b400 (patch) | |
| tree | b6348709a83a28440d6f7fc08708f8c44962acc8 /Sora/Views/Post/Details/PostDetailsImageView.swift | |
| parent | feat: Development commit (diff) | |
| download | sora-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.swift | 44 |
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)") |