summaryrefslogtreecommitdiff
path: root/Sora/Views/Post/Details/PostDetailsImageView.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Sora/Views/Post/Details/PostDetailsImageView.swift')
-rw-r--r--Sora/Views/Post/Details/PostDetailsImageView.swift66
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