diff options
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 |