diff options
Diffstat (limited to 'Sora/Views/Post/Details/PostDetailsImageView.swift')
| -rw-r--r-- | Sora/Views/Post/Details/PostDetailsImageView.swift | 66 |
1 files changed, 35 insertions, 31 deletions
diff --git a/Sora/Views/Post/Details/PostDetailsImageView.swift b/Sora/Views/Post/Details/PostDetailsImageView.swift index 1e0da72..009dbed 100644 --- a/Sora/Views/Post/Details/PostDetailsImageView.swift +++ b/Sora/Views/Post/Details/PostDetailsImageView.swift @@ -2,29 +2,22 @@ import NetworkImage import SwiftUI import UserNotifications -struct PostDetailsImageView<Placeholder: View>: View { - @EnvironmentObject var settings: SettingsManager +struct PostDetailsImageView<Placeholder: View>: View { // swiftlint:disable:this type_body_length + @Environment(SettingsManager.self) + private var settings @EnvironmentObject var manager: BooruManager var url: URL? @Binding var loadingState: BooruPostLoadingState var finalLoadingState: BooruPostLoadingState let placeholder: () -> Placeholder let post: BooruPost? - - #if os(iOS) - var keyWindow: UIWindow? { - guard - let window = UIApplication.shared.connectedScenes - .compactMap({ $0 as? UIWindowScene }) - .flatMap(\.windows) - .first(where: \.isKeyWindow) - else { - return nil - } - - return window - } - #endif + private var networkImageLoader: BooruNetworkImageLoader { + BooruNetworkImageLoader( + domain: manager.domain, + sendUserAgent: settings.sendBooruUserAgent, + customUserAgent: settings.customBooruUserAgent + ) + } var body: some View { let content = NetworkImage(url: url) { image in @@ -32,19 +25,10 @@ struct PostDetailsImageView<Placeholder: View>: View { image: image, contextMenu: Group { #if os(iOS) - if settings.enableShareShortcut { - Button { - guard let shareURL = url else { return } - - keyWindow?.rootViewController?.present( - UIActivityViewController( - activityItems: [shareURL], applicationActivities: nil - ), animated: true - ) - } label: { + if settings.enableShareShortcut, let shareURL = url { + ShareLink(item: shareURL) { Label("Share", systemImage: "square.and.arrow.up") } - .disabled(url == nil) } #endif @@ -53,7 +37,13 @@ struct PostDetailsImageView<Placeholder: View>: View { guard let imageURL = url else { return } Task(priority: .userInitiated) { - guard let imageData = await ImageCacheManager.shared.loadImageData(for: imageURL), + guard + let imageData = await ImageCacheManager.shared.loadImageData( + for: imageURL, + domain: manager.domain, + sendUserAgent: settings.sendBooruUserAgent, + customUserAgent: settings.customBooruUserAgent + ), let uiImage = UIImage(data: imageData) else { return } @@ -79,7 +69,13 @@ struct PostDetailsImageView<Placeholder: View>: View { #if os(iOS) Task(priority: .userInitiated) { guard let imageURL = url else { return } - guard let imageData = await ImageCacheManager.shared.loadImageData(for: imageURL), + guard + let imageData = await ImageCacheManager.shared.loadImageData( + for: imageURL, + domain: manager.domain, + sendUserAgent: settings.sendBooruUserAgent, + customUserAgent: settings.customBooruUserAgent + ), let uiImage = UIImage(data: imageData) else { return } @@ -125,6 +121,7 @@ struct PostDetailsImageView<Placeholder: View>: View { placeholder() .onAppear { loadingState = .loadingPreview } } + .networkImageLoader(networkImageLoader) #if os(macOS) return content.overlay( @@ -214,8 +211,15 @@ struct PostDetailsImageView<Placeholder: View>: View { let detailViewQuality = settings.detailViewQuality let saveTagsToFile = settings.saveTagsToFile let post = self.post + let request = BooruRequestConfiguration.request( + url: url, + domain: manager.domain, + sendUserAgent: settings.sendBooruUserAgent, + customUserAgent: settings.customBooruUserAgent, + accept: "image/*" + ) - URLSession.shared.dataTask(with: url) { data, _, _ in + URLSession.shared.dataTask(with: request) { data, _, _ in guard let data, let post else { return } let picturesURL = FileManager.default.homeDirectoryForCurrentUser |