TSTextPicGennerateVC.swift 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. //
  2. // TSTextPicGennerateVC.swift
  3. // AIEmoji
  4. //
  5. // Created by 100Years on 2025/2/20.
  6. //
  7. class TSTextPicGennerateVC: TSAIPhotoGeneratorBaseVC {
  8. var imageModel:TSActionInfoModel?
  9. var complete:((TSActionInfoModel)->Void)
  10. var viewModel:TSTextPicGennerateVM = TSTextPicGennerateVM(generateStyleModel: TSGenerateStyleModel())
  11. var progressState = TSProgressState.none
  12. init(generateStyleModel: TSGenerateStyleModel,complete:@escaping ((TSActionInfoModel)->Void)) {
  13. viewModel = TSTextPicGennerateVM(generateStyleModel: generateStyleModel)
  14. self.complete = complete
  15. super.init()
  16. }
  17. @MainActor required init?(coder: NSCoder) {
  18. fatalError("init(coder:) has not been implemented")
  19. }
  20. lazy var generateInView : TSGeneratorloadingView = {
  21. let generateInView = TSGeneratorloadingView()
  22. return generateInView
  23. }()
  24. override func createView() {
  25. contentView.addSubview(generateInView)
  26. generateInView.snp.makeConstraints { make in
  27. make.edges.equalToSuperview()
  28. }
  29. super.createView()
  30. }
  31. override func closePage() {
  32. if progressState.isResult {
  33. viewModel.cancelAllRequest()
  34. self.dismiss(animated: true, completion: nil)
  35. }else{
  36. TSCustomAlertController.show(in: self, config: TSCustomAlertController.AlertConfig(
  37. message: "As you leave, your generation will be interrupted and no result.".localized,
  38. messageColor: .white,
  39. messageFont: .systemFont(ofSize: 16),
  40. cancelTitle: "Leave".localized,
  41. cancelColor: .white,
  42. confirmTitle: "Wait".localized,
  43. confirmColor: .themeColor,
  44. cancelAction: { [weak self] in
  45. guard let self = self else { return }
  46. print("用户点击了Leave")
  47. viewModel.cancelAllRequest()
  48. self.dismiss(animated: true, completion: nil)
  49. },
  50. confirmAction: {
  51. print("用户点击了Stay")
  52. }
  53. ))
  54. }
  55. }
  56. //重试
  57. @objc override func clickTryAgainBtn(){
  58. clickRegenerateBtn()
  59. }
  60. //重新生成
  61. @objc override func clickRegenerateBtn(){
  62. //判断 vip
  63. if kJudgeVip(externalBool: kPurchaseDefault.freeNumAvailable(type: .textGeneratePic) == false, vc: self) {[weak self] in
  64. guard let self = self else { return }
  65. }{ return }
  66. TSNetworkShared.generateCheck(checkURLType: .textPicCreate, animationView: self.contentView,resetNavigationState: true) { [weak self] data, error in
  67. guard let self = self else { return }
  68. if error == nil{
  69. self.viewModel.creatImageEmoji()
  70. }
  71. }
  72. }
  73. //保存功能
  74. @objc override func clickSaveBtn(){
  75. if let image = getSuccessImage() {
  76. PhotoManagerShared.saveImageToAlbum(image) { success, error in
  77. if success {
  78. kSaveSuccesswShared.show(atView:self.view)
  79. }else{
  80. debugPrint(error)
  81. }
  82. }
  83. }
  84. }
  85. override func dealThings() {
  86. viewModel.creatImageEmoji()
  87. viewModel.$stateDatauPblished.receive(on: DispatchQueue.main).sink {[weak self] (state,model) in
  88. guard let self = self else { return }
  89. self.upDateView(state: state, model: model)
  90. }.store(in: &cancellable)
  91. }
  92. }
  93. extension TSTextPicGennerateVC {
  94. func getSuccessImage()->UIImage?{
  95. if let image = netWorkImageView.image {
  96. return image.pngImage
  97. }
  98. return nil
  99. }
  100. }
  101. extension TSTextPicGennerateVC {
  102. func upDateView(state:TSProgressState,model:TSActionInfoModel?){
  103. progressState = state
  104. switch state {
  105. case .failed(let errorStr):
  106. showError(text: errorStr)
  107. case .success:
  108. if let model = model {
  109. showSuccess(model: model)
  110. }else{
  111. showError(text: nil)
  112. }
  113. case .progressString(let string):
  114. showProgress(text: string)
  115. default:
  116. showLoading()
  117. }
  118. }
  119. func showProgress(text:String) {
  120. generateInView.updateShowProgress(text: text)
  121. isClickTheBlankClosePage = false
  122. bottomView.isHidden = true
  123. netWorkImageView.isHidden = true
  124. }
  125. func showLoading(){
  126. generateInView.updateShowLoading(text: "Generating".localized + " ...")
  127. isClickTheBlankClosePage = false
  128. bottomView.isHidden = true
  129. netWorkImageView.isHidden = true
  130. }
  131. func showError(text:String?){
  132. let msg = "Failed to generate, please try later".localized
  133. generateInView.updateShowError(text: msg)
  134. isClickTheBlankClosePage = true
  135. tryAgainBtn.isHidden = false
  136. bigSaveBtn.isHidden = true
  137. bottomView.isHidden = false
  138. netWorkImageView.isHidden = true
  139. }
  140. func showSuccess(model:TSActionInfoModel){
  141. generateInView.updateShowSuccess()
  142. imageModel = model
  143. isClickTheBlankClosePage = true
  144. tryAgainBtn.isHidden = false
  145. bigSaveBtn.isHidden = false
  146. bottomView.isHidden = false
  147. netWorkImageView.isHidden = false
  148. self.netWorkImageView.setAsyncImage(urlString: model.response.resultUrl,placeholder:kPlaceholderImage,backgroundColor:netWorkImageView.backgroundColor!)
  149. kPurchaseDefault.useOnceForFree(type: .textGeneratePic)
  150. if let model = imageModel {
  151. complete(model)
  152. }
  153. }
  154. }