summaryrefslogtreecommitdiff
path: root/Sora/Data/ImageCacheManager.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Sora/Data/ImageCacheManager.swift')
-rw-r--r--Sora/Data/ImageCacheManager.swift59
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