From e37d80fbd33c1ba8c675914bfd0a3d3183fc19ea Mon Sep 17 00:00:00 2001 From: "Mr.zhou" <1422157428@qq.com> Date: Tue, 21 May 2024 15:31:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E7=BD=91=E7=BB=9C=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E7=9A=84=E4=B8=80=E6=AC=A1=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/MP_LunchViewController.swift | 1 - .../MusicPlayer.xcdatamodel/contents | 2 +- .../Tool(工具封装)/MP_NetWorkManager.swift | 198 ++++++++++++++---- .../Tool(工具封装)/MP_PlayerManager.swift | 2 + .../MP/Common/Tool(工具封装)/MP_WebWork.swift | 2 + .../MPPositive_BrowseLoadViewModel.swift | 1 + .../MPPositive_HomeViewController.swift | 12 +- .../MPPositive_PlayerViewController.swift | 4 +- 8 files changed, 164 insertions(+), 58 deletions(-) diff --git a/MusicPlayer/MP/Common/Base(公用基类)/Controllers/MP_LunchViewController.swift b/MusicPlayer/MP/Common/Base(公用基类)/Controllers/MP_LunchViewController.swift index e51ed51..50f135f 100644 --- a/MusicPlayer/MP/Common/Base(公用基类)/Controllers/MP_LunchViewController.swift +++ b/MusicPlayer/MP/Common/Base(公用基类)/Controllers/MP_LunchViewController.swift @@ -66,7 +66,6 @@ class MP_LunchViewController: UIViewController { progressView.setProgress(value) } }else { - print("进度已满") // DispatchQueue.main.async { // [weak self] in // guard let self = self else {return} diff --git a/MusicPlayer/MP/Common/DataBase/MusicPlayer.xcdatamodeld/MusicPlayer.xcdatamodel/contents b/MusicPlayer/MP/Common/DataBase/MusicPlayer.xcdatamodeld/MusicPlayer.xcdatamodel/contents index 45fa55b..5a00158 100644 --- a/MusicPlayer/MP/Common/DataBase/MusicPlayer.xcdatamodeld/MusicPlayer.xcdatamodel/contents +++ b/MusicPlayer/MP/Common/DataBase/MusicPlayer.xcdatamodeld/MusicPlayer.xcdatamodel/contents @@ -1,6 +1,6 @@ - + diff --git a/MusicPlayer/MP/Common/Tool(工具封装)/MP_NetWorkManager.swift b/MusicPlayer/MP/Common/Tool(工具封装)/MP_NetWorkManager.swift index 1abf7bc..f1abbc0 100644 --- a/MusicPlayer/MP/Common/Tool(工具封装)/MP_NetWorkManager.swift +++ b/MusicPlayer/MP/Common/Tool(工具封装)/MP_NetWorkManager.swift @@ -17,6 +17,9 @@ typealias ListRequestResultBlock = (_ list:MPPositive_ListAlbumListViewModel) -> class MP_NetWorkManager: NSObject { //单例工具 static let shared = MP_NetWorkManager() + //MARK: - 网络请求会话 + ///会话实例 + private let MPSession = Alamofire.Session(interceptor: MP_CustomRetrier()) //MARK: - API接口 ///域名链接 private let header:String = "https://music.youtube.com" @@ -129,6 +132,25 @@ class MP_NetWorkManager: NSObject { let queue = DispatchQueue(label: "MPNetWorkManager") 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请求 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) { //发送post请求,并将结果转为RootBrowses - 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} - switch response.result { case .success(let value): if value.responseContext?.visitorData != nil { @@ -230,14 +255,18 @@ extension MP_NetWorkManager { ] ] ] - requestPostAlbumOrList(url, parameters: parameters) { results in - comletion(results) + requestStatusToYouTube { isAvailable in + if isAvailable == true { + self.requestPostAlbumOrList(url, parameters: parameters) { results in + comletion(results) + } + } } } //请求列表/专辑数据 private func requestPostAlbumOrList(_ url:URL, parameters:Parameters, comletion:@escaping (MPPositive_ListAlbumListViewModel) -> Void) { //发送post请求,并将结果转为RootBrowses - 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} switch response.result { case .success(let value): @@ -286,14 +315,18 @@ extension MP_NetWorkManager { ] ] ] - requestPostArtist(url, parameters: parameters) { result in - comletion(result) + requestStatusToYouTube { isAvailable in + if isAvailable == true { + self.requestPostArtist(url, parameters: parameters) { result in + comletion(result) + } + } } } //请求艺术家信息 private func requestPostArtist(_ url:URL, parameters:Parameters, comletion:@escaping (MPPositive_ArtistViewModel) -> Void) { //发送post请求,并将结果转为RootBrowses - 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} switch response.result { case .success(let value): @@ -341,14 +374,18 @@ extension MP_NetWorkManager { ] ] ] - requestPostArtistMore(url, parameters: parameters) { result in - comletion(result) + requestStatusToYouTube { isAvailable in + 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) { //发送post请求,并将结果转为RootBrowses - 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} switch response.result { case .success(let value): @@ -393,14 +430,18 @@ extension MP_NetWorkManager { ] ] ] - requestPostArtistMoreContinuation(url, parameters: parameters) { result in - comletion(result) + requestStatusToYouTube { isAvailable in + 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) { //发送post请求,并将结果转为RootBrowses - 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} switch response.result { case .success(let value): @@ -446,16 +487,20 @@ extension MP_NetWorkManager { ] ] ] - //发送next列表请求 - requestPostNextList(url, parameters: parameters) { listSongs in - //成功拿到列表所有歌曲(内容尚不完善) - completion(listSongs) + requestStatusToYouTube { isAvailable in + if isAvailable == true { + //发送next列表请求 + self.requestPostNextList(url, parameters: parameters) { listSongs in + //成功拿到列表所有歌曲(内容尚不完善) + completion(listSongs) + } + } } } //请求next列表 private func requestPostNextList(_ url:URL, parameters:Parameters, completion:@escaping (([MPPositive_SongItemModel]) -> Void)) { //发送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} switch response.result { case .success(let value): @@ -497,15 +542,19 @@ extension MP_NetWorkManager { ] ] ] - //发送next列表歌词/相关内容请求 - requestPostNextLyricsAndRelated(url, parameters: parameters) { result in - completion(result) + requestStatusToYouTube { isAvailable in + if isAvailable == true { + //发送next列表歌词/相关内容请求 + self.requestPostNextLyricsAndRelated(url, parameters: parameters) { result in + completion(result) + } + } } } //请求请求Next歌词/相关内容 private func requestPostNextLyricsAndRelated(_ url:URL, parameters:Parameters, completion:@escaping(((String?,String?)) -> Void)) { //发送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} switch response.result { case .success(let value): @@ -547,14 +596,18 @@ extension MP_NetWorkManager { ] ] ] - requestPostPlayer(url, parameters: parameters){ resourceUlrs, coverUrls in - completion(resourceUlrs, coverUrls) + requestStatusToYouTube { isAvailable in + 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)) { //发送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} switch response.result { @@ -598,14 +651,18 @@ extension MP_NetWorkManager { ] ] ] - requestPostLyric(url, parameters: parameters) { lyrics in - completion(lyrics) + requestStatusToYouTube { isAvailable in + if isAvailable == true { + self.requestPostLyric(url, parameters: parameters) { lyrics in + completion(lyrics) + } + } } } //请求歌词 private func requestPostLyric(_ url:URL, parameters:Parameters, completion:@escaping((String) -> Void)) { //发送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} switch response.result { case .success(let value): @@ -644,14 +701,18 @@ extension MP_NetWorkManager { ] ] ] - requestPostRecommend(url, parameters: parameters) { results in - completion(results) + requestStatusToYouTube { isAvailable in + if isAvailable == true { + self.requestPostRecommend(url, parameters: parameters) { results in + completion(results) + } + } } } ///请求相关内容 private func requestPostRecommend(_ url:URL, parameters:Parameters, completion: @escaping ([MPPositive_RecommendListViewModel]) -> Void) { //发送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} switch response.result { case .success(let value): @@ -696,14 +757,18 @@ extension MP_NetWorkManager { ] ] ] - requestPostSearchSuggestions(url, parameters: parameters) { result in - completion(result) + requestStatusToYouTube { isAvailable in + if isAvailable == true { + self.requestPostSearchSuggestions(url, parameters: parameters) { result in + completion(result) + } + } } } //请求搜索建议 private func requestPostSearchSuggestions(_ url:URL, parameters:Parameters, completion:@escaping(([[MPPositive_SearchSuggestionItemModel]]) -> Void)) { //发送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} switch response.result { case .success(let value): @@ -746,14 +811,18 @@ extension MP_NetWorkManager { ] ] ] - requestPostSearchPreviewResults(url, parameters: parameters) { result in - completion(result) + requestStatusToYouTube { isAvailable in + if isAvailable == true { + self.requestPostSearchPreviewResults(url, parameters: parameters) { result in + completion(result) + } + } } } //请求搜索预览结果 private func requestPostSearchPreviewResults(_ url:URL, parameters:Parameters, completion:@escaping (([MPPositive_SearchResultListViewModel]) -> Void)) { //发送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} switch response.result { case .success(let value): @@ -802,14 +871,18 @@ extension MP_NetWorkManager { ] ] ] - requestPostSearchTypeResults(url, parameters: parameters) { result in - completion(result) + requestStatusToYouTube { isAvailable in + 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) { //发送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} switch response.result { case .success(let value): @@ -858,14 +931,18 @@ extension MP_NetWorkManager { ] ] ] - requestPostSearchTypeContinuation(url, parameters: parameters) { result in - completion(result) + requestStatusToYouTube { isAvailable in + 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) { //发送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} switch response.result { case .success(let value): @@ -1674,4 +1751,33 @@ extension MP_NetWorkManager { 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 + } +} diff --git a/MusicPlayer/MP/Common/Tool(工具封装)/MP_PlayerManager.swift b/MusicPlayer/MP/Common/Tool(工具封装)/MP_PlayerManager.swift index 68ec22f..49764d7 100644 --- a/MusicPlayer/MP/Common/Tool(工具封装)/MP_PlayerManager.swift +++ b/MusicPlayer/MP/Common/Tool(工具封装)/MP_PlayerManager.swift @@ -406,6 +406,8 @@ class MP_PlayerManager:NSObject{ @objc private func userSwitchCurrentVideoAction(_ sender:Notification) { //将播放器状态调整未播放 playState = .Null + //暂停播放 + player.pause() //优先获取传递的值 if let video = sender.object as? MPPositive_SongViewModel { //切歌时移除KVO监听 diff --git a/MusicPlayer/MP/Common/Tool(工具封装)/MP_WebWork.swift b/MusicPlayer/MP/Common/Tool(工具封装)/MP_WebWork.swift index 9691b22..77ea236 100644 --- a/MusicPlayer/MP/Common/Tool(工具封装)/MP_WebWork.swift +++ b/MusicPlayer/MP/Common/Tool(工具封装)/MP_WebWork.swift @@ -57,6 +57,8 @@ class MP_WebWork:NSObject { //成功获得base.js地址,进行拼接更改 self.jsPath = self.jsPath + matchedString print("Current base.JavaScript path:\(self.jsPath)") + //开始获取首页内容 + MPPositive_BrowseLoadViewModel.shared.reloadBrowseLists() //切换地址 if let baseUrl = URL(string: self.jsPath) { let request = URLRequest(url: baseUrl) diff --git a/MusicPlayer/MP/MPPositive/Models/ViewModels/LoadViewModels/MPPositive_BrowseLoadViewModel.swift b/MusicPlayer/MP/MPPositive/Models/ViewModels/LoadViewModels/MPPositive_BrowseLoadViewModel.swift index 742bbd2..09d0be1 100644 --- a/MusicPlayer/MP/MPPositive/Models/ViewModels/LoadViewModels/MPPositive_BrowseLoadViewModel.swift +++ b/MusicPlayer/MP/MPPositive/Models/ViewModels/LoadViewModels/MPPositive_BrowseLoadViewModel.swift @@ -8,6 +8,7 @@ import UIKit ///b面音乐数据管理load class MPPositive_BrowseLoadViewModel: NSObject { + static let shared = MPPositive_BrowseLoadViewModel() ///预览模块数据组(通过网络请求刷新) var browseModuleLists:[MPPositive_BrowseModuleListViewModel] = [] override init() { diff --git a/MusicPlayer/MP/MPPositive/ViewControllers/Home(首页,各项列表页,艺术家页)/MPPositive_HomeViewController.swift b/MusicPlayer/MP/MPPositive/ViewControllers/Home(首页,各项列表页,艺术家页)/MPPositive_HomeViewController.swift index 6585c2f..26d6206 100644 --- a/MusicPlayer/MP/MPPositive/ViewControllers/Home(首页,各项列表页,艺术家页)/MPPositive_HomeViewController.swift +++ b/MusicPlayer/MP/MPPositive/ViewControllers/Home(首页,各项列表页,艺术家页)/MPPositive_HomeViewController.swift @@ -34,14 +34,11 @@ class MPPositive_HomeViewController: MPPositive_BaseViewController{ return tableView }() private let MPPositive_HomeShowTableViewCellID = "MPPositive_HomeShowTableViewCell" - private var loadViewModel:MPPositive_BrowseLoadViewModel! +// private var loadViewModel:MPPositive_BrowseLoadViewModel! override func viewDidLoad() { super.viewDidLoad() setTitle("Musicoo") confirgue() - loadViewModel = MPPositive_BrowseLoadViewModel() - //开始获取预览页数据 - loadViewModel.reloadBrowseLists() NotificationCenter.notificationKey.add(observer: self, selector: #selector(reloadAction(_ :)), notificationName: .positive_browses_reload) } deinit { @@ -85,14 +82,14 @@ class MPPositive_HomeViewController: MPPositive_BaseViewController{ //MARK: - tableView extension MPPositive_HomeViewController: UITableViewDataSource, UITableViewDelegate { func numberOfSections(in tableView: UITableView) -> Int { - return loadViewModel.browseModuleLists.count + return MPPositive_BrowseLoadViewModel.shared.browseModuleLists.count } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 1 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 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.requestNextBlock = { [weak self] (item) in @@ -107,7 +104,6 @@ extension MPPositive_HomeViewController: UITableViewDataSource, UITableViewDeleg let lodaViewModel = MPPositive_PlayerLoadViewModel(listSongs, currentVideoId: item.browseItem.videoId ?? "") lodaViewModel.improveData(item.browseItem.videoId ?? "") MP_PlayerManager.shared.loadPlayer = lodaViewModel - //判断是否 NotificationCenter.notificationKey.post(notificationName: .pup_player_vc) } case .list: @@ -122,7 +118,7 @@ extension MPPositive_HomeViewController: UITableViewDataSource, UITableViewDeleg [weak self] in guard let self = self else {return} let moreVC = MPPositive_MoreContentViewController() - moreVC.browseModuleList = loadViewModel.browseModuleLists[indexPath.section] + moreVC.browseModuleList = MPPositive_BrowseLoadViewModel.shared.browseModuleLists[indexPath.section] navigationController?.pushViewController(moreVC, animated: true) } return cell diff --git a/MusicPlayer/MP/MPPositive/ViewControllers/Player(播放器)/MPPositive_PlayerViewController.swift b/MusicPlayer/MP/MPPositive/ViewControllers/Player(播放器)/MPPositive_PlayerViewController.swift index 6324c6a..8298d5e 100644 --- a/MusicPlayer/MP/MPPositive/ViewControllers/Player(播放器)/MPPositive_PlayerViewController.swift +++ b/MusicPlayer/MP/MPPositive/ViewControllers/Player(播放器)/MPPositive_PlayerViewController.swift @@ -307,9 +307,9 @@ class MPPositive_PlayerViewController: MPPositive_BaseViewController, UIViewCont coverView.subtitleLabel.text = MP_PlayerManager.shared.loadPlayer.currentVideo?.subtitle lyricsView.titleLabel.text = MP_PlayerManager.shared.loadPlayer.currentVideo?.title lyricsView.subtitleLabel.text = MP_PlayerManager.shared.loadPlayer.currentVideo?.subtitle - lyricsView.lyricsLabel.text = MP_PlayerManager.shared.loadPlayer.currentVideo.lyrics ?? "No Lyrics" + lyricsView.lyricsLabel.text = MP_PlayerManager.shared.loadPlayer.currentVideo?.lyrics ?? "No Lyrics" coverView.loadBtn.isSelected = MP_PlayerManager.shared.loadPlayer.currentVideo?.isDlownd ?? false - coverView.collectionSongBtn.isSelected = MP_PlayerManager.shared.loadPlayer.currentVideo.isCollection ?? false + coverView.collectionSongBtn.isSelected = MP_PlayerManager.shared.loadPlayer.currentVideo?.isCollection ?? false } //MARK: - 通知 //播放器音乐刷新