瀏覽代碼

3.6.14(1)图片全部用自己写的方法储存,舍弃 kf的储存方案

100Years 2 周之前
父節點
當前提交
d14f3b6a9f
共有 23 個文件被更改,包括 786 次插入423 次删除
  1. 12 4
      TSLiveWallpaper.xcodeproj/project.pbxproj
  2. 65 35
      TSLiveWallpaper/AppDelegate.swift
  3. 2 3
      TSLiveWallpaper/Business/TSAIListVC/TSAIListHistoryVC/TSAIListHistoryVC.swift
  4. 49 24
      TSLiveWallpaper/Business/TSAIListVC/TSAIListHistoryVC/View/TSAIListHistoryCell.swift
  5. 167 128
      TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsBrowserCell.swift
  6. 37 24
      TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsBrowserVC.swift
  7. 44 24
      TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoGeneratorVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsVC+Comparison.swift
  8. 5 2
      TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoGeneratorVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsVC+Expand.swift
  9. 2 1
      TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoGeneratorVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsVC+Image.swift
  10. 0 94
      TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoGeneratorVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsVC+View.swift
  11. 17 7
      TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoGeneratorVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsVC.swift
  12. 4 3
      TSLiveWallpaper/Business/TSAIListVC/TSAIUploadPhotoVC/TSAIPhotoRemoveVC/TSAIPhotoRemoveVC.swift
  13. 10 6
      TSLiveWallpaper/Business/TSAIListVC/TSAIUploadPhotoVC/TSAIPhotoRemoveVC/View/TSAIPhotoRemoveBgView.swift
  14. 13 10
      TSLiveWallpaper/Business/TSAIResultsFrameVC/TSAIUsedPhotoVC/TSAIUsedPhotoVC.swift
  15. 32 0
      TSLiveWallpaper/Common/Ex/UIImageView+Ex.swift
  16. 7 1
      TSLiveWallpaper/Common/Tool/TSVideoPlayer.swift
  17. 163 0
      TSLiveWallpaper/Common/ViewTool/TSPhotoPickerManager/TSImagePhotoDiskTool.swift
  18. 25 33
      TSLiveWallpaper/Common/ViewTool/TSPhotoPickerManager/TSPhotoPickerManager.swift
  19. 54 0
      TSLiveWallpaper/Common/ViewTool/TSPhotoPickerManager/TSUserdPhotoDiskTool.swift
  20. 46 11
      TSLiveWallpaper/Data/OperationQueue/TSGenerateBaseOperation/TSGenerateBaseOperation.swift
  21. 13 3
      TSLiveWallpaper/Data/OperationQueue/TSGenerateBaseOperation/TSGenerateBasePhotoOperation.swift
  22. 10 1
      TSLiveWallpaper/Data/TSDBManager/TSDBActionInfoModel.swift
  23. 9 9
      TSLiveWallpaper/Data/TSDBManager/TSDBManager.swift

+ 12 - 4
TSLiveWallpaper.xcodeproj/project.pbxproj

@@ -94,6 +94,8 @@
 		A87CF8522E0296B30063CB7E /* TSAIPhotoDetailsBrowserVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A87CF8512E0296960063CB7E /* TSAIPhotoDetailsBrowserVC.swift */; };
 		A87CF8542E029B450063CB7E /* TSAIPhotoDetailsBrowserCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A87CF8532E029B3F0063CB7E /* TSAIPhotoDetailsBrowserCell.swift */; };
 		A87CF85A2E02AF070063CB7E /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = A87CF8582E02AF070063CB7E /* InfoPlist.strings */; };
+		A8843B272E40D36900C9B01D /* TSUserdPhotoDiskTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8843B262E40D35E00C9B01D /* TSUserdPhotoDiskTool.swift */; };
+		A8843B292E40E66D00C9B01D /* TSImagePhotoDiskTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8843B282E40E66C00C9B01D /* TSImagePhotoDiskTool.swift */; };
 		A8884B612E2DE7A3001B41AC /* TSAIPhotoRemoveBgView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8884B602E2DE789001B41AC /* TSAIPhotoRemoveBgView.swift */; };
 		A895B5002E01370E004F9B85 /* TSTextToastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A895B4FF2E01370E004F9B85 /* TSTextToastView.swift */; };
 		A8A2F0D22E3B168300E7B86B /* TSAIUploadPhotoVC+VideoStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8A2F0D12E3B167800E7B86B /* TSAIUploadPhotoVC+VideoStyle.swift */; };
