TSAIListHistoryCell.swift 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. //
  2. // TSAIListHistoryCell.swift
  3. // TSLiveWallpaper
  4. //
  5. // Created by 100Years on 2025/6/10.
  6. //
  7. import RealmSwift
  8. class TSAIListHistoryCell: TSBaseCollectionCell {
  9. var buttonTapped:((String)->Void)?
  10. var operation:TSGenerateBasePhotoOperation?
  11. var dataModel:TSActionInfoModel = TSActionInfoModel(){
  12. didSet {
  13. self.updataActionInfoModelView(model: dataModel)
  14. if let operation = TSGenerateBasePhotoOperationQueue.shared.findOperation(uuid: dataModel.uuid) as? TSGenerateBasePhotoOperation {
  15. DispatchQueue.main.async {
  16. operation.currentActionInfoModelChanged = { [weak self] actionInfoModel in
  17. guard let self = self else { return }
  18. DispatchQueue.main.async {
  19. // print("actionInfoModel.toJSONString()=\(actionInfoModel.toJSONString())")
  20. self.updataActionInfoModelView(model: actionInfoModel)
  21. }
  22. }
  23. self.operation = operation
  24. }
  25. }else{
  26. self.operation?.currentActionInfoModelChanged = nil
  27. self.operation = nil
  28. }
  29. }
  30. }
  31. lazy var generateView: TSGennerateCellView = {
  32. let generateView = TSGennerateCellView()
  33. generateView.isHidden = true
  34. generateView.refreshHandel = { [weak self] in
  35. guard let self = self else { return }
  36. if dataModel.upImageURLExpired { //任务已经过期了
  37. buttonTapped?("delete_task_expired")
  38. }else if dataModel.response.sensitiveError { //敏感内容
  39. buttonTapped?("delete_task_sensitive")
  40. }else{
  41. // if kJudgeVipFreeType(vipFreeNumType: .picToPic){ return }
  42. if kShowGenerateBusyView(view: WindowHelper.getCurrentWindow()!) { return }
  43. let generatePTPOperation = TSGenerateBasePhotoOperationQueue.shared.creatOperation(uuid: dataModel.uuid)
  44. generatePTPOperation.isSaveProcessToDB = true
  45. generatePTPOperation.creatImage(oldModel: dataModel){ complete in }
  46. generateView.setProgress(progress: 0)
  47. }
  48. }
  49. generateView.longPressHandel = { [weak self] in
  50. guard let self = self else { return }
  51. buttonTapped?("delete")
  52. }
  53. return generateView
  54. }()
  55. lazy var textLabel: UILabel = {
  56. let textLabel = UILabel.createLabel(
  57. text: "Example".localized,
  58. font: .font(size: 12),
  59. textColor: .white
  60. )
  61. return textLabel
  62. }()
  63. lazy var exampleView: UIView = {
  64. let exampleView = UIView()
  65. exampleView.backgroundColor = "#232323".uiColor.withAlphaComponent(0.3)
  66. exampleView.addSubview(textLabel)
  67. textLabel.snp.makeConstraints { make in
  68. make.top.edges.equalTo(UIEdgeInsets(top: 4, left: 6, bottom: 4, right: 6))
  69. }
  70. exampleView.isHidden = true
  71. return exampleView
  72. }()
  73. lazy var showImageView: UIImageView = {
  74. let showImageView = UIImageView.createImageView(imageName:"",contentMode: .scaleAspectFill)
  75. showImageView.backgroundColor = .gray
  76. return showImageView
  77. }()
  78. lazy var hiddenImageView: UIImageView = {
  79. let hiddenImageView = UIImageView.createImageView(imageName:"",contentMode: .scaleAspectFill)
  80. hiddenImageView.backgroundColor = .gray
  81. hiddenImageView.isHidden = true
  82. return hiddenImageView
  83. }()
  84. lazy var videoIconImageView: UIImageView = {
  85. let videoIconImageView = UIImageView.createImageView(image:.videoIcon,contentMode: .scaleToFill,autoMirrored:false)
  86. videoIconImageView.isHidden = true
  87. return videoIconImageView
  88. }()
  89. @objc func handleLongPress(_ gestureRecognizer: UILongPressGestureRecognizer) {
  90. // 确保只在手势开始时触发一次
  91. guard gestureRecognizer.state == .began else { return }
  92. buttonTapped?("delete")
  93. }
  94. override func creatUI() {
  95. let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress(_:)))
  96. longPressRecognizer.minimumPressDuration = 0.5 // 设置最小长按时间(秒)
  97. contentView.addGestureRecognizer(longPressRecognizer)
  98. contentView.layer.borderWidth = 3
  99. contentView.layer.borderColor = "#DFD7C0".uiCGColor
  100. contentView.addSubview(hiddenImageView)
  101. hiddenImageView.snp.makeConstraints { make in
  102. make.top.equalTo(0)
  103. make.leading.equalTo(0)
  104. make.trailing.bottom.equalTo(0)
  105. }
  106. contentView.addSubview(showImageView)
  107. showImageView.snp.makeConstraints { make in
  108. make.top.equalTo(0)
  109. make.leading.equalTo(0)
  110. make.trailing.bottom.equalTo(0)
  111. }
  112. contentView.addSubview(exampleView)
  113. exampleView.snp.makeConstraints { make in
  114. make.top.equalTo(8)
  115. make.leading.equalTo(8)
  116. make.height.equalTo(20)
  117. }
  118. contentView.addSubview(videoIconImageView)
  119. videoIconImageView.snp.makeConstraints { make in
  120. make.top.equalTo(8)
  121. make.leading.equalTo(8)
  122. make.width.height.equalTo(20)
  123. }
  124. contentView.addSubview(generateView)
  125. generateView.snp.makeConstraints { make in
  126. make.edges.equalToSuperview()
  127. }
  128. }
  129. }
  130. extension TSAIListHistoryCell {
  131. func updataActionInfoModelView(model:TSActionInfoModel){
  132. if model.modelType == .example {
  133. model.actionStatus = .success
  134. }
  135. showImageView.image = nil
  136. //dePrint("updataActionInfoModelView model.actionStatus 收到 = \(model.actionStatus)")
  137. switch model.actionStatus {
  138. case .pending,.running:
  139. generateView.isHidden = false
  140. generateView.setProgress(progress: model.percent)
  141. case .success:
  142. generateView.isHidden = true
  143. videoIconImageView.isHidden = true
  144. if model.modelType == .example {
  145. textLabel.text = "Example".localized
  146. exampleView.isHidden = false
  147. showImageView.image = UIImage(named: model.response.resultUrl)
  148. }else{
  149. exampleView.isHidden = true
  150. videoIconImageView.isHidden = !model.isVideo
  151. if dataModel.isVideo {
  152. videoIconImageView.isHidden = false
  153. showImageView.setAsyncImage(urlString: model.response.previewUrl,contentMode: .scaleAspectFill,backgroundColor: .white.withAlphaComponent(0.1))
  154. }else {
  155. showImageView.setAsyncImage(urlString: model.response.resultUrl,contentMode: .scaleAspectFill,backgroundColor: .white.withAlphaComponent(0.1))
  156. hiddenImageView.setAsyncImage(urlString: model.request.imageUrl,contentMode: .scaleAspectFill)
  157. }
  158. }
  159. case .failed:
  160. generateView.isHidden = false
  161. if model.upImageURLExpired { //任务已经过期了
  162. generateView.setTaskExpired()
  163. }else{
  164. generateView.setFailText(text: model.response.codeErrorMsg, refresh: !model.response.sensitiveError)
  165. }
  166. }
  167. }
  168. }