123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- //
- // TSAIListHistoryCell.swift
- // TSLiveWallpaper
- //
- // Created by 100Years on 2025/6/10.
- //
- import RealmSwift
- class TSAIListHistoryCell: TSBaseCollectionCell {
- var buttonTapped:((String)->Void)?
- var operation:TSGenerateBasePhotoOperation?
- var dataModel:TSActionInfoModel = TSActionInfoModel(){
- didSet {
- self.updataActionInfoModelView(model: dataModel)
- if let operation = TSGenerateBasePhotoOperationQueue.shared.findOperation(uuid: dataModel.uuid) as? TSGenerateBasePhotoOperation {
- DispatchQueue.main.async {
- operation.currentActionInfoModelChanged = { [weak self] actionInfoModel in
- guard let self = self else { return }
- DispatchQueue.main.async {
- // print("actionInfoModel.toJSONString()=\(actionInfoModel.toJSONString())")
- self.updataActionInfoModelView(model: actionInfoModel)
- }
- }
- self.operation = operation
- }
- }else{
- self.operation?.currentActionInfoModelChanged = nil
- self.operation = nil
- }
- }
- }
-
- lazy var videoPlayerVC: TSAIListVideoPlayerVC = TSAIListVideoPlayerVC(videoURL: URL(string: "www.baidu.com")!)
- lazy var generateView: TSGennerateCellView = {
- let generateView = TSGennerateCellView()
- generateView.isHidden = true
- generateView.refreshHandel = { [weak self] in
- guard let self = self else { return }
- if dataModel.upImageURLExpired { //任务已经过期了
- buttonTapped?("delete_task_expired")
- }else if dataModel.response.sensitiveError { //敏感内容
- buttonTapped?("delete_task_sensitive")
- }else{
- // if kJudgeVipFreeType(vipFreeNumType: .picToPic){ return }
- if kShowGenerateBusyView(view: WindowHelper.getCurrentWindow()!) { return }
- let generatePTPOperation = TSGenerateBasePhotoOperationQueue.shared.creatOperation(uuid: dataModel.uuid)
- generatePTPOperation.isSaveProcessToDB = true
- generatePTPOperation.creatImage(oldModel: dataModel){ complete in }
- generateView.setProgress(progress: 0)
- }
- }
-
- generateView.longPressHandel = { [weak self] in
- guard let self = self else { return }
- buttonTapped?("delete")
- }
- return generateView
- }()
-
-
-
- lazy var textLabel: UILabel = {
- let textLabel = UILabel.createLabel(
- text: "Example".localized,
- font: .font(size: 12),
- textColor: .white
- )
- return textLabel
- }()
-
- lazy var exampleView: UIView = {
- let exampleView = UIView()
- exampleView.backgroundColor = "#232323".uiColor.withAlphaComponent(0.3)
-
- exampleView.addSubview(textLabel)
- textLabel.snp.makeConstraints { make in
- make.top.edges.equalTo(UIEdgeInsets(top: 4, left: 6, bottom: 4, right: 6))
- }
- exampleView.isHidden = true
- return exampleView
- }()
-
- lazy var showImageView: UIImageView = {
- let showImageView = UIImageView.createImageView(imageName:"",contentMode: .scaleAspectFill)
- showImageView.backgroundColor = .gray
- return showImageView
- }()
-
- lazy var hiddenImageView: UIImageView = {
- let hiddenImageView = UIImageView.createImageView(imageName:"",contentMode: .scaleAspectFill)
- hiddenImageView.backgroundColor = .gray
- hiddenImageView.isHidden = true
- return hiddenImageView
- }()
-
- lazy var videoIconImageView: UIImageView = {
- let videoIconImageView = UIImageView.createImageView(image:.videoIcon,contentMode: .scaleToFill,autoMirrored:false)
- videoIconImageView.isHidden = true
- return videoIconImageView
- }()
-
- lazy var blurEffect: UIVisualEffectView = {
- let blurEffect = createBlurEffectView(style: .dark)
- blurEffect.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(clickUnlockVip)))
- let bgView = UIView()
- blurEffect.contentView.addSubview(bgView)
- bgView.snp.makeConstraints { make in
- make.center.equalToSuperview()
- }
- let vipImageView = UIImageView.createImageView(image: .vipColorIcon)
- bgView.addSubview(vipImageView)
-
- let textLabel = UILabel.createLabel(text: "Unlock Result".localized,font: .font(size: 12),textColor: .themeColor)
- bgView.addSubview(textLabel)
-
- vipImageView.snp.makeConstraints { make in
- make.leading.top.bottom.equalToSuperview()
- make.height.width.equalTo(20)
- }
-
- textLabel.snp.makeConstraints { make in
- make.centerY.equalToSuperview()
- make.trailing.equalToSuperview()
- make.leading.equalTo(vipImageView.snp.trailing).offset(6)
- }
- return blurEffect
- }()
-
- @objc func clickUnlockVip(_ gestureRecognizer: UILongPressGestureRecognizer) {
- buttonTapped?("unlockVip")
- }
- @objc func handleLongPress(_ gestureRecognizer: UILongPressGestureRecognizer) {
- // 确保只在手势开始时触发一次
- guard gestureRecognizer.state == .began else { return }
- buttonTapped?("delete")
- }
-
- override func creatUI() {
-
- let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress(_:)))
- longPressRecognizer.minimumPressDuration = 0.5 // 设置最小长按时间(秒)
- contentView.addGestureRecognizer(longPressRecognizer)
-
- contentView.layer.borderWidth = 3
- contentView.layer.borderColor = "#DFD7C0".uiCGColor
-
- contentView.addSubview(hiddenImageView)
- hiddenImageView.snp.makeConstraints { make in
- make.top.equalTo(0)
- make.leading.equalTo(0)
- make.trailing.bottom.equalTo(0)
- }
-
- contentView.addSubview(showImageView)
- showImageView.snp.makeConstraints { make in
- make.top.equalTo(0)
- make.leading.equalTo(0)
- make.trailing.bottom.equalTo(0)
- }
-
- contentView.addSubview(exampleView)
- exampleView.snp.makeConstraints { make in
- make.top.equalTo(8)
- make.leading.equalTo(8)
- make.height.equalTo(20)
- }
-
- contentView.addSubview(blurEffect)
- blurEffect.snp.makeConstraints { make in
- make.edges.equalToSuperview()
- }
-
- contentView.addSubview(videoIconImageView)
- videoIconImageView.snp.makeConstraints { make in
- make.top.equalTo(8)
- make.leading.equalTo(8)
- make.width.height.equalTo(20)
- }
- contentView.addSubview(generateView)
- generateView.snp.makeConstraints { make in
- make.edges.equalToSuperview()
- }
-
- }
- }
- extension TSAIListHistoryCell {
- func updataActionInfoModelView(model:TSActionInfoModel){
-
- if model.modelType == .example {
- model.actionStatus = .success
- }
- showImageView.image = nil
- //dePrint("updataActionInfoModelView model.actionStatus 收到 = \(model.actionStatus)")
- switch model.actionStatus {
- case .pending,.running:
- generateView.isHidden = false
- generateView.setProgress(progress: model.percent)
- case .success:
- generateView.isHidden = true
- videoIconImageView.isHidden = true
- if model.modelType == .example {
- textLabel.text = "Example".localized
- exampleView.isHidden = false
- showImageView.image = UIImage(named: model.response.resultUrl)
- setVideoHidden()
- }else{
- exampleView.isHidden = true
-
- videoIconImageView.isHidden = !model.isVideo
- if dataModel.isVideo {
- videoIconImageView.isHidden = false
- setVideoURL()
- }else {
- setVideoHidden()
- showImageView.setAsyncImage(urlString: model.response.resultUrl,contentMode: .scaleAspectFill,backgroundColor: .white.withAlphaComponent(0.1))
- hiddenImageView.setAsyncImage(urlString: model.request.imageUrl,contentMode: .scaleAspectFill)
- }
- }
- case .failed:
- generateView.isHidden = false
- if model.upImageURLExpired { //任务已经过期了
- generateView.setTaskExpired()
- }else{
- generateView.setFailText(text: model.response.codeErrorMsg, refresh: !model.response.sensitiveError)
- }
-
- }
- }
- }
- extension TSAIListHistoryCell {
-
- func setVideoHidden(){
- blurEffect.isHidden = true
- videoPlayerVC.view.removeFromSuperview()
- }
-
- func setVideoURL(){
- blurEffect.isHidden = kPurchaseBusiness.isVip
- self.videoPlayerVC.view.removeFromSuperview()
- self.videoPlayerVC = TSAIListVideoPlayerVC(videoURL: dataModel.response.videoURL)
- self.videoPlayerVC.viewFrame = self.contentView.bounds
- self.videoPlayerVC.view.frame = self.contentView.bounds
- self.showImageView.insertSubview(self.videoPlayerVC.view, at: 0)
- self.videoPlayerVC.runloppPlay()
- self.videoPlayerVC.view.isUserInteractionEnabled = false
- }
- }
|