Merge branch 'master' of http://git.zhenbs.com:9999/3-group-ios/Music_Player3
# Conflicts: # MusicPlayer/MP/Common/DataBase/MusicPlayer.xcdatamodeld/MusicPlayer.xcdatamodel/contents
This commit is contained in:
commit
44ff31902a
@ -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}
|
||||||
|
|||||||
@ -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"/>
|
||||||
|
|||||||
@ -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) {
|
||||||
//发送post请求,并将结果转为RootBrowses
|
//发送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}
|
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
|
||||||
|
if isAvailable == true {
|
||||||
|
self.requestPostAlbumOrList(url, parameters: parameters) { results in
|
||||||
comletion(results)
|
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) {
|
||||||
//发送post请求,并将结果转为RootBrowses
|
//发送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}
|
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
|
||||||
|
if isAvailable == true {
|
||||||
|
self.requestPostArtist(url, parameters: parameters) { result in
|
||||||
comletion(result)
|
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) {
|
||||||
//发送post请求,并将结果转为RootBrowses
|
//发送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}
|
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
|
||||||
|
if isAvailable == true {
|
||||||
|
self.requestPostArtistMore(url, parameters: parameters) { result in
|
||||||
comletion(result)
|
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) {
|
||||||
//发送post请求,并将结果转为RootBrowses
|
//发送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}
|
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
|
||||||
|
if isAvailable == true {
|
||||||
|
self.requestPostArtistMoreContinuation(url, parameters: parameters) { result in
|
||||||
comletion(result)
|
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) {
|
||||||
//发送post请求,并将结果转为RootBrowses
|
//发送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}
|
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 {
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
requestStatusToYouTube { isAvailable in
|
||||||
|
if isAvailable == true {
|
||||||
//发送next列表请求
|
//发送next列表请求
|
||||||
requestPostNextList(url, parameters: parameters) { listSongs in
|
self.requestPostNextList(url, parameters: parameters) { listSongs in
|
||||||
//成功拿到列表所有歌曲(内容尚不完善)
|
//成功拿到列表所有歌曲(内容尚不完善)
|
||||||
completion(listSongs)
|
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 {
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
requestStatusToYouTube { isAvailable in
|
||||||
|
if isAvailable == true {
|
||||||
//发送next列表歌词/相关内容请求
|
//发送next列表歌词/相关内容请求
|
||||||
requestPostNextLyricsAndRelated(url, parameters: parameters) { result in
|
self.requestPostNextLyricsAndRelated(url, parameters: parameters) { result in
|
||||||
completion(result)
|
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
|
||||||
|
if isAvailable == true {
|
||||||
|
self.requestPostPlayer(url, parameters: parameters){ resourceUlrs, coverUrls in
|
||||||
completion(resourceUlrs, coverUrls)
|
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
|
||||||
|
if isAvailable == true {
|
||||||
|
self.requestPostLyric(url, parameters: parameters) { lyrics in
|
||||||
completion(lyrics)
|
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
|
||||||
|
if isAvailable == true {
|
||||||
|
self.requestPostRecommend(url, parameters: parameters) { results in
|
||||||
completion(results)
|
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
|
||||||
|
if isAvailable == true {
|
||||||
|
self.requestPostSearchSuggestions(url, parameters: parameters) { result in
|
||||||
completion(result)
|
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
|
||||||
|
if isAvailable == true {
|
||||||
|
self.requestPostSearchPreviewResults(url, parameters: parameters) { result in
|
||||||
completion(result)
|
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
|
||||||
|
if isAvailable == true {
|
||||||
|
self.requestPostSearchTypeResults(url, parameters: parameters) { result in
|
||||||
completion(result)
|
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
|
||||||
|
if isAvailable == true {
|
||||||
|
self.requestPostSearchTypeContinuation(url, parameters: parameters) { result in
|
||||||
completion(result)
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -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监听
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
import UIKit
|
import UIKit
|
||||||
///b面音乐数据管理load
|
///b面音乐数据管理load
|
||||||
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() {
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user