summaryrefslogtreecommitdiff
path: root/Sora/Views/Post/Details/PostDetailsImageView.swift
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-02-18 12:33:44 -0800
committerFuwn <[email protected]>2026-02-18 12:33:50 -0800
commit0587c64598267ecace6259241198425cdc284f3a (patch)
treeba90872e872e90ae98096c1da81ceb5a66d5c476 /Sora/Views/Post/Details/PostDetailsImageView.swift
parentrefactor: share folder menu hierarchy across views (diff)
downloadsora-testing-0587c64598267ecace6259241198425cdc284f3a.tar.xz
sora-testing-0587c64598267ecace6259241198425cdc284f3a.zip
perf: reduce suggestion and image handling hot-path overhead
Diffstat (limited to 'Sora/Views/Post/Details/PostDetailsImageView.swift')
-rw-r--r--Sora/Views/Post/Details/PostDetailsImageView.swift25
1 files changed, 15 insertions, 10 deletions
diff --git a/Sora/Views/Post/Details/PostDetailsImageView.swift b/Sora/Views/Post/Details/PostDetailsImageView.swift
index f9e49db..c33f7db 100644
--- a/Sora/Views/Post/Details/PostDetailsImageView.swift
+++ b/Sora/Views/Post/Details/PostDetailsImageView.swift
@@ -51,14 +51,17 @@ struct PostDetailsImageView<Placeholder: View>: View {
#if os(iOS)
Button {
- guard let url else { return }
+ guard let imageURL = url else { return }
- URLSession.shared.dataTask(with: url) { data, _, _ in
- guard let data, let uiImage = UIImage(data: data) else { return }
+ Task(priority: .userInitiated) {
+ guard let imageData = await ImageCacheManager.shared.loadImageData(for: imageURL),
+ let uiImage = UIImage(data: imageData)
+ else { return }
- UIImageWriteToSavedPhotosAlbum(uiImage, nil, nil, nil)
+ await MainActor.run {
+ UIImageWriteToSavedPhotosAlbum(uiImage, nil, nil, nil)
+ }
}
- .resume()
} label: {
Label("Save to Photos", systemImage: "square.and.arrow.down")
}
@@ -75,12 +78,14 @@ struct PostDetailsImageView<Placeholder: View>: View {
Button {
#if os(iOS)
- let url = url
-
Task(priority: .userInitiated) {
- // swiftlint:disable:next legacy_objc_type
- if let data = NSData(contentsOf: url ?? URL(string: "")!) {
- UIPasteboard.general.image = UIImage(data: data as Data)
+ guard let imageURL = url else { return }
+ guard let imageData = await ImageCacheManager.shared.loadImageData(for: imageURL),
+ let uiImage = UIImage(data: imageData)
+ else { return }
+
+ await MainActor.run {
+ UIPasteboard.general.image = uiImage
}
}
#else