TSGeneralRintoneVC.swift 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. //
  2. // TSGeneralRintoneVC.swift
  3. // AIRingtone
  4. //
  5. // Created by 100Years on 2025/3/6.
  6. //
  7. class TSGeneralRintoneVC: TSBottomAlertVC {
  8. var infoModel:TSActionInfoModel?
  9. var complete:((TSActionInfoModel)->Void)
  10. var prompt:String
  11. var promptSort:String
  12. init(prompt: String,promptSort: String,complete:@escaping ((TSActionInfoModel)->Void)) {
  13. self.prompt = prompt
  14. self.promptSort = promptSort
  15. self.complete = complete
  16. super.init()
  17. }
  18. // lazy var viewModel: TSGeneralRintoneVM = {
  19. // let viewModel:TSGeneralRintoneVM = TSGeneralRintoneVM()
  20. // viewModel.aiText = aiText
  21. // return viewModel
  22. // }()
  23. lazy var audioPlayer = TSBusinessAudioPlayer.shared
  24. var uuidString:String = UUID().uuidString
  25. @MainActor required init?(coder: NSCoder) {
  26. fatalError("init(coder:) has not been implemented")
  27. }
  28. lazy var ringView: TSRingToneCellView = {
  29. let ringToneView = TSRingToneCellView()
  30. ringToneView.isSelectedChangeColor = false
  31. ringToneView.clickPlayHandel = { [weak self] play in
  32. guard let self = self else { return }
  33. clickPlay()
  34. }
  35. return ringToneView
  36. }()
  37. //############################## 生成动画 ##############################
  38. lazy var generateInView : TSCommonloadingView = {
  39. let generateInView = TSCommonloadingView()
  40. generateInView.textLabel.text = "Working on your ringtone...".localized
  41. // generateInView.timeLabel.text = "~ 4min"
  42. // generateInView.cancelBtn.addTarget(self, action: #selector(closePage), for: .touchUpInside)
  43. generateInView.backstageBtn.addTarget(self, action: #selector(clickBackstageBtn), for: .touchUpInside)
  44. return generateInView
  45. }()
  46. override func createView() {
  47. super.createView()
  48. view.addSubview(generateInView)
  49. generateInView.snp.makeConstraints { make in
  50. make.top.bottom.leading.trailing.equalTo(0)
  51. }
  52. diyView.addSubview(ringView)
  53. ringView.snp.makeConstraints { make in
  54. make.top.equalTo(98)
  55. make.centerX.equalToSuperview()
  56. make.width.equalTo(k_ScreenWidth - 40)
  57. make.height.equalTo(72)
  58. }
  59. diyView.addSubview(regenerateBtn)
  60. regenerateBtn.snp.makeConstraints { make in
  61. make.top.equalTo(ringView.snp.bottom).offset(16)
  62. make.centerX.equalToSuperview()
  63. }
  64. saveBtn.setTitle("Set As Ringtone".localized, for: .normal)
  65. resultIconImageView.image = resultIcon
  66. bottomViewH = 340.0
  67. bgImageView.addShadow(shadowColor: "#E6E229".uiColor.cgColor, shadowOffset: .zero, shadowRadius: 20, shadowOpacity: 0.8)
  68. diyView.addSubview(failView)
  69. failView.snp.updateConstraints { make in
  70. make.centerY.equalToSuperview().offset(0)
  71. }
  72. }
  73. @objc func clickBackstageBtn() {
  74. // viewModel.cancelAllRequest()
  75. self.dismiss(animated: true, completion: nil)
  76. }
  77. // @objc override func closePage() {
  78. // viewModel.cancelAllRequest()
  79. // self.dismiss(animated: true, completion: nil)
  80. // }
  81. override func clickAgainBtn() {
  82. audioPlayer.stop()
  83. if kPurchaseToolShared.kJudgeVipFreeType(vipFreeNumType: .ringtones, vc: self){ return }//判断 vip
  84. creatRintone()
  85. }
  86. @objc override func clickSubmitBtn(){
  87. guard let model = infoModel else {
  88. kShowToastDataMissing()
  89. return
  90. }
  91. audioPlayer.stop()
  92. _ = kPurchaseToolShared.kshareBand(needVip: model.response.vip, vc: self, urlString: model.response.musicUrl, fileName: model.response.title)
  93. }
  94. @objc func clickPlay(){
  95. if audioPlayer.isPlaying{
  96. audioPlayer.stop()
  97. }else{
  98. audioPlayer.playUrlString( infoModel?.response.musicUrl)
  99. }
  100. }
  101. override func viewWillDisappear(_ animated: Bool) {
  102. super.viewWillDisappear(animated)
  103. audioPlayer.stop()
  104. }
  105. override func dealThings() {
  106. if kPurchaseToolShared.kJudgeVipFreeType(vipFreeNumType: .ringtones, vc: self){ return }//判断 vip
  107. // viewModel.creatRintone(text: self.aiText)
  108. // viewModel.$stateDatauPblished.receive(on: DispatchQueue.main).sink {[weak self] (state,model) in
  109. // guard let self = self else { return }
  110. // self.upDateView(state: state, model: model)
  111. // }.store(in: &cancellable)
  112. creatRintone()
  113. ringView.monitorPlayStateDefaultHandle()
  114. }
  115. func creatRintone() {
  116. self.uuidString = UUID().uuidString
  117. let operation:TSGenerateRintoneOperation = TSGenerateRintoneOperationQueue.shared.creatOperation(uuid: self.uuidString) as! TSGenerateRintoneOperation
  118. operation.$stateDatauPblished.receive(on: DispatchQueue.main).sink {[weak self] (state,model) in
  119. guard let self = self else { return }
  120. self.upDateView(state: state, model: model)
  121. }.store(in: &cancellable)
  122. operation.creatRintone(oldModel: self.infoModel, prompt: prompt, promptSort: promptSort)
  123. }
  124. }
  125. extension TSGeneralRintoneVC{
  126. func setRingViewData(model:TSActionInfoModel) {
  127. ringView.timeLab.text = Float(model.request.duration).floatToMinuteSecond()
  128. ringView.nameLab.text = model.response.title
  129. ringView.setCoverImageView(urlString: model.response.coverUrl)
  130. }
  131. }