Răsfoiți Sursa

fix:提测3.6.23(2)

100Years 1 zi în urmă
părinte
comite
ff38c392e4

+ 2 - 6
AIEmoji.xcodeproj/project.pbxproj

@@ -256,7 +256,6 @@
 		A8BA76752DA67E66000B6707 /* TSAIListHistoryBaseVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BA76742DA67E65000B6707 /* TSAIListHistoryBaseVC.swift */; };
 		A8BA76772DA68619000B6707 /* TSAIListHistoryBaseVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BA76762DA68617000B6707 /* TSAIListHistoryBaseVM.swift */; };
 		A8BD92C82E29F8FF0014C3C5 /* TSDiscoverViewModel+Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BD92C72E29F8FB0014C3C5 /* TSDiscoverViewModel+Data.swift */; };
-		A8BD92CB2E2A74D10014C3C5 /* TSPTPView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BD92CA2E2A74CB0014C3C5 /* TSPTPView.swift */; };
 		A8BE26E82DBC6A9F00A1DD18 /* TSDBHistoryManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BE26E72DBC6A9700A1DD18 /* TSDBHistoryManager.swift */; };
 		A8D638352DB10BAC00A96C0E /* CrashReporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8D638342DB10BAB00A96C0E /* CrashReporter.swift */; };
 		A8D6383C2DB1FC8D00A96C0E /* TSAIListVideoPlayerVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8D6383B2DB1FC8A00A96C0E /* TSAIListVideoPlayerVC.swift */; };
@@ -619,7 +618,6 @@
 		A8BA76742DA67E65000B6707 /* TSAIListHistoryBaseVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSAIListHistoryBaseVC.swift; sourceTree = "<group>"; };
 		A8BA76762DA68617000B6707 /* TSAIListHistoryBaseVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSAIListHistoryBaseVM.swift; sourceTree = "<group>"; };
 		A8BD92C72E29F8FB0014C3C5 /* TSDiscoverViewModel+Data.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TSDiscoverViewModel+Data.swift"; sourceTree = "<group>"; };
-		A8BD92CA2E2A74CB0014C3C5 /* TSPTPView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSPTPView.swift; sourceTree = "<group>"; };
 		A8BE26E72DBC6A9700A1DD18 /* TSDBHistoryManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSDBHistoryManager.swift; sourceTree = "<group>"; };
 		A8D638342DB10BAB00A96C0E /* CrashReporter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrashReporter.swift; sourceTree = "<group>"; };
 		A8D6383B2DB1FC8A00A96C0E /* TSAIListVideoPlayerVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSAIListVideoPlayerVC.swift; sourceTree = "<group>"; };
@@ -1564,7 +1562,6 @@
 		A8708A2D2E0AA02A00601686 /* View */ = {
 			isa = PBXGroup;
 			children = (
-				A8BD92CA2E2A74CB0014C3C5 /* TSPTPView.swift */,
 				A807E6312E28ECB200A175AF /* TSUploadVideoView.swift */,
 				A8708A2E2E0AA03000601686 /* TSUploadImageView.swift */,
 			);
@@ -2894,7 +2891,6 @@
 				A8F7753F2D39340E00AA6E93 /* TSSetingVC.swift in Sources */,
 				A8F7762B2D3A70B200AA6E93 /* PaddedLabel.swift in Sources */,
 				A80E73E62D5348D000C64288 /* SettingPurchaseTopView.swift in Sources */,
-				A8BD92CB2E2A74D10014C3C5 /* TSPTPView.swift in Sources */,
 				A899D34A2D827A0E00AB9C1C /* TSChatThinkingModel.swift in Sources */,
 				A8708A102E09439200601686 /* TSDiscoverViewModel+Dic.swift in Sources */,
 				A80EDDE22D6EB8D8003CD332 /* TSPTPUploadCell.swift in Sources */,
@@ -2992,7 +2988,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1;
+				CURRENT_PROJECT_VERSION = 2;
 				DEVELOPMENT_TEAM = 65UD255J84;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;
@@ -3031,7 +3027,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1;
+				CURRENT_PROJECT_VERSION = 2;
 				DEVELOPMENT_TEAM = 65UD255J84;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;

+ 19 - 8
AIEmoji/Business2/CommonVC/TSVideoPlayer/TSVideoPlayer.swift

@@ -66,12 +66,22 @@ class TSVideoPlayer:NSObject {
         player?.replaceCurrentItem(with: playerItem)
     }
     private func setupNotifications() {
+//        NotificationCenter.default.addObserver(
+//            self,
+//            selector: #selector(playerItemDidReachEnd),
+//            name: .AVPlayerItemDidPlayToEndTime,
+//            object: playerItem
+//        )
+        
         NotificationCenter.default.addObserver(
-            self,
-            selector: #selector(playerItemDidReachEnd),
-            name: .AVPlayerItemDidPlayToEndTime,
-            object: nil
-        )
+              forName: .AVPlayerItemDidPlayToEndTime,
+              object: playerItem, // 绑定到当前item
+              queue: .main
+          ) { [weak self] notification in
+              guard let self = self else { return }
+              // 这里不需要再判断,因为已经绑定了特定item
+              playerItemDidReachEnd()
+          }
         
         NotificationCenter.default.addObserver(
             self,
@@ -127,7 +137,7 @@ class TSVideoPlayer:NSObject {
         }
     }
     
-    @objc private func playerItemDidReachEnd(notification: Notification) {
+    @objc private func playerItemDidReachEnd() {
         onPlaybackEnd?()
         
         if loopInterval > 0 {
@@ -145,6 +155,7 @@ class TSVideoPlayer:NSObject {
     }
     
     private func restartPlayback() {
+//        dePrint("restartPlayback")
         player?.seek(to: .zero)
         player?.play()
         onPlaybackStart?()
@@ -166,13 +177,13 @@ class TSVideoPlayer:NSObject {
         }
         
 //        if player?.currentItem?.status == .readyToPlay {
-//            player?.play()
+            player?.play()
             onPlaybackStart?()
 //        }
     }
     
     func pause() {
-//        player?.pause()
+        player?.pause()
         playerLayer?.isHidden = true
     }
     

+ 8 - 6
AIEmoji/Business2/DisCover/TSDiscoverVC/Cell/TSDiscoverBannerCell.swift

@@ -18,9 +18,11 @@ class TSDiscoverBannerCell: TSDiscoverBaseCell {
             
             kMainShort {
                 guard let collectionView = self.cyclePagerView.collectionView else { return }
-                let indexPath = IndexPath(item: 0, section: 0)
-                if let cell = collectionView.cellForItem(at: indexPath) as? TSBaseCollectionCell {
-                    cell.willDisplay(indexPath: indexPath)
+                let visibleCells = collectionView.getAllLoadedCells()
+                for cell in visibleCells {
+                    if let cl = cell as? TSDiscoverBannerViewCell {
+                        cl.setVideoPlayer()
+                    }
                 }
             }
         }
@@ -252,9 +254,9 @@ class TSDiscoverBannerViewCell: TSBaseCollectionCell {
         kMainAfter(0.1) {
             if self.isCellDisplay {
                 self.setVideoPlayer()
-                dePrint("UICollectionViewCell 视频播放")
+//                dePrint("UICollectionViewCell 视频播放")
             }else{
-                dePrint("UICollectionViewCell self.isDisplay 不可见了")
+//                dePrint("UICollectionViewCell self.isDisplay 不可见了")
                 self.videoPlayer?.pause()
             }
         }
@@ -263,7 +265,7 @@ class TSDiscoverBannerViewCell: TSBaseCollectionCell {
     override func didEndDisplaying(indexPath: IndexPath)  {
         super.didEndDisplaying(indexPath: indexPath)
         videoPlayer?.pause()
-        dePrint("UICollectionViewCell 视频暂停")
+//        dePrint("UICollectionViewCell 视频暂停")
     }
 }
 

+ 3 - 3
AIEmoji/Business2/DisCover/TSDiscoverVC/Cell/TSDiscoverStyleMoreCell/TSDiscoverStyleMoreCell.swift

@@ -332,9 +332,9 @@ class TSDiscoverStyleMoreAnimationVideoCell: TSDiscoverStyleMoreBaseCell {
         kMainAfter(kVideoDelayedPlay) {
             if self.isCellDisplay {
                 self.setVideoPlayer()
-                dePrint("UICollectionViewCell 视频播放")
+//                dePrint("UICollectionViewCell 视频播放")
             }else{
-                dePrint("UICollectionViewCell self.isDisplay 不可见了")
+//                dePrint("UICollectionViewCell self.isDisplay 不可见了")
                 self.videoPlayer?.pause()
             }
         }
@@ -343,7 +343,7 @@ class TSDiscoverStyleMoreAnimationVideoCell: TSDiscoverStyleMoreBaseCell {
     override func didEndDisplaying(indexPath: IndexPath)  {
         super.didEndDisplaying(indexPath: indexPath)
         videoPlayer?.pause()
-        dePrint("UICollectionViewCell 视频暂停")
+//        dePrint("UICollectionViewCell 视频暂停")
     }
     
 //    override func dealThings() {

+ 3 - 3
AIEmoji/Business2/DisCover/TSGenerateHistoryVC/View/TSGenerateHistoryCell.swift

@@ -163,9 +163,9 @@ class TSGenerateHistoryCell: TSBaseCollectionCell {
         kMainAfter(kVideoDelayedPlay) {
             if self.isCellDisplay {
                 self.setVideoPlayer()
-                dePrint("UICollectionViewCell 视频播放")
+//                dePrint("UICollectionViewCell 视频播放")
             }else{
-                dePrint("UICollectionViewCell self.isDisplay 不可见了")
+//                dePrint("UICollectionViewCell self.isDisplay 不可见了")
                 self.videoPlayer?.pause()
             }
         }
@@ -174,7 +174,7 @@ class TSGenerateHistoryCell: TSBaseCollectionCell {
     override func didEndDisplaying(indexPath: IndexPath)  {
         super.didEndDisplaying(indexPath: indexPath)
         videoPlayer?.pause()
-        dePrint("UICollectionViewCell 视频暂停")
+//        dePrint("UICollectionViewCell 视频暂停")
     }
     
     func setVideoPlayer(){

+ 5 - 2
AIEmoji/Business2/DisCover/TSPTPUploadImageVC/TSPTPUploadImageVC+View.swift

@@ -28,6 +28,9 @@ extension TSPTPUploadImageVC {
             
             setTitleText(model.imageText.localized)
             
+            if viewModel.upLoadImage != nil {
+                return
+            }
             if viewModel.style == .videoV2 ||  viewModel.style == .photoLive{
                 var array:[TSDiscoverItemModel] = []
                 if let arr = TSDiscoverViewModel.shared.bannerSection.items.first as? [TSDiscoverItemModel] {
@@ -42,8 +45,8 @@ extension TSPTPUploadImageVC {
                 if let discoverItemModel = model2,
                    let animationItemVM = discoverItemModel.viewModel as? TSDiscoverAnimationItemVM,
                    let imageNamed = animationItemVM.imageNameds.first{
-//                    self.uploadView.uploadVideoView.setVideoName(name: imageNamed)
-//                    self.uploadView.uploadVideoView.play()
+                    self.uploadView.uploadVideoView.setVideoName(name: imageNamed)
+                    self.uploadView.uploadVideoView.play()
                 }
             }
     

+ 13 - 29
AIEmoji/Business2/DisCover/TSPTPUploadImageVC/TSPTPUploadImageVC.swift

@@ -21,9 +21,7 @@ class TSPTPUploadImageVC: TSBaseVC {
     }
 
     lazy var photoPickerManager: TSPhotoPickerManager = TSPhotoPickerManager(viewController: self)
-//    lazy var uploadView: TSUploadImageView = creatUploadView()
-    lazy var uploadView: TSPTPView = TSPTPView()
-    
+    lazy var uploadView: TSUploadImageView = creatUploadView()
     
     lazy var selectStyleVC: TSGennertatorStyleVC = creatSelectStyleVC()
     lazy var creatBtnView: TSAppBtnView = creatCreatBtnView() //Button
@@ -56,14 +54,12 @@ class TSPTPUploadImageVC: TSBaseVC {
             make.height.equalTo(48)
         }
         
-//        if viewModel.style == .videoV2 ||  viewModel.style == .photoLive{
-//            kMainAsync {
-//                self.uploadView.uploadVideoView.setVideoName(name: self.itemModel.imageNamed)
-//                self.uploadView.upLoadImage = self.uploadView.upLoadImage
-//            }
-//        }
-        
-            contentView.addGestureRecognizer(UITapGestureRecognizer(target: self, action:#selector(pickSinglePhoto)))
+        if viewModel.style == .videoV2 ||  viewModel.style == .photoLive{
+            kMainAsync {
+                self.uploadView.uploadVideoView.setVideoName(name: self.itemModel.imageNamed)
+                self.uploadView.upLoadImage = self.uploadView.upLoadImage
+            }
+        }
 
     }
     
@@ -87,8 +83,8 @@ extension TSPTPUploadImageVC {
         }
         gennerateVC.changeImageBlock = { [weak self] image in
             guard let self = self else { return }
-//            viewModel.upLoadImage = image
-//            uploadView.upLoadImage = image
+            viewModel.upLoadImage = image
+            uploadView.upLoadImage = image
         }
         
         kPresentModalVC(target: self, modelVC: gennerateVC, transitionStyle: .crossDissolve)
@@ -97,23 +93,11 @@ extension TSPTPUploadImageVC {
 
 extension TSPTPUploadImageVC {
     @objc func pickSinglePhoto() {
-        
-//        TSDiscoverVC.enterSelectPhotos(target: self, style: viewModel.style, hintType: viewModel.selectedPTPStyleModel.hintType) { [weak self] image in
-//            guard let self = self else { return }
-//            viewModel.upLoadImage = image
-//            uploadView.upLoadImage = image
-//        }
-//        
-        
-        photoPickerManager.pickSinglePhoto { [weak self] image,_ in
-//            guard let self = self else { return }
-// 
-//            viewModel.upLoadImage = image
-//            uploadView.upLoadImage = image
-//        
-//            photoPickerManager.dismissPageVC()
+        TSDiscoverVC.enterSelectPhotos(target: self, style: viewModel.style, hintType: viewModel.selectedPTPStyleModel.hintType) { [weak self] image in
+            guard let self = self else { return }
+            viewModel.upLoadImage = image
+            uploadView.upLoadImage = image
         }
-        
     }
     
     @objc func clickView() {

+ 0 - 14
AIEmoji/Business2/DisCover/TSPTPUploadImageVC/View/TSPTPView.swift

@@ -1,14 +0,0 @@
-//
-//  TSPTPView.swift
-//  AIEmoji
-//
-//  Created by 100Years on 2025/7/18.
-//
-
-
-class TSPTPView: TSBaseView {
-    deinit {
-        dePrint("TSPTPView deinit")
-    }
-    
-}

+ 16 - 17
AIEmoji/Business2/DisCover/TSPTPUploadImageVC/View/TSUploadImageView.swift

@@ -17,14 +17,14 @@ class TSUploadImageView: TSBaseView {
                 deleteBtn.isHidden = false
                 uploadImageView.image = image
         
-//                uploadVideoView.pause()
+                uploadVideoView.pause()
             }else {
                 upLoadView.isHidden = false
                 uploadImageView.isHidden = true
                 deleteBtn.isHidden = true
                 uploadImageView.image = nil
                 
-//                uploadVideoView.play()
+                uploadVideoView.play()
             }
         }
     }
@@ -78,7 +78,7 @@ class TSUploadImageView: TSBaseView {
     lazy var uploadImageBgView: UIView = {
         
         let bgView = UIView()
-//        bgView.addGestureRecognizer(UITapGestureRecognizer(target: self, action:#selector(clickBgView)))
+        bgView.addGestureRecognizer(UITapGestureRecognizer(target: self, action:#selector(clickBgView)))
         
         let bgImageView = UIImageView.createImageView(image: .discoverUploadBg,contentMode: .scaleToFill)
         bgView.addSubview(bgImageView)
@@ -115,7 +115,6 @@ class TSUploadImageView: TSBaseView {
     }
     
     override func creatUI() {
-//        contentView.addGestureRecognizer(UITapGestureRecognizer(target: self, action:#selector(clickBgView)))
         contentView.addSubview(uploadImageBgView)
         uploadImageBgView.snp.makeConstraints { make in
             make.width.equalTo(280*kDesignScale)
@@ -130,22 +129,22 @@ class TSUploadImageView: TSBaseView {
             make.width.height.equalTo(32)
         }
         
-//        uploadImageBgView.addSubview(uploadVideoView)
-//        uploadVideoView.snp.makeConstraints { make in
-//            make.edges.equalToSuperview()
-//        }
+        uploadImageBgView.addSubview(uploadVideoView)
+        uploadVideoView.snp.makeConstraints { make in
+            make.edges.equalToSuperview()
+        }
     }
     
     
-//    lazy var uploadVideoView: TSUploadVideoView = {
-//        let uploadVideoView = TSUploadVideoView()
-//        uploadVideoView.clickUploadPhotoBlock = { [weak self]  in
-//            guard let self = self else { return }
-//            clickBgView()
-//        }
-//        uploadVideoView.isHidden = true
-//        return uploadVideoView
-//    }()
+    lazy var uploadVideoView: TSUploadVideoView = {
+        let uploadVideoView = TSUploadVideoView()
+        uploadVideoView.clickUploadPhotoBlock = { [weak self]  in
+            guard let self = self else { return }
+            clickBgView()
+        }
+        uploadVideoView.isHidden = true
+        return uploadVideoView
+    }()
     
     
     deinit {

+ 23 - 23
AIEmoji/Business2/DisCover/TSPTPUploadImageVC/View/TSUploadVideoView.swift

@@ -8,14 +8,14 @@
 
 class TSUploadVideoView: TSBaseView {
     
-//    var videoPlayer: TSVideoPlayer?
+    var videoPlayer: TSVideoPlayer?
     var clickUploadPhotoBlock:(()->Void)?
     lazy var touchButton: TSUIExpandedTouchButton = {
         let button = TSUIExpandedTouchButton()
         button.setUpButton(image:.videoMute){ [weak self]  in
             guard let self = self else { return }
-//            touchButton.isSelected = !touchButton.isSelected
-//            videoPlayer?.player?.isMuted = !touchButton.isSelected
+            touchButton.isSelected = !touchButton.isSelected
+            videoPlayer?.player?.isMuted = !touchButton.isSelected
         }
         button.setImage(.videoSound, for: .selected)
         button.isSelected = true
@@ -75,32 +75,32 @@ class TSUploadVideoView: TSBaseView {
     
     
     func setVideoName(name:String){
-//        if name.isEmpty { return }
-//        guard let videoURL = Bundle.main.url(forResource: name, withExtension: nil) else { return }
-//        
-//        //如果URL相同且播放器存在,则只更新播放状态
-//       if  videoPlayer?.url == videoURL, videoPlayer != nil {
-////           videoPlayer?.play()
-//           return
-//       }
-        // 清理之前的播放器
-//        videoPlayer?.cleanup()
-//        videoPlayer = nil
-//        
-//        self.videoPlayer = TSVideoPlayer()
-//        self.videoPlayer?.setupPlayer(with: videoURL)
-//        self.videoPlayer?.playerLayer?.videoGravity = .resizeAspect
-//        self.videoPlayer?.player?.isMuted = false
-//        self.videoPlayer?.addPlayerLayer(to: videoContent, frame: self.videoContent.bounds)
-//        self.videoPlayer?.play()
+        if name.isEmpty { return }
+        guard let videoURL = Bundle.main.url(forResource: name, withExtension: nil) else { return }
+        
+        //如果URL相同且播放器存在,则只更新播放状态
+       if  videoPlayer?.url == videoURL, videoPlayer != nil {
+//           videoPlayer?.play()
+           return
+       }
+         //清理之前的播放器
+        videoPlayer?.cleanup()
+        videoPlayer = nil
+        
+        self.videoPlayer = TSVideoPlayer()
+        self.videoPlayer?.setupPlayer(with: videoURL)
+        self.videoPlayer?.playerLayer?.videoGravity = .resizeAspect
+        self.videoPlayer?.player?.isMuted = false
+        self.videoPlayer?.addPlayerLayer(to: videoContent, frame: self.videoContent.bounds)
+        self.videoPlayer?.play()
     }
     
     func play() {
-//        videoPlayer?.play()
+        videoPlayer?.play()
         self.isHidden = false
     }
     func pause() {
-//        videoPlayer?.pause()
+        videoPlayer?.pause()
         self.isHidden = true
     }
     

+ 1 - 1
AIEmoji/Common/Purchase/TSPurchaseManager.swift

@@ -281,7 +281,7 @@ public class PurchaseManager: NSObject {
 
     public var vipType: PremiumPeriod {
 #if DEBUG
-        return PremiumPeriod.none
+        return PremiumPeriod.year
 #endif
         guard isVip, let type = vipInformation["type"] as? String else {
             return .none

+ 1 - 1
AIEmoji/Common/TSRealmManager/TSRealmManager.swift

@@ -27,7 +27,7 @@ class TSRealmManager {
         config.schemaVersion = newSchemaVersion
         // 设置迁移块
         config.migrationBlock = { migration, oldSchemaVersion in
-            if oldSchemaVersion < newSchemaVersion {
+            if oldSchemaVersion < newSchemaVersion { 
                 // 执行迁移操作
             }
         }