// // SPPlayerDetailViewController.swift // ShortPlay // // Created by 曾觉新 on 2025/4/10. // import UIKit class SPPlayerDetailViewController: SPPlayerListViewController { override var PlayerCellClass: SPPlayerListCell.Type { return SPPlayerDetailCell.self } override var contentSize: CGSize { return CGSize(width: kSPScreenWidth, height: kSPScreenHeight) } var videoId: String? var shortPlayId: String? private var detailModel: SPVideoDetailModel? private weak var episodeView: SPEpisodeView? override func viewDidLoad() { super.viewDidLoad() self.autoNextEpisode = true self.dataSource = self self.delegate = self requestDetailData() _addAction() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.setNavigationBarHidden(true, animated: true) } override func play() { super.play() if let _ = self.viewModel.currentPlayer?.model as? SPVideoDetailModel, let videoInfo = self.viewModel.currentPlayer?.videoInfo { SPVideoAPI.requestRequestVideoPlayHistory(videoId: videoInfo.short_play_video_id ?? "", shortPlayId: videoInfo.short_play_id ?? "") } } } extension SPPlayerDetailViewController { private func _addAction() { self.viewModel.handleEpisode = { [weak self] in self?.onEpisode() } } private func onEpisode() { let view = SPEpisodeView() view.dataArr = detailModel?.episodeList ?? [] view.shortModel = detailModel?.shortPlayInfo view.currentIndex = self.currentIndexPath.row view.didSelectedIndex = { [weak self] (index) in self?.scrollToItem(indexPath: IndexPath(row: index, section: 0)) } view.present(in: nil) self.episodeView = view } } //MARK: -------------- SPPlayerListViewControllerDataSource -------------- extension SPPlayerDetailViewController: SPPlayerListViewControllerDataSource, SPPlayerListViewControllerDelegate { func sp_playerListViewController(_ viewController: SPPlayerListViewController, _ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath, oldCell: UICollectionViewCell) -> UICollectionViewCell { if let cell = oldCell as? SPPlayerDetailCell { cell.shortModel = detailModel?.shortPlayInfo cell.videoInfo = detailModel?.episodeList?[indexPath.row] cell.isLoop = false } return oldCell } func sp_playerListViewController(_ viewController: SPPlayerListViewController, _ collectionView: UICollectionView, numberOfItemsInSection section: Int, oldNumber: Int) -> Int { return detailModel?.episodeList?.count ?? 0 } func sp_playerListViewController(_ viewController: SPPlayerListViewController, didChangeIndexPathForVisible indexPath: IndexPath) { self.episodeView?.currentIndex = indexPath.row } } extension SPPlayerDetailViewController { private func requestDetailData() { guard let shortPlayId = self.shortPlayId else { return } SPVideoAPI.requestVideoDetail(videoId: videoId, shortPlayId: shortPlayId) { [weak self] model in guard let self = self else { return } if let model = model { self.detailModel = model self.reloadData() self.play() } } } }