# Conflicts:
#	MusicPlayer/MP/Common/DataBase/MusicPlayer.xcdatamodeld/MusicPlayer.xcdatamodel/contents
This commit is contained in:
忆海16 2024-05-21 15:39:35 +08:00
commit 44ff31902a
7 changed files with 166 additions and 56 deletions

View File

@ -66,7 +66,6 @@ class MP_LunchViewController: UIViewController {
progressView.setProgress(value) progressView.setProgress(value)
} }
}else { }else {
print("进度已满")
// DispatchQueue.main.async { // DispatchQueue.main.async {
// [weak self] in // [weak self] in
// guard let self = self else {return} // guard let self = self else {return}

View File

@ -1,5 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<<<<<<< HEAD
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="22757" systemVersion="23E214" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier=""> <model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="22757" systemVersion="23E214" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="22757" systemVersion="23E224" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
<entity name="MPPositive_CollectionArtistModel" representedClassName="MPPositive_CollectionArtistModel" syncable="YES"> <entity name="MPPositive_CollectionArtistModel" representedClassName="MPPositive_CollectionArtistModel" syncable="YES">
<attribute name="artistId" optional="YES" attributeType="String"/> <attribute name="artistId" optional="YES" attributeType="String"/>
<attribute name="coverImage" optional="YES" attributeType="URI"/> <attribute name="coverImage" optional="YES" attributeType="URI"/>

View File

@ -17,6 +17,9 @@ typealias ListRequestResultBlock = (_ list:MPPositive_ListAlbumListViewModel) ->
class MP_NetWorkManager: NSObject { class MP_NetWorkManager: NSObject {
// //
static let shared = MP_NetWorkManager() static let shared = MP_NetWorkManager()
//MARK: -
///
private let MPSession = Alamofire.Session(interceptor: MP_CustomRetrier())
//MARK: - API //MARK: - API
/// ///
private let header:String = "https://music.youtube.com" private let header:String = "https://music.youtube.com"
@ -129,6 +132,25 @@ class MP_NetWorkManager: NSObject {
let queue = DispatchQueue(label: "MPNetWorkManager") let queue = DispatchQueue(label: "MPNetWorkManager")
monitor.start(queue: queue) monitor.start(queue: queue)
} }
///
private func requestStatusToYouTube(_ isAilable:@escaping(Bool) -> Void) {
//
let reachabilityManager = NetworkReachabilityManager(host: "https://music.youtube.com/")
//ping
reachabilityManager?.startListening(onUpdatePerforming: { status in
switch status {
case .unknown://
isAilable(false)
print("网络情况未知")
case .notReachable://
isAilable(false)
print("网络不可用")
case .reachable(.ethernetOrWiFi), .reachable(.cellular)://
//
isAilable(true)
}
})
}
} }
//MARK: - API //MARK: - API
extension MP_NetWorkManager { extension MP_NetWorkManager {
@ -167,16 +189,19 @@ extension MP_NetWorkManager {
] ]
] ]
] ]
requestPostHomeBrowse(url, parameters: parameters) requestStatusToYouTube { isAvailable in
if isAvailable == true {
self.requestPostHomeBrowse(url, parameters: parameters)
}
}
} }
} }
// //
private func requestPostHomeBrowse(_ url:URL, parameters:Parameters) { private func requestPostHomeBrowse(_ url:URL, parameters:Parameters) {
//postRootBrowses //postRootBrowses
AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonBrowses.self) { [weak self] (response) in MPSession.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonBrowses.self) { [weak self] (response) in
guard let self = self else {return} guard let self = self else {return}
switch response.result { switch response.result {
case .success(let value): case .success(let value):
if value.responseContext?.visitorData != nil { if value.responseContext?.visitorData != nil {
@ -230,14 +255,18 @@ extension MP_NetWorkManager {
] ]
] ]
] ]
requestPostAlbumOrList(url, parameters: parameters) { results in requestStatusToYouTube { isAvailable in
comletion(results) if isAvailable == true {
self.requestPostAlbumOrList(url, parameters: parameters) { results in
comletion(results)
}
}
} }
} }
/// ///
private func requestPostAlbumOrList(_ url:URL, parameters:Parameters, comletion:@escaping (MPPositive_ListAlbumListViewModel) -> Void) { private func requestPostAlbumOrList(_ url:URL, parameters:Parameters, comletion:@escaping (MPPositive_ListAlbumListViewModel) -> Void) {
//postRootBrowses //postRootBrowses
AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonListOrAlbum.self) { [weak self] (response) in MPSession.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonListOrAlbum.self) { [weak self] (response) in
guard let self = self else {return} guard let self = self else {return}
switch response.result { switch response.result {
case .success(let value): case .success(let value):
@ -286,14 +315,18 @@ extension MP_NetWorkManager {
] ]
] ]
] ]
requestPostArtist(url, parameters: parameters) { result in requestStatusToYouTube { isAvailable in
comletion(result) if isAvailable == true {
self.requestPostArtist(url, parameters: parameters) { result in
comletion(result)
}
}
} }
} }
// //
private func requestPostArtist(_ url:URL, parameters:Parameters, comletion:@escaping (MPPositive_ArtistViewModel) -> Void) { private func requestPostArtist(_ url:URL, parameters:Parameters, comletion:@escaping (MPPositive_ArtistViewModel) -> Void) {
//postRootBrowses //postRootBrowses
AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonArtist.self) { [weak self] (response) in MPSession.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonArtist.self) { [weak self] (response) in
guard let self = self else {return} guard let self = self else {return}
switch response.result { switch response.result {
case .success(let value): case .success(let value):
@ -341,14 +374,18 @@ extension MP_NetWorkManager {
] ]
] ]
] ]
requestPostArtistMore(url, parameters: parameters) { result in requestStatusToYouTube { isAvailable in
comletion(result) if isAvailable == true {
self.requestPostArtistMore(url, parameters: parameters) { result in
comletion(result)
}
}
} }
} }
/// ///
private func requestPostArtistMore(_ url:URL, parameters:Parameters, comletion:@escaping (([MPPositive_BrowseItemViewModel], String?, String?)) -> Void) { private func requestPostArtistMore(_ url:URL, parameters:Parameters, comletion:@escaping (([MPPositive_BrowseItemViewModel], String?, String?)) -> Void) {
//postRootBrowses //postRootBrowses
AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonArtistMore.self) { [weak self] (response) in MPSession.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonArtistMore.self) { [weak self] (response) in
guard let self = self else {return} guard let self = self else {return}
switch response.result { switch response.result {
case .success(let value): case .success(let value):
@ -393,14 +430,18 @@ extension MP_NetWorkManager {
] ]
] ]
] ]
requestPostArtistMoreContinuation(url, parameters: parameters) { result in requestStatusToYouTube { isAvailable in
comletion(result) if isAvailable == true {
self.requestPostArtistMoreContinuation(url, parameters: parameters) { result in
comletion(result)
}
}
} }
} }
/// ///
private func requestPostArtistMoreContinuation(_ url:URL, parameters:Parameters, comletion:@escaping (([MPPositive_BrowseItemViewModel], String?, String?)) -> Void) { private func requestPostArtistMoreContinuation(_ url:URL, parameters:Parameters, comletion:@escaping (([MPPositive_BrowseItemViewModel], String?, String?)) -> Void) {
//postRootBrowses //postRootBrowses
AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonArtistMore.self) { [weak self] (response) in MPSession.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonArtistMore.self) { [weak self] (response) in
guard let self = self else {return} guard let self = self else {return}
switch response.result { switch response.result {
case .success(let value): case .success(let value):
@ -446,16 +487,20 @@ extension MP_NetWorkManager {
] ]
] ]
] ]
//next requestStatusToYouTube { isAvailable in
requestPostNextList(url, parameters: parameters) { listSongs in if isAvailable == true {
// //next
completion(listSongs) self.requestPostNextList(url, parameters: parameters) { listSongs in
//
completion(listSongs)
}
}
} }
} }
//next //next
private func requestPostNextList(_ url:URL, parameters:Parameters, completion:@escaping (([MPPositive_SongItemModel]) -> Void)) { private func requestPostNextList(_ url:URL, parameters:Parameters, completion:@escaping (([MPPositive_SongItemModel]) -> Void)) {
//post //post
AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonNext.self) { [weak self] (response) in MPSession.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonNext.self) { [weak self] (response) in
guard let self = self else {return} guard let self = self else {return}
switch response.result { switch response.result {
case .success(let value): case .success(let value):
@ -497,15 +542,19 @@ extension MP_NetWorkManager {
] ]
] ]
] ]
//next/ requestStatusToYouTube { isAvailable in
requestPostNextLyricsAndRelated(url, parameters: parameters) { result in if isAvailable == true {
completion(result) //next/
self.requestPostNextLyricsAndRelated(url, parameters: parameters) { result in
completion(result)
}
}
} }
} }
//Next/ //Next/
private func requestPostNextLyricsAndRelated(_ url:URL, parameters:Parameters, completion:@escaping(((String?,String?)) -> Void)) { private func requestPostNextLyricsAndRelated(_ url:URL, parameters:Parameters, completion:@escaping(((String?,String?)) -> Void)) {
//post //post
AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonNext.self) { [weak self] (response) in MPSession.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonNext.self) { [weak self] (response) in
guard let self = self else {return} guard let self = self else {return}
switch response.result { switch response.result {
case .success(let value): case .success(let value):
@ -547,14 +596,18 @@ extension MP_NetWorkManager {
] ]
] ]
] ]
requestPostPlayer(url, parameters: parameters){ resourceUlrs, coverUrls in requestStatusToYouTube { isAvailable in
completion(resourceUlrs, coverUrls) if isAvailable == true {
self.requestPostPlayer(url, parameters: parameters){ resourceUlrs, coverUrls in
completion(resourceUlrs, coverUrls)
}
}
} }
} }
/// ///
private func requestPostPlayer(_ url:URL, parameters:Parameters, completion:@escaping((([String],[String]), [String]?) -> Void)) { private func requestPostPlayer(_ url:URL, parameters:Parameters, completion:@escaping((([String],[String]), [String]?) -> Void)) {
//post //post
AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonPlayer.self) { [weak self] (response) in MPSession.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonPlayer.self) { [weak self] (response) in
guard let self = self else {return} guard let self = self else {return}
switch response.result { switch response.result {
@ -598,14 +651,18 @@ extension MP_NetWorkManager {
] ]
] ]
] ]
requestPostLyric(url, parameters: parameters) { lyrics in requestStatusToYouTube { isAvailable in
completion(lyrics) if isAvailable == true {
self.requestPostLyric(url, parameters: parameters) { lyrics in
completion(lyrics)
}
}
} }
} }
// //
private func requestPostLyric(_ url:URL, parameters:Parameters, completion:@escaping((String) -> Void)) { private func requestPostLyric(_ url:URL, parameters:Parameters, completion:@escaping((String) -> Void)) {
//post //post
AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonLyrics.self) { [weak self] (response) in MPSession.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonLyrics.self) { [weak self] (response) in
guard let self = self else {return} guard let self = self else {return}
switch response.result { switch response.result {
case .success(let value): case .success(let value):
@ -644,14 +701,18 @@ extension MP_NetWorkManager {
] ]
] ]
] ]
requestPostRecommend(url, parameters: parameters) { results in requestStatusToYouTube { isAvailable in
completion(results) if isAvailable == true {
self.requestPostRecommend(url, parameters: parameters) { results in
completion(results)
}
}
} }
} }
/// ///
private func requestPostRecommend(_ url:URL, parameters:Parameters, completion: @escaping ([MPPositive_RecommendListViewModel]) -> Void) { private func requestPostRecommend(_ url:URL, parameters:Parameters, completion: @escaping ([MPPositive_RecommendListViewModel]) -> Void) {
//post //post
AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonRecommend.self) { [weak self] (response) in MPSession.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonRecommend.self) { [weak self] (response) in
guard let self = self else {return} guard let self = self else {return}
switch response.result { switch response.result {
case .success(let value): case .success(let value):
@ -696,14 +757,18 @@ extension MP_NetWorkManager {
] ]
] ]
] ]
requestPostSearchSuggestions(url, parameters: parameters) { result in requestStatusToYouTube { isAvailable in
completion(result) if isAvailable == true {
self.requestPostSearchSuggestions(url, parameters: parameters) { result in
completion(result)
}
}
} }
} }
// //
private func requestPostSearchSuggestions(_ url:URL, parameters:Parameters, completion:@escaping(([[MPPositive_SearchSuggestionItemModel]]) -> Void)) { private func requestPostSearchSuggestions(_ url:URL, parameters:Parameters, completion:@escaping(([[MPPositive_SearchSuggestionItemModel]]) -> Void)) {
//post //post
AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonSearchSuggestions.self) { [weak self] (response) in MPSession.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonSearchSuggestions.self) { [weak self] (response) in
guard let self = self else {return} guard let self = self else {return}
switch response.result { switch response.result {
case .success(let value): case .success(let value):
@ -746,14 +811,18 @@ extension MP_NetWorkManager {
] ]
] ]
] ]
requestPostSearchPreviewResults(url, parameters: parameters) { result in requestStatusToYouTube { isAvailable in
completion(result) if isAvailable == true {
self.requestPostSearchPreviewResults(url, parameters: parameters) { result in
completion(result)
}
}
} }
} }
// //
private func requestPostSearchPreviewResults(_ url:URL, parameters:Parameters, completion:@escaping (([MPPositive_SearchResultListViewModel]) -> Void)) { private func requestPostSearchPreviewResults(_ url:URL, parameters:Parameters, completion:@escaping (([MPPositive_SearchResultListViewModel]) -> Void)) {
//post //post
AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonSearchPreviewResults.self) { [weak self] (response) in MPSession.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonSearchPreviewResults.self) { [weak self] (response) in
guard let self = self else {return} guard let self = self else {return}
switch response.result { switch response.result {
case .success(let value): case .success(let value):
@ -802,14 +871,18 @@ extension MP_NetWorkManager {
] ]
] ]
] ]
requestPostSearchTypeResults(url, parameters: parameters) { result in requestStatusToYouTube { isAvailable in
completion(result) if isAvailable == true {
self.requestPostSearchTypeResults(url, parameters: parameters) { result in
completion(result)
}
}
} }
} }
// //
private func requestPostSearchTypeResults(_ url:URL, parameters:Parameters, completion:@escaping (([MPPositive_SearchResultItemViewModel], String?, String?))->Void) { private func requestPostSearchTypeResults(_ url:URL, parameters:Parameters, completion:@escaping (([MPPositive_SearchResultItemViewModel], String?, String?))->Void) {
//post //post
AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonSearchTypeResults.self) { [weak self] (response) in MPSession.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonSearchTypeResults.self) { [weak self] (response) in
guard let self = self else {return} guard let self = self else {return}
switch response.result { switch response.result {
case .success(let value): case .success(let value):
@ -858,14 +931,18 @@ extension MP_NetWorkManager {
] ]
] ]
] ]
requestPostSearchTypeContinuation(url, parameters: parameters) { result in requestStatusToYouTube { isAvailable in
completion(result) if isAvailable == true {
self.requestPostSearchTypeContinuation(url, parameters: parameters) { result in
completion(result)
}
}
} }
} }
// //
private func requestPostSearchTypeContinuation(_ url:URL, parameters:Parameters, completion:@escaping (([MPPositive_SearchResultItemViewModel], String?, String?))->Void) { private func requestPostSearchTypeContinuation(_ url:URL, parameters:Parameters, completion:@escaping (([MPPositive_SearchResultItemViewModel], String?, String?))->Void) {
//post //post
AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonSearchTypeContinuation.self) { [weak self] (response) in MPSession.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonSearchTypeContinuation.self) { [weak self] (response) in
guard let self = self else {return} guard let self = self else {return}
switch response.result { switch response.result {
case .success(let value): case .success(let value):
@ -1674,4 +1751,33 @@ extension MP_NetWorkManager {
return decodedString return decodedString
} }
} }
//MARK: -
///
class MP_CustomRetrier: RequestInterceptor {
//
private let maximumRetryCount = 3
//
private var retryCounts: [String: Int] = [:]
func retry(_ request: Alamofire.Request, for session: Alamofire.Session, dueTo error: any Error, completion: @escaping (Alamofire.RetryResult) -> Void) {
// id
let requestID = request.id
let currentRetryCount = retryCounts[requestID.uuidString] ?? 0
//
if currentRetryCount < maximumRetryCount, let response = request.task?.response as? HTTPURLResponse, response.statusCode == 503 {
//
retryCounts[requestID.uuidString] = currentRetryCount + 1
// 1
completion(.retryWithDelay(1))
print("请求\(requestID.uuidString)执行重复请求")
} else {
//
retryCounts[requestID.uuidString] = nil
completion(.doNotRetry)
}
}
//
func requestDidFinish(_ request: Request) {
let requestID = request.id
retryCounts[requestID.uuidString] = nil
}
}

View File

@ -406,6 +406,8 @@ class MP_PlayerManager:NSObject{
@objc private func userSwitchCurrentVideoAction(_ sender:Notification) { @objc private func userSwitchCurrentVideoAction(_ sender:Notification) {
// //
playState = .Null playState = .Null
//
player.pause()
// //
if let video = sender.object as? MPPositive_SongViewModel { if let video = sender.object as? MPPositive_SongViewModel {
//KVO //KVO

View File

@ -57,6 +57,8 @@ class MP_WebWork:NSObject {
//base.js //base.js
self.jsPath = self.jsPath + matchedString self.jsPath = self.jsPath + matchedString
print("Current base.JavaScript path:\(self.jsPath)") print("Current base.JavaScript path:\(self.jsPath)")
//
MPPositive_BrowseLoadViewModel.shared.reloadBrowseLists()
// //
if let baseUrl = URL(string: self.jsPath) { if let baseUrl = URL(string: self.jsPath) {
let request = URLRequest(url: baseUrl) let request = URLRequest(url: baseUrl)

View File

@ -8,6 +8,7 @@
import UIKit import UIKit
///bload ///bload
class MPPositive_BrowseLoadViewModel: NSObject { class MPPositive_BrowseLoadViewModel: NSObject {
static let shared = MPPositive_BrowseLoadViewModel()
///() ///()
var browseModuleLists:[MPPositive_BrowseModuleListViewModel] = [] var browseModuleLists:[MPPositive_BrowseModuleListViewModel] = []
override init() { override init() {

View File

@ -34,14 +34,11 @@ class MPPositive_HomeViewController: MPPositive_BaseViewController{
return tableView return tableView
}() }()
private let MPPositive_HomeShowTableViewCellID = "MPPositive_HomeShowTableViewCell" private let MPPositive_HomeShowTableViewCellID = "MPPositive_HomeShowTableViewCell"
private var loadViewModel:MPPositive_BrowseLoadViewModel! // private var loadViewModel:MPPositive_BrowseLoadViewModel!
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
setTitle("Musicoo") setTitle("Musicoo")
confirgue() confirgue()
loadViewModel = MPPositive_BrowseLoadViewModel()
//
loadViewModel.reloadBrowseLists()
NotificationCenter.notificationKey.add(observer: self, selector: #selector(reloadAction(_ :)), notificationName: .positive_browses_reload) NotificationCenter.notificationKey.add(observer: self, selector: #selector(reloadAction(_ :)), notificationName: .positive_browses_reload)
} }
deinit { deinit {
@ -85,14 +82,14 @@ class MPPositive_HomeViewController: MPPositive_BaseViewController{
//MARK: - tableView //MARK: - tableView
extension MPPositive_HomeViewController: UITableViewDataSource, UITableViewDelegate { extension MPPositive_HomeViewController: UITableViewDataSource, UITableViewDelegate {
func numberOfSections(in tableView: UITableView) -> Int { func numberOfSections(in tableView: UITableView) -> Int {
return loadViewModel.browseModuleLists.count return MPPositive_BrowseLoadViewModel.shared.browseModuleLists.count
} }
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1 return 1
} }
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: MPPositive_HomeShowTableViewCellID, for: indexPath) as! MPPositive_HomeShowTableViewCell let cell = tableView.dequeueReusableCell(withIdentifier: MPPositive_HomeShowTableViewCellID, for: indexPath) as! MPPositive_HomeShowTableViewCell
cell.browseViewModel = loadViewModel.browseModuleLists[indexPath.section] cell.browseViewModel = MPPositive_BrowseLoadViewModel.shared.browseModuleLists[indexPath.section]
cell.showType = .init(rawValue: (indexPath.section > 4 ? 4:indexPath.section))! cell.showType = .init(rawValue: (indexPath.section > 4 ? 4:indexPath.section))!
cell.requestNextBlock = { cell.requestNextBlock = {
[weak self] (item) in [weak self] (item) in
@ -107,7 +104,6 @@ extension MPPositive_HomeViewController: UITableViewDataSource, UITableViewDeleg
let lodaViewModel = MPPositive_PlayerLoadViewModel(listSongs, currentVideoId: item.browseItem.videoId ?? "") let lodaViewModel = MPPositive_PlayerLoadViewModel(listSongs, currentVideoId: item.browseItem.videoId ?? "")
lodaViewModel.improveData(item.browseItem.videoId ?? "") lodaViewModel.improveData(item.browseItem.videoId ?? "")
MP_PlayerManager.shared.loadPlayer = lodaViewModel MP_PlayerManager.shared.loadPlayer = lodaViewModel
//
NotificationCenter.notificationKey.post(notificationName: .pup_player_vc) NotificationCenter.notificationKey.post(notificationName: .pup_player_vc)
} }
case .list: case .list:
@ -122,7 +118,7 @@ extension MPPositive_HomeViewController: UITableViewDataSource, UITableViewDeleg
[weak self] in [weak self] in
guard let self = self else {return} guard let self = self else {return}
let moreVC = MPPositive_MoreContentViewController() let moreVC = MPPositive_MoreContentViewController()
moreVC.browseModuleList = loadViewModel.browseModuleLists[indexPath.section] moreVC.browseModuleList = MPPositive_BrowseLoadViewModel.shared.browseModuleLists[indexPath.section]
navigationController?.pushViewController(moreVC, animated: true) navigationController?.pushViewController(moreVC, animated: true)
} }
return cell return cell