CNLiveHomeMoreController.swift 14.8 KB
//
//  CNLiveHomeMoreController.swift
//  metaCode
//
//  Created by zx on 2025/3/14.
//

import Foundation
import MJRefresh
class CNLiveHomeMoreController:CNLiveBaseViewController, UITableViewDataSource, UITableViewDelegate{
        
    //我的播放记录
    var _followModels : [CNLiveHomeFollowModel]?
    var followModels : [CNLiveHomeFollowModel]? {
        get{
            _followModels
        }
        set{
            _followModels = newValue!
        }
    }

    //1行2横图   1行3竖图
    var _slideModel : CNLiveDownSlideModel?
    var slideModel : CNLiveDownSlideModel? {
        get{
            _slideModel
        }
        set{
            _slideModel = newValue!
        }
    }

    ///数据源
    lazy var dataArray: NSMutableArray = {
        var dataArray = NSMutableArray()
        return dataArray
    }()

    let kCNLiveHomeLanmuThreeImgCellIdentifier = "kCNLiveHomeLanmuThreeImgCellIdentifier"
    let kCNLiveHomeTwoHengTuCellIdentifier = "kCNLiveHomeTwoHengTuCellIdentifier"
    
    lazy var tableView : UITableView = {
        let tableView = UITableView(frame: .zero, style: .plain)
        tableView.dataSource = self
        tableView.delegate = self
        tableView.separatorStyle = .none
        tableView.register(CNLiveHomeLanmuThreeImgCell.self, forCellReuseIdentifier: kCNLiveHomeLanmuThreeImgCellIdentifier)
        tableView.register(CNLiveHomeTwoHengTuCell.self, forCellReuseIdentifier: kCNLiveHomeTwoHengTuCellIdentifier)
        tableView.backgroundColor = .white
        return tableView
    }()

    var footerRefreshView: MJRefreshAutoNormalFooter!
    var page = 1//当前页数

    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationBarHidden = false
        
