123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- //
- // ASMyRingCell.swift
- // AIPlayRingtones
- //
- // Created by mini on 2025/5/19.
- //
- import Combine
- import SwipeCellKit
- class ASMyRingCell: SwipeCollectionViewCell {
- weak var targetVC:UIViewController?
- var indexPath:IndexPath = IndexPath(item: 0, section: 0)
- override init(frame: CGRect) {
- super.init(frame: frame)
- creatUI()
- dealThings()
- }
-
- required public init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
- static let cellID = "ASMyRingCell"
- lazy var ringView: ASRingToneCellView = {
- let ringToneView = ASRingToneCellView()
- ringToneView.cornerRadius = 0.0
- ringToneView.setRingBtn.isHidden = false
- ringToneView.editBtn.isHidden = true
- ringToneView.clickPlayHandel = { [weak self] isplay in
- guard let self = self else { return }
- clickPlay()
- }
-
- // ringToneView.clickEditHandel = { [weak self] in
- // guard let self = self else { return }
- // clickEidtBtn()
- // }
-
- ringToneView.clickSetUpHandel = { [weak self] in
- guard let self = self else { return }
- clickSetRingBtn()
-
- }
- return ringToneView
- }()
-
- lazy var generateView: TSRingToneGenerateView = {
- let generateView = TSRingToneGenerateView()
- generateView.isHidden = true
- generateView.refreshHandel = { [weak self] in
- guard let self = self else { return }
- guard let oldModel = model else { return }
- if oldModel.modelType == .ttr {
- // if kPurchaseToolShared.kJudgeVipFreeType(vipFreeNumType: .ringtones){ return }//判断 vip
- if ASGenerateTextToRingOperationQueue.shared.isAvailability {
- generateView.setProgress(progress: 0)
- let gennerateOperation = ASGenerateTextToRingOperationQueue.shared.creatOperation(uuid: oldModel.uuid)
- gennerateOperation.isSaveProcessToDB = true
- gennerateOperation.creatRing(oldModel: oldModel) { success in }
- // dePrint("\(self.indexPath.item),刷新进度发self.operation=\(gennerateOperation)")
- modelDidSet()
- }
- }else if oldModel.modelType == .rtr {
- // if kPurchaseToolShared.kJudgeVipFreeType(vipFreeNumType: .ringtones){ return }//判断 vip
- if ASGenerateRingToRingOperationQueue.shared.isAvailability {
- generateView.setProgress(progress: 0)
- let gennerateOperation = ASGenerateRingToRingOperationQueue.shared.creatOperation(uuid: oldModel.uuid)
- gennerateOperation.isSaveProcessToDB = true
- gennerateOperation.creatRing(oldModel: oldModel) { success in }
- modelDidSet()
- }
- }
- }
- return generateView
- }()
-
-
- lazy var exampleView: UIView = {
- let exampleView = UIView()
- exampleView.backgroundColor = "#7E57F4".uiColor
-
- let textLabel = UILabel.createLabel(
- text: "Example".localized,
- font: .font(size: 12),
- textColor: .white
- )
-
- exampleView.addSubview(textLabel)
- textLabel.snp.makeConstraints { make in
- make.top.edges.equalTo(UIEdgeInsets(top: 4, left: 6, bottom: 4, right: 6))
- }
-
- kDelayMainShort {
- exampleView.makeCorner([.topLeft,.bottomLeft], radius: 10)
- }
- return exampleView
- }()
-
-
- lazy var vipView: UIImageView = {
- let vipView = UIImageView.createImageView(imageName: "ring_vip")
- vipView.isHidden = true
- return vipView
- }()
-
- var model:ASActionInfoModel?{
- didSet{
- modelDidSet()
- }
- }
- func creatUI() {
- cornerRadius = 16.0
- backgroundColor = .cardColor
-
- contentView.addSubview(ringView)
- ringView.snp.makeConstraints { make in
- make.edges.equalToSuperview()
- }
-
- contentView.addSubview(vipView)
- vipView.snp.makeConstraints { make in
- make.top.trailing.equalTo(0)
- make.width.height.equalTo(24)
- }
-
- contentView.addSubview(exampleView)
- exampleView.snp.makeConstraints { make in
- make.trailing.equalToSuperview()
- make.top.equalTo(0)
- make.height.equalTo(20)
- }
-
- contentView.addSubview(generateView)
- generateView.snp.makeConstraints { make in
- make.edges.equalToSuperview()
- }
-
- }
-
- func setTargetVC(targetVC:UIViewController?,indexPath:IndexPath) {
- self.targetVC = targetVC
- self.indexPath = indexPath
-
- if let vc = targetVC as? any SwipeCollectionViewCellDelegate {
- self.delegate = vc
- }
- }
-
- func dealThings(){
-
- }
- var operation:ASGenerateBaseOperation?
- }
- extension ASMyRingCell {
-
- var currentOperation:ASGenerateBaseOperation?{
- guard let model = model else { return nil }
- // dePrint("\(self.indexPath.item),刷新进度真self.uuid=\(model.uuid)")
- if model.modelType == .ttr {
- return ASGenerateTextToRingOperationQueue.shared.findOperation(uuid: model.uuid)
- }else if model.modelType == .rtr {
- return ASGenerateRingToRingOperationQueue.shared.findOperation(uuid: model.uuid)
- }
- return nil
- }
- func modelDidSet(){
- guard let model = model else { return }
-
- if let rintoneOperation = currentOperation {
- // rintoneOperation.currentActionInfoModelChanged = { [weak self] actionInfoModel in
- // guard let self = self else { return }
- // DispatchQueue.main.async {
- // self.updataActionInfoModelView(model: actionInfoModel)
- // }
- // }
-
- rintoneOperation.stateDataPblishedChanged = { [weak self] state, actionInfoModel in
- guard let self = self else { return }
- switch state {
- case .failed(let errorStr,let code):
- generateView.isHidden = false
- generateView.setFail()
- case .success:
- if let model = actionInfoModel {
- updataActionInfoModelView(model: model)
- }
- case .progress(let progress, let string):
- generateView.isHidden = false
- generateView.setProgress(progress: progress)
- default:
- generateView.isHidden = false
- generateView.setProgress(progress: 0)
- }
- }
-
- self.operation = rintoneOperation
- // dePrint("\(self.indexPath.item),刷新进度真self.operation=\(self.operation)")
- }
- else{
- // dePrint("\(self.indexPath.item),刷新进度空self.operation=\(self.operation)")
- self.operation = nil
- }
- updataActionInfoModelView(model: model)
- dePrint("\(self.indexPath.item),model actionStatus 收到=\(model.actionStatus)")
-
- if playSelf{
- setPlayerStateChangedHandle()
- }else{
- changePlayerState(state: .stop)
- }
- }
- func setPlayerStateChangedHandle(){
-
- TSBusinessAudioPlayer.shared.stateChangedHandle = { [weak self] playerState in
- guard let self = self else { return }
- self.changePlayerState(state: playerState)
- }
- self.changePlayerState(state: TSBusinessAudioPlayer.shared.currentPlayerState)
- }
-
- }
- extension ASMyRingCell {
-
-
- }
- extension ASMyRingCell {
- func clickPlay() {
- if playSelf{
- if TSBusinessAudioPlayer.shared.isLoading{
- return
- }
- if TSBusinessAudioPlayer.shared.isPlaying{
- TSBusinessAudioPlayer.shared.stop()
- }else{
- TSBusinessAudioPlayer.shared.playUrlString(modelUrlString,localURL: modelLocalURL,indexPath: indexPath)
- }
-
- }else{
- TSBusinessAudioPlayer.shared.stop()//让上一个对象停止播放
- setPlayerStateChangedHandle()//更换监听
- TSBusinessAudioPlayer.shared.playUrlString(modelUrlString,localURL: modelLocalURL,indexPath: indexPath)
- }
- }
-
- func changePlayerState(state:TSBusinessAudioPlayer.PlayerState){
- ringView.handelAudioPlayerStateChange(state: state)
- }
-
-
- func updataActionInfoModelView(model:ASActionInfoModel){
-
- if model.modelType == .example {
- model.actionStatus = .success
- }
- switch model.actionStatus {
- case .pending,.running:
- generateView.isHidden = false
- generateView.setProgress(progress: model.percent*kPercentScale)
- case .success:
- generateView.isHidden = true
-
- ringView.timeLab.text = Float(model.response.duration).floatToMinuteSecond()
- ringView.nameLab.text = model.response.title
- ringView.setCoverImageView(urlString: model.response.coverUrl)
- exampleView.isHidden = model.modelType != .example
- vipView.isHidden = true
-
- self.changePlayerState(state: TSBusinessAudioPlayer.shared.currentPlayerState)
-
- case .failed:
- generateView.isHidden = false
- generateView.setFail()
- }
- }
- var playSelf:Bool{
- return TSBusinessAudioPlayer.shared.isPlayURLString(string: modelUrlString,localURL: modelLocalURL,indexPath: indexPath)
- }
- var modelUrlString:String{
- var urlString:String = ""
- if let model = model{
- urlString = model.response.musicUrl
- }
- return urlString
- }
- var modelLocalURL:URL?{
- return model?.localURL
- }
-
- }
- //点击编辑和设置按钮
- extension ASMyRingCell {
-
- @objc func clickSetRingBtn(){
- if let model = model {
- setShareBand(infoModel: model)
- }
-
- TSBusinessAudioPlayer.shared.stop()
- }
-
- func setShareBand(infoModel:ASActionInfoModel){
- guard let targetVC = targetVC else { return }
- let needVip = infoModel.response.vip
- let urlString = infoModel.response.musicUrl
- let fileName = infoModel.response.title
- ASDownloadManager.getDownLoadRing(urlString: urlString){ url,downLoad in
- if let path = url {
- _ = kshareBand(needVip: needVip, vc: targetVC, fileURL: path, fileName: fileName)
- }
- }
- }
- }
|