diff options
| author | Fuwn <[email protected]> | 2026-02-18 12:33:44 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-02-18 12:33:50 -0800 |
| commit | 0587c64598267ecace6259241198425cdc284f3a (patch) | |
| tree | ba90872e872e90ae98096c1da81ceb5a66d5c476 /Sora/Views/Post/Details/PostDetailsImageView.swift | |
| parent | refactor: share folder menu hierarchy across views (diff) | |
| download | sora-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.swift | 25 |
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 |