        view.addSubview(tableView)
        tableView.snp.makeConstraints { make in
            make.left.equalToSuperview()
            make.top.equalTo(KNavigationHeight)
            make.bottom.equalToSuperview()
            make.right.equalToSuperview()
        }
        self.addRefreshView()
        self.page = 1
        if self.slideModel != nil{
            titleName = self.slideModel?.blockName ?? ""
            self.getBlockContents(page: self.page)
        }else if self.followModels != nil{
            self.getHomePageFollowApi(sid: UserInfoManager.shared.userInfo.uid)
            titleName = "播放记录"
        }else{
            //我的收藏
            titleName = "我的收藏"
            self.getCollectionListApi()
        }
    }
    func addRefreshView() {
        tableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: {[weak self] in
            guard let self = self else { return }
            self.page = 1
            if self.slideModel != nil{
                self.getBlockContents(page: 1)
            }else if self.followModels != nil{
                self.getHomePageFollowApi(sid: UserInfoManager.shared.userInfo.uid)
            }else{
                self.getCollectionListApi()
            }
        })
        tableView.mj_footer = MJRefreshAutoNormalFooter.init(refreshingBlock: {[weak self] in
            guard let self = self else { return }
            self.page = self.page + 1
            if self.slideModel != nil{
                self.getBlockContents(page: self.page)
            }else if self.followModels != nil{
                self.getHomePageFollowApi(sid: UserInfoManager.shared.userInfo.uid)
            }else{
                self.getCollectionListApi()
            }
        })
    }
        
    // MARK: - UITableViewDelegate
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.dataArray.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        if let slideModel = self.dataArray[indexPath.row] as? [CNLiveAlbumModel]{
            if self.slideModel?.type == SlideModelTypeTVOneBigTwoSmall2{
                //一行2个横图
                guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeTwoHengTuCellIdentifier) as? CNLiveHomeTwoHengTuCell
                else {
                    let cell = CNLiveHomeTwoHengTuCell()
                    return cell
                }
                cell.slideModel = slideModel
                return cell

            }else if self.slideModel?.type == SlideModelTypeTwoDuanJu5{
                //一行3个竖图
                guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeLanmuThreeImgCellIdentifier) as? CNLiveHomeLanmuThreeImgCell
                else {
                    let cell = CNLiveHomeLanmuThreeImgCell()
                    return cell
                }
                cell.slideModel = slideModel
                return cell
            }else{
                //
            }
             
        }else if let followModel = self.dataArray[indexPath.row] as? [CNLiveHomeFollowModel]{
            //一行2个横图
            guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeTwoHengTuCellIdentifier) as? CNLiveHomeTwoHengTuCell
            else {
                let cell = CNLiveHomeTwoHengTuCell()
                return cell
            }
            cell.followModel = followModel
            return cell
        }else if let collectionModel = self.dataArray[indexPath.row] as? [CNLiveCollectionListModel]{
            //一行2个横图
            guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeTwoHengTuCellIdentifier) as? CNLiveHomeTwoHengTuCell
            else {
                let cell = CNLiveHomeTwoHengTuCell()
                return cell
            }
            cell.collectionModel = collectionModel
            return cell
        }
        return UITableViewCell()
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if let slideModel = self.dataArray[indexPath.row] as? [CNLiveAlbumModel]{
            if self.slideModel?.type == SlideModelTypeTVOneBigTwoSmall2{
                //一行2个横图
                let imgW:CGFloat = (KSreenWidth-45.0)/2.0
                let imgH:CGFloat = imgW*93.0/165.0
                return imgH+76.0
            }else if self.slideModel?.type == SlideModelTypeTwoDuanJu5{
                //一行3个竖图
                let imgW:CGFloat = (KSreenWidth-60.0)/3.0
                let imgH:CGFloat = imgW*140.0/105.0
                return imgH+55.0
            }else{
            }
        }else if let followModel = self.dataArray[indexPath.row] as? [CNLiveHomeFollowModel]{
            //一行2个横图
            let imgW:CGFloat = (KSreenWidth-45.0)/2.0
            let imgH:CGFloat = imgW*93.0/165.0
            return imgH+76.0
        }else if let followModel = self.dataArray[indexPath.row] as? [CNLiveCollectionListModel]{
            //一行2个横图
            let imgW:CGFloat = (KSreenWidth-45.0)/2.0
            let imgH:CGFloat = imgW*93.0/165.0
            return imgH+76.0
        }
        return 60
    }
    
    deinit {
    }

    func chunkArray<T>(array: [T], chunkSize: Int) -> [[T]] {
        var result = [[T]]()
        var currentIndex = 0
        
        while currentIndex < array.count {
            let endIndex = min(currentIndex + chunkSize, array.count)
            let chunk = Array(array[currentIndex..<endIndex])
            result.append(chunk)
            currentIndex += chunkSize
        }
        
        return result
    }

    // MARK: - 获取内容
    //我的-播放记录
    func getHomePageFollowApi(sid:String){
        CNLiveHomePageViewModel.requestGetMinePlayHistory(sid: sid, page: self.page){[weak self] result, status in
            guard let self = self else { return }
            hiddenLoading()
            if status == .success{
                let albumBaseModel = result as! CNLiveHomeFollowListBaseModel
                
                if self.page > 1 && albumBaseModel.list.count > 0 {
                    var tempArr = Array<Any>()
                    for obj in self.dataArray {
                        if let objArr = obj as? Array<Any>{
                            for tempObj in objArr{
                                if let tempMdl = tempObj as? CNLiveHomeFollowModel{
                                    tempArr.append(tempMdl)
                                }
                            }
                        }else{
                            if let tempMdl = obj as? CNLiveHomeFollowModel{
                                tempArr.append(tempMdl)
                            }
                        }
                    }

                    self.dataArray = NSMutableArray(array: tempArr)
                    self.dataArray.addObjects(from: albumBaseModel.list)
                }
                if self.page == 1 {
                    self.dataArray.removeAllObjects()
                    self.dataArray.addObjects(from: albumBaseModel.list)
                    if self.dataArray.count > 0 && self.tableView.mj_header == nil && self.tableView.mj_footer == nil {
                        self.addRefreshView()
                    }
                }
                
                self.tableView.mj_header?.endRefreshing()
                
                //分成2个一组
                let chunkedArray = self.chunkArray(array: self.dataArray as! Array<Any>, chunkSize: 2)
                self.dataArray = NSMutableArray(array: chunkedArray)
                self.tableView.reloadData()
                if albumBaseModel.hasNextPage{
                    self.tableView.mj_footer?.endRefreshing()
                }else{
                    self.tableView.mj_footer?.endRefreshingWithNoMoreData()
                }

            }else{
                //没有
            }
        }
    }
    
    //我的-收藏记录
    func getCollectionListApi(){
        CNLiveHomePageViewModel.getCollectionListApi(sid: UserInfoManager.shared.userInfo.uid, page: "\(self.page)", pageSize: "10") {[weak self] result, status in
            guard let self = self else { return }
            hiddenLoading()//UserInfoManager.shared.userInfo.uid //"10506286"
            if status == .success{
                let albumBaseModel = result as! CNLiveCollectionListBaseModel
                
                if self.page > 1 && albumBaseModel.list.count > 0 {
                    var tempArr = Array<Any>()
                    for obj in self.dataArray {
                        if let objArr = obj as? Array<Any>{
                            for tempObj in objArr{
                                if let tempMdl = tempObj as? CNLiveCollectionListModel{
                                    tempArr.append(tempMdl)
                                }
                            }
                        }else{
                            if let tempMdl = obj as? CNLiveCollectionListModel{
                                tempArr.append(tempMdl)
                            }
                        }
                    }

                    self.dataArray = NSMutableArray(array: tempArr)
                    self.dataArray.addObjects(from: albumBaseModel.list)
                }
                if self.page == 1 {
                    self.dataArray.removeAllObjects()
                    self.dataArray.addObjects(from: albumBaseModel.list)
                    if self.dataArray.count > 0 && self.tableView.mj_header == nil && self.tableView.mj_footer == nil {
                        self.addRefreshView()
                    }
                }
                
                self.tableView.mj_header?.endRefreshing()
                
                //分成2个一组
                let chunkedArray = self.chunkArray(array: self.dataArray as! Array<Any>, chunkSize: 2)
                self.dataArray = NSMutableArray(array: chunkedArray)
                self.tableView.reloadData()
                if albumBaseModel.hasNextPage{
                    self.tableView.mj_footer?.endRefreshing()
                }else{
                    self.tableView.mj_footer?.endRefreshingWithNoMoreData()
                }

            }else{
                //没有
            }
        }
    }

    func getBlockContents(page:NSInteger){
        showLoading(message: "")
        if let blockId = self.slideModel?.blockId{
            print("blockId:\(blockId)")
            CNLiveHomePageViewModel.getBlockContents(blockId: blockId, page: page) {[weak self] result, status in
                hiddenLoading()
                guard let self = self else { return }
                if status == .success{
                    let albumBaseModel = result as! CNLiveAlbumBaseModel
                    if self.page > 1 && albumBaseModel.list.count > 0 {
                        var tempArr = Array<Any>()
                        for obj in self.dataArray {
                            if let objArr = obj as? Array<Any>{
                                for tempObj in objArr{
                                    if let tempMdl = tempObj as? CNLiveAlbumModel{
                                        tempArr.append(tempMdl)
                                    }
                                }
                            }else{
                                if let tempMdl = obj as? CNLiveAlbumModel{
                                    tempArr.append(tempMdl)
                                }
                            }
                        }

                        self.dataArray = NSMutableArray(array: tempArr)
                        self.dataArray.addObjects(from: albumBaseModel.list)
                    }
                    if self.page == 1 {
                        self.dataArray.removeAllObjects()
                        self.dataArray.addObjects(from: albumBaseModel.list)
                        if self.dataArray.count > 0 && self.tableView.mj_header == nil && self.tableView.mj_footer == nil {
                            self.addRefreshView()
                        }
                    }
                    
                    self.tableView.mj_header?.endRefreshing()
                    
                    //分成3个一组
                    let chunkedArray = self.chunkArray(array: self.dataArray as! Array<Any>, chunkSize: 3)
                    self.dataArray = NSMutableArray(array: chunkedArray)
                    self.tableView.reloadData()
                    if albumBaseModel.hasNextPage{
                        self.tableView.mj_footer?.endRefreshing()
                    }else{
                        self.tableView.mj_footer?.endRefreshingWithNoMoreData()
                    }

                }else if (status == .noNetwork) {
//                    self.network_type = .noNetwork
//                    self.tableView.reloadEmptyDataSet()
                } else {
//                    self.network_type = .failed
//                    self.tableView.reloadEmptyDataSet()
                }
            }

        }

    }

}