TSPTPHistoryVC.swift 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. //
  2. // TSPTPHistoryVC.swift
  3. // AIEmoji
  4. //
  5. // Created by 100Years on 2025/4/26.
  6. //
  7. import UIKit
  8. class TSPTPHistoryVC: TSBaseVC {
  9. var listModelArray: [TSActionInfoModel] = []
  10. var dataChangedBlock:(()->Void)?
  11. enum Style {
  12. case ptp
  13. case ttp
  14. }
  15. var style:Style
  16. init(style: Style) {
  17. self.style = style
  18. super.init()
  19. }
  20. @MainActor required init?(coder: NSCoder) {
  21. fatalError("init(coder:) has not been implemented")
  22. }
  23. //###################################### 集合视图 ######################################
  24. let collectionViewBtootm:CGFloat = 80
  25. lazy var collectionView: TSSimpleCollectionView = {
  26. let identifier = "TSGenmojiItemCell"
  27. let headerIdentifier = "TSGenmojiColSectionView"
  28. let itemW = (k_ScreenWidth-32.0-12.0-2.0)/2.0
  29. let itemH = kGetScaleHeight(originalSize: CGSize(width: 165.0, height: 220.0), width: itemW)
  30. let layout = UICollectionViewFlowLayout()
  31. let cp = TSSimpleCollectionView()
  32. cp.delegate = self
  33. cp.layout.itemSize = CGSize(width: itemW, height: itemH)
  34. cp.layout.minimumLineSpacing = 12
  35. cp.layout.minimumInteritemSpacing = 12
  36. cp.collectionView.contentInset = UIEdgeInsets(top: 16, left: 16, bottom: collectionViewBtootm, right: 16)
  37. cp.registerCell(TSGenmojiItemCell.self,identifier:identifier)
  38. cp.cellIdentifierForItem = { data in
  39. return identifier
  40. }
  41. return cp
  42. }()
  43. lazy var pageNullView: TSPageNullView = {
  44. let pageNullView = TSPageNullView()
  45. pageNullView.isHidden = true
  46. return pageNullView
  47. }()
  48. override func createData() {
  49. }
  50. var navRightBtn = UIButton()
  51. override func createView() {
  52. addNormalNavBarView()
  53. setPageTitle("History".localized)
  54. navRightBtn = setNavigationItem("", imageName: "delete", direction: .right, action: #selector(clickNavRight))
  55. contentView.addSubview(pageNullView)
  56. contentView.addSubview(collectionView)
  57. collectionView.snp.makeConstraints { make in
  58. make.edges.equalToSuperview()
  59. }
  60. }
  61. override func dealThings() {
  62. updateDataView()
  63. NotificationCenter.default.addObserver(forName: .kGeneratePTPOperationChanged, object: nil, queue: nil) { [weak self] notification in
  64. guard let self = self else { return }
  65. if let userInfo = notification.userInfo as? [String: Any],let state = userInfo["state"] as? TSProgressState {
  66. dePrint("TSBaseOperation stateDatauPblished 收到 = \(state)")
  67. if state.reloadNewData {
  68. updateDataView()
  69. }
  70. }
  71. }
  72. }
  73. func updateDataView(){
  74. dbHistory.getModelList { [weak self] array in
  75. guard let self = self else { return }
  76. listModelArray = array
  77. updateView()
  78. }
  79. }
  80. func updateView() {
  81. collectionView.reload(with:[TSSimpleSectionData(items: listModelArray)])
  82. navRightBtn.isHidden = listModelArray.count <= 0
  83. pageNullView.isHidden = listModelArray.count > 0
  84. }
  85. @objc func clickNavRight() {
  86. showCustomAlert(message: "Are you sure to delete".localized, deleteHandler: {
  87. self.removeAllHistoryList()
  88. self.updateDataView()
  89. self.dataChangedNotification()
  90. })
  91. }
  92. }
  93. extension TSPTPHistoryVC: TSSimpleCollectionViewDelegate {
  94. func collectionView(didTrigger event: TSSmalCoacopods.TSSimpleCellEvent) {
  95. switch event.action {
  96. case .tap:
  97. guard let selectedModel = listModelArray.safeObj(At: event.indexPath.item) else { return }
  98. let dataModelArray = listModelArray.filter{$0.status == "success" || $0.modelType == .example}
  99. let browseVC = TSAIPhotoBrowseVC()
  100. browseVC.dataModelArray = dataModelArray
  101. browseVC.currentIndex = dataModelArray.firstIndex(of: selectedModel) ?? 0
  102. browseVC.deleteComplete = { [weak self] deleteModel in
  103. guard let self = self else { return }
  104. dbHistory.deleteListModel(id: deleteModel.id)
  105. updateDataView()
  106. dataChangedNotification()
  107. }
  108. kPresentModalVC(target: self, modelVC: browseVC,transitionStyle: .crossDissolve)
  109. case .buttonTapped(let string):
  110. if string == "delete_task_expired" {
  111. if let model = event.data as? TSActionInfoModel{
  112. dbHistory.deleteListModel(id: model.id)
  113. updateDataView()
  114. dataChangedNotification()
  115. }
  116. }
  117. default:
  118. break
  119. }
  120. }
  121. }
  122. extension TSPTPHistoryVC{
  123. func removeAllHistoryList(){
  124. TSGeneratePTPOperationQueue.shared.cancelAllOperations()
  125. dbHistory.delete()
  126. }
  127. }
  128. extension TSPTPHistoryVC{
  129. var dbHistory:TSDBHistory{
  130. switch style {
  131. case .ptp:
  132. return TSRMShared.ptpDBHistory
  133. case .ttp:
  134. return TSRMShared.ttpDBHistory
  135. }
  136. }
  137. func dataChangedNotification(){
  138. switch style {
  139. case .ptp:
  140. NotificationCenter.default.post(name: .kPTPDataChanged, object: nil)
  141. case .ttp:
  142. NotificationCenter.default.post(name: .kTTPDataChanged, object: nil)
  143. }
  144. }
  145. }