1.2.4 资源方案优化
This commit is contained in:
parent
0456fbecf0
commit
9879c0385f
Binary file not shown.
@ -7,18 +7,18 @@
|
|||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleURLSchemes</key>
|
<key>CFBundleURLSchemes</key>
|
||||||
<array>
|
<array>
|
||||||
<string>fb820013496431805</string>
|
<string>fb515287044709010</string>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
<key>FacebookAppID</key>
|
<key>FacebookAppID</key>
|
||||||
<string>820013496431805</string>
|
<string>515287044709010</string>
|
||||||
<key>FacebookAutoLogAppEventsEnabled</key>
|
<key>FacebookAutoLogAppEventsEnabled</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>FacebookClientToken</key>
|
<key>FacebookClientToken</key>
|
||||||
<string>8e591aa271d43fdd3e7a778d59c85282</string>
|
<string>f7ec7d15be9315aee02f6deb37b52e15</string>
|
||||||
<key>FacebookDisplayName</key>
|
<key>FacebookDisplayName</key>
|
||||||
<string>Musiclax</string>
|
<string>HiMelody iOS</string>
|
||||||
<key>GADApplicationIdentifier</key>
|
<key>GADApplicationIdentifier</key>
|
||||||
<string>ca-app-pub-1371732277241593~3881310073</string>
|
<string>ca-app-pub-1371732277241593~3881310073</string>
|
||||||
<key>SKAdNetworkItems</key>
|
<key>SKAdNetworkItems</key>
|
||||||
|
|||||||
@ -16,7 +16,6 @@ extension UIDevice {
|
|||||||
guard let value = element.value as? Int8, value != 0 else { return identifier }
|
guard let value = element.value as? Int8, value != 0 else { return identifier }
|
||||||
return identifier + String(UnicodeScalar(UInt8(value)))
|
return identifier + String(UnicodeScalar(UInt8(value)))
|
||||||
}
|
}
|
||||||
|
|
||||||
return mapToDevice(identifier: identifier)
|
return mapToDevice(identifier: identifier)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -467,6 +467,8 @@ func saveLoadVideoItem(_ song:MPPositive_SongItemModel?, completion:(() -> Void)
|
|||||||
item?.playListID = song.playListID
|
item?.playListID = song.playListID
|
||||||
|
|
||||||
//同步生成一个独特的数据
|
//同步生成一个独特的数据
|
||||||
|
MPPositive_RecentlyModel.fetch(predicate: .init(format: "videoId == %@", (song.videoId ?? ""))) { results in
|
||||||
|
if results.isEmpty {
|
||||||
let recent = try? MPPositive_RecentlyModel.create()
|
let recent = try? MPPositive_RecentlyModel.create()
|
||||||
recent?.coverImage = song.coverUrls?.last
|
recent?.coverImage = song.coverUrls?.last
|
||||||
recent?.reviewImage = song.reviewUrls?.last
|
recent?.reviewImage = song.reviewUrls?.last
|
||||||
@ -480,7 +482,9 @@ func saveLoadVideoItem(_ song:MPPositive_SongItemModel?, completion:(() -> Void)
|
|||||||
recent?.artistID = song.artistID
|
recent?.artistID = song.artistID
|
||||||
recent?.albumID = song.albumID
|
recent?.albumID = song.albumID
|
||||||
recent?.playListID = song.playListID
|
recent?.playListID = song.playListID
|
||||||
|
MPPositive_RecentlyModel.save()
|
||||||
|
}
|
||||||
|
}
|
||||||
//保存下载数据
|
//保存下载数据
|
||||||
MPPositive_DownloadItemModel.save()
|
MPPositive_DownloadItemModel.save()
|
||||||
completion?()
|
completion?()
|
||||||
|
|||||||
@ -153,7 +153,8 @@ class MP_NetWorkManager: NSObject {
|
|||||||
///预览内容键值
|
///预览内容键值
|
||||||
private var browseContext:[String:Any]{
|
private var browseContext:[String:Any]{
|
||||||
let client = ["client":browseClient]
|
let client = ["client":browseClient]
|
||||||
return ["context":client]
|
return ["context":client,
|
||||||
|
"key":netKeyCode]
|
||||||
}
|
}
|
||||||
///预览访客键值
|
///预览访客键值
|
||||||
private var browseClient:[String:String]{
|
private var browseClient:[String:String]{
|
||||||
@ -187,7 +188,8 @@ class MP_NetWorkManager: NSObject {
|
|||||||
"gl": "US"
|
"gl": "US"
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"params": "CgIQBg"
|
"params": "CgIQBg",
|
||||||
|
"key":netKeyCode
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -380,7 +382,7 @@ extension MP_NetWorkManager {
|
|||||||
//拼接出browse路径
|
//拼接出browse路径
|
||||||
let path = header+point+browse
|
let path = header+point+browse
|
||||||
//设置url
|
//设置url
|
||||||
guard let pathUrl = URL(string: path), let url = try? URLEncoding.default.encode(URLRequest(url: pathUrl), with: ["key":netKeyCode]).url else {
|
guard let url = URL(string: path) else {
|
||||||
print("Url is Incorrect")
|
print("Url is Incorrect")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -393,7 +395,7 @@ extension MP_NetWorkManager {
|
|||||||
//更多请求
|
//更多请求
|
||||||
func requestContinuationBrowseDatas() {
|
func requestContinuationBrowseDatas() {
|
||||||
//当获取新值后,判断新值是否存在,存在则继续串行异步请求
|
//当获取新值后,判断新值是否存在,存在则继续串行异步请求
|
||||||
guard let continuation = continuationAndItct?.continuation, let itct = continuationAndItct?.itct, let pathUrl = URL(string: header+point+browse), let url = try? URLEncoding.default.encode(URLRequest(url: pathUrl), with: ["key":netKeyCode]).url else {
|
guard let continuation = continuationAndItct?.continuation, let itct = continuationAndItct?.itct, let url = URL(string: header+point+browse) else {
|
||||||
//首页基础数据已经获取完毕,不需要继续调用接口拉取数据
|
//首页基础数据已经获取完毕,不需要继续调用接口拉取数据
|
||||||
print("首页数据已经加载完毕")
|
print("首页数据已经加载完毕")
|
||||||
NotificationCenter.notificationKey.post(notificationName: .positive_browses_completion)
|
NotificationCenter.notificationKey.post(notificationName: .positive_browses_completion)
|
||||||
@ -451,7 +453,7 @@ extension MP_NetWorkManager {
|
|||||||
//拼接出browse路径
|
//拼接出browse路径
|
||||||
let path = header+point+browse
|
let path = header+point+browse
|
||||||
//设置url
|
//设置url
|
||||||
guard let pathUrl = URL(string: path), let url = try? URLEncoding.default.encode(URLRequest(url: pathUrl), with: ["key":netKeyCode]).url else {
|
guard let url = URL(string: path) else {
|
||||||
print("Url is Incorrect")
|
print("Url is Incorrect")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -489,7 +491,7 @@ extension MP_NetWorkManager {
|
|||||||
//拼接出browse路径
|
//拼接出browse路径
|
||||||
let path = header+point+browse
|
let path = header+point+browse
|
||||||
//设置url
|
//设置url
|
||||||
guard let pathUrl = URL(string: path), let url = try? URLEncoding.default.encode(URLRequest(url: pathUrl), with: ["key":netKeyCode]).url else {
|
guard let url = URL(string: path) else {
|
||||||
print("Url is Incorrect")
|
print("Url is Incorrect")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -524,7 +526,7 @@ extension MP_NetWorkManager {
|
|||||||
//拼接出browse路径
|
//拼接出browse路径
|
||||||
let path = header+point+browse
|
let path = header+point+browse
|
||||||
//设置url
|
//设置url
|
||||||
guard let pathUrl = URL(string: path), let url = try? URLEncoding.default.encode(URLRequest(url: pathUrl), with: ["key":netKeyCode]).url else {
|
guard let url = URL(string: path) else {
|
||||||
print("Url is Incorrect")
|
print("Url is Incorrect")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -573,7 +575,7 @@ extension MP_NetWorkManager {
|
|||||||
//拼接出browse路径
|
//拼接出browse路径
|
||||||
let path = header+point+browse
|
let path = header+point+browse
|
||||||
//设置url
|
//设置url
|
||||||
guard let pathUrl = URL(string: path), let url = try? URLEncoding.default.encode(URLRequest(url: pathUrl), with: ["key":netKeyCode]).url else {
|
guard let url = URL(string: path) else {
|
||||||
print("Url is Incorrect")
|
print("Url is Incorrect")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -612,7 +614,7 @@ extension MP_NetWorkManager {
|
|||||||
//拼接出browse路径
|
//拼接出browse路径
|
||||||
let path = header+point+browse
|
let path = header+point+browse
|
||||||
//设置url
|
//设置url
|
||||||
guard let pathUrl = URL(string: path), let url = try? URLEncoding.default.encode(URLRequest(url: pathUrl), with: ["key":netKeyCode]).url else {
|
guard let url = URL(string: path) else {
|
||||||
print("Url is Incorrect")
|
print("Url is Incorrect")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -648,7 +650,7 @@ extension MP_NetWorkManager {
|
|||||||
//拼接出browse路径
|
//拼接出browse路径
|
||||||
let path = header+point+browse
|
let path = header+point+browse
|
||||||
//设置url
|
//设置url
|
||||||
guard let pathUrl = URL(string: path), let url = try? URLEncoding.default.encode(URLRequest(url: pathUrl), with: ["key":netKeyCode]).url else {
|
guard let url = URL(string: path) else {
|
||||||
print("Url is Incorrect")
|
print("Url is Incorrect")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -686,7 +688,7 @@ extension MP_NetWorkManager {
|
|||||||
//拼接出browse路径
|
//拼接出browse路径
|
||||||
let path = header+point+browse
|
let path = header+point+browse
|
||||||
//设置url
|
//设置url
|
||||||
guard let pathUrl = URL(string: path), let url = try? URLEncoding.default.encode(URLRequest(url: pathUrl), with: ["key":netKeyCode]).url else {
|
guard let url = URL(string: path) else {
|
||||||
print("Url is Incorrect")
|
print("Url is Incorrect")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -720,7 +722,7 @@ extension MP_NetWorkManager {
|
|||||||
//拼接出browse路径
|
//拼接出browse路径
|
||||||
let path = header+point+browse
|
let path = header+point+browse
|
||||||
//设置url
|
//设置url
|
||||||
guard let pathUrl = URL(string: path), let url = try? URLEncoding.default.encode(URLRequest(url: pathUrl), with: ["key":netKeyCode]).url else {
|
guard let url = URL(string: path) else {
|
||||||
print("Url is Incorrect")
|
print("Url is Incorrect")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -760,7 +762,7 @@ extension MP_NetWorkManager {
|
|||||||
//拼接出next路径
|
//拼接出next路径
|
||||||
let path = header+point+next
|
let path = header+point+next
|
||||||
//设置url
|
//设置url
|
||||||
guard let pathUrl = URL(string: path), let url = try? URLEncoding.default.encode(URLRequest(url: pathUrl), with: ["key":netKeyCode]).url else {
|
guard let url = URL(string: path) else {
|
||||||
print("Url is Incorrect")
|
print("Url is Incorrect")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -801,7 +803,7 @@ extension MP_NetWorkManager {
|
|||||||
//拼接出next路径
|
//拼接出next路径
|
||||||
let path = header+point+next
|
let path = header+point+next
|
||||||
//设置url
|
//设置url
|
||||||
guard let pathUrl = URL(string: path), let url = try? URLEncoding.default.encode(URLRequest(url: pathUrl), with: ["key":netKeyCode]).url, let videoId = item.videoId else {
|
guard let url = URL(string: path), let videoId = item.videoId else {
|
||||||
print("Url is Incorrect")
|
print("Url is Incorrect")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -846,8 +848,9 @@ extension MP_NetWorkManager {
|
|||||||
//拼接出player路径
|
//拼接出player路径
|
||||||
let path = header+point+player
|
let path = header+point+player
|
||||||
//设置url
|
//设置url
|
||||||
guard let pathUrl = URL(string: path), let url = try? URLEncoding.default.encode(URLRequest(url: pathUrl), with: ["key":netKeyCode]).url else {
|
guard let url = URL(string: path) else {
|
||||||
print("Url is Incorrect")
|
print("Url is Incorrect")
|
||||||
|
completion(nil,nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
//设置参数,videoId与params参数是必定携带内容
|
//设置参数,videoId与params参数是必定携带内容
|
||||||
@ -860,22 +863,44 @@ extension MP_NetWorkManager {
|
|||||||
failure?(statu)
|
failure?(statu)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private func requestAndroidPostPlayer(_ url:URL, videoId:String, parameters:Parameters, completion:@escaping((([String],[Int],[String])?, [String]?) -> Void), failure:((Bool) -> Void)? = nil) {
|
private func requestAndroidPostPlayer(_ url:URL, videoId:String, parameters:Parameters, index:Int = 0, completion:@escaping((([String],[Int],[String])?, [String]?) -> Void), failure:((Bool) -> Void)? = nil) {
|
||||||
//发送post请求
|
//发送post请求
|
||||||
let request = PlayerSeesion.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonAndroidPlayer.self) { [weak self] (response) in
|
let request = PlayerSeesion.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonAndroidPlayer.self) { [weak self] (response) in
|
||||||
guard let self = self else {return}
|
guard let self = self else {return}
|
||||||
self.playerRequests[videoId] = nil // 清除请求
|
|
||||||
switch response.result {
|
switch response.result {
|
||||||
case .success(let value):
|
case .success(let value):
|
||||||
parsingAndroidPlayer(value) { resourceUlrs, coverUrls in
|
parsingAndroidPlayer(value) { resourceUlrs, coverUrls in
|
||||||
|
if self.playerRequests[videoId] != nil {
|
||||||
|
self.playerRequests[videoId] = nil // 清除请求
|
||||||
|
}
|
||||||
//成功获得资源
|
//成功获得资源
|
||||||
completion(resourceUlrs, coverUrls)
|
completion(resourceUlrs, coverUrls)
|
||||||
} failure: { statu in
|
} failure: { statu in
|
||||||
//失败
|
if self.playerRequests[videoId] != nil {
|
||||||
failure?(statu)
|
self.playerRequests[videoId] = nil // 清除请求
|
||||||
|
}
|
||||||
|
failure?(statu)
|
||||||
|
} resetion: {
|
||||||
|
//需要重启网络请求
|
||||||
|
if index < 3 {
|
||||||
|
print("对于歌曲:\(videoId),进行重复请求")
|
||||||
|
//可以继续请求
|
||||||
|
let next = index + 1
|
||||||
|
self.requestAndroidPostPlayer(url, videoId: videoId, parameters: parameters, index: next, completion: completion, failure: failure)
|
||||||
|
}else {
|
||||||
|
//重复请求超过限制了,不再重复请求,结束请求
|
||||||
|
print("对于歌曲:\(videoId),请求超限,不再继续")
|
||||||
|
if self.playerRequests[videoId] != nil {
|
||||||
|
self.playerRequests[videoId] = nil // 清除请求
|
||||||
|
}
|
||||||
|
failure?(false)
|
||||||
|
self.setNumbersFailures()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case .failure(let error):
|
case .failure(let error):
|
||||||
|
if self.playerRequests[videoId] != nil {
|
||||||
|
self.playerRequests[videoId] = nil // 清除请求
|
||||||
|
}
|
||||||
//当前无数据
|
//当前无数据
|
||||||
failure?(false)
|
failure?(false)
|
||||||
// 请求失败,处理错误
|
// 请求失败,处理错误
|
||||||
@ -953,7 +978,7 @@ extension MP_NetWorkManager {
|
|||||||
//拼接出browse路径
|
//拼接出browse路径
|
||||||
let path = header+point+browse
|
let path = header+point+browse
|
||||||
//设置url
|
//设置url
|
||||||
guard let pathUrl = URL(string: path), let url = try? URLEncoding.default.encode(URLRequest(url: pathUrl), with: ["key":netKeyCode]).url else {
|
guard let url = URL(string: path) else {
|
||||||
print("Url is Incorrect")
|
print("Url is Incorrect")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -985,7 +1010,7 @@ extension MP_NetWorkManager {
|
|||||||
//拼接出browse路径
|
//拼接出browse路径
|
||||||
let path = header+point+browse
|
let path = header+point+browse
|
||||||
//设置url
|
//设置url
|
||||||
guard let pathUrl = URL(string: path), let url = try? URLEncoding.default.encode(URLRequest(url: pathUrl), with: ["key":netKeyCode]).url else {
|
guard let url = URL(string: path) else {
|
||||||
print("Url is Incorrect")
|
print("Url is Incorrect")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -1063,7 +1088,7 @@ extension MP_NetWorkManager {
|
|||||||
//拼接路径
|
//拼接路径
|
||||||
let path = header+point+search
|
let path = header+point+search
|
||||||
//设置url
|
//设置url
|
||||||
guard let pathUrl = URL(string: path), let url = try? URLEncoding.default.encode(URLRequest(url: pathUrl), with: ["key":netKeyCode]).url else {
|
guard let url = URL(string: path) else {
|
||||||
print("Url is Incorrect")
|
print("Url is Incorrect")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -1117,7 +1142,7 @@ extension MP_NetWorkManager {
|
|||||||
//拼接路径
|
//拼接路径
|
||||||
let path = header+point+search
|
let path = header+point+search
|
||||||
//设置url
|
//设置url
|
||||||
guard let pathUrl = URL(string: path), let url = try? URLEncoding.default.encode(URLRequest(url: pathUrl), with: ["key":netKeyCode]).url else {
|
guard let url = URL(string: path) else {
|
||||||
print("Url is Incorrect")
|
print("Url is Incorrect")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -1163,7 +1188,7 @@ extension MP_NetWorkManager {
|
|||||||
//拼接路径
|
//拼接路径
|
||||||
let path = header+point+search
|
let path = header+point+search
|
||||||
//设置url
|
//设置url
|
||||||
guard let pathUrl = URL(string: path), let url = try? URLEncoding.default.encode(URLRequest(url: pathUrl), with: ["key":netKeyCode]).url else {
|
guard let url = URL(string: path) else {
|
||||||
print("Url is Incorrect")
|
print("Url is Incorrect")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -1799,7 +1824,15 @@ extension MP_NetWorkManager {
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
private func parsingAndroidPlayer(_ player:JsonAndroidPlayer,completion:@escaping((([String],[Int],[String]), [String]?) -> Void), failure:((Bool) -> Void)? = nil){
|
private func parsingAndroidPlayer(_ player:JsonAndroidPlayer,completion:@escaping((([String],[Int],[String]), [String]?) -> Void), failure:((Bool) -> Void)? = nil, resetion:(() -> Void)? = nil){
|
||||||
|
//检索相应内容状态
|
||||||
|
guard let statu = player.playabilityStatus?.status, statu == "OK" || statu == "LOGIN_REQUIRED" else {
|
||||||
|
//检索失败,重新请求
|
||||||
|
if let block = resetion {
|
||||||
|
block()
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
var infos:[String]?
|
var infos:[String]?
|
||||||
//解析player,获取资源库和信息库
|
//解析player,获取资源库和信息库
|
||||||
if let videoDetails = player.videoDetails {
|
if let videoDetails = player.videoDetails {
|
||||||
@ -1815,6 +1848,10 @@ extension MP_NetWorkManager {
|
|||||||
}else {
|
}else {
|
||||||
//不存在资源(通常是IP被拉黑了)
|
//不存在资源(通常是IP被拉黑了)
|
||||||
failure?(true)
|
failure?(true)
|
||||||
|
setNumbersFailures()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private func setNumbersFailures() {
|
||||||
MP_HUD.error("Failed to obtain resource, please try again later".localizableString(), delay: 1.0, completion: nil)
|
MP_HUD.error("Failed to obtain resource, please try again later".localizableString(), delay: 1.0, completion: nil)
|
||||||
//检索不存在资源的次数
|
//检索不存在资源的次数
|
||||||
if let number = UserDefaults.standard.object(forKey: "Number_Failures") as? Int {
|
if let number = UserDefaults.standard.object(forKey: "Number_Failures") as? Int {
|
||||||
@ -1834,7 +1871,6 @@ extension MP_NetWorkManager {
|
|||||||
}
|
}
|
||||||
MP_AnalyticsManager.shared.player_resource_failureAction(locaton ?? "HK")
|
MP_AnalyticsManager.shared.player_resource_failureAction(locaton ?? "HK")
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/// 解析播放器_StreamingData
|
/// 解析播放器_StreamingData
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
|
|||||||
@ -596,16 +596,20 @@ class MP_PlayerManager:NSObject{
|
|||||||
item?.artistID = song.artistID
|
item?.artistID = song.artistID
|
||||||
item?.albumID = song.albumID
|
item?.albumID = song.albumID
|
||||||
item?.playListID = song.playListID
|
item?.playListID = song.playListID
|
||||||
|
MPPositive_RecentlyModel.save()
|
||||||
}else {
|
}else {
|
||||||
//不为空,调整数据
|
//不为空,调整数据
|
||||||
if let item = results.first {
|
var array = results
|
||||||
if (item.level) < level {
|
let first = array.removeFirst()
|
||||||
item.level = level
|
if first.level < level {
|
||||||
}
|
first.level = level
|
||||||
item.addTime = Date()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
first.addTime = Date()
|
||||||
MPPositive_RecentlyModel.save()
|
MPPositive_RecentlyModel.save()
|
||||||
|
array.forEach { item in
|
||||||
|
MPPositive_RecentlyModel.delete(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -127,19 +127,36 @@ struct JsonPlayer: Codable {
|
|||||||
}
|
}
|
||||||
///安卓结构的播放器数据
|
///安卓结构的播放器数据
|
||||||
struct JsonAndroidPlayer: Codable {
|
struct JsonAndroidPlayer: Codable {
|
||||||
|
///相应状态
|
||||||
|
let playabilityStatus:PlayabilityStatus?
|
||||||
///资源路径块
|
///资源路径块
|
||||||
let streamingData:StreamingData?
|
let streamingData:StreamingData?
|
||||||
///单曲/视频信息块
|
///单曲/视频信息块
|
||||||
let videoDetails:VideoDetails?
|
let videoDetails:VideoDetails?
|
||||||
enum CodingKeys: String, CodingKey {
|
enum CodingKeys: String, CodingKey {
|
||||||
|
case playabilityStatus = "playabilityStatus"
|
||||||
case streamingData = "streamingData"
|
case streamingData = "streamingData"
|
||||||
case videoDetails = "videoDetails"
|
case videoDetails = "videoDetails"
|
||||||
}
|
}
|
||||||
init(from decoder: Decoder) throws {
|
init(from decoder: Decoder) throws {
|
||||||
let values = try decoder.container(keyedBy: CodingKeys.self)
|
let values = try decoder.container(keyedBy: CodingKeys.self)
|
||||||
|
playabilityStatus = try values.decodeIfPresent(PlayabilityStatus.self, forKey: .playabilityStatus)
|
||||||
streamingData = try values.decodeIfPresent(StreamingData.self, forKey: .streamingData)
|
streamingData = try values.decodeIfPresent(StreamingData.self, forKey: .streamingData)
|
||||||
videoDetails = try values.decodeIfPresent(VideoDetails.self, forKey: .videoDetails)
|
videoDetails = try values.decodeIfPresent(VideoDetails.self, forKey: .videoDetails)
|
||||||
}
|
}
|
||||||
|
//MARK: - 资源相应状态
|
||||||
|
struct PlayabilityStatus: Codable {
|
||||||
|
let status:String?
|
||||||
|
enum CodingKeys: String, CodingKey {
|
||||||
|
case status = "status"
|
||||||
|
}
|
||||||
|
init(from decoder: Decoder) throws {
|
||||||
|
let values = try decoder.container(keyedBy: CodingKeys.self)
|
||||||
|
status = try values.decodeIfPresent(String.self, forKey: .status)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//MARK: - 资源路径(各等级资源)
|
//MARK: - 资源路径(各等级资源)
|
||||||
struct StreamingData: Codable {
|
struct StreamingData: Codable {
|
||||||
///允许访问的时间值
|
///允许访问的时间值
|
||||||
|
|||||||
@ -253,9 +253,9 @@ class MPPositive_ArtistShowSongTableViewCell: UITableViewCell, PKDownloadButtonD
|
|||||||
//切换为准备状态
|
//切换为准备状态
|
||||||
downloadButton.state = .pending
|
downloadButton.state = .pending
|
||||||
//通过网络请求获取当前预览项资源(转为Song)
|
//通过网络请求获取当前预览项资源(转为Song)
|
||||||
MP_NetWorkManager.shared.requestNextList(itemView?.browseItem.playListId ?? "", videoId: itemView?.browseItem.videoId ?? "", clickTrackingParams: itemView.browseItem.clickTrackingParams){
|
MP_NetWorkManager.shared.requestNextList(itemView?.browseItem.playListId ?? "", videoId: videoId, clickTrackingParams: itemView.browseItem.clickTrackingParams){
|
||||||
[weak self] listSongs in
|
[weak self] listSongs in
|
||||||
guard let self = self, let first = listSongs.first else {
|
guard let self = self, let first = listSongs.first(where: {$0.videoId == videoId}) else {
|
||||||
//获取资源失败
|
//获取资源失败
|
||||||
self?.setProgress(videoId)
|
self?.setProgress(videoId)
|
||||||
return
|
return
|
||||||
|
|||||||
@ -246,7 +246,7 @@ class MPPositive_HomeSingleCollectionViewCell: UICollectionViewCell, PKDownloadB
|
|||||||
//通过网络请求获取当前预览项资源(转为Song)
|
//通过网络请求获取当前预览项资源(转为Song)
|
||||||
MP_NetWorkManager.shared.requestNextList(itemViewModel?.browseItem.playListId ?? "", videoId: videoId, clickTrackingParams: nil){
|
MP_NetWorkManager.shared.requestNextList(itemViewModel?.browseItem.playListId ?? "", videoId: videoId, clickTrackingParams: nil){
|
||||||
[weak self] listSongs in
|
[weak self] listSongs in
|
||||||
guard let self = self, let first = listSongs.first else {
|
guard let self = self, let first = listSongs.first(where: {$0.videoId == videoId}) else {
|
||||||
//获取资源失败
|
//获取资源失败
|
||||||
self?.setProgress(videoId)
|
self?.setProgress(videoId)
|
||||||
return
|
return
|
||||||
|
|||||||
@ -279,7 +279,7 @@ class MPPositive_MusicItemShowTableViewCell: UITableViewCell, PKDownloadButtonDe
|
|||||||
//通过网络请求获取当前预览项资源(转为Song)
|
//通过网络请求获取当前预览项资源(转为Song)
|
||||||
MP_NetWorkManager.shared.requestNextList(itemView?.browseItem.playListId ?? "", videoId: videoId, clickTrackingParams: nil){
|
MP_NetWorkManager.shared.requestNextList(itemView?.browseItem.playListId ?? "", videoId: videoId, clickTrackingParams: nil){
|
||||||
[weak self] listSongs in
|
[weak self] listSongs in
|
||||||
guard let self = self, let first = listSongs.first else {
|
guard let self = self, let first = listSongs.first(where: {$0.videoId == videoId}) else {
|
||||||
//获取资源失败
|
//获取资源失败
|
||||||
self?.setProgress(videoId)
|
self?.setProgress(videoId)
|
||||||
return
|
return
|
||||||
|
|||||||
@ -325,7 +325,7 @@ class MPPositive_SearchResultShowTableViewCell: UITableViewCell, PKDownloadButto
|
|||||||
//通过网络请求获取当前预览项资源(转为Song)
|
//通过网络请求获取当前预览项资源(转为Song)
|
||||||
MP_NetWorkManager.shared.requestNextList(playListId ?? "", videoId: videoId, clickTrackingParams: nil){
|
MP_NetWorkManager.shared.requestNextList(playListId ?? "", videoId: videoId, clickTrackingParams: nil){
|
||||||
[weak self] listSongs in
|
[weak self] listSongs in
|
||||||
guard let self = self, let first = listSongs.first else {
|
guard let self = self, let first = listSongs.first(where: {$0.videoId == videoId}) else {
|
||||||
//获取资源失败
|
//获取资源失败
|
||||||
self?.setProgress(videoId)
|
self?.setProgress(videoId)
|
||||||
return
|
return
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user