@@ -285,6 +287,8 @@
 		A87CF8592E02AF070063CB7E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		A87CF85C2E02AF150063CB7E /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		A87CF85D2E02AF410063CB7E /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		A8843B262E40D35E00C9B01D /* TSUserdPhotoDiskTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSUserdPhotoDiskTool.swift; sourceTree = "<group>"; };
+		A8843B282E40E66C00C9B01D /* TSImagePhotoDiskTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSImagePhotoDiskTool.swift; sourceTree = "<group>"; };
 		A8884B602E2DE789001B41AC /* TSAIPhotoRemoveBgView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSAIPhotoRemoveBgView.swift; sourceTree = "<group>"; };
 		A895B4FF2E01370E004F9B85 /* TSTextToastView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSTextToastView.swift; sourceTree = "<group>"; };
 		A895B5012E025020004F9B85 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/LaunchScreen.strings; sourceTree = "<group>"; };
@@ -766,6 +770,8 @@
 		A86857A72DF9204B0089D222 /* TSPhotoPickerManager */ = {
 			isa = PBXGroup;
 			children = (
+				A8843B262E40D35E00C9B01D /* TSUserdPhotoDiskTool.swift */,
+				A8843B282E40E66C00C9B01D /* TSImagePhotoDiskTool.swift */,
 				A8EE84452E33931000CA04F0 /* KFImageView.swift */,
 				A86857A62DF9204B0089D222 /* TSPhotoPickerManager.swift */,
 				A8A2F0DD2E3C959600E7B86B /* TSHXPhotoPickerManager.swift */,
@@ -1316,6 +1322,7 @@
 				A83F28B02E168237009A4975 /* UIView+Ex.swift in Sources */,
 				A8F8BCDA2E040D8100EF4AA6 /* TSDownloadManager.swift in Sources */,
 				A86857B02DF921970089D222 /* TSAppBtnView.swift in Sources */,
+				A8843B272E40D36900C9B01D /* TSUserdPhotoDiskTool.swift in Sources */,
 				A81CA4B82D16A6BD00A3AAC8 /* View+Ex.swift in Sources */,
 				A8F76C422D350A9600AA6E93 /* TSPurchaseManager.swift in Sources */,
 				60553FDD2D3B84E700BAAD7F /* UIScrollView+Ext.swift in Sources */,
@@ -1329,6 +1336,7 @@
 				A8F9F3112E379B2D007FE237 /* KeychainManager.swift in Sources */,
 				A8F8BCEB2E0501DC00EF4AA6 /* TSAppUpdateAlertVC.swift in Sources */,
 				A81F5B402D194EA900740085 /* UIDevice+Extension.swift in Sources */,
+				A8843B292E40E66D00C9B01D /* TSImagePhotoDiskTool.swift in Sources */,
 				A83946272D1D623800ABFF0D /* TSShareUsVC.swift in Sources */,
 				A81CA48B2D15843700A3AAC8 /* TSCommonTool.swift in Sources */,
 				A868577E2DF81A940089D222 /* TSDBActionInfoModel.swift in Sources */,
@@ -1469,7 +1477,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 7;
+				CURRENT_PROJECT_VERSION = 1;
 				DEVELOPMENT_TEAM = 65UD255J84;
 				ENABLE_APP_SANDBOX = NO;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
@@ -1487,7 +1495,7 @@
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				MARKETING_VERSION = 3.6.13;
+				MARKETING_VERSION = 3.6.14;
 				PRODUCT_BUNDLE_IDENTIFIER = musicplayer.offline.com;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE_SPECIFIER = "";
@@ -1510,7 +1518,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 7;
+				CURRENT_PROJECT_VERSION = 1;
 				DEVELOPMENT_TEAM = 65UD255J84;
 				ENABLE_APP_SANDBOX = NO;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
@@ -1528,7 +1536,7 @@
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				MARKETING_VERSION = 3.6.13;
+				MARKETING_VERSION = 3.6.14;
 				PRODUCT_BUNDLE_IDENTIFIER = musicplayer.offline.com;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE_SPECIFIER = "";

+ 65 - 35
TSLiveWallpaper/AppDelegate.swift

@@ -130,9 +130,15 @@ extension AppDelegate {
 extension AppDelegate {
     
     func handleKingfisher(){
-        moveCacheSmoothly()
+//        moveCacheSmoothly()
 //        let cache = ImageCache( name: "permanent_image_cache")
-
+        //        guard let cachesURL = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first else {
+        //            dePrint("Cache Kingfisher 没有缓存,不用迁移")
+        //            return
+        //        }
+        
+//        cleanOldKFCacheData()
+        
         let cache = try! ImageCache(
             name: "permanent_image_cache",
             cacheDirectoryURL: FileManager.default.urls(for: .documentDirectory, in: .userDomainMask ).first!
@@ -143,42 +149,66 @@ extension AppDelegate {
     }
     
     
-    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.permanent_image_cache"
-        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) {
+    func cleanOldKFCacheData() {
+        //因为把kf 缓存从 cache 切换到了documentDirectory,所以清理下旧缓存数据
+        if UserDefaults.standard.string(forKey: "documentDirectory_permanent_image_cache") == nil {
+            UserDefaults.standard.set("1", forKey: "documentDirectory_permanent_image_cache")
+            UserDefaults.standard.synchronize()
+            
+            TSDBKeyManager.clearAll()
+            
+            let fileManager = FileManager.default
+            guard let cachesURL = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first else {
+                dePrint("Cache Kingfisher 没有缓存,不用迁移")
+                return
+            }
+            let srcURL = cachesURL.appendingPathComponent("com.onevcat.Kingfisher.ImageCache.permanent_image_cache")
             do {
-                // 先删除目标文件夹(如果需要合并则改为遍历子文件)
-                try fileManager.removeItem(at: dstURL)
-                dePrint("已清理旧缓存目录")
+                dePrint("srcURL=\(srcURL)")
+                try fileManager.removeItem(at: srcURL)
             } catch {
-                dePrint("清理旧缓存失败: \(error.localizedDescription)")
-                return
+                debugPrint("尝试删除文件失败: \(error.localizedDescription)")
             }
+            dePrint("删除 Cache Kingfisher 流程结束")
         }
-
-        do {
-            dePrint("srcURL=\(srcURL)")
-            dePrint("dstURL=\(dstURL)")
-            try fileManager.moveItem(at: srcURL, to: dstURL)// 移动文件
-        } catch {
-            debugPrint("尝试移动文件失败: \(error.localizedDescription)")
-        }
-   
-        
-        dePrint("移动 Cache Kingfisher 到 library 流程结束")
     }
+    
+//    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.permanent_image_cache"
+//        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 流程结束")
+//    }
 }

+ 2 - 3
TSLiveWallpaper/Business/TSAIListVC/TSAIListHistoryVC/TSAIListHistoryVC.swift

@@ -151,9 +151,8 @@ extension TSAIListHistoryVC: UICollectionViewDataSource ,UICollectionViewDelegat
                 }
             }
             
-            let vc = TSAIPhotoDetailsBrowserVC()
-            vc.currentIndex = dataModelArray.firstIndex(of: dbModel) ?? 0
-            vc.dataModelArray = dataModelArray
+            let currentIndex = dataModelArray.firstIndex(of: dbModel) ?? 0
+            let vc = TSAIPhotoDetailsBrowserVC(dataModelArray: dataModelArray, currentIndex: currentIndex)
             vc.deleteBlock = { [weak self]  model in
                 guard let self = self else { return }
                 TSRMShared.aiListDB.deleteListModel(id: model.id)

+ 49 - 24
TSLiveWallpaper/Business/TSAIListVC/TSAIListHistoryVC/View/TSAIListHistoryCell.swift

@@ -29,7 +29,8 @@ class TSAIListHistoryCell: TSBaseCollectionCell {
         }
     }
     
-    lazy var videoPlayerVC: TSAIListVideoPlayerVC = TSAIListVideoPlayerVC(videoURL: URL(string: "www.baidu.com")!)
+//    lazy var videoPlayerVC: TSAIListVideoPlayerVC = TSAIListVideoPlayerVC(videoURL: URL(string: "www.baidu.com")!)
+    var videoPlayer: TSVideoPlayer?
     lazy var generateView: TSGennerateCellView = {
         let generateView = TSGennerateCellView()
         generateView.isHidden = true
@@ -86,12 +87,12 @@ class TSAIListHistoryCell: TSBaseCollectionCell {
         return showImageView
     }()
     
-    lazy var hiddenImageView: UIImageView = {
-        let hiddenImageView = UIImageView.createImageView(imageName:"",contentMode: .scaleAspectFill)
-        hiddenImageView.backgroundColor = .gray
-        hiddenImageView.isHidden = true
-        return hiddenImageView
-    }()
+//    lazy var hiddenImageView: UIImageView = {
+//        let hiddenImageView = UIImageView.createImageView(imageName:"",contentMode: .scaleAspectFill)
+//        hiddenImageView.backgroundColor = .gray
+//        hiddenImageView.isHidden = true
+//        return hiddenImageView
+//    }()
     
     lazy var videoIconImageView: UIImageView = {
         let videoIconImageView = UIImageView.createImageView(image:.videoIcon,contentMode: .scaleToFill,autoMirrored:false)
@@ -146,12 +147,12 @@ class TSAIListHistoryCell: TSBaseCollectionCell {
         contentView.layer.borderWidth = 3
         contentView.layer.borderColor = "#DFD7C0".uiCGColor
         
-        contentView.addSubview(hiddenImageView)
-        hiddenImageView.snp.makeConstraints { make in
-            make.top.equalTo(0)
-            make.leading.equalTo(0)
-            make.trailing.bottom.equalTo(0)
-        }
+//        contentView.addSubview(hiddenImageView)
+//        hiddenImageView.snp.makeConstraints { make in
+//            make.top.equalTo(0)
+//            make.leading.equalTo(0)
+//            make.trailing.bottom.equalTo(0)
+//        }
         
         contentView.addSubview(showImageView)
         showImageView.snp.makeConstraints { make in
@@ -217,8 +218,11 @@ extension TSAIListHistoryCell {
                     setVideoURL()
                 }else {
                     setVideoHidden()
-                    showImageView.setAsyncImage(urlString: model.response.resultUrl,contentMode: .scaleAspectFill,backgroundColor: .white.withAlphaComponent(0.1))
-                    hiddenImageView.setAsyncImage(urlString: model.request.imageUrl,contentMode: .scaleAspectFill)
+                    showImageView.image = TSImagePhotoDiskTool.getLocalImage(urlString: model.response.resultUrl)
+                    
+                    
+//                    showImageView.setAsyncImage(urlString: model.response.resultUrl,contentMode: .scaleAspectFill,backgroundColor: .white.withAlphaComponent(0.1))
+//                    hiddenImageView.setAsyncImage(urlString: model.request.imageUrl,contentMode: .scaleAspectFill)
                 }
             }
 
@@ -235,22 +239,43 @@ extension TSAIListHistoryCell {
 }
 
 
+//extension TSAIListHistoryCell {
+//    
+//    func setVideoHidden(){
+//        blurEffect.isHidden = true
+//        videoPlayerVC.view.removeFromSuperview()
+//    }
+//    
+//    func setVideoURL(){
+//        blurEffect.isHidden = kPurchaseBusiness.isVip
+//        self.videoPlayerVC.view.removeFromSuperview()
+//        self.videoPlayerVC = TSAIListVideoPlayerVC(videoURL: dataModel.response.videoURL)
+//        self.videoPlayerVC.videoGravity = .resizeAspectFill
+//        self.videoPlayerVC.viewFrame = self.contentView.bounds
+//        self.videoPlayerVC.view.frame = self.contentView.bounds
+//        self.showImageView.insertSubview(self.videoPlayerVC.view, at: 0)
+//        self.videoPlayerVC.runloppPlay()
+//        self.videoPlayerVC.view.isUserInteractionEnabled = false
+//    }
+//}
+
 extension TSAIListHistoryCell {
     
     func setVideoHidden(){
         blurEffect.isHidden = true
-        videoPlayerVC.view.removeFromSuperview()
+        videoPlayer?.cleanup()
+        videoPlayer = nil
     }
     
     func setVideoURL(){
         blurEffect.isHidden = kPurchaseBusiness.isVip
-        self.videoPlayerVC.view.removeFromSuperview()
-        self.videoPlayerVC = TSAIListVideoPlayerVC(videoURL: dataModel.response.videoURL)
-        self.videoPlayerVC.videoGravity = .resizeAspectFill
-        self.videoPlayerVC.viewFrame = self.contentView.bounds
-        self.videoPlayerVC.view.frame = self.contentView.bounds
-        self.showImageView.insertSubview(self.videoPlayerVC.view, at: 0)
-        self.videoPlayerVC.runloppPlay()
-        self.videoPlayerVC.view.isUserInteractionEnabled = false
+        
+        videoPlayer?.cleanup()
+        videoPlayer = nil
+
+        videoPlayer = TSVideoPlayer()
+        videoPlayer?.setupPlayer(with: dataModel.response.videoURL)
+        videoPlayer?.addPlayerLayer(to: showImageView, frame: contentView.bounds)
+        videoPlayer?.play()
     }
 }

+ 167 - 128
TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsBrowserCell.swift

@@ -18,64 +18,20 @@ class TSAIPhotoDetailsBaseBrowserCell: TSBaseCollectionCell {
     
 }
 
-class TSAIPhotoDetailsPanComparisonViewCell: TSAIPhotoDetailsImageViewCell {
+class TSAIPhotoDetailsImageViewCell: TSAIPhotoDetailsBaseBrowserCell {
     override var model:TSActionInfoModel{
         didSet{
-            uploadPanComparisonView()
+//            netWorkImageView.setAsyncImage(urlString: model.response.resultUrl)
+            netWorkImageView.image = TSImagePhotoDiskTool.getLocalImage(urlString: model.response.resultUrl)
         }
     }
-    
-    lazy var panComparisonView : TSImageIPanComparisonView = TSImageIPanComparisonView()
+    lazy var netWorkImageView: UIImageView = UIImageView.createImageView()
     override func creatUI() {
-        super.creatUI()
-        bgContentView.addSubview(panComparisonView)
-        panComparisonView.snp.makeConstraints { make in
-            make.height.equalTo(k_ScreenHeight)
-            make.leading.trailing.equalTo(0)
-            make.centerY.equalToSuperview()
-        }
-    }
-    
-
-    func uploadPanComparisonView(){
-
-        DispatchQueue.global(qos: .userInitiated).async {
-            let infoModel = self.model
-            var oldImage:UIImage?
-            var newImage:UIImage?
-            let grounp = DispatchGroup()
-            grounp.enter()
-            _ = TSImageStoreTool.downloadImageWithProgress(urlString: infoModel.request.imageUrl) { image in
-                grounp.leave()
-                oldImage = image
-                
-            }
-            
-            grounp.enter()
-            _ = TSImageStoreTool.downloadImageWithProgress(urlString: infoModel.response.resultUrl) { image in
-                grounp.leave()
-                newImage = image
-            }
-            
-            grounp.notify(queue: .main) {
-                dePrint("infoModel.request.imageUrl=\(infoModel.request.imageUrl),\(infoModel.isCurrent)")
-                if infoModel.isCurrent == false { return }
-                if let oldImage = oldImage,let newImage = newImage {
-                    self.panComparisonView.isHidden = false
-                    let size = oldImage.size.height > newImage.size.height ? oldImage.size : newImage.size
-                    self.panComparisonView.snp.updateConstraints { make in
-                        make.height.equalTo(kGetUIWdith(designSize: size, currentW: k_ScreenWidth))
-                    }
-                    self.panComparisonView.configure(oldImage: oldImage, newImage: newImage)
-                }else{
-              
-                    self.panComparisonView.isHidden = true
-                    self.netWorkImageView.image = newImage
-                }
-            }
+        bgContentView.addSubview(netWorkImageView)
+        netWorkImageView.snp.makeConstraints { make in
+            make.edges.equalToSuperview()
         }
     }
-    
 }
 
 class TSAIPhotoDetailsVideoCell: TSAIPhotoDetailsBaseBrowserCell {
@@ -107,85 +63,168 @@ class TSAIPhotoDetailsVideoCell: TSAIPhotoDetailsBaseBrowserCell {
     }
 }
 
-class TSAIPhotoDetailsImageViewCell: TSAIPhotoDetailsBaseBrowserCell {
-    override var model:TSActionInfoModel{
-        didSet{
-            netWorkImageView.setAsyncImage(urlString: model.response.resultUrl)
-        }
-    }
-    lazy var netWorkImageView: UIImageView = UIImageView.createImageView()
-    override func creatUI() {
-        bgContentView.addSubview(netWorkImageView)
-        netWorkImageView.snp.makeConstraints { make in
-            make.edges.equalToSuperview()
-        }
-    }
-}
 
-class TSAIPhotoDetailsExpandImageViewCell: TSAIPhotoDetailsBaseBrowserCell {
-    override var model:TSActionInfoModel{
-        didSet{
-            var uploadImage:UIImage?
-            var resultImage:UIImage?
-            let group = DispatchGroup()
-            group.enter()
-            expandAreaView.bgImageView.setAsyncImage(urlString: model.response.resultUrl,contentMode: .scaleAspectFit, completion:  { image in
-                resultImage = image
-                group.leave()
-            })
-            group.enter()
-            expandAreaView.showImageView.setAsyncImage(urlString: model.request.imageUrl,contentMode: .scaleAspectFit, completion: { image in
-                uploadImage = image
-                group.leave()
-            })
-            group.notify(queue: .main){[weak self]  in
-                guard let self = self else { return }
-                if let uploadImage = uploadImage,let resultImage = resultImage {
-                    let sizes = TSAIExpandImageVC.getShowSize(uploadImage: uploadImage, resultImage: resultImage, maxSize: self.bounds.size)
-                    dePrint("sizes=\(sizes)")
-                    let scale = k_ScreenWidth / sizes.0.width
-                    expandAreaView.updateExpandAreaView(width: sizes.0.width*scale, height: sizes.0.height*scale)
-                    expandAreaView.updateImageView(width: sizes.1.width*scale, height: sizes.1.height*scale)
-                }
-            }
-        }
-    }
-    
-    lazy var expandAreaView: TSAIExpandChangeView = TSAIExpandChangeView()
-    lazy var switchOriginalPictureBtn: TSUIExpandedTouchButton = {
-        let switchOriginalPictureBtn = TSUIExpandedTouchButton()
-        switchOriginalPictureBtn.setUpButton(image:UIImage(named: "switch_original_picture"))
-        switchOriginalPictureBtn.addTarget(self, action: #selector(switchOriginalPictureTouchDown), for: .touchDown)
-        switchOriginalPictureBtn.addTarget(self, action: #selector(switchOriginalPictureTouchUp), for: [.touchUpInside, .touchUpOutside, .touchCancel])
-        switchOriginalPictureBtn.isHidden = false
-        return switchOriginalPictureBtn
-    }()//新旧对比切换按钮
-    
-    
-    @objc func switchOriginalPictureTouchDown() {
-        expandAreaView.onlyBgImage(only: false)
-    }
-    
-    @objc func switchOriginalPictureTouchUp() {
-        expandAreaView.onlyBgImage(only: true)
-    }
 
-    override func creatUI() {
-        bgContentView.addSubview(expandAreaView)
-        expandAreaView.snp.makeConstraints { make in
-            make.edges.equalToSuperview()
-        }
 
-        expandAreaView.showImageView.isHidden = true
-        expandAreaView.boardView.isHidden = true
 
-        contentView.addSubview(switchOriginalPictureBtn)
-        switchOriginalPictureBtn.snp.makeConstraints { make in
-            make.bottom.equalTo(-76-k_Height_safeAreaInsetsBottom())
-            make.trailing.equalTo(-16)
-            make.width.equalTo(40)
-            make.height.equalTo(40)
-        }
-    }
-}
+
+//class TSAIPhotoDetailsPanComparisonViewCell: TSAIPhotoDetailsImageViewCell {
+//    override var model:TSActionInfoModel{
+//        didSet{
+//            let infoModel = self.model
+//            uploadPanComparisonView(infoModel: infoModel)
+//        }
+//    }
+//    
+//    lazy var panComparisonView : TSImageIPanComparisonView = TSImageIPanComparisonView()
+//    override func creatUI() {
+//        super.creatUI()
+//        panComparisonView.isHidden = true
+//        bgContentView.addSubview(panComparisonView)
+//        panComparisonView.snp.makeConstraints { make in
+//            make.height.equalTo(k_ScreenHeight)
+//            make.leading.trailing.equalTo(0)
+//            make.centerY.equalToSuperview()
+//        }
+//    }
+//    
+//
+//    func uploadPanComparisonView(infoModel:TSActionInfoModel){
+//        self.netWorkImageView.isHidden = true
+//        self.panComparisonView.isHidden = true
+//        
+//        
+//        DispatchQueue.global(qos: .userInitiated).async {
+//            var oldImage:UIImage?
+//            var newImage:UIImage?
+//            let grounp = DispatchGroup()
+//            grounp.enter()
+//            TSImageStoreTool.downloadImageWithProgress(urlString: infoModel.request.imageUrl) { image in
+//                grounp.leave()
+//                oldImage = image
+//                
+//            }
+//            
+//            grounp.enter()
+//            TSImageStoreTool.downloadImageWithProgress(urlString: infoModel.response.resultUrl) { image in
+//                grounp.leave()
+//                newImage = image
+//            }
+//            
+//            grounp.notify(queue: .main) {
+//                
+//#if DEBUG
+//                oldImage = nil
+//#endif
+//
+//                dePrint("infoModel.request.imageUrl=\(infoModel.request.imageUrl),\(infoModel.isCurrent)")
+//                if infoModel.isCurrent == false { return }
+//                if let oldImage = oldImage,let newImage = newImage {
+//                    self.panComparisonView.isHidden = false
+//                    let size = oldImage.size.height > newImage.size.height ? oldImage.size : newImage.size
+//                    self.panComparisonView.snp.updateConstraints { make in
+//                        make.height.equalTo(kGetUIWdith(designSize: size, currentW: k_ScreenWidth))
+//                    }
+//                    self.panComparisonView.configure(oldImage: oldImage, newImage: newImage)
+//                }else{
+//                    self.netWorkImageView.isHidden = false
+//                    self.netWorkImageView.image = newImage
+//                }
+//            }
+//        }
+//    }
+//    
+//}
+
+//class TSAIPhotoDetailsExpandImageViewCell: TSAIPhotoDetailsImageViewCell {
+//    override var model:TSActionInfoModel{
+//        didSet{
+//            let infoModel = model
+//            
+//  
+//            
+//            self.updateExpandAreaView(infoModel: infoModel)
+//        }
+//    }
+//    
+//    func updateExpandAreaView(infoModel:TSActionInfoModel){
+//        
+//        self.netWorkImageView.isHidden = true
+//        self.expandAreaView.isHidden = true
+//        self.switchOriginalPictureBtn.isHidden = true
+//        
+//        var uploadImage:UIImage?
+//        var resultImage:UIImage?
+//        let group = DispatchGroup()
+//        group.enter()
+//        expandAreaView.bgImageView.setAsyncImage(urlString: infoModel.response.resultUrl,contentMode: .scaleAspectFit, completion:  { image in
+//            resultImage = image
+//            group.leave()
+//        })
+//        group.enter()
+//        expandAreaView.showImageView.setAsyncImage(urlString: infoModel.request.imageUrl,contentMode: .scaleAspectFit, completion: { image in
+//            uploadImage = image
+//            group.leave()
+//        })
+//        group.notify(queue: .main){[weak self]  in
+//            guard let self = self else { return }
+//            
+//#if DEBUG
+//            uploadImage = nil
+//#endif
+//            
+//            if infoModel.isCurrent == false { return }
+//            if let uploadImage = uploadImage,let resultImage = resultImage {
+//                self.expandAreaView.isHidden = false
+//                self.switchOriginalPictureBtn.isHidden = false
+//                let sizes = TSAIExpandImageVC.getShowSize(uploadImage: uploadImage, resultImage: resultImage, maxSize: self.bounds.size)
+//                dePrint("sizes=\(sizes)")
+//                let scale = k_ScreenWidth / sizes.0.width
+//                expandAreaView.updateExpandAreaView(width: sizes.0.width*scale, height: sizes.0.height*scale)
+//                expandAreaView.updateImageView(width: sizes.1.width*scale, height: sizes.1.height*scale)
+//            }else{
+//                self.netWorkImageView.isHidden = false
+//                self.netWorkImageView.image = resultImage
+//            }
+//        }
+//    }
+//    
+//    lazy var expandAreaView: TSAIExpandChangeView = TSAIExpandChangeView()
+//    lazy var switchOriginalPictureBtn: TSUIExpandedTouchButton = {
+//        let switchOriginalPictureBtn = TSUIExpandedTouchButton()
+//        switchOriginalPictureBtn.setUpButton(image:UIImage(named: "switch_original_picture"))
+//        switchOriginalPictureBtn.addTarget(self, action: #selector(switchOriginalPictureTouchDown), for: .touchDown)
+//        switchOriginalPictureBtn.addTarget(self, action: #selector(switchOriginalPictureTouchUp), for: [.touchUpInside, .touchUpOutside, .touchCancel])
+//        switchOriginalPictureBtn.isHidden = true
+//        return switchOriginalPictureBtn
+//    }()//新旧对比切换按钮
+//    
+//    
+//    @objc func switchOriginalPictureTouchDown() {
+//        expandAreaView.onlyBgImage(only: false)
+//    }
+//    
+//    @objc func switchOriginalPictureTouchUp() {
+//        expandAreaView.onlyBgImage(only: true)
+//    }
+//
+//    override func creatUI() {
+//        super.creatUI()
+//        bgContentView.addSubview(expandAreaView)
+//        expandAreaView.snp.makeConstraints { make in
+//            make.edges.equalToSuperview()
+//        }
+//
+//        expandAreaView.showImageView.isHidden = true
+//        expandAreaView.boardView.isHidden = true
+//
+//        contentView.addSubview(switchOriginalPictureBtn)
+//        switchOriginalPictureBtn.snp.makeConstraints { make in
+//            make.bottom.equalTo(-76-k_Height_safeAreaInsetsBottom())
+//            make.trailing.equalTo(-16)
+//            make.width.equalTo(40)
+//            make.height.equalTo(40)
+//        }
+//    }
+//}
 

+ 37 - 24
TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsBrowserVC.swift

@@ -8,21 +8,24 @@
 class TSAIPhotoDetailsBrowserVC: TSBaseVC {
     
     var deleteBlock:((TSActionInfoModel)->Void)?
-    var dataModelArray:[TSActionInfoModel] = []{
+    
+    var dataModelArray:[TSActionInfoModel]
+    var currentIndex:Int{
         didSet{
-            DispatchQueue.main.async {
-                self.collectionView.isHidden = false
-                self.collectionView.reloadData()
-                self.collectionView.setContentOffset(CGPoint(x:0 , y:CGFloat(self.currentIndex) * self.collectionView.frame.size.height), animated: false)
-            
-//                kMainShort {
-//                    self.collectionView.reloadData()
-                    self.reloadUI()
-//                }
-            }
+            reloadUI()
         }
     }
 
+    init(dataModelArray: [TSActionInfoModel],currentIndex: Int) {
+        self.dataModelArray = dataModelArray
+        self.currentIndex = currentIndex
+        super.init()
+    }
+    
+    @MainActor required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
     var currentModel:TSActionInfoModel?{
         if let model = dataModelArray.safeObj(At: currentIndex){
             return model
@@ -30,11 +33,7 @@ class TSAIPhotoDetailsBrowserVC: TSBaseVC {
         return nil
     }
     
-    var currentIndex:Int = 0{
-        didSet{
-            reloadUI()
-        }
-    }
+
     
     lazy var collectionView: UICollectionView = {
 
@@ -52,10 +51,10 @@ class TSAIPhotoDetailsBrowserVC: TSBaseVC {
         }
         
         collectionView.register(TSAIPhotoDetailsBaseBrowserCell.self, forCellWithReuseIdentifier: "TSAIPhotoDetailsBaseBrowserCell")
-        collectionView.register(TSAIPhotoDetailsPanComparisonViewCell.self, forCellWithReuseIdentifier: "TSAIPhotoDetailsPanComparisonViewCell")
         collectionView.register(TSAIPhotoDetailsVideoCell.self, forCellWithReuseIdentifier: "TSAIPhotoDetailsVideoCell")
         collectionView.register(TSAIPhotoDetailsImageViewCell.self, forCellWithReuseIdentifier: "TSAIPhotoDetailsImageViewCell")
-        collectionView.register(TSAIPhotoDetailsExpandImageViewCell.self, forCellWithReuseIdentifier: "TSAIPhotoDetailsExpandImageViewCell")
+//        collectionView.register(TSAIPhotoDetailsPanComparisonViewCell.self, forCellWithReuseIdentifier: "TSAIPhotoDetailsPanComparisonViewCell")
+//        collectionView.register(TSAIPhotoDetailsExpandImageViewCell.self, forCellWithReuseIdentifier: "TSAIPhotoDetailsExpandImageViewCell")
         
         collectionView.isPagingEnabled = true
         collectionView.isHidden = true
@@ -193,7 +192,6 @@ class TSAIPhotoDetailsBrowserVC: TSBaseVC {
     }
     
     @objc func clickNavRight() {
-
         TSCustomAlertController.show(in: self, config: TSCustomAlertController.AlertConfig(
             message: "Are you sure to delete?".localized,
             cancelTitle: "Delete".localized,
@@ -213,6 +211,17 @@ class TSAIPhotoDetailsBrowserVC: TSBaseVC {
             }
         ))
     }
+    
+    override func dealThings() {
+        DispatchQueue.main.async {
+            self.collectionView.isHidden = true
+            self.collectionView.reloadData()
+            self.collectionView.setContentOffset(CGPoint(x:0 , y:CGFloat(self.currentIndex) * self.collectionView.frame.size.height), animated: false)
+            self.collectionView.isHidden = false
+            self.reloadUI()
+        }
+    }
+        
 }
 
 extension TSAIPhotoDetailsBrowserVC {
@@ -224,12 +233,16 @@ extension TSAIPhotoDetailsBrowserVC {
     func getCellId(model:TSActionInfoModel)->String{
         if model.isVideo{
             return "TSAIPhotoDetailsVideoCell"
-        }else if model.isShowSingleImage{
-            return "TSAIPhotoDetailsImageViewCell"
-        }else if model.isPhotoExpand{
-            return "TSAIPhotoDetailsExpandImageViewCell"
         }
-        return "TSAIPhotoDetailsPanComparisonViewCell"
+        
+//        else if model.isShowSingleImage{
+//            return "TSAIPhotoDetailsImageViewCell"
+//        }else if model.isPhotoExpand{
+//            return "TSAIPhotoDetailsExpandImageViewCell"
+//        }
+//        return "TSAIPhotoDetailsPanComparisonViewCell"
+        
+        return "TSAIPhotoDetailsImageViewCell"
     }
 }
 

+ 44 - 24
TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoGeneratorVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsVC+Comparison.swift

@@ -19,35 +19,55 @@ extension TSAIPhotoDetailsVC {
     }
     
     
+//    func uploadPanComparisonView(){
+//        guard let infoModel = infoModel else { return }
+//        DispatchQueue.global(qos: .userInitiated).async {
+//            var oldImage:UIImage?
+//            var newImage:UIImage?
+//            let grounp = DispatchGroup()
+//            grounp.enter()
+//            
+//            
+//            
+//            TSImageStoreTool.downloadImageWithProgress(urlString: infoModel.request.imageUrl) { image in
+//                grounp.leave()
+//                oldImage = image
+//                
+//            }
+//            
+//            grounp.enter()
+//            TSImageStoreTool.downloadImageWithProgress(urlString: infoModel.response.resultUrl) { image in
+//                grounp.leave()
+//                newImage = image
+//            }
+//            
+//            grounp.notify(queue: .main) {
+//                if let oldImage = oldImage,let newImage = newImage {
+//                    let size = oldImage.size.height > newImage.size.height ? oldImage.size : newImage.size
+//                    self.panComparisonView.snp.updateConstraints { make in
+//                        make.height.equalTo(kGetUIWdith(designSize: size, currentW: k_ScreenWidth))
+//                    }
+//                }
+//                
+//                self.panComparisonView.configure(oldImage: oldImage, newImage: newImage)
+//            }
+//        }
+//    }
+    
     func uploadPanComparisonView(){
         guard let infoModel = infoModel else { return }
         DispatchQueue.global(qos: .userInitiated).async {
-            var oldImage:UIImage?
-            var newImage:UIImage?
-            let grounp = DispatchGroup()
-            grounp.enter()
-            TSImageStoreTool.downloadImageWithProgress(urlString: infoModel.request.imageUrl) { image in
-                grounp.leave()
-                oldImage = image
-                
-            }
-            
-            grounp.enter()
-            TSImageStoreTool.downloadImageWithProgress(urlString: infoModel.response.resultUrl) { image in
-                grounp.leave()
-                newImage = image
-            }
-            
-            grounp.notify(queue: .main) {
-                if let oldImage = oldImage,let newImage = newImage {
-                    let size = oldImage.size.height > newImage.size.height ? oldImage.size : newImage.size
-                    self.panComparisonView.snp.updateConstraints { make in
-                        make.height.equalTo(kGetUIWdith(designSize: size, currentW: k_ScreenWidth))
-                    }
+            var oldImage:UIImage? = TSImagePhotoDiskTool.getLocalImage(urlString: infoModel.request.imageUrl)
+            var newImage:UIImage? = TSImagePhotoDiskTool.getLocalImage(urlString: infoModel.response.resultUrl)
+
+            if let oldImage = oldImage,let newImage = newImage {
+                let size = oldImage.size.height > newImage.size.height ? oldImage.size : newImage.size
+                self.panComparisonView.snp.updateConstraints { make in
+                    make.height.equalTo(kGetUIWdith(designSize: size, currentW: k_ScreenWidth))
                 }
-                
-                self.panComparisonView.configure(oldImage: oldImage, newImage: newImage)
             }
+            
+            self.panComparisonView.configure(oldImage: oldImage, newImage: newImage)
         }
     }
     

+ 5 - 2
TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoGeneratorVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsVC+Expand.swift

@@ -35,8 +35,11 @@ extension TSAIPhotoDetailsVC {
             setUpExpandAreaView()
         }
         
-        expandAreaView.bgImageView.setAsyncImage(urlString: infoModel.response.resultUrl)
-        expandAreaView.showImageView.setAsyncImage(urlString: infoModel.request.imageUrl)
+//        expandAreaView.bgImageView.setAsyncImage(urlString: infoModel.response.resultUrl)
+//        expandAreaView.showImageView.setAsyncImage(urlString: infoModel.request.imageUrl)
+        
+        expandAreaView.bgImageView.image = TSImagePhotoDiskTool.getLocalImage(urlString: infoModel.response.resultUrl)
+        expandAreaView.bgImageView.image = TSImagePhotoDiskTool.getLocalImage(urlString: infoModel.request.imageUrl)
     }
     
     

+ 2 - 1
TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoGeneratorVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsVC+Image.swift

@@ -18,7 +18,8 @@ extension TSAIPhotoDetailsVC {
             make.leading.trailing.equalTo(0)
             make.centerY.equalToSuperview()
         }
-        netWorkImageView.setAsyncImage(urlString: infoModel.response.resultUrl)
+//        netWorkImageView.setAsyncImage(urlString: infoModel.response.resultUrl)
+        netWorkImageView.image = TSImagePhotoDiskTool.getLocalImage(urlString: infoModel.response.resultUrl)
     }
 }
 

+ 0 - 94
TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoGeneratorVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsVC+View.swift

@@ -8,16 +8,6 @@
 
 extension TSAIPhotoDetailsVC{
     
-    
-//    func creatSwitchOriginalPictureBtn() -> TSUIExpandedTouchButton {
-//        let switchOriginalPictureBtn = TSUIExpandedTouchButton()
-//        switchOriginalPictureBtn.setUpButton(image:UIImage(named: "switch_original_picture"))
-//        switchOriginalPictureBtn.addTarget(self, action: #selector(switchOriginalPictureTouchDown), for: .touchDown)
-//        switchOriginalPictureBtn.addTarget(self, action: #selector(switchOriginalPictureTouchUp), for: [.touchUpInside, .touchUpOutside, .touchCancel])
-//        switchOriginalPictureBtn.isHidden = true
-//        return switchOriginalPictureBtn
-//    }
-    
     func creatSaveBtn() -> UIButton {
         let saveBtn = kCreateNormalSubmitBtn(title: "Save".localized) { [weak self]  in
             guard let self = self else { return }
@@ -56,87 +46,3 @@ extension TSAIPhotoDetailsVC{
     }
     
 }
-
-
-
-
-
-
-//extension TSAIPhotoDetailsVC{
-//    @objc func switchOriginalPictureTouchDown() {
-//    //        if viewModel.generatorModel.generatorStyle == .photoExpand {
-//    //            expandAreaView.onlyBgImage(only: false)
-//    //        }else{
-//    //        guard let infoModel = infoModel else { return }
-//    //        self.netWorkImageView.setAsyncImage(urlString: infoModel.request.imageUrl,placeholder:kPlaceholderImage)
-//    //        }
-//    }
-//
-//    @objc func switchOriginalPictureTouchUp() {
-//        guard let infoModel = infoModel else { return }
-//        
-//    //        if viewModel.generatorModel.generatorStyle == .photoExpand {
-//    //            expandAreaView.onlyBgImage(only: true)
-//    //        }else{
-//    //            self.netWorkImageView.setAsyncImage(urlString:infoModel.response.resultUrl,placeholder:kPlaceholderImage)
-//    //        }
-//    }
-//}
-
-
-
-//    lazy var rotatingPictureBtn: TSUIExpandedTouchButton = {
-//        let rotatingPictureBtn = TSUIExpandedTouchButton()
-//        rotatingPictureBtn.setUpButton(image:UIImage(named: "rotating_picture")){ [weak self]  in
-//            guard let self = self else { return }
-//            //旋转图片并储存
-//            if let image = netWorkImageView.image?.rotated(by: .degrees90) {
-//                netWorkImageView.image = image
-//                if let resultUrl = self.infoModel?.response.resultUrl,
-//                   let url = URL(string: resultUrl){
-//                    ImageCache.default.store(image, forKey: url.cacheKey)
-//                }
-//            }
-//        }
-//        rotatingPictureBtn.isHidden = true
-//        return rotatingPictureBtn
-//    }()
-//        contentView.addSubview(rotatingPictureBtn)
-//        rotatingPictureBtn.snp.makeConstraints { make in
-//            make.bottom.equalTo(-k_Height_safeAreaInsetsBottom() - 76)
-//            make.trailing.equalTo(-16)
-//            make.width.equalTo(40)
-//            make.height.equalTo(40)
-//        }
-
-
-//        if viewModel.generatorModel.generatorStyle == .photoExpand {
-//            setUpExpandAreaView()
-//        }
-
-//    func setUpExpandAreaView(){
-//        netWorkImageView.addSubview(expandAreaView)
-//        expandAreaView.snp.makeConstraints { make in
-//            make.top.leading.trailing.bottom.equalTo(0)
-//        }
-//
-//        expandAreaView.showImageView.isHidden = true
-//        expandAreaView.boardView.isHidden = true
-//
-//        if let sizes = self.viewModel.generatorModel.expandViewSizes {
-//            expandAreaView.updateExpandAreaView(width: sizes.0.width, height: sizes.0.height)
-//            expandAreaView.updateImageView(width: sizes.1.width, height: sizes.1.height)
-//        }
-//    }
-
-
-//extension TSAIListPhotoGeneratorVC {
-//    
-//    func setExpandAreaImage(){
-////        if viewModel.generatorModel.generatorStyle == .photoExpand {
-////            netWorkImageView.image = nil
-////            expandAreaView.bgImageView.setAsyncImage(urlString: infoModel?.response.resultUrl,placeholder:kPlaceholderImage,backgroundColor:netWorkImageView.backgroundColor!)
-////            expandAreaView.showImageView.image = self.viewModel.generatorModel.upLoadImage
-////        }
-//    }
-//}

+ 17 - 7
TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoGeneratorVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsVC.swift

@@ -160,19 +160,29 @@ class TSAIPhotoDetailsVC: TSBaseVC {
 
 extension TSAIPhotoDetailsVC {
     
+//    func updateImageView(){
+//        kMainAsync {
+//            guard let infoModel = self.infoModel else { return }
+//            if infoModel.isPhotoExpand {
+//                self.setExpandAreaImage()
+//            }else if infoModel.isVideo {
+//                self.setVideoURL()
+//            }else if infoModel.isShowSingleImage{
+//                self.updateNetWorkImageView()
+//            }else{
+//                self.uploadPanComparisonView()
+//            }
+//        }
+//    }
+    
     func updateImageView(){
         kMainAsync {
             guard let infoModel = self.infoModel else { return }
-            if infoModel.isPhotoExpand {
-                self.setExpandAreaImage()
-            }else if infoModel.isVideo {
+            if infoModel.isVideo {
                 self.setVideoURL()
-            }else if infoModel.isShowSingleImage{
-                self.updateNetWorkImageView()
             }else{
-                self.uploadPanComparisonView()
+                self.updateNetWorkImageView()
             }
         }
-
     }
 }

+ 4 - 3
TSLiveWallpaper/Business/TSAIListVC/TSAIUploadPhotoVC/TSAIPhotoRemoveVC/TSAIPhotoRemoveVC.swift

@@ -223,10 +223,10 @@ extension TSAIRemovePhotoBgVC {
             guard let self = self else { return }
             if let image = image {
                 kShareContent(target: self, anyData: image)
-                guard let infoModel = self.infoModel else { return }
                 isSavePhotoMark = true
                 if let resultUrl = self.infoModel?.response.resultUrl{
-                    TSImageStoreTool.storeImage(image: image, urlString: resultUrl)
+//                    TSImageStoreTool.storeImage(image: image, urlString: resultUrl)
+                    TSImagePhotoDiskTool.saveDiskImage(image: image, urlString: resultUrl)
                 }
             }
         }
@@ -255,7 +255,8 @@ extension TSAIRemovePhotoBgVC {
                         isSavePhotoMark = true
                         kSaveSuccesswShared.show(atView:self.view)
                         if let resultUrl = self.infoModel?.response.resultUrl{
-                            TSImageStoreTool.storeImage(image: image, urlString: resultUrl)
+//                            TSImageStoreTool.storeImage(image: image, urlString: resultUrl)
+                            TSImagePhotoDiskTool.saveDiskImage(image: image, urlString: resultUrl)
                         }
                     }else{
                         debugPrint(error)

+ 10 - 6
TSLiveWallpaper/Business/TSAIListVC/TSAIUploadPhotoVC/TSAIPhotoRemoveVC/View/TSAIPhotoRemoveBgView.swift

@@ -29,12 +29,16 @@ class TSAIPhotoRemoveBgView: TSBaseView {
     }
     
     func setFrontImageURLString(urlString:String){
-        frontImageView.setAsyncImage(urlString: urlString, completion: { [weak self] image in
-            guard let self = self else { return }
-            if let image = image {
-                setFrontImage(image: image)
-            }
-        })
+//        frontImageView.setAsyncImage(urlString: urlString, completion: { [weak self] image in
+//            guard let self = self else { return }
+//            if let image = image {
+//                setFrontImage(image: image)
+//            }
+//        })
+        
+        if let image = TSImagePhotoDiskTool.getLocalImage(urlString: urlString) {
+            setFrontImage(image: image)
+        }
     }
     
     lazy var colorPickerManager = TSColorPickerManager(viewController: targetVC)

+ 13 - 10
TSLiveWallpaper/Business/TSAIResultsFrameVC/TSAIUsedPhotoVC/TSAIUsedPhotoVC.swift

@@ -170,11 +170,13 @@ extension TSAIUsedPhotoVC: UICollectionViewDataSource ,UICollectionViewDelegate
 
     public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
         if let keyString = listImageKeylArray.safeObj(At:indexPath.row){
-            TSImageStoreTool.retrieveImage(urlString: keyString) { [weak self] image in
-                guard let self = self else { return }
-                guard let image = image else { return }
+            
+//            TSImageStoreTool.retrieveImage(urlString: keyString) { [weak self] image in
+//            guard let self = self else { return }
+//            guard let image = image else { return }
+            
+            if let image = TSUserdPhotoDiskTool.loadUserdPhotoImage(imageKey: keyString) {
                 let itemModel = TSDiscoverItemModel(style: .colorize,viewModel: TSDiscoverAnimationItemVM(),generateModel: TSGenerateModel(json: TSAIListDataVM.shared.ptp_Colorize))
-                
                 let vc = TSAIUploadPhotoVC(titleString: "",upLoadImage: image, generatorStyle: .colorize,disCoverItemModel: itemModel,isUsedPhoto: true)
                 vc.setDeleteComplete { [weak self]  in
                     guard let self = self else { return }
@@ -183,7 +185,6 @@ extension TSAIUsedPhotoVC: UICollectionViewDataSource ,UICollectionViewDelegate
                     }
                 }
                 self.push(vc,animated: true)
-                
             }
         }
     }
@@ -211,7 +212,8 @@ extension TSAIUsedPhotoVC{
     
     func removeKey(imageKey:String){
         TSDBKeyManager.removeKey(imageKey)
-        TSImageStoreTool.removeImage(urlString: (imageKey))
+//        TSImageStoreTool.removeImage(urlString: (imageKey))
+        TSUserdPhotoDiskTool.removeImageKey(imageKey:imageKey)
         updateDataView()
     }
 }
@@ -234,10 +236,11 @@ class TSAIUsedPhotoVCCell: TSBaseCollectionCell {
     var operation:TSGenerateBasePhotoOperation?
     var keyString:String = String(){
         didSet {
-            TSImageStoreTool.retrieveImage(urlString: keyString) { [weak self] image in
-                guard let self = self else { return }
-                showImageView.image = image
-            }
+//            TSImageStoreTool.retrieveImage(urlString: keyString) { [weak self] image in
+//                guard let self = self else { return }
+//                showImageView.image = image
+//            }
+            showImageView.image = TSUserdPhotoDiskTool.loadUserdPhotoImage(imageKey: keyString)
         }
     }
     

+ 32 - 0
TSLiveWallpaper/Common/Ex/UIImageView+Ex.swift

@@ -14,3 +14,35 @@ extension UIImageView {
         self.image = image.imageFlippedForRightToLeftLayoutDirection()
     }
 }
+
+//
+//extension UIImageView {
+//    
+//    public func setLocalImage(urlString: String?,
+//                    contentMode: UIView.ContentMode? = nil,
+//             backgroundColor: UIColor? = nil){
+//        let imageView = self
+//        
+//        if let contentMode = contentMode {
+//            imageView.contentMode = contentMode
+//        }
+//        
+//        if let backgroundColor = backgroundColor {
+//            imageView.backgroundColor = backgroundColor
+//        }
+//
+//        guard let urlString = urlString,!urlString.isEmpty,let url = URL(string: urlString) else {
+//            return
+//        }
+//      
+//        if let path = TSImagePhotoDiskTool.getLocalImageURL(urlString: urlString,fileEx:nil){
+//            imageView.image = UIImage(contentsOfFile: path.path)
+//        }else if urlString.contains("/") {
+//            imageView.image = UIImage(contentsOfFile: urlString)
+//        }else {
+//            if let image = UIImage(named: urlString) {
+//                imageView.image = image
+//            }
+//        }
+//    }
+//}

+ 7 - 1
TSLiveWallpaper/Common/Tool/TSVideoPlayer.swift

@@ -104,7 +104,11 @@ class TSVideoPlayer:NSObject {
     
     static func getFirstFrameOnly(url:URL)->UIImage? {
         let urlString = "TSVideoPlayer/" + url.lastPathComponent
-        
+
+//        if let image = TSImagePhotoDiskTool.getLocalImage(urlString: urlString) {
+//            dePrint("从缓存中取图片")
+//            return image
+//        }
         if let image = TSImageStoreTool.retrieveImageInMemoryCache(urlString: urlString) {
             dePrint("从缓存中取图片")
             return image
@@ -118,6 +122,8 @@ class TSVideoPlayer:NSObject {
             let cgImage = try generator.copyCGImage(at: CMTime(seconds: 0, preferredTimescale: 1), actualTime: nil)
             let image = UIImage(cgImage: cgImage)
             TSImageStoreTool.storeImage(image: image, urlString: urlString)
+//            TSImagePhotoDiskTool.saveDiskImage(image: image, urlString: urlString)
+            
             return image
         } catch {
             dePrint("获取第一帧失败: \(error)")

+ 163 - 0
TSLiveWallpaper/Common/ViewTool/TSPhotoPickerManager/TSImagePhotoDiskTool.swift

@@ -0,0 +1,163 @@
+//
+//  TSImagePhotoSaveTool.swift
+//  TSLiveWallpaper
+//
+//  Created by 100Years on 2025/8/4.
+//
+
+import Alamofire
+class TSImagePhotoDiskTool {
+    
+    /// 获取 Image 下载后保存的的文件件路径
+    static var saveImagePathURL:URL = {
+        let saveRingPathURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("image")
+        return saveRingPathURL
+    }()
+    
+    
+    static func getDownLoadImage(urlString:String,progressHandler: ((Double) -> Void)? = nil,complete:@escaping (URL?,Bool)->Void){
+        if let path = getLocalImageURL(urlString: urlString,fileEx:nil) {
+            complete(path,false)
+        }else{
+            _ = downloadImage(urlString:urlString,progressHandler: progressHandler) { url, error in
+                if let path = url {
+                    complete(path,true)
+                }else{
+                    complete(nil,true)
+                }
+            }
+        }
+    }
+    
+    static func downloadImage(
+        urlString: String,
+        fileEx:String? = nil,
+    missingEx:String? = nil,
+        progressHandler: ((Double) -> Void)? = nil,
+        completion: @escaping (URL?, Error?) -> Void
+    ) -> DownloadRequest? {
+        
+        if let fileName = getLocalImageURL(urlString: urlString,fileEx:fileEx,missingEx:missingEx){
+            completion(fileName,nil)
+            return nil
+        }
+        guard let savePath = TSBusinessFileManager.generateLocalURL(from: urlString, fileEx: fileEx, missingEx: missingEx,frontPathURL: saveImagePathURL,completion: { string, error in
+            completion(nil,error)
+        })else { return nil }
+        
+        return TSNetworkShared.downloadFile(urlString: urlString,to: savePath, progressHandler:progressHandler,completion: completion)
+    }
+    
+    
+    //获取 urlstring 本地的缓存 url path
+    public static func getLocalImageURL(
+        urlString: String,
+        fileEx:String? = nil,
+    missingEx:String? = nil)->URL?{
+        
+        guard let fileName = TSBusinessFileManager.generateFileName(urlString: urlString,fileEx:fileEx,missingEx: missingEx) else{
+            return nil
+        }
+
+        let fileURL = saveImagePathURL.appendingPathComponent(fileName)
+        if FileManager.default.fileExists(atPath: fileURL.path) {
+            print("文件已存在于缓存中: \(fileURL)")
+            return fileURL
+        }
+    
+        return nil
+    }
+    
+    
+    public static func getLocalImage(urlString: String)->UIImage?{
+        if let imagePath = getLocalImageURL(urlString: urlString),let image = UIImage(contentsOfFile: imagePath.path) {
+            return image
+        }else if urlString.contains("/"),let image = UIImage(contentsOfFile: urlString) {
+            return image
+        }
+        else if let image = UIImage(named: urlString){
+            return image
+        }
+   
+        return nil
+    }
+    
+    
+    static func saveDiskImage(image: UIImage,urlString:String){
+        guard var fileName = TSBusinessFileManager.generateFileName(urlString: urlString,fileEx:nil,missingEx: nil) else{
+            return
+        }
+        
+      
+        let fileNamelowercased = fileName.lowercased()
+        let isHaveEx =
+        fileNamelowercased.hasSuffix(".jpeg") ||
+        fileNamelowercased.hasSuffix(".jpg") ||
+        fileNamelowercased.hasSuffix(".png")
+    
+        let hasAlphaChannel = image.hasAlphaChannel()
+        if isHaveEx == false{
+            fileName = fileName + (hasAlphaChannel ? ".png" : ".jpeg")
+        }
+        
+        let imagePath = saveImagePathURL.appendingPathComponent(fileName)
+        _ = image.writeSaveUserdImageToDocuments(fileURL: imagePath,preferPNG: hasAlphaChannel)
+    }
+
+    static func deleteDiskImage(urlString:String){
+        if let path = getLocalImageURL(urlString: urlString){
+            TSFileManagerTool.removeItem(from:path)
+        }
+    }
+    
+    static func deleteDiskImages(urlStrings:[String]){
+        for imageUrl in urlStrings{
+            TSImagePhotoDiskTool.deleteDiskImage(urlString: imageUrl)
+        }
+    }
+}
+
+
+extension UIImage {
+    
+    func writeSaveUserdImageToDocuments(fileURL: URL,
+                                      quality: CGFloat = 1.0,
+                                      preferPNG: Bool = true)->String?{
+        let image = self
+        let fileManager = FileManager.default
+        do {
+            // 如果目标文件夹不存在,创建文件夹
+            let fileFolder = fileURL.deletingLastPathComponent()
+            if !fileManager.fileExists(atPath:fileFolder.path) {
+                try fileManager.createDirectory(at: fileFolder, withIntermediateDirectories: true, attributes: nil)
+            }
+        } catch {
+            debugPrint("尝试创建文件失败: \(error.localizedDescription)")
+            return nil
+        }
+
+        // 4. 转换图片为 Data
+        let imageData: Data?
+        if preferPNG {
+            imageData = image.pngData()
+        } else {
+            imageData = image.jpegData(compressionQuality: quality)
+        }
+        
+        guard let data = imageData else {
+            print("无法将 UIImage 转换为 Data")
+            return nil
+        }
+        
+        // 5. 写入文件
+        do {
+            try data.write(to: fileURL)
+            print("图片保存成功: \(fileURL.path)")
+            return fileURL.lastPathComponent
+        } catch {
+            print("保存图片失败: \(error.localizedDescription)")
+            return nil
+        }
+    }
+    
+}

+ 25 - 33
TSLiveWallpaper/Common/ViewTool/TSPhotoPickerManager/TSPhotoPickerManager.swift

@@ -196,20 +196,25 @@ class TSPhotoPickerManager: NSObject{
   
         var photoAsset:[PhotoAsset] = []
         let allKeys = TSDBKeyManager.getAllKeys()
+//        for item in allKeys {
+//            let key = item.key
+//            let url = URL(string:key)
+//            photoAsset.append( PhotoAsset(
+//                networkImageAsset:
+//                    NetworkImageAsset(
+//                        thumbnailURL: url,
+//                        originalURL: url,
+//                        thumbailCacheKey: key,
+//                        originalCacheKey: key
+//                    )
+//            ))
+//        }
+
         for item in allKeys {
             let key = item.key
-            let url = URL(string:key)
-            photoAsset.append( PhotoAsset(
-                networkImageAsset:
-                    NetworkImageAsset(
-                        thumbnailURL: url,
-                        originalURL: url,
-                        thumbailCacheKey: key,
-                        originalCacheKey: key
-                    )
-            ))
+            photoAsset.append(PhotoAsset.init(localImageAsset: .init(imageURL: TSUserdPhotoDiskTool.loadUserdPhotoImageURL(imageKey: key))))
         }
-
+        
         let picker = PhotoPickerController(splitPicker: config)
         picker.pickerDelegate = self
         picker.autoDismiss = false
@@ -320,21 +325,22 @@ extension TSPhotoPickerManager {
     func saveImagesToUsed(images:[UIImage]){
         //保存图片到已使用中
         for image in images {
-            if let imageKey = image.uniqueIdentifier() {
-                TSDBKeyManager.addOrUpdateKey(imageKey)
-                TSImageStoreTool.storeImage(image: image, urlString: imageKey)
-            }
+            saveImageToUsed(image: image, postNotification: false)
         }
         NotificationCenter.default.post(name: .kPhotoPickerCompleted, object: nil, userInfo: nil)
     }
     
-    func saveImageToUsed(image:UIImage){
+    func saveImageToUsed(image:UIImage,postNotification:Bool = true){
         //保存图片到已使用中
         if let imageKey = image.uniqueIdentifier() {
-            TSDBKeyManager.addOrUpdateKey(imageKey)
-            TSImageStoreTool.storeImage(image: image, urlString: imageKey)
+            if let key = TSUserdPhotoDiskTool.saveDiskUserdPhotoImage(image: image, imageKey: imageKey) {
+                TSDBKeyManager.addOrUpdateKey(key)
+            }
+        }
+        
+        if postNotification {
+            NotificationCenter.default.post(name: .kPhotoPickerCompleted, object: nil, userInfo: nil)
         }
-        NotificationCenter.default.post(name: .kPhotoPickerCompleted, object: nil, userInfo: nil)
     }
     
 }
@@ -394,17 +400,3 @@ extension Notification.Name {
     static let kPhotoPickerCompleted = Notification.Name("kPhotoPickerCompleted") //选择照片完成
 }
 
-import Foundation
-import CommonCrypto
-
-extension UIImage {
-    func uniqueIdentifier() -> String? {
-        guard let imageData = self.jpegData(compressionQuality: 0.1) else { return nil }
-        
-        var digest = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
-        imageData.withUnsafeBytes {
-            _ = CC_SHA256($0.baseAddress, CC_LONG(imageData.count), &digest)
-        }
-        return digest.map { String(format: "%02hhx", $0) }.joined()
-    }
-}

+ 54 - 0
TSLiveWallpaper/Common/ViewTool/TSPhotoPickerManager/TSUserdPhotoDiskTool.swift

@@ -0,0 +1,54 @@
+//
+//  TSUserdPhotoDiskTool.swift
+//  TSLiveWallpaper
+//
+//  Created by 100Years on 2025/8/4.
+//
+
+class TSUserdPhotoDiskTool {
+    
+    /// 获取 used Image 下载后保存的的文件件路径
+    static var saveUsedImagePathURL:URL = {
+        let saveRingPathURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("usedImage")
+        return saveRingPathURL
+    }()
+    
+    static func loadUserdPhotoImageURL(imageKey:String) -> URL {
+        let fileURL = saveUsedImagePathURL.appendingPathComponent(imageKey)
+        return fileURL
+    }
+    
+    static func loadUserdPhotoImage(imageKey:String) -> UIImage? {
+        return UIImage(contentsOfFile: loadUserdPhotoImageURL(imageKey: imageKey).path)
+    }
+    
+    
+    static func saveDiskUserdPhotoImage(
+        image: UIImage,
+        imageKey:String
+    ) -> String? {
+        let hasAlphaChannel = image.hasAlphaChannel()
+        let imagePath = saveUsedImagePathURL.appendingPathComponent(imageKey + (hasAlphaChannel ? ".png" : ".jpeg"))
+        return image.writeSaveUserdImageToDocuments(fileURL: imagePath,preferPNG: hasAlphaChannel)
+    }
+    
+    static func removeImageKey(imageKey:String){
+        let imagePath = saveUsedImagePathURL.appendingPathComponent(imageKey)
+        TSFileManagerTool.removeItem(from: imagePath)
+    }
+}
+
+import Foundation
+import CommonCrypto
+
+extension UIImage {
+    func uniqueIdentifier() -> String? {
+        guard let imageData = self.jpegData(compressionQuality: 0.1) else { return nil }
+        
+        var digest = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
+        imageData.withUnsafeBytes {
+            _ = CC_SHA256($0.baseAddress, CC_LONG(imageData.count), &digest)
+        }
+        return digest.map { String(format: "%02hhx", $0) }.joined()
+    }
+}

+ 46 - 11
TSLiveWallpaper/Data/OperationQueue/TSGenerateBaseOperation/TSGenerateBaseOperation.swift

@@ -201,9 +201,16 @@ class TSGenerateBaseOperation: TSBaseOperation , @unchecked Sendable{
                 }
                 group.leave()
             }
+            
+//            //下载封面图
+//            group.enter()
+//            TSImageStoreTool.downloadImageWithProgress(urlString: infoModel.response.previewUrl) { _ in
+//                group.leave()
+//            }
+            
             //下载封面图
             group.enter()
-            TSImageStoreTool.downloadImageWithProgress(urlString: infoModel.response.previewUrl) { _ in
+            downloadImage(urlString: infoModel.response.previewUrl) { url in
                 group.leave()
             }
 
@@ -218,16 +225,31 @@ class TSGenerateBaseOperation: TSBaseOperation , @unchecked Sendable{
             }
 
         }else{
-            downloadImage(urlString: infoModel.response.resultUrl) { [weak self] image in
+            
+            downloadImage(urlString: infoModel.response.resultUrl) { [weak self] url in
                 guard let self = self else { return }
-                if image == nil {
-                    debugPrint("生成后下载视频失败,重新尝试retryDownloadCount=\(retryDownloadCount)")
+                if url == nil {
+                    debugPrint("生成后下载图片失败,重新尝试retryDownloadCount=\(retryDownloadCount)")
                     downResultUrl(infoModel: infoModel)
                 }else{
                     handleSuccess(infoModel: infoModel)
                 }
-                
             }
+            
+            
+            
+            
+            
+//            downloadImage(urlString: infoModel.response.resultUrl) { [weak self] image in
+//                guard let self = self else { return }
+//                if image == nil {
+//                    debugPrint("生成后下载视频失败,重新尝试retryDownloadCount=\(retryDownloadCount)")
+//                    downResultUrl(infoModel: infoModel)
+//                }else{
+//                    handleSuccess(infoModel: infoModel)
+//                }
+//            }
+            
         }
         
         retryDownloadCount += 1
@@ -245,16 +267,28 @@ class TSGenerateBaseOperation: TSBaseOperation , @unchecked Sendable{
         }
     }
     
-    func downloadImage(urlString:String,completion:@escaping (UIImage?)->Void){
-        TSImageStoreTool.downloadImageWithProgress(urlString: urlString) { [weak self]  progress in
-            guard let self = self else { return }
+//    func downloadImage(urlString:String,completion:@escaping (UIImage?)->Void){
+//        TSImageStoreTool.downloadImageWithProgress(urlString: urlString) { [weak self]  progress in
+//            guard let self = self else { return }
+//    
+//            let progressInt = Int(progress*10.0)
+//            let progressString = "Processing".localized + " " + kPercentlocalized(90 + progressInt)
+//            stateDatauPblished = (.progressString(progressString),currentActionInfoModel)
+//            dePrint("生成后图片下载进度: \(progress)")
+//        } completion: { image in
+//            completion(image)
+//        }
+//    }
     
+    func downloadImage(urlString:String,completion:@escaping (URL?)->Void){
+        
+        TSImagePhotoDiskTool.getDownLoadImage(urlString: urlString) { progress in
             let progressInt = Int(progress*10.0)
             let progressString = "Processing".localized + " " + kPercentlocalized(90 + progressInt)
-            stateDatauPblished = (.progressString(progressString),currentActionInfoModel)
+            self.stateDatauPblished = (.progressString(progressString),nil)
             dePrint("生成后图片下载进度: \(progress)")
-        } completion: { image in
-            completion(image)
+        } complete: { url, _ in
+            completion(url)
         }
     }
     
@@ -284,6 +318,7 @@ class TSGenerateBaseOperation: TSBaseOperation , @unchecked Sendable{
         debugPrint("cancelCleanContent")
         stopNetwork = true
         queryRequest?.cancel()
+        
     }
 }
  var kRandomBoolLastResult:Bool = true

+ 13 - 3
TSLiveWallpaper/Data/OperationQueue/TSGenerateBaseOperation/TSGenerateBasePhotoOperation.swift

@@ -208,6 +208,14 @@ class TSGenerateBasePhotoOperation: TSGenerateBaseOperation , @unchecked Sendabl
         debugPrint("cancelCleanContent")
         uploadRequest?.cancel()
         creatRequest?.cancel()
+
+        //如果数据没有存到数据库,那就删除已经保存的上传图片
+        let historys = TSRMShared.realm.objects(TSDBActionInfoModel.self).filter(NSPredicate(format: "uuid == %@",currentActionInfoModel.uuid))
+        if historys.count <= 0 {
+            TSImagePhotoDiskTool.deleteDiskImage(urlString: currentActionInfoModel.request.imageUrl)
+            TSImagePhotoDiskTool.deleteDiskImages(urlStrings: currentActionInfoModel.request.imageUrls)
+        }
+
     }
 }
 
@@ -248,7 +256,9 @@ extension TSGenerateBasePhotoOperation {
             }else{
                 if let string = data as? String {
                     generateStyleModel.upLoadImageUrl = string
-                    TSImageStoreTool.storeImage(image: upLoadImage, urlString: string)
+                    
+                    TSImagePhotoDiskTool.saveDiskImage(image: upLoadImage, urlString: string)
+//                    TSImageStoreTool.storeImage(image: upLoadImage, urlString: string)
 
                     complete(createActionInfoModel(generateStyleModel: generateStyleModel))
                 }else{
@@ -304,7 +314,8 @@ extension TSGenerateBasePhotoOperation {
                 
                 // 存储图片到本地(顺序一致)
                  for (index, url) in successfulUrls.enumerated() {
-                     TSImageStoreTool.storeImage(image: upLoadImages[index], urlString: url)
+                     TSImagePhotoDiskTool.saveDiskImage(image: upLoadImages[index], urlString: url)
+//                     TSImageStoreTool.storeImage(image: upLoadImages[index], urlString: url)
                  }
                 complete(self.createActionInfoModel(generateStyleModel: generateStyleModel))
             }else{
@@ -345,7 +356,6 @@ extension TSGenerateBasePhotoOperation {
             postDict["maskUrl"] = request.imageUrls.last ?? request.imageUrl
         case .photoExpand:
             urlType = .photoExpand
-            guard let generatorModel = generateStyleModel else { return nil}
             postDict["prompt"] = request.prompt
             postDict["top"] = request.top
             postDict["left"] = request.left

+ 10 - 1
TSLiveWallpaper/Data/TSDBManager/TSDBActionInfoModel.swift

@@ -107,12 +107,21 @@ class TSDBActionInfoModel: Object {
                 TSFileManagerTool.removeItem(from: response.videoDocument.fillDocumentURL)
             }
             
+            
+            
+            TSImagePhotoDiskTool.deleteDiskImage(urlString: response.resultUrl)
+            TSImagePhotoDiskTool.deleteDiskImage(urlString: response.previewUrl)
         }
         
         if let request = request {
             TSImageStoreTool.removeImage(urlString:request.imageUrl)
-        }
+            
         
+            TSImagePhotoDiskTool.deleteDiskImage(urlString: request.imageUrl)
+            for imageUrl in request.imageUrls {
+                TSImagePhotoDiskTool.deleteDiskImage(urlString: imageUrl)
+            }
+        }
         
     }
 }

+ 9 - 9
TSLiveWallpaper/Data/TSDBManager/TSDBManager.swift

@@ -169,15 +169,15 @@ extension TSRealmManager {
     //老照片修复
     var aiListDB:TSDBHistory {
         let history = getDBHistory(type: TSDBHistoryType.aiList)
-        if history.listModels.count == 0,UserDefaults.standard.string(forKey: "insertAIListExampleData") == nil {
-            let id = Date.timestampInt
-            history.updateDatas([
-                createExampleModel(id:id+1, oldImageName: "ailist_example_image_old_1", newImageName: "ailist_example_image_new_1",generateStyle:.enhance),
-                createExampleModel(id:id+2, oldImageName: "ailist_example_image_old_0", newImageName: "ailist_example_image_new_0",generateStyle:.colorize)
-            ])
-            UserDefaults.standard.set("1", forKey: "insertAIListExampleData")
-            UserDefaults.standard.synchronize()
-        }
+//        if history.listModels.count == 0,UserDefaults.standard.string(forKey: "insertAIListExampleData") == nil {
+//            let id = Date.timestampInt
+//            history.updateDatas([
+//                createExampleModel(id:id+1, oldImageName: "ailist_example_image_old_1", newImageName: "ailist_example_image_new_1",generateStyle:.enhance),
+//                createExampleModel(id:id+2, oldImageName: "ailist_example_image_old_0", newImageName: "ailist_example_image_new_0",generateStyle:.colorize)
+//            ])
+//            UserDefaults.standard.set("1", forKey: "insertAIListExampleData")
+//            UserDefaults.standard.synchronize()
+//        }
         
         if history.listModels.count > 0,UserDefaults.standard.string(forKey: "aiListDBDeleteIncorrectData") == nil {
             var primaryKeysToKeep:[String] = []