Ver código fonte

kf 数据迁移先写一部分

100Years 1 semana atrás
pai
commit
cc04f29873

+ 99 - 0
AIEmoji/AppDelegate.swift

@@ -173,3 +173,102 @@ extension AppDelegate {
         TSAppUpdateManager.checkAppConfig()
     }
 }
+
+
+import Kingfisher
+extension AppDelegate {
+    
+    func handleKingfisher(){
+
+        moveCacheSmoothly()
+        
+        var diskStorage = ImageCache.default.diskStorage
+        
+        let cache1 = ImageCache(memoryStorage: ImageCache.default.memoryStorage, diskStorage: ImageCache.default.diskStorage)
+        
+        let cache = try! ImageCache(
+            name: "longtorage",
+            cacheDirectoryURL: FileManager.default.urls(for: .documentDirectory, in: .userDomainMask ).first!
+        )
+        
+        cache.diskStorage.config.expiration = .never    // 永不过期
+        cache.diskStorage.config.sizeLimit = 0          // 无大小限制
+        
+        
+        
+        // 1. 创建自定义磁盘存储配置
+        let diskStorageConfig: DiskStorage.Config = {
+            var config = DiskStorage.Config(
+                name: "longtorage",  // 缓存名称
+                sizeLimit: 0,          // 不限制大小
+                directory: FileManager.default.urls(for: .documentDirectory, in: .userDomainMask ).first!
+            )
+            return config
+        }()
+
+        // 2. 创建内存存储配置
+        let memoryStorageConfig: MemoryStorage.Config = {
+            var config = MemoryStorage.Config(totalCostLimit: 100 * 1024 * 1024) // 100MB内存限制
+            config.countLimit = 50               // 最多缓存50张图片
+            config.expiration = .seconds(3600)   // 1小时后过期
+            return config
+        }()
+
+        // 3. 创建自定义ImageCache实例
+        let customCache: ImageCache = {
+            let diskStorage = try! DiskStorage(config: diskStorageConfig)
+            let memoryStorage = MemoryStorage(config: memoryStorageConfig)
+            
+            return ImageCache(
+                memoryStorage: memoryStorage,
+                diskStorage: diskStorage
+            )
+        }()
+
+        // 4. 设置为默认缓存
+        ImageCache.default = customCache
+
+        
+        KingfisherManager.shared.cache = cache
+    }
+    
+
+    func moveCacheSmoothly(){
+        // 1. 获取旧文件路径的图片
+        let fileManager = FileManager.default
+        guard let cachesURL = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first else {
+            dePrint("Cache Kingfisher 没有缓存,不用迁移")
+            return
+        }
+        let permanent_image_cache = "com.onevcat.Kingfisher.ImageCache.default"
+        let srcURL = cachesURL.appendingPathComponent(permanent_image_cache)
+        guard fileManager.fileExists(atPath: srcURL.path) else { return }
+
+        //把srcURL 移动到新的 documentURL
+        guard let documentURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
+        let dstURL = documentURL.appendingPathComponent(permanent_image_cache)
+
+        // 4. 处理目标已存在的情况
+        if fileManager.fileExists(atPath: dstURL.path) {
+            do {
+                // 先删除目标文件夹(如果需要合并则改为遍历子文件)
+                try fileManager.removeItem(at: dstURL)
+                dePrint("已清理旧缓存目录")
+            } catch {
+                dePrint("清理旧缓存失败: \(error.localizedDescription)")
+                return
+            }
+        }
+
+        do {
+            dePrint("srcURL=\(srcURL)")
+            dePrint("dstURL=\(dstURL)")
+            try fileManager.moveItem(at: srcURL, to: dstURL)// 移动文件
+        } catch {
+            debugPrint("尝试移动文件失败: \(error.localizedDescription)")
+        }
+
+        dePrint("移动 Cache Kingfisher 到 library 流程结束")
+    }
+}
+

+ 0 - 1
AIEmoji/Business2/DisCover/TSGenerateHistoryVC/TSGenerateHistoryVC.swift

@@ -303,7 +303,6 @@ extension TSGenerateHistoryVC{
     
     func removeAllHistoryList(){
         dbHistory.deleteResultModels()
-//        dbHistory.deleteAll()
         updateDataView()
     }