200 lines
10 KiB
Swift
200 lines
10 KiB
Swift
//
|
||
// MPPositive_HomeSinglesTableViewCell.swift
|
||
// relax.offline.mp3.music
|
||
//
|
||
// Created by Mr.Zhou on 2024/7/4.
|
||
//
|
||
|
||
import UIKit
|
||
///首页单曲组展示Cell
|
||
class MPPositive_HomeSinglesTableViewCell: UITableViewCell, UIViewControllerTransitioningDelegate {
|
||
//标题
|
||
private lazy var titleLabel:UILabel = createLabel("Title", font: .systemFont(ofSize: 16*width, weight: .bold), textColor: .white, textAlignment: .left)
|
||
private lazy var layout:UICollectionViewFlowLayout = {
|
||
let layout = UICollectionViewFlowLayout()
|
||
layout.itemSize = .init(width: screen_Width*0.85, height: 70*width)
|
||
layout.sectionInset = .init(top: 10*width, left: 16*width, bottom: 0, right: 16*width)
|
||
layout.minimumLineSpacing = 0
|
||
layout.minimumInteritemSpacing = 0
|
||
layout.scrollDirection = .horizontal
|
||
return layout
|
||
}()
|
||
//collectionView
|
||
private lazy var collectionView:UICollectionView = {
|
||
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
|
||
collectionView.backgroundColor = .clear
|
||
collectionView.showsVerticalScrollIndicator = false
|
||
collectionView.showsHorizontalScrollIndicator = false
|
||
collectionView.dataSource = self
|
||
collectionView.delegate = self
|
||
collectionView.register(MPPositive_HomeSingleCollectionViewCell.self, forCellWithReuseIdentifier: MPPositive_HomeSingleCollectionViewCellID)
|
||
return collectionView
|
||
}()
|
||
private let MPPositive_HomeSingleCollectionViewCellID = "MPPositive_HomeSingleCollectionViewCell"
|
||
///预览模块
|
||
var browseViewModel:MPPositive_BrowseModuleListViewModel!{
|
||
didSet{
|
||
guard browseViewModel != nil else {return}
|
||
personlViewModel = nil
|
||
titleLabel.text = browseViewModel.title
|
||
collectionView.reloadData()
|
||
}
|
||
}
|
||
///个性化模块
|
||
var personlViewModel:MPPositive_PersonalListViewModel!{
|
||
didSet{
|
||
guard personlViewModel != nil else {return}
|
||
browseViewModel = nil
|
||
titleLabel.text = personlViewModel.title
|
||
collectionView.reloadData()
|
||
}
|
||
}
|
||
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
||
super.init(style: style, reuseIdentifier: reuseIdentifier)
|
||
confirgue()
|
||
}
|
||
|
||
required init?(coder: NSCoder) {
|
||
super.init(coder: coder)
|
||
}
|
||
override func awakeFromNib() {
|
||
super.awakeFromNib()
|
||
// Initialization code
|
||
}
|
||
|
||
|
||
override func setSelected(_ selected: Bool, animated: Bool) {
|
||
super.setSelected(selected, animated: animated)
|
||
|
||
// Configure the view for the selected state
|
||
}
|
||
//配置
|
||
private func confirgue() {
|
||
selectionStyle = .none
|
||
backgroundColor = .clear
|
||
contentView.backgroundColor = .clear
|
||
contentView.addSubview(titleLabel)
|
||
titleLabel.snp.makeConstraints { make in
|
||
make.left.equalToSuperview().offset(16*width)
|
||
make.top.equalToSuperview().offset(8*width)
|
||
make.right.equalToSuperview().offset(-16*width)
|
||
}
|
||
contentView.addSubview(collectionView)
|
||
collectionView.snp.makeConstraints { make in
|
||
make.top.equalTo(titleLabel.snp.bottom)
|
||
make.left.right.equalToSuperview()
|
||
make.bottom.equalToSuperview().offset(-20*width).priority(999)
|
||
}
|
||
}
|
||
//经过计算设置tableViewCell真实高度
|
||
override func systemLayoutSizeFitting(_ targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority) -> CGSize {
|
||
let size = super.systemLayoutSizeFitting(targetSize, withHorizontalFittingPriority: horizontalFittingPriority, verticalFittingPriority: verticalFittingPriority)
|
||
collectionView.layoutIfNeeded()
|
||
let height = layout.itemSize.height*3 + layout.sectionInset.top + 10
|
||
return CGSize(width: size.width, height: size.height + height)
|
||
}
|
||
}
|
||
//MARK: - collectionView
|
||
extension MPPositive_HomeSinglesTableViewCell:UICollectionViewDataSource, UICollectionViewDelegate {
|
||
func numberOfSections(in collectionView: UICollectionView) -> Int {
|
||
return 1
|
||
}
|
||
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
||
return browseViewModel != nil ? browseViewModel.items.count:(personlViewModel?.items.count ?? 0)
|
||
}
|
||
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: MPPositive_HomeSingleCollectionViewCellID, for: indexPath) as! MPPositive_HomeSingleCollectionViewCell
|
||
cell.itemViewModel = browseViewModel?.items[indexPath.row] ?? personlViewModel?.items[indexPath.row]
|
||
cell.moreBlock = {
|
||
[weak self] in
|
||
guard let self = self, let itemView = (self.browseViewModel?.items[indexPath.row] ?? self.personlViewModel?.items[indexPath.row]) else {return}
|
||
MPPositive_Debouncer.shared.call {
|
||
MPPositive_ModalType = .MoreOperations
|
||
let moreVC = MPPositive_MoreSongOperationsViewController(itemView)
|
||
moreVC.disMissBlock = {
|
||
DispatchQueue.main.async {
|
||
collectionView.reloadData()
|
||
}
|
||
}
|
||
moreVC.transitioningDelegate = self
|
||
moreVC.modalPresentationStyle = .custom
|
||
self.parentController()?.present(moreVC, animated: true)
|
||
}
|
||
}
|
||
cell.deleteBlock = {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
//点击删除下载
|
||
let alertController = UIAlertController(title: "Delete This Song".localizableString(), message: "Are you sure you want to delete the offline resources of this song?".localizableString(), preferredStyle: .alert)
|
||
let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel)
|
||
alertController.addAction(cancel)
|
||
let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in
|
||
guard let videoId = (self.browseViewModel?.items[indexPath.row].browseItem.videoId ?? self.personlViewModel?.items[indexPath.row].browseItem.videoId) else {return}
|
||
//确定删除
|
||
MP_DownloadManager.shared.deleteFileDocuments(videoId) { videoId in
|
||
MP_HUD.progress("Loading...".localizableString(), delay: 0.5) {
|
||
MP_HUD.text("Removed".localizableString(), delay: 1.0, completion: nil)
|
||
collectionView.reloadData()
|
||
}
|
||
}
|
||
}
|
||
alertController.addAction(sure)
|
||
self.parentController()?.present(alertController, animated: true)
|
||
}
|
||
cell.cancelBlock = {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
//点击取消下载
|
||
let alertController = UIAlertController(title: "Cancel Song Download Task".localizableString(), message: "Are you sure you want to cancel the download task of this song?".localizableString(), preferredStyle: .alert)
|
||
let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel)
|
||
alertController.addAction(cancel)
|
||
let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in
|
||
guard let videoId = (self.browseViewModel?.items[indexPath.row].browseItem.videoId ?? self.personlViewModel?.items[indexPath.row].browseItem.videoId) else {return}
|
||
//确定取消
|
||
MP_DownloadManager.shared.cancelDownloadTask(videoId) { videoId in
|
||
MP_HUD.text("Cancel".localizableString(), delay: 1.0, completion: nil)
|
||
collectionView.reloadData()
|
||
}
|
||
}
|
||
alertController.addAction(sure)
|
||
self.parentController()?.present(alertController, animated: true)
|
||
}
|
||
return cell
|
||
}
|
||
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
||
//单曲/视频跳转
|
||
MPPositive_Debouncer.shared.call {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
guard MP_NetWorkManager.shared.netWorkStatu == .reachable else {
|
||
playOfflineSongs()
|
||
return
|
||
}
|
||
guard let item = (self.browseViewModel?.items[indexPath.row] ?? self.personlViewModel?.items[indexPath.row]) else {
|
||
return
|
||
}
|
||
MP_AnalyticsManager.shared.home_b_module_clickAction(item.browseItem.pageType ?? "")
|
||
MP_AnalyticsManager.shared.song_clickAction("Home")
|
||
//优先清除数据
|
||
MP_PlayerManager.shared.loadPlayer = nil
|
||
//弹出播放器
|
||
NotificationCenter.notificationKey.post(notificationName: .pup_player_vc)
|
||
MP_AnalyticsManager.shared.player_b_impAction()
|
||
//触发next请求,优先获取列表全部单曲基础数据(不完善)
|
||
MP_NetWorkManager.shared.requestNextList(item.browseItem.playListId ?? "", videoId: item.browseItem.videoId ?? "", clickTrackingParams: item.browseItem.clickTrackingParams){ [weak self] listSongs in
|
||
guard let self = self else {return}
|
||
//回掉的数据并不完善,生成一个playerloadViewModel
|
||
let lodaViewModel = MPPositive_PlayerLoadViewModel(listSongs, currentVideoId: item.browseItem.videoId ?? "")
|
||
lodaViewModel.improveData(item.browseItem.videoId ?? "")
|
||
//更改播放器播放类型
|
||
MP_PlayerManager.shared.setPlayType(.normal)
|
||
MP_PlayerManager.shared.loadPlayer = lodaViewModel
|
||
MP_AnalyticsManager.shared.player_b_listAction()
|
||
}
|
||
}
|
||
}
|
||
func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
|
||
return MPPositive_PresentationController(presentedViewController: presented, presenting: presenting)
|
||
}
|
||
}
|