diff options
| author | Fuwn <[email protected]> | 2026-03-22 13:40:57 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-03-22 14:02:13 +0000 |
| commit | 92a34a801f423e7fafa9432bc2f48080855a5a53 (patch) | |
| tree | 757f725d3b890fea93f2d3798ce0e9cff6e6c237 /Sora/Data/ImageCacheManager.swift | |
| parent | build: wire xcodegen team id through just (diff) | |
| download | sora-testing-92a34a801f423e7fafa9432bc2f48080855a5a53.tar.xz sora-testing-92a34a801f423e7fafa9432bc2f48080855a5a53.zip | |
fix: send booru headers for image requests
Diffstat (limited to 'Sora/Data/ImageCacheManager.swift')
| -rw-r--r-- | Sora/Data/ImageCacheManager.swift | 59 |
1 files changed, 46 insertions, 13 deletions
diff --git a/Sora/Data/ImageCacheManager.swift b/Sora/Data/ImageCacheManager.swift index 5561f24..c5a4c6e 100644 --- a/Sora/Data/ImageCacheManager.swift +++ b/Sora/Data/ImageCacheManager.swift @@ -35,9 +35,22 @@ final class ImageCacheManager { } // MARK: - Public Methods - func preloadImages(_ urls: [URL]) { + func preloadImages( + _ urls: [URL], + domain: String, + sendUserAgent: Bool, + customUserAgent: String + ) { let newURLs = urls.filter { url in - !preloadingURLs.contains(url) && cache.cachedResponse(for: URLRequest(url: url)) == nil + let request = BooruRequestConfiguration.request( + url: url, + domain: domain, + sendUserAgent: sendUserAgent, + customUserAgent: customUserAgent, + accept: "image/*" + ) + + return !preloadingURLs.contains(url) && cache.cachedResponse(for: request) == nil } for url in newURLs { @@ -47,8 +60,15 @@ final class ImageCacheManager { guard let self else { return } let completionSignal = DispatchSemaphore(value: 0) - - URLSession.shared.dataTask(with: url) { data, response, _ in + let request = BooruRequestConfiguration.request( + url: url, + domain: domain, + sendUserAgent: sendUserAgent, + customUserAgent: customUserAgent, + accept: "image/*" + ) + + URLSession.shared.dataTask(with: request) { data, response, _ in Task { @MainActor [weak self] in guard let self else { completionSignal.signal() @@ -65,7 +85,7 @@ final class ImageCacheManager { storeCachedResponse( data: data, response: response, - for: url + for: request ) } } @@ -81,29 +101,42 @@ final class ImageCacheManager { preloadingURLs.removeAll() } - func storeCachedResponse(data: Data, response: URLResponse, for url: URL) { + func storeCachedResponse(data: Data, response: URLResponse, for request: URLRequest) { cache.storeCachedResponse( CachedURLResponse(response: response, data: data), - for: URLRequest(url: url) + for: request ) } - func getCachedResponse(for url: URL) -> CachedURLResponse? { - cache.cachedResponse(for: URLRequest(url: url)) + func getCachedResponse(for request: URLRequest) -> CachedURLResponse? { + cache.cachedResponse(for: request) } - func loadImageData(for url: URL) async -> Data? { - if let cachedResponse = getCachedResponse(for: url) { + func loadImageData( + for url: URL, + domain: String, + sendUserAgent: Bool, + customUserAgent: String + ) async -> Data? { + let request = BooruRequestConfiguration.request( + url: url, + domain: domain, + sendUserAgent: sendUserAgent, + customUserAgent: customUserAgent, + accept: "image/*" + ) + + if let cachedResponse = getCachedResponse(for: request) { return cachedResponse.data } do { - let (data, response) = try await URLSession.shared.data(from: url) + let (data, response) = try await URLSession.shared.data(for: request) storeCachedResponse( data: data, response: response, - for: url + for: request ) return data |