123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- //
- // TSGenerateHistoryVC.swift
- // AIEmoji
- //
- // Created by 100Years on 2025/6/22.
- //
- import RealmSwift
- class TSGenerateHistoryVC: TSBaseVC {
- var listModelArray = List<TSDBActionInfoModel>()//惰性加载特性
- //###################################### 导航栏 view ######################################
- lazy var vipBtn: UIButton = {
- let vipBtn = UIButton.createButton(image: UIImage(named: "nav_vip")) { [weak self] in
- guard let self = self else { return }
- if kPurchaseCountDownTime.isCountDown {
- kPresentModalVC(target: self, modelVC: TSPurchasePromotionalVC(isAnimation: false))
- }else{
- TSPurchaseVC.show(target: self)
- }
- }
- vipBtn.isHidden = true
- return vipBtn
- }()
-
- lazy var purchaseCountdownView : TSPurchaseCountdownView = {
- let purchaseCountdownView = TSPurchaseCountdownView()
- purchaseCountdownView.clickBlock = { [weak self] in
- guard let self = self else { return }
- kPresentModalVC(target: self, modelVC: TSPurchasePromotionalVC(isAnimation: false))
- }
- purchaseCountdownView.isHidden = true
- return purchaseCountdownView
- }()
-
- lazy var navBarView: TSBaseNavContentBarView = {
- let navBarView = TSBaseNavContentBarView()
- let label = UILabel.createLabel(text: "Creations",font: .font(name: .KelsiFill,size: 28))
- navBarView.barView.addSubview(label)
- label.snp.makeConstraints { make in
- make.centerY.equalToSuperview()
- make.leading.equalTo(17.0)
- }
-
- let deleteBtn = UIButton.createButton(image: .delete) { [weak self] in
- guard let self = self else { return }
- clickNavRight()
- }
-
- let clearView = UIView()
-
- let stackView:UIStackView = UIStackView()
- stackView.spacing = 8
- navBarView.barView.addSubview(stackView)
- stackView.addArrangedSubview(vipBtn)
- stackView.addArrangedSubview(purchaseCountdownView)
- stackView.addArrangedSubview(clearView)
- stackView.addArrangedSubview(deleteBtn)
-
- stackView.snp.makeConstraints { make in
- make.centerY.equalToSuperview()
- make.trailing.equalTo(-16)
- }
- vipBtn.snp.makeConstraints { make in
- make.width.height.equalTo(24)
- }
-
- purchaseCountdownView.snp.makeConstraints { make in
- make.height.equalTo(24)
- }
-
- clearView.snp.makeConstraints { make in
- make.width.equalTo(0.1)
- }
-
- deleteBtn.snp.makeConstraints { make in
- make.width.height.equalTo(24)
- }
-
- kMainAsync {
- label.applyGradient(colors: ["#FA794F".uiColor,"#F8C32A".uiColor,"#FEFBF4".uiColor])
- }
-
- return navBarView
- }()
-
- //###################################### 集合视图 ######################################
- let collectionViewBtootm:CGFloat = 80
- let identifier = "TSAIListHistoryCell"
- lazy var collectionView: UICollectionView = {
- let layout = UICollectionViewFlowLayout()
- layout.scrollDirection = .vertical
-
- let itemW = (k_ScreenWidth-32.0-13.0-2.0)/2.0
- let itemH = kGetScaleHeight(originalSize: CGSize(width: 165.0, height: 220.0), width: itemW)
- layout.itemSize = CGSize(width: itemW, height: itemH)
- layout.minimumInteritemSpacing = 13
- layout.minimumLineSpacing = 16
- layout.sectionInset = UIEdgeInsets(top: 10, left: 16, bottom: k_Height_TabBar+20, right: 16)
-
- let collectionView = TSBaseCollectionView(frame: .zero, collectionViewLayout: layout)
- collectionView.delegate = self
- collectionView.dataSource = self
- collectionView.register(TSGenerateHistoryCell.self, forCellWithReuseIdentifier: identifier)
- return collectionView
- }()
-
- lazy var pageNullView: TSPageNullView = {
- let pageNullView = TSPageNullView()
- pageNullView.isHidden = true
- return pageNullView
- }()
-
- override func createData() {
-
- }
-
- var navRightBtn = UIButton()
- override func createView() {
- addNormalNavBarView()
- navBarContentView.addSubview(navBarView)
- navBarView.snp.makeConstraints { make in
- make.edges.equalToSuperview()
- }
-
- contentView.addSubview(pageNullView)
- contentView.addSubview(collectionView)
- collectionView.snp.makeConstraints { make in
- make.edges.equalToSuperview()
- }
- }
-
- override func dealThings() {
- updateDataView()
- NotificationCenter.default.addObserver(self, selector: #selector(operationChanged(_:)), name: .kGenerateBasePhotoOperation, object: nil)
- NotificationCenter.default.addObserver(self, selector: #selector(updateDataView), name: .kAIPhotoDataChanged, object: nil)
- NotificationCenter.default.addObserver(self, selector: #selector(updateVipView), name: .kPurchaseDidChanged, object: nil)
- updateVipView()
- NotificationCenter.default.addObserver(self, selector: #selector(checkkPurchaseCountDownTime), name: .kCloseTSPurchasePromotionalVC, object: nil)
- checkkPurchaseCountDownTime()
- }
-
- @objc func checkkPurchaseCountDownTime(){
-
- kMainAsync {
- if kPurchaseCountDownTime.isCountDown {
- self.purchaseCountdownView.isHidden = false
- kPurchaseCountDownTime.complete = { [weak self] minutes, seconds, end in
- guard let self = self else { return }
- kMainAsync {
- if end {
- self.purchaseCountdownView.isHidden = true
- }else{
- self.purchaseCountdownView.minLabel.text = minutes
- self.purchaseCountdownView.secLabel.text = seconds
- }
- }
- }
- }else{
- self.purchaseCountdownView.isHidden = true
- }
- }
- }
-
- @objc func operationChanged(_ notification: Notification) {
- if let userInfo = notification.userInfo as? [String: Any],let state = userInfo["state"] as? TSProgressState {
- if state.reloadNewData {
- self.updateDataView()
- }
- }
- }
-
- @objc func updateVipView() {
- kMainAsync{
- self.vipBtn.isHidden = PurchaseManager.default.isVip
- }
- }
-
- @objc func updateDataView(){
- listModelArray = dbHistory.listModels//惰性加载特性
- updateView()
- }
-
- func updateView() {
- collectionView.reloadData()
-
- navRightBtn.isHidden = listModelArray.count <= 0
- pageNullView.isHidden = listModelArray.count > 0
- }
-
- override func viewWillAppear(_ animated: Bool) {
- super.viewWillAppear(animated)
- checkkPurchaseCountDownTime()
- }
-
- @objc func clickNavRight() {
- TSCustomAlertController.show(in: self, config: TSCustomAlertController.AlertConfig(
- message: "Are you sure to delete all histories?".localized,
- cancelTitle: "Delete All".localized,
- cancelColor: .red,
- confirmTitle: "Retain".localized,
- confirmColor: .white,
- cancelAction: { [weak self] in
- guard let self = self else { return }
- self.removeAllHistoryList()
- self.updateDataView()
- }
- ))
- }
- }
- extension TSGenerateHistoryVC: UICollectionViewDataSource ,UICollectionViewDelegate {
- public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
- return listModelArray.count
- }
-
- public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
-
- let cell = collectionView.dequeueReusableCell(withReuseIdentifier: identifier, for: indexPath)
- if let cell = cell as? TSGenerateHistoryCell ,let dbModel = listModelArray[safe:indexPath.row]{
- cell.dataModel = dbModel.getModel()
- cell.buttonTapped = { [weak self] cmd in
- self?.handelCellCmd(cmd: cmd,indexPath: indexPath)
- }
- }
-
- return cell
- }
- public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
- guard let selectedModel = listModelArray[safe:indexPath.row] else { return }
- let filteredResults = listModelArray.filter("status == %@", "success")//直接过滤List(返回Results类型)
- let filteredList = List<TSDBActionInfoModel>()
- filteredList.append(objectsIn: filteredResults)
-
- let browseVC = TSAIPhotoBrowseVC()
- browseVC.dataModelArray = filteredList
- browseVC.currentIndex = filteredList.firstIndex(of: selectedModel) ?? 0
- browseVC.deleteComplete = { [weak self] deleteModel in
- guard let self = self else { return }
- dbHistory.deleteListModel(uuid: deleteModel.uuid)
- updateDataView()
- }
- kPresentModalVC(target: self, modelVC: browseVC,transitionStyle: .crossDissolve)
- }
- }
- extension TSGenerateHistoryVC{
- func handelCellCmd(cmd:String,indexPath: IndexPath){
- if let currentActionInfoModel = listModelArray[safe:indexPath.row]{
- if cmd == "delete_task_expired" {
- dbHistory.deleteListModel(id: currentActionInfoModel.id)
- updateDataView()
- }else if cmd == "delete_task_sensitive" {
- showDeleteErrorAlert(message: "Delete this error history?".localized, deleteHandler: { [weak self] in
- guard let self = self else { return }
- dbHistory.deleteListModel(id: currentActionInfoModel.id)
- updateDataView()
- })
- }else if cmd == "delete" {
- TSCustomAlertController.show(in: self, config: TSCustomAlertController.AlertConfig(
- message: "Are you sure to delete?".localized,
- cancelTitle: "Delete".localized,
- cancelColor: .red,
- confirmTitle: "Retain".localized,
- confirmColor: .white,
- cancelAction: { [weak self] in
- guard let self = self else { return }
- removeDelete(index: indexPath.row)
- }
- ))
- }
- }
- }
-
- func removeDelete(index:Int){
- dbHistory.deleteListModel(index: index)
- updateDataView()
- }
-
- func removeAllHistoryList(){
- dbHistory.deleteResultModels()
- // dbHistory.deleteAll()
- updateDataView()
- }
-
- var dbHistory:TSDBHistory{
- TSRMShared.aiGenerateDB
- }
- }
- extension TSGenerateHistoryVC{
- static func showPosition(){
- AppDelegate.tabbar?.changeSelectedIndex(index: 1)
- }
-
- }
|