fix图片预加载

This commit is contained in:
anlicheng 2025-04-14 10:41:18 +08:00
parent 34d3c5ad9b
commit 91718319f8
2 changed files with 44 additions and 7 deletions

View File

@ -19,13 +19,17 @@ final class CacheManager {
self.cacheDir = paths[0] self.cacheDir = paths[0]
} }
//
func preloadImages(urls: [String]) async throws { func preloadImages(urls: [String]) async throws {
let preloadUrls = urls.filter { url in !self.fileExists(urlString: url)}
// //
try await withThrowingTaskGroup(of: Void.self) { group in try await withThrowingTaskGroup(of: Void.self) { group in
for url in urls { for url in preloadUrls {
group.addTask { group.addTask {
if let data = try? await self.downloadImage(from: url) { if let filename = self.getCacheFileName(urlString: url),
try? self.saveCacheFile(filename: "xx", data: data) let data = try? await self.downloadImage(from: url) {
try? self.saveCacheFile(filename: filename, data: data)
} }
} }
} }
@ -33,6 +37,29 @@ final class CacheManager {
} }
} }
//
func fileExists(urlString: String) -> Bool {
guard let cacheFileName = getCacheFileName(urlString: urlString) else {
return false
}
let url = cacheDir.appendingPathComponent(cacheFileName)
return FileManager.default.fileExists(atPath: url.path())
}
//
func readFileContents(urlString: String) -> Data? {
guard let cacheFileName = getCacheFileName(urlString: urlString) else {
return nil
}
let url = cacheDir.appendingPathComponent(cacheFileName)
if FileManager.default.fileExists(atPath: url.path()) {
return try? Data(contentsOf: url)
}
return nil
}
// //
private func saveCacheFile(filename: String, data: Data) throws { private func saveCacheFile(filename: String, data: Data) throws {
let fileURL = cacheDir.appendingPathComponent(filename) let fileURL = cacheDir.appendingPathComponent(filename)

View File

@ -143,11 +143,21 @@ struct IndexMainView: View {
indexModel.visiblePublisher.send(frames) indexModel.visiblePublisher.send(frames)
} }
.onAppear { .onAppear {
let x = CacheManager.shared.getCacheFileName(urlString: "https://www.baidu.com/x/y/z.jpg?ts=1234") Task {
let x1 = CacheManager.shared.getCacheFileName(urlString: "https://www.baidu.com/x/y/z.jpg") let imageUrl = "https://lain.bgm.tv/pic/cover/l/ea/c4/479788_3pcsw.jpg"
print("x: \(x), x1: \(x1)") let cacheManager = CacheManager.shared
try await cacheManager.preloadImages(urls: [imageUrl])
let result = cacheManager.fileExists(urlString: imageUrl)
print("cache file exists: \(result)")
print("data: ")
print(cacheManager.readFileContents(urlString: imageUrl))
}
} }
} }
} }