// // MPPositive_MoreOperationsViewController.swift // MusicPlayer // // Created by Mr.Zhou on 2024/5/29. // import UIKit import Kingfisher ///更多操作 class MPPositive_MoreSongOperationsViewController: UIViewController { //下载进度条View private var loadView = CircularProgressView() //小角标图片 private lazy var indictorImageView:UIImageView = .init(image: .init(named: "Player_Indictor'logo")) //展示ICON private lazy var iconImageView:UIImageView = { let imageView:UIImageView = .init() imageView.contentMode = .scaleAspectFill imageView.layer.masksToBounds = true imageView.layer.cornerRadius = 10*width return imageView }() //标题Label private lazy var titleLabel:UILabel = createLabel("Title", font: .systemFont(ofSize: 14*width, weight: .regular), textColor: .white, textAlignment: .left) //副标题 private lazy var subtitleLabel:UILabel = createLabel("Title", font: .systemFont(ofSize: 12*width, weight: .regular), textColor: .init(hex: "#666666"), textAlignment: .left) //是否收藏 private lazy var collectionBtn:UIButton = { let btn = UIButton() btn.setImage(UIImage(named: "Artist_Collection'logo"), for: .normal) btn.setImage(UIImage(named: "Artist_Collectioned'logo"), for: .selected) btn.setBackgroundImage(UIImage(named: "Artist_Collection'bg"), for: .normal) btn.setBackgroundImage(UIImage(named: "Artist_Collectioned'bg"), for: .selected) btn.addTarget(self, action: #selector(collectionClick(_ :)), for: .touchUpInside) return btn }() //分割线 private lazy var lineView:UIView = { let lineView:UIView = UIView() lineView.backgroundColor = .init(hex: "#444444") return lineView }() //展示tableView private lazy var tableView:UITableView = { let tableView = UITableView(frame: .init(x: 0, y: 0, width: screen_Width, height: screen_Height), style: .plain) tableView.backgroundColor = .clear tableView.separatorStyle = .none tableView.contentInset = .init(top: 0, left: 0, bottom: bottomPadding, right: 0) tableView.estimatedRowHeight = 200 tableView.rowHeight = UITableView.automaticDimension tableView.dataSource = self tableView.delegate = self tableView.register(MPPositive_MoreOperationDownLoadTableViewCell.self, forCellReuseIdentifier: MPPositive_MoreOperationTableViewCellID) return tableView }() private let MPPositive_MoreOperationTableViewCellID = "MPPositive_MoreOperationTableViewCell" private var song:MPPositive_SongItemModel!{ didSet{ iconImageView.kf.setImage(with: URL(string: song.reviewUrls?.last ?? ""), placeholder: placeholderImage) titleLabel.text = song.title subtitleLabel.text = song.shortBylineText //判断该单曲是否收藏 collectionBtn.isSelected = MPPositive_CollectionSongModel.fetch(.init(format: "videoId == %@", song.videoId)).count != 0 //判断该单曲是否下载 isLoaded = MPPositive_DownloadItemModel.fetch(.init(format: "videoId == %@", song.videoId)).count != 0 } } private var isLoaded:Bool = false{ didSet{ DispatchQueue.main.async { [weak self] in self?.tableView.reloadData() } } } init(_ song:MPPositive_SongItemModel) { super.init(nibName: nil, bundle: nil) self.song = song } required init?(coder: NSCoder) { super.init(coder: coder) } override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .init(hex: "#282A2C") view.layer.masksToBounds = true view.layer.maskedCorners = [.layerMinXMinYCorner,.layerMinXMaxYCorner] view.layer.cornerRadius = 18*width configure() } private func configure() { view.addSubview(indictorImageView) indictorImageView.snp.makeConstraints { make in make.centerX.equalToSuperview() make.width.equalTo(29*width) make.height.equalTo(4*width) make.top.equalToSuperview().offset(8*width) } view.addSubview(iconImageView) iconImageView.snp.makeConstraints { make in make.width.height.equalTo(50*width) make.left.equalToSuperview().offset(18*width) make.top.equalToSuperview().offset(32*width) } view.addSubview(collectionBtn) collectionBtn.snp.makeConstraints { make in make.width.height.equalTo(32*width) make.centerY.equalTo(iconImageView) make.right.equalToSuperview().offset(-18*width) } view.addSubview(titleLabel) titleLabel.snp.makeConstraints { make in make.top.equalTo(iconImageView).offset(8*width) make.left.equalTo(iconImageView.snp.right).offset(12*width) make.right.equalTo(collectionBtn.snp.left).offset(-12*width) } view.addSubview(subtitleLabel) subtitleLabel.snp.makeConstraints { make in make.left.right.equalTo(titleLabel) make.bottom.equalTo(iconImageView).offset(-8*width) } view.addSubview(lineView) lineView.snp.makeConstraints { make in make.width.equalTo(339*width) make.height.equalTo(1*width) make.centerX.equalToSuperview() make.top.equalTo(iconImageView.snp.bottom).offset(15*width) } view.addSubview(tableView) tableView.snp.makeConstraints { make in make.top.equalTo(lineView.snp.bottom).offset(8*width) make.left.right.bottom.equalToSuperview() } } //是否收藏 @objc private func collectionClick(_ sender:UIButton) { if self.collectionBtn.isSelected == true{ self.collectionBtn.isSelected = false MPPositive_CollectionSongModel.fetch(.init(format: "videoId == %@", song.videoId)).forEach { item in if item.videoId == song.videoId { MPPositive_CollectionSongModel.delete(item) } } MPPositive_LoadCoreModel.shared.reloadCollectionSongViewModel(nil) }else{ self.collectionBtn.isSelected = true let item = MPPositive_CollectionSongModel.create() item.coverImage = URL(string: song.reviewUrls?.last ?? "") item.title = song.title item.subtitle = song.shortBylineText item.videoId = song.videoId item.lyricsID = song.lyricsID item.relatedID = song.relatedID MPPositive_CollectionSongModel.save() MPPositive_LoadCoreModel.shared.reloadCollectionSongViewModel(nil) } } } //MARK: - tableView extension MPPositive_MoreSongOperationsViewController:UITableViewDataSource, UITableViewDelegate { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 1 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: MPPositive_MoreOperationTableViewCellID, for: indexPath) as! MPPositive_MoreOperationDownLoadTableViewCell cell.title = isLoaded ? "Remove Download":"Add Download" return cell } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { if indexPath.row == 0 { if isLoaded { //移除下载 MPPositive_DownloadItemModel.fetch(.init(format: "videoId == %@", song.videoId)).forEach { item in if item.videoId == song.videoId { MPPositive_DownloadItemModel.delete(item) } } MPPositive_LoadCoreModel.shared.reloadLoadSongViewModel(nil) DownloadManager.shared.deleteFileDocuments(song.videoId) { [weak self] videoId in guard let self = self else {return} MP_HUD.progress("Loading...", delay: 0.5) { self.isLoaded = false MP_HUD.text("Removed", delay: 1.0, completion: nil) } } }else { //进行下载 } } } }