PlaylistViewController.swift 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. //
  2. // PlaylistViewController.swift
  3. // ColorfulWallpaper
  4. //
  5. // Created by ni on 2024/9/18.
  6. //
  7. import Combine
  8. import Foundation
  9. import TSVideoKit
  10. class PlaylistViewController: LWBGViewController, UITableViewDelegate {
  11. var viewModel: PlayListViewModel = .init()
  12. lazy var listView: UITableView = {
  13. let tabView = UITableView()
  14. tabView.dataSource = viewModel
  15. tabView.delegate = self
  16. tabView.separatorStyle = .none
  17. tabView.register(PlayListCell
  18. .self, forCellReuseIdentifier: "PlayListCell")
  19. tabView.register(PlayListAddCell.self, forCellReuseIdentifier: "PlayListAddCell")
  20. tabView.register(PlayListFavouriteCell.self, forCellReuseIdentifier: "PlayListFavouriteCell")
  21. tabView.backgroundColor = .clear
  22. tabView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 80, right: 0)
  23. return tabView
  24. }()
  25. private var canncellable: [AnyCancellable] = []
  26. override func viewDidLoad() {
  27. super.viewDidLoad()
  28. bgImageView.image = nil
  29. navigationController?.navigationBar.isHidden = true
  30. addNotifaction()
  31. }
  32. override func viewWillAppear(_ animated: Bool) {
  33. super.viewWillAppear(animated)
  34. PlayerManager.shared.miniBar.isHidden = false
  35. PlayerManager.shared.rootVc?.moveUpMiniBar()
  36. viewModel.requestData()
  37. }
  38. override func viewDidDisappear(_ animated: Bool) {
  39. super.viewDidDisappear(animated)
  40. }
  41. override func addNotifaction() {
  42. super.addNotifaction()
  43. viewModel.$playLists.receive(on: DispatchQueue.main).sink { _ in
  44. self.reloadListData()
  45. }.store(in: &canncellable)
  46. NotificationCenter.default.addObserver(self, selector: #selector(reloadData), name: .K_RefreshNotifaction, object: nil)
  47. NotificationCenter.default.addObserver(self, selector: #selector(reloadData), name: kDataChangedNotifactionName, object: nil)
  48. }
  49. @objc func reloadData() {
  50. viewModel.requestData()
  51. }
  52. func reloadListData() {
  53. listView.reloadData()
  54. }
  55. func newPlaylist() {
  56. let alertVC = UIAlertController(title: nil, message: "Playlist Name".localized(), preferredStyle: .alert)
  57. alertVC.addTextField { textField in
  58. textField.placeholder = "input name".localized()
  59. textField.font = UIFont.systemFont(ofSize: 16)
  60. }
  61. let ok = UIAlertAction(title: "OK".localized(), style: .default) { [weak self] _ in
  62. if let name = alertVC.textFields?.first?.text, !name.isEmpty {
  63. self?.viewModel.creatPlayList(name: name) { listid in
  64. if let id = listid {
  65. self?.didFinishedCreatedPlaylist(id: id)
  66. }
  67. }
  68. }
  69. }
  70. let cancel = UIAlertAction(title: "Cancel".localized(), style: .cancel)
  71. alertVC.addAction(cancel)
  72. alertVC.addAction(ok)
  73. present(alertVC, animated: true)
  74. }
  75. func didFinishedCreatedPlaylist(id: UUID) {
  76. }
  77. override func addChildren() {
  78. super.addChildren()
  79. view.addSubview(listView)
  80. }
  81. override func makeConstarints() {
  82. super.makeConstarints()
  83. listView.snp.makeConstraints { make in
  84. make.top.equalToSuperview()
  85. make.bottom.leading.trailing.equalToSuperview()
  86. }
  87. }
  88. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  89. if indexPath.section == 0 {
  90. newPlaylist()
  91. } else if indexPath.section == 1 {
  92. showLikeViewController()
  93. } else {
  94. if indexPath.row < self.viewModel.playLists.count {
  95. let list = self.viewModel.playLists[indexPath.row]
  96. let vModel: PlayListDetaiViewModel = .init()
  97. vModel.playlist = list
  98. vModel.listType = .playlist
  99. let vc = PlaylistDetailViewController(viewModel: vModel)
  100. vc.hidesBottomBarWhenPushed = true
  101. self.navigationController?.pushViewController(vc, animated: true)
  102. }
  103. }
  104. }
  105. deinit {
  106. NotificationCenter.default.removeObserver(self)
  107. canncellable.removeAll()
  108. }
  109. }