Music_Player3/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_CenterViewController.swift
2024-08-15 15:50:48 +08:00

244 lines
9.9 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// CenterViewController.swift
// MusicPlayer
//
// Created by Mr.Zhou on 2024/3/27.
//
import UIKit
///
class MPSideA_CenterViewController: MPSideA_BaseViewController {
@IBOutlet weak var setBtn: UIButton!
@IBOutlet weak var libraryLabel: UILabel!{
didSet{
libraryLabel.text = NSLocalizedString("Library", comment: "曲库")
}
}
private lazy var tableView:UITableView = {
let tableView = UITableView(frame: .init(x: 0, y: 0, width: screen_Width, height: screen_Height), style: .plain)
if #available(iOS 15.0, *) {
tableView.sectionHeaderTopPadding = 0
}
tableView.backgroundColor = .clear
tableView.separatorStyle = .none
tableView.estimatedRowHeight = 200
tableView.rowHeight = UITableView.automaticDimension
tableView.dataSource = self
tableView.delegate = self
tableView.register(UINib(nibName: CenterTableViewCellID, bundle: nil), forCellReuseIdentifier: CenterTableViewCellID)
tableView.contentInset = .init(top: 27*width, left: 0, bottom: 100*width, right: 0)
return tableView
}()
///广View
fileprivate lazy var adContainerView:UIView = {
let adContainerView:UIView = .init(frame: .init(x: 0, y: 0, width: screen_Width, height: 300*width))
adContainerView.backgroundColor = .clear
return adContainerView
}()
@IBOutlet weak var noticeView: UIView!
@IBOutlet weak var addBtn: UIButton!
private let CenterTableViewCellID = "MPSideA_CenterTableViewCell"
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .init(hex: "#000000")
//
nullMusicAction = {
[weak self] in
//
self?.reload()
}
view.addSubview(adContainerView)
adContainerView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(setBtn.snp.bottom)
make.height.equalTo(0)
}
view.addSubview(tableView)
tableView.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview()
make.top.equalTo(adContainerView.snp.bottom).offset(10*width)
}
MP_AdMobManager.shared.configureLibraryNativeAd(rootController: self)
MP_AdMobManager.shared.loadLibraryNativeAd()
MP_AdMobManager.shared.layoutLibraryNativeAd(in: adContainerView, index: 0)
MP_AdMobManager.shared.onLibraryNativeAdBlock = {
[weak adContainerView] in
guard let adContainerView = adContainerView else {return}
MP_AdMobManager.shared.layoutLibraryNativeAd(in: adContainerView, index: 0)
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
NotificationCenter.notificationKey.add(observer: self, selector: #selector(successfullCreateAction), notificationName: .sideA_creat_music)
NotificationCenter.notificationKey.add(observer: self, selector: #selector(fileMissAction(_ :)), notificationName: .sideA_null_music)
reload()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
NotificationCenter.default.removeObserver(self)
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
view.bringSubviewToFront(addBtn)
view.bringSubviewToFront(noticeView)
}
//
private func reload() {
MPSideA_LoadDataMusic.shared.reloadListData{
[weak self] in
guard let self = self else {return}
//
if MPSideA_LoadDataMusic.shared.userlistMusics.count == 0 {
//
noticeView.isHidden = false
}else {
noticeView.isHidden = true
}
tableView.showMessage(MPSideA_LoadDataMusic.shared.userlistMusics.count)
tableView.reloadData()
}
}
//
@objc private func successfullCreateAction() {
DispatchQueue.main.async {
[weak self] in
self?.reload()
}
}
//
@IBAction func setActionClick(_ sender: UIButton) {
let setVC = MPSideA_SettingViewController()
setVC.setblock = {
[weak self] in
DispatchQueue.main.asyncAfter(wallDeadline: .now() + 0.3) {
[weak self] in
MP_AdMobManager.shared.showLoadInterstitialAdIfAvailable(completion: nil)
}
}
navigationController?.pushViewController(setVC, animated: true)
}
///
@IBAction func addClick(_ sender: UIButton) {
MPSideA_ModalType = .Choice
let addVC = MPSideA_AddViewController()
addVC.modalPresentationStyle = .custom
addVC.transitioningDelegate = self
present(addVC, animated: true)
}
}
//MARK: - tableView
extension MPSideA_CenterViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return MPSideA_LoadDataMusic.shared.userlistMusics.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: CenterTableViewCellID, for: indexPath) as! MPSideA_CenterTableViewCell
cell.musicView = MPSideA_LoadDataMusic.shared.userlistMusics[indexPath.row]
cell.moreBlock = {
[weak self] (sender) in
self?.moreAction(sender, music: MPSideA_LoadDataMusic.shared.userlistMusics[indexPath.row])
}
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let music = MPSideA_LoadDataMusic.shared.userlistMusics[indexPath.row].music
//
guard MPSideA_MediaCenterManager.shared.getMusic()?.identifier != music.identifier else {
//
switch MPSideA_MediaCenterManager.shared.getPlayerState() {
case .Null://
MPSideA_MediaCenterManager.shared.playerStart(music, actionType: .Normal)
case .Playing://
break
case .Pause://
MPSideA_MediaCenterManager.shared.playerResume()
}
reload()
return
}
//
MPSideA_MediaCenterManager.shared.playerStart(music, actionType: .Normal)
reload()
}
}
//MARK: - Popover
extension MPSideA_CenterViewController: UIPopoverPresentationControllerDelegate, UIViewControllerTransitioningDelegate {
//
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
return .none
}
//
private func moreAction(_ sender:UIButton, music:MPSideA_MusicViewModel) {
//popover
let moreVC = MPSideA_MoreViewController()
//moreVC
moreVC.preferredContentSize = .init(width: 130*width, height: 65*width)
moreVC.modalPresentationStyle = .popover
moreVC.renameBlock = {
[weak self] in
self?.renameAction(music)
}
moreVC.deleteBlock = {
[weak self] in
self?.deleteAction(music)
}
let popoverVC = moreVC.popoverPresentationController
popoverVC?.delegate = self
//
popoverVC?.sourceView = sender
popoverVC?.backgroundColor = .init(hex: "#434343")
//
popoverVC?.permittedArrowDirections = .right
present(moreVC, animated: true)
}
//
private func renameAction(_ music:MPSideA_MusicViewModel) {
MPSideA_ModalType = .Rename
let renameVC = MPSideA_RenameViewController()
renameVC.renameBlock = {
[weak self] (name) in
music.music.title = name
MPSideA_MusicModel.save()
//
if music.music.identifier == MPSideA_MediaCenterManager.shared.getMusic()?.identifier {
//
MPSideA_MediaCenterManager.shared.setMusic(music.music)
NotificationCenter.notificationKey.post(notificationName: .sideA_rename_music)
}
//
self?.reload()
}
renameVC.transitioningDelegate = self
renameVC.modalPresentationStyle = .custom
present(renameVC, animated: true)
}
//
private func deleteAction(_ music:MPSideA_MusicViewModel) {
MPSideA_ModalType = .Delete
let deleteVC = MPSideA_DeleteViewController()
deleteVC.deleteBlock = {
[weak self] in
//
if music.music.identifier == MPSideA_MediaCenterManager.shared.getMusic()?.identifier {
MPSideA_MediaCenterManager.shared.setMusic(nil)
//
MPSideA_MediaCenterManager.shared.playerStop()
//
NotificationCenter.notificationKey.post(notificationName: .sideA_close_show)
}
MPSideA_MusicModel.delete(music.music)
//
self?.reload()
}
deleteVC.transitioningDelegate = self
deleteVC.modalPresentationStyle = .custom
present(deleteVC, animated: true)
}
func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
return MPSideA_PresentationController(presentedViewController: presented, presenting: presenting)
}
}