123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- //
- // TSGeneralRintoneVC.swift
- // AIRingtone
- //
- // Created by 100Years on 2025/3/6.
- //
- class TSGeneralRintoneVC: TSBottomAlertVC {
-
- var infoModel:TSActionInfoModel?
- var complete:((TSActionInfoModel)->Void)
-
- var prompt:String
- var promptSort:String
- init(prompt: String,promptSort: String,complete:@escaping ((TSActionInfoModel)->Void)) {
- self.prompt = prompt
- self.promptSort = promptSort
- self.complete = complete
- super.init()
- }
-
- // lazy var viewModel: TSGeneralRintoneVM = {
- // let viewModel:TSGeneralRintoneVM = TSGeneralRintoneVM()
- // viewModel.aiText = aiText
- // return viewModel
- // }()
-
- lazy var audioPlayer = TSBusinessAudioPlayer.shared
- var uuidString:String = UUID().uuidString
- @MainActor required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- lazy var ringView: TSRingToneCellView = {
- let ringToneView = TSRingToneCellView()
- ringToneView.isSelectedChangeColor = false
- ringToneView.clickPlayHandel = { [weak self] play in
- guard let self = self else { return }
- clickPlay()
- }
- return ringToneView
- }()
-
- //############################## 生成动画 ##############################
- lazy var generateInView : TSCommonloadingView = {
- let generateInView = TSCommonloadingView()
- generateInView.textLabel.text = "Working on your ringtone...".localized
- // generateInView.timeLabel.text = "~ 4min"
- // generateInView.cancelBtn.addTarget(self, action: #selector(closePage), for: .touchUpInside)
- generateInView.backstageBtn.addTarget(self, action: #selector(clickBackstageBtn), for: .touchUpInside)
- return generateInView
- }()
- override func createView() {
- super.createView()
-
- view.addSubview(generateInView)
- generateInView.snp.makeConstraints { make in
- make.top.bottom.leading.trailing.equalTo(0)
- }
- diyView.addSubview(ringView)
- ringView.snp.makeConstraints { make in
- make.top.equalTo(98)
- make.centerX.equalToSuperview()
- make.width.equalTo(k_ScreenWidth - 40)
- make.height.equalTo(72)
- }
-
- diyView.addSubview(regenerateBtn)
- regenerateBtn.snp.makeConstraints { make in
- make.top.equalTo(ringView.snp.bottom).offset(16)
- make.centerX.equalToSuperview()
- }
- saveBtn.setTitle("Set As Ringtone".localized, for: .normal)
- resultIconImageView.image = resultIcon
- bottomViewH = 340.0
- bgImageView.addShadow(shadowColor: "#E6E229".uiColor.cgColor, shadowOffset: .zero, shadowRadius: 20, shadowOpacity: 0.8)
-
- diyView.addSubview(failView)
- failView.snp.updateConstraints { make in
- make.centerY.equalToSuperview().offset(0)
- }
- }
-
- @objc func clickBackstageBtn() {
- // viewModel.cancelAllRequest()
- self.dismiss(animated: true, completion: nil)
- }
-
- // @objc override func closePage() {
- // viewModel.cancelAllRequest()
- // self.dismiss(animated: true, completion: nil)
- // }
-
- override func clickAgainBtn() {
- audioPlayer.stop()
- if kPurchaseToolShared.kJudgeVipFreeType(vipFreeNumType: .ringtones, vc: self){ return }//判断 vip
- creatRintone()
- }
-
- @objc override func clickSubmitBtn(){
-
- guard let model = infoModel else {
- kShowToastDataMissing()
- return
- }
- audioPlayer.stop()
- _ = kPurchaseToolShared.kshareBand(needVip: model.response.vip, vc: self, urlString: model.response.musicUrl, fileName: model.response.title)
- }
-
- @objc func clickPlay(){
- if audioPlayer.isPlaying{
- audioPlayer.stop()
- }else{
- audioPlayer.playUrlString( infoModel?.response.musicUrl)
- }
- }
-
- override func viewWillDisappear(_ animated: Bool) {
- super.viewWillDisappear(animated)
- audioPlayer.stop()
- }
-
- override func dealThings() {
- if kPurchaseToolShared.kJudgeVipFreeType(vipFreeNumType: .ringtones, vc: self){ return }//判断 vip
- // viewModel.creatRintone(text: self.aiText)
- // viewModel.$stateDatauPblished.receive(on: DispatchQueue.main).sink {[weak self] (state,model) in
- // guard let self = self else { return }
- // self.upDateView(state: state, model: model)
- // }.store(in: &cancellable)
- creatRintone()
- ringView.monitorPlayStateDefaultHandle()
- }
-
- func creatRintone() {
-
- self.uuidString = UUID().uuidString
- let operation:TSGenerateRintoneOperation = TSGenerateRintoneOperationQueue.shared.creatOperation(uuid: self.uuidString) as! TSGenerateRintoneOperation
- operation.$stateDatauPblished.receive(on: DispatchQueue.main).sink {[weak self] (state,model) in
- guard let self = self else { return }
- self.upDateView(state: state, model: model)
- }.store(in: &cancellable)
- operation.creatRintone(oldModel: self.infoModel, prompt: prompt, promptSort: promptSort)
- }
- }
- extension TSGeneralRintoneVC{
- func setRingViewData(model:TSActionInfoModel) {
- ringView.timeLab.text = Float(model.request.duration).floatToMinuteSecond()
- ringView.nameLab.text = model.response.title
- ringView.setCoverImageView(urlString: model.response.coverUrl)
- }
- }
|