diff --git a/MusicPlayer/AppDelegate.swift b/MusicPlayer/AppDelegate.swift index 00a9cbe..4b6f27d 100644 --- a/MusicPlayer/AppDelegate.swift +++ b/MusicPlayer/AppDelegate.swift @@ -8,6 +8,7 @@ import UIKit import CoreData import AVFoundation +import Alamofire @_exported import IQKeyboardManagerSwift @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { @@ -81,7 +82,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { window?.rootViewController = tabBarVC window?.makeKeyAndVisible() } - // MARK: - Core Data stack lazy var persistentContainer: NSPersistentContainer = { /* diff --git a/MusicPlayer/MP/Common/Tool(工具封装)/MP_NetWorkManager.swift b/MusicPlayer/MP/Common/Tool(工具封装)/MP_NetWorkManager.swift index 4ef19cd..2108886 100644 --- a/MusicPlayer/MP/Common/Tool(工具封装)/MP_NetWorkManager.swift +++ b/MusicPlayer/MP/Common/Tool(工具封装)/MP_NetWorkManager.swift @@ -37,30 +37,30 @@ class MP_NetWorkManager: NSObject { private let search = "/search" ///YouTuBe资源键值 private let youTubeKeys:[String] = ["MUSIC_VIDEO_TYPE_ATV","MUSIC_VIDEO_TYPE_OMV","MUSIC_PAGE_TYPE_ALBUM","MUSIC_PAGE_TYPE_ARTIST","MUSIC_PAGE_TYPE_PLAYLIST","MUSIC_PAGE_TYPE_TRACK_LYRICS","MUSIC_PAGE_TYPE_TRACK_RELATED"] - ///当前网络状态 + //网络状态 enum NetWorkStatus: String { case notReachable = "网络不可用" case unknown = "网络未知" case reachable = "网络可用" } - private var netWorkStatu:NetWorkStatus = .reachable{ + ///网络监听器 + private let reachabilityManager:NetworkReachabilityManager = NetworkReachabilityManager(host: "https://music.youtube.com/")! + ///当前网络状态 + var netWorkStatu:NetWorkStatus!{ willSet{ - DispatchQueue.main.async { - [weak self] in - guard let self = self else {return} - //旧值为网络可用,新值为网络不可用,为断网第一时间,发出通知告知播放器 - if netWorkStatu == .reachable, newValue == .notReachable { - print("网络不可用") - NotificationCenter.notificationKey.post(notificationName: .net_switch_notReachable) - } - //旧值为网络不可用,新值为网络可用,为网络回复第一时间,发出通知告知播放器 - if netWorkStatu == .notReachable, newValue == .reachable { - print("网络可用") - NotificationCenter.notificationKey.post(notificationName: .net_switch_reachable) - } + //旧值为网络可用,新值为网络不可用,为断网第一时间,发出通知告知播放器 + if netWorkStatu == .reachable, newValue == .notReachable { + print("网络不可用") + NotificationCenter.notificationKey.post(notificationName: .net_switch_notReachable) + } + //旧值为网络不可用,新值为网络可用,为网络回复第一时间,发出通知告知播放器 + if (netWorkStatu == .notReachable), newValue == .reachable { + print("网络可用") + NotificationCenter.notificationKey.post(notificationName: .net_switch_reachable) } } } + //MARK: - 固定参数 //访问数据(首次首页预览时获得) private var visitorData:String? @@ -158,10 +158,8 @@ class MP_NetWorkManager: NSObject { } ///网络请求检测 func requestStatusToYouTube() { - //设置一个节点 - let reachabilityManager = NetworkReachabilityManager(host: "https://music.youtube.com/") //通过ping节点确认是否能执行网络请求 - reachabilityManager?.startListening(onQueue: .main, onUpdatePerforming: { [weak self] status in + reachabilityManager.startListening(onQueue: .main, onUpdatePerforming: { [weak self] status in guard let self = self else {return} switch status { case .unknown://未知状况 @@ -173,7 +171,6 @@ class MP_NetWorkManager: NSObject { } }) } - } //MARK: - API请求 extension MP_NetWorkManager { diff --git a/MusicPlayer/MP/Common/Tool(工具封装)/MP_PlayerManager.swift b/MusicPlayer/MP/Common/Tool(工具封装)/MP_PlayerManager.swift index bd29342..ebafe98 100644 --- a/MusicPlayer/MP/Common/Tool(工具封装)/MP_PlayerManager.swift +++ b/MusicPlayer/MP/Common/Tool(工具封装)/MP_PlayerManager.swift @@ -171,10 +171,11 @@ class MP_PlayerManager:NSObject{ ///网络状态恢复正常 @objc private func netWorkReachableAction(_ sender:Notification) { //监听到网络状态恢复,检索当前播放器是否正在播放 - if loadPlayer.currentVideo != nil { + if loadPlayer?.currentVideo != nil { //有音乐播放,获取当前播放进度 let currentTime = loadPlayer.currentVideo!.resourcePlayerItem.currentTime() //手动调整播放时间点,以此重启播放器缓存 + player.seek(to: currentTime) player.play() playState = .Playing } @@ -225,7 +226,6 @@ class MP_PlayerManager:NSObject{ if let playbackLikelyToKeepUp = change?[.newKey] as? Bool, playbackLikelyToKeepUp == true { if playState != .Playing { //还未播放当前音乐,启动播放 - print("播放音乐-\(loadPlayer.currentVideo?.title ?? "")") player.play() playState = .Playing //执行开始播放闭包 diff --git a/MusicPlayer/MP/MPPositive/ViewControllers/Player(播放器)/MPPositive_PlayerViewController.swift b/MusicPlayer/MP/MPPositive/ViewControllers/Player(播放器)/MPPositive_PlayerViewController.swift index e7442b9..d90f804 100644 --- a/MusicPlayer/MP/MPPositive/ViewControllers/Player(播放器)/MPPositive_PlayerViewController.swift +++ b/MusicPlayer/MP/MPPositive/ViewControllers/Player(播放器)/MPPositive_PlayerViewController.swift @@ -307,7 +307,7 @@ 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?.isEmpty == true ? "No Lyrics":MP_PlayerManager.shared.loadPlayer.currentVideo?.lyrics coverView.loadBtn.isSelected = MP_PlayerManager.shared.loadPlayer.currentVideo?.isDlownd ?? false coverView.collectionSongBtn.isSelected = MP_PlayerManager.shared.loadPlayer.currentVideo?.isCollection ?? false } diff --git a/MusicPlayer/MP/MPPositive/Views/Player/MPPositive_PlayerCoverView.swift b/MusicPlayer/MP/MPPositive/Views/Player/MPPositive_PlayerCoverView.swift index 49a98dd..42b9ca2 100644 --- a/MusicPlayer/MP/MPPositive/Views/Player/MPPositive_PlayerCoverView.swift +++ b/MusicPlayer/MP/MPPositive/Views/Player/MPPositive_PlayerCoverView.swift @@ -156,11 +156,19 @@ class MPPositive_PlayerCoverView: UIView { } //网络不可用时触发 @objc private func netWorkNotReachableAction(_ sender:Notification) { - maskNotReachableView.isHidden = false + DispatchQueue.main.async { + [weak self] in + guard let self = self else {return} + maskNotReachableView.isHidden = false + } } //网络可用时触发 @objc private func netWorkReachableAction(_ sender:Notification) { - maskNotReachableView.isHidden = true + DispatchQueue.main.async { + [weak self] in + guard let self = self else {return} + maskNotReachableView.isHidden = true + } } //调整音乐进度