瀏覽代碼

3.6.5(1)提测

100Years 3 周之前
父節點
當前提交
0c87d8c0dc
共有 31 個文件被更改,包括 117 次插入34 次删除
  1. 4 4
      AIEmoji.xcodeproj/project.pbxproj
  2. 二進制
      AIEmoji/Assets.xcassets/AIList/aiList_MotherDay.imageset/aiList_MotherDay@2x.png
  3. 二進制
      AIEmoji/Assets.xcassets/AIList/aiList_MotherDay.imageset/aiList_MotherDay@3x.png
  4. 二進制
      AIEmoji/Assets.xcassets/AIList/aiList_aiChat.imageset/aiList_aiChat@2x.png
  5. 二進制
      AIEmoji/Assets.xcassets/AIList/aiList_aiChat.imageset/aiList_aiChat@3x.png
  6. 二進制
      AIEmoji/Assets.xcassets/AIList/aiList_hairColor.imageset/aiList_hairColor@2x.png
  7. 二進制
      AIEmoji/Assets.xcassets/AIList/aiList_hairColor.imageset/aiList_hairColor@3x.png
  8. 二進制
      AIEmoji/Assets.xcassets/AIList/aiList_livePhoto.imageset/aiList_livePhoto@2x.png
  9. 二進制
      AIEmoji/Assets.xcassets/AIList/aiList_livePhoto.imageset/aiList_livePhoto@3x.png
  10. 二進制
      AIEmoji/Assets.xcassets/AIList/aiList_oldPeople.imageset/aiList_oldPeople@2x.png
  11. 二進制
      AIEmoji/Assets.xcassets/AIList/aiList_oldPeople.imageset/aiList_oldPeople@3x.png
  12. 二進制
      AIEmoji/Assets.xcassets/AIList/ailist_eyeOpen.imageset/ailist_eyeOpen@2x.png
  13. 二進制
      AIEmoji/Assets.xcassets/AIList/ailist_eyeOpen.imageset/ailist_eyeOpen@3x.png
  14. 1 1
      AIEmoji/Business/AIChat/TSChatViewController/ViewModel/TSAIChatVM.swift
  15. 1 0
      AIEmoji/Business/General/Ex/Notification+Ex.swift
  16. 2 2
      AIEmoji/Business/TSAILIstVC/TSAIAgeImageHintVC/TSAIListHintBaseVC.swift
  17. 2 2
      AIEmoji/Business/TSGenmojiVC/TSGenmojiVC/View/TSGenmojiColSectionView.swift
  18. 3 3
      AIEmoji/Business/TSGenmojiVC/TSGenmojiVC/ViewModel/TSGenmojiCollectionViewModel.swift
  19. 46 16
      AIEmoji/Business/TSPTPGeneratorVC/TSPTPHistoryVC/TSPTPHistoryVC.swift
  20. 1 1
      AIEmoji/Business/TSPTPGeneratorVC/TSPTPInputVC/TSPTPInputVC.swift
  21. 12 5
      AIEmoji/Business/TSTextGeneralPictureVC/TSTTPInputVC/TSTTPInputVC+Col.swift
  22. 9 0
      AIEmoji/Business/TSTextGeneralPictureVC/TSTTPInputVC/TSTTPInputVC.swift
  23. 4 0
      AIEmoji/de.lproj/Localizable.strings
  24. 4 0
      AIEmoji/en.lproj/Localizable.strings
  25. 4 0
      AIEmoji/es.lproj/Localizable.strings
  26. 4 0
      AIEmoji/ja.lproj/Localizable.strings
  27. 4 0
      AIEmoji/ko.lproj/Localizable.strings
  28. 4 0
      AIEmoji/pt-BR.lproj/Localizable.strings
  29. 4 0
      AIEmoji/pt-PT.lproj/Localizable.strings
  30. 4 0
      AIEmoji/zh-Hans.lproj/Localizable.strings
  31. 4 0
      AIEmoji/zh-Hant.lproj/Localizable.strings

+ 4 - 4
AIEmoji.xcodeproj/project.pbxproj

@@ -2480,7 +2480,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 2;
+				CURRENT_PROJECT_VERSION = 1;
 				DEVELOPMENT_TEAM = 65UD255J84;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;
@@ -2496,7 +2496,7 @@
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				MARKETING_VERSION = 3.6.4;
+				MARKETING_VERSION = 3.6.5;
 				PRODUCT_BUNDLE_IDENTIFIER = com.girl.music.wallpaper;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
@@ -2519,7 +2519,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 2;
+				CURRENT_PROJECT_VERSION = 1;
 				DEVELOPMENT_TEAM = 65UD255J84;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;
@@ -2535,7 +2535,7 @@
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				MARKETING_VERSION = 3.6.4;
+				MARKETING_VERSION = 3.6.5;
 				PRODUCT_BUNDLE_IDENTIFIER = com.girl.music.wallpaper;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";

二進制
AIEmoji/Assets.xcassets/AIList/aiList_MotherDay.imageset/aiList_MotherDay@2x.png


二進制
AIEmoji/Assets.xcassets/AIList/aiList_MotherDay.imageset/aiList_MotherDay@3x.png


二進制
AIEmoji/Assets.xcassets/AIList/aiList_aiChat.imageset/aiList_aiChat@2x.png


二進制
AIEmoji/Assets.xcassets/AIList/aiList_aiChat.imageset/aiList_aiChat@3x.png


二進制
AIEmoji/Assets.xcassets/AIList/aiList_hairColor.imageset/aiList_hairColor@2x.png


二進制
AIEmoji/Assets.xcassets/AIList/aiList_hairColor.imageset/aiList_hairColor@3x.png


二進制
AIEmoji/Assets.xcassets/AIList/aiList_livePhoto.imageset/aiList_livePhoto@2x.png


二進制
AIEmoji/Assets.xcassets/AIList/aiList_livePhoto.imageset/aiList_livePhoto@3x.png


二進制
AIEmoji/Assets.xcassets/AIList/aiList_oldPeople.imageset/aiList_oldPeople@2x.png


二進制
AIEmoji/Assets.xcassets/AIList/aiList_oldPeople.imageset/aiList_oldPeople@3x.png


二進制
AIEmoji/Assets.xcassets/AIList/ailist_eyeOpen.imageset/ailist_eyeOpen@2x.png


二進制
AIEmoji/Assets.xcassets/AIList/ailist_eyeOpen.imageset/ailist_eyeOpen@3x.png


+ 1 - 1
AIEmoji/Business/AIChat/TSChatViewController/ViewModel/TSAIChatVM.swift

@@ -191,7 +191,7 @@ extension TSAIChatVM {
             msg.appendUIDict = [.topView:TSChatMessageUIBaseModel.creat(viewClass: "TSMSGAIDefaultHeaderView", msgModel: msg)]
             return [msg]
         case .perfectHint :
-            let aiString = "Hi! Im DeepSeek一ready to take your image creativity to the next level!".localized
+            let aiString = "Hello! I'm DeepSeek, ready to help you enrich your picture ideas.".localized
             let msg = TSChatMessage(kind: .attributedText(kMDAttributedString(text: aiString)), user: kAIUser, messageId: "", date: Date())
             msg.messageType = .aiRobotWelcome
      

+ 1 - 0
AIEmoji/Business/General/Ex/Notification+Ex.swift

@@ -17,6 +17,7 @@ extension Notification.Name {
     static let kGeneratePTPOperationChanged = Notification.Name("kGeneratePTPOperationChanged") //生成图生图任务发生变化
     
     static let kPTPDataChanged = Notification.Name("kPTPDataChanged") //图生图数据放生改变
+    static let kTTPDataChanged = Notification.Name("kTTPDataChanged") //文生图数据放生改变
     
     static let kOpenMotherDayVC = Notification.Name("kOpenMotherDayVC") //打开母亲节 vc
 }

+ 2 - 2
AIEmoji/Business/TSAILIstVC/TSAIAgeImageHintVC/TSAIListHintBaseVC.swift

@@ -73,9 +73,9 @@ class TSAIListHintBaseVC: TSBaseVC {
                           titleText: "Upload your photos".localized,
                           titleSubText: "",
                           goodText: "Good photo examples".localized,
-                          goodInfoText: "Select an image that features only one pet".localized,
+                          goodInfoText: "Select pet photos with clear faces".localized,
                           badText: "Bad photo examples".localized,
-                          badInfoText: "Rotated or Upside- down Photo".localized)
+                          badInfoText: "No clear faces or group shots".localized)
         }
     }
     

+ 2 - 2
AIEmoji/Business/TSGenmojiVC/TSGenmojiVC/View/TSGenmojiColSectionView.swift

@@ -104,10 +104,10 @@ class TSGenmojiColSectionView: TSBaseCollectionnReusableView {
             leftLab.text = componentReuseViewModel.sectionModel.name
             leftSubLab.text = componentReuseViewModel.sectionModel.subText
             switch componentReuseViewModel.sectionModel.style {
-            case .ptpPicHistory:
+            case .ptpPicHistory,.textPicHistory:
                 moreView.isHidden = false
                 delBtn.isHidden = true
-            case .history,.textPicHistory:
+            case .history:
                 delBtn.isHidden = false
                 moreView.isHidden = true
             default:

+ 3 - 3
AIEmoji/Business/TSGenmojiVC/TSGenmojiVC/ViewModel/TSGenmojiCollectionViewModel.swift

@@ -103,15 +103,15 @@ enum TSGenmojiCoLStyple : Int {
             return CGSize(width: k_ScreenWidth-32, height: 316)
         case .history:
             return CGSize(width: 88, height: 88)
-        case .textPicHistory:
-            return CGSize(width: kTextPicHistoryW, height: kTextPicHistoryH)
+//        case .textPicHistory:
+//            return CGSize(width: kTextPicHistoryW, height: kTextPicHistoryH)
         case .ptpEntrance:
             return CGSize(width: k_ScreenWidth-32, height: 117)
         case .ptpUpload:
             return CGSize(width: k_ScreenWidth, height: 232)
         case .ptpSelectStyle:
             return CGSize(width: k_ScreenWidth, height: 110)
-        case .ptpPicHistory:
+        case .ptpPicHistory,.textPicHistory:
             return CGSize(width: kPTPHistoryW, height: kPTPHistoryH)
         case .changeAgeHistory:
             return CGSize(width: kPTPHistoryW, height: kChnageAgeHistoryH)

+ 46 - 16
AIEmoji/Business/TSPTPGeneratorVC/TSPTPHistoryVC/TSPTPHistoryVC.swift

@@ -5,13 +5,27 @@
 //  Created by 100Years on 2025/4/26.
 //
 
-
-
 import UIKit
 
 class TSPTPHistoryVC: TSBaseVC {
     var listModelArray: [TSActionInfoModel] = []
     var dataChangedBlock:(()->Void)?
+    
+    
+    enum Style {
+        case ptp
+        case ttp
+    }
+    
+    var style:Style
+    init(style: Style) {
+        self.style = style
+        super.init()
+    }
+    @MainActor required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+
     //###################################### 集合视图 ######################################
     let collectionViewBtootm:CGFloat = 80
     lazy var collectionView: TSSimpleCollectionView = {
@@ -20,20 +34,15 @@ class TSPTPHistoryVC: TSBaseVC {
         
         let itemW = (k_ScreenWidth-32.0-12.0-2.0)/2.0
         let itemH = kGetScaleHeight(originalSize: CGSize(width: 165.0, height: 220.0), width: itemW)
-        
-//        let itemW = kPTPHistoryW
-//        let itemH = kPTPHistoryH
-        
+
         let layout = UICollectionViewFlowLayout()
         let cp = TSSimpleCollectionView()
         cp.delegate = self
         cp.layout.itemSize = CGSize(width: itemW, height: itemH)
         cp.layout.minimumLineSpacing = 12
         cp.layout.minimumInteritemSpacing = 12
-//        cp.layout.headerReferenceSize = CGSizeMake(k_ScreenWidth, kSectionTitleViewH)
         cp.collectionView.contentInset = UIEdgeInsets(top: 16, left: 16, bottom: collectionViewBtootm, right: 16)
         cp.registerCell(TSGenmojiItemCell.self,identifier:identifier)
-//        cp.registerSectionHeader(TSGenmojiColSectionView.self, identifier: headerIdentifier)
         cp.cellIdentifierForItem = { data in
             return identifier
         }
@@ -80,7 +89,7 @@ class TSPTPHistoryVC: TSBaseVC {
     }
     
     func updateDataView(){
-        TSRMShared.ptpDBHistory.getModelList { [weak self] array in
+        dbHistory.getModelList { [weak self] array in
             guard let self = self else { return }
             listModelArray = array
             updateView()
@@ -98,12 +107,9 @@ class TSPTPHistoryVC: TSBaseVC {
         showCustomAlert(message: "Are you sure to delete".localized, deleteHandler:  {
             self.removeAllHistoryList()
             self.updateDataView()
+            self.dataChangedNotification()
         })
     }
-
-    deinit {
-        NotificationCenter.default.post(name: .kPTPDataChanged, object: nil)
-    }
 }
 
 extension TSPTPHistoryVC: TSSimpleCollectionViewDelegate {
@@ -118,16 +124,18 @@ extension TSPTPHistoryVC: TSSimpleCollectionViewDelegate {
             browseVC.currentIndex = dataModelArray.firstIndex(of: selectedModel) ?? 0
             browseVC.deleteComplete = { [weak self]  deleteModel in
                 guard let self = self else { return }
-                TSRMShared.ptpDBHistory.deleteListModel(id: deleteModel.id)
+                dbHistory.deleteListModel(id: deleteModel.id)
                 updateDataView()
+                dataChangedNotification()
             }
             kPresentModalVC(target: self, modelVC: browseVC,transitionStyle: .crossDissolve)
             
         case .buttonTapped(let string):
             if string == "delete_task_expired" {
                 if let model = event.data as? TSActionInfoModel{
-                    TSRMShared.ptpDBHistory.deleteListModel(id: model.id)
+                    dbHistory.deleteListModel(id: model.id)
                     updateDataView()
+                    dataChangedNotification()
                 }
             }
         default:
@@ -140,6 +148,28 @@ extension TSPTPHistoryVC: TSSimpleCollectionViewDelegate {
 extension TSPTPHistoryVC{
     func removeAllHistoryList(){
         TSGeneratePTPOperationQueue.shared.cancelAllOperations()
-        TSRMShared.ptpDBHistory.delete()
+        dbHistory.delete()
+    }
+}
+
+
+extension TSPTPHistoryVC{
+    
+    var dbHistory:TSDBHistory{
+        switch style {
+        case .ptp:
+            return TSRMShared.ptpDBHistory
+        case .ttp:
+            return TSRMShared.ttpDBHistory
+        }
+    }
+    
+    func dataChangedNotification(){
+        switch style {
+        case .ptp:
+            NotificationCenter.default.post(name: .kPTPDataChanged, object: nil)
+        case .ttp:
+            NotificationCenter.default.post(name: .kTTPDataChanged, object: nil)
+        }
     }
 }

+ 1 - 1
AIEmoji/Business/TSPTPGeneratorVC/TSPTPInputVC/TSPTPInputVC.swift

@@ -197,7 +197,7 @@ class TSPTPInputVC: TSBaseVC {
                         self.updataCollectionView()
                     })
                 } else if cmd == "more" {
-                    let historyVC = TSPTPHistoryVC()
+                    let historyVC = TSPTPHistoryVC(style: .ptp)
                     kPushVC(target: self, modelVC: historyVC)
                 }
             }

+ 12 - 5
AIEmoji/Business/TSTextGeneralPictureVC/TSTTPInputVC/TSTTPInputVC+Col.swift

@@ -13,12 +13,19 @@ extension TSTTPInputVC {
         cp.collectionView.isScrollEnabled = false
         cp.sectionActionHandler = { [weak self] cellCp, indexPath in
             guard let self = self else { return }
-            if let cmd = cellCp as? String, cmd == "delete"  {
-                showCustomAlert(message: "Are you sure to delete".localized, deleteHandler:  {
-                    self.viewModel.removeAllHistoryList()
-                    self.updateListDataView()
-                })
+            if let cmd = cellCp as? String  {
+                if cmd == "delete" {
+                    showCustomAlert(message: "Are you sure to delete".localized, deleteHandler:  {
+                        self.viewModel.removeAllHistoryList()
+                        self.updateListDataView()
+                    })
+                } else if cmd == "more" {
+                    let historyVC = TSPTPHistoryVC(style: .ttp)
+                    kPushVC(target: self, modelVC: historyVC)
+                }
             }
+            
+
         }
         
         cp.itemDidSelectedHandler = { [weak self] (object, indexPath) in

+ 9 - 0
AIEmoji/Business/TSTextGeneralPictureVC/TSTTPInputVC/TSTTPInputVC.swift

@@ -172,6 +172,15 @@ class TSTTPInputVC: TSBaseVC {
         NotificationCenter.default.addObserver(self, selector: #selector(vipInfoChanged), name: .kPurchaseDidChanged, object: nil)
         observerCollectionView()
         updateListDataView()
+        
+        
+        // 同时 VC主动刷新UI界面
+        NotificationCenter.default.addObserver(forName: .kTTPDataChanged, object: nil, queue: OperationQueue.main) { [weak self] _ in
+            guard let self = self else { return }
+            DispatchQueue.main.async {
+                self.updateListDataView()
+            }
+        }
     }
     
     @objc func vipInfoChanged() {

+ 4 - 0
AIEmoji/de.lproj/Localizable.strings

@@ -345,3 +345,7 @@
 "Magazine" = "Zeitschrift";
 "Religious Medieval" = "Religiöses Mittelalter";
 "Tattoo" = "Tätowierung";
+"Hello! I'm DeepSeek, ready to help you enrich your picture ideas." = "Hallo! Ich bin DeepSeek, bereit, dir zu helfen, deine Bildideen zu bereichern.";
+"Select pet photos with clear faces" = "Wählen Sie Haustierfotos mit klaren Gesichtern";
+"No clear faces or group shots" = "Keine klaren Gesichter oder Gruppenfotos";
+"Text" = "Text";

+ 4 - 0
AIEmoji/en.lproj/Localizable.strings

@@ -342,3 +342,7 @@
 "Magazine" = "Magazine";
 "Religious Medieval" = "Religious Medieval";
 "Tattoo" = "Tattoo";
+"Hello! I'm DeepSeek, ready to help you enrich your picture ideas." = "Hello! I'm DeepSeek, ready to help you enrich your picture ideas.";
+"Select pet photos with clear faces" = "Select pet photos with clear faces";
+"No clear faces or group shots" = "No clear faces or group shots";
+"Text" = "Text";

+ 4 - 0
AIEmoji/es.lproj/Localizable.strings

@@ -342,3 +342,7 @@
 "Magazine" = "Revista";
 "Religious Medieval" = "Religioso Medieval";
 "Tattoo" = "Tatuaje";
+"Hello! I'm DeepSeek, ready to help you enrich your picture ideas." = "¡Hola! Soy DeepSeek, listo para ayudarte a enriquecer tus ideas para fotos.";
+"Select pet photos with clear faces" = "Selecciona fotos de mascotas con caras claras";
+"No clear faces or group shots" = "Sin caras claras o fotos de grupo";
+"Text" = "Texto";

+ 4 - 0
AIEmoji/ja.lproj/Localizable.strings

@@ -341,3 +341,7 @@
 "Magazine" = "雑誌";
 "Religious Medieval" = "中世宗教";
 "Tattoo" = "タトゥー";
+"Hello! I'm DeepSeek, ready to help you enrich your picture ideas." = "こんにちは! DeepSeekです。あなたの写真のアイデアを豊かにするお手伝いをします。";
+"Select pet photos with clear faces" = "顔がはっきりしたペットの写真を選ぶ";
+"No clear faces or group shots" = "はっきりとした顔や集合写真はありません";
+"Text" = "テキスト";

+ 4 - 0
AIEmoji/ko.lproj/Localizable.strings

@@ -347,3 +347,7 @@
 "Magazine" = "잡지";
 "Religious Medieval" = "종교 중세";
 "Tattoo" = "문신";
+"Hello! I'm DeepSeek, ready to help you enrich your picture ideas." = "안녕하세요! 여러분의 사진 아이디어를 더욱 풍성하게 만들어드릴 준비가 된 딥시크릿입니다.";
+"Select pet photos with clear faces" = "얼굴이 선명한 반려동물 사진 선택";
+"No clear faces or group shots" = "얼굴이 선명하지 않거나 단체 사진";
+"Text" = "텍스트";

+ 4 - 0
AIEmoji/pt-BR.lproj/Localizable.strings

@@ -341,3 +341,7 @@
 "Magazine" = "Revista";
 "Religious Medieval" = "Religioso Medieval";
 "Tattoo" = "Tatuagem";
+"Hello! I'm DeepSeek, ready to help you enrich your picture ideas." = "Olá! Eu sou o DeepSeek, pronto para ajudá-lo a enriquecer suas ideias de fotos.";
+"Select pet photos with clear faces" = "Selecione fotos de animais de estimação com rostos nítidos";
+"No clear faces or group shots" = "Sem rostos nítidos ou fotos de grupo";
+"Text" = "Texto";

+ 4 - 0
AIEmoji/pt-PT.lproj/Localizable.strings

@@ -341,3 +341,7 @@
 "Magazine" = "Revista";
 "Religious Medieval" = "Religioso Medieval";
 "Tattoo" = "Tatuagem";
+"Hello! I'm DeepSeek, ready to help you enrich your picture ideas." = "Olá! Eu sou o DeepSeek, pronto para ajudá-lo a enriquecer suas ideias de fotos.";
+"Select pet photos with clear faces" = "Selecione fotos de animais de estimação com rostos nítidos";
+"No clear faces or group shots" = "Sem rostos nítidos ou fotos de grupo";
+"Text" = "Texto";

+ 4 - 0
AIEmoji/zh-Hans.lproj/Localizable.strings

@@ -343,3 +343,7 @@
 "Magazine" = "杂志";
 "Religious Medieval" = "中世纪宗教";
 "Tattoo" = "纹身";
+"Hello! I'm DeepSeek, ready to help you enrich your picture ideas." = "你好!我是 DeepSeek,随时帮你丰富你的图片创意。";
+"Select pet photos with clear faces" = "选择有清晰面部的宠物照片";
+"No clear faces or group shots" = "没有清晰的面部或集体照";
+"Text" = "文生图";

+ 4 - 0
AIEmoji/zh-Hant.lproj/Localizable.strings

@@ -333,3 +333,7 @@
 "Magazine" = "雜誌";
 "Religious Medieval" = "中世紀宗教";
 "Tattoo" = "紋身";
+"Hello! I'm DeepSeek, ready to help you enrich your picture ideas." = "你好! 我是DeepSeek,隨時幫你豐富你的圖片創意。";
+"Select pet photos with clear faces" = "選擇有清晰面部的寵物照片";
+"No clear faces or group shots" = "沒有清晰的面部或集體照";
+"Text" = "文生圖";