1.2.4 资源方案优化

This commit is contained in:
QinFendeZhou 2024-10-14 15:27:12 +08:00
parent 0456fbecf0
commit 9879c0385f
11 changed files with 130 additions and 70 deletions

View File

@ -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>

View File

@ -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)
} }

View File

@ -467,20 +467,24 @@ func saveLoadVideoItem(_ song:MPPositive_SongItemModel?, completion:(() -> Void)
item?.playListID = song.playListID item?.playListID = song.playListID
// //
let recent = try? MPPositive_RecentlyModel.create() MPPositive_RecentlyModel.fetch(predicate: .init(format: "videoId == %@", (song.videoId ?? ""))) { results in
recent?.coverImage = song.coverUrls?.last if results.isEmpty {
recent?.reviewImage = song.reviewUrls?.last let recent = try? MPPositive_RecentlyModel.create()
recent?.title = song.title recent?.coverImage = song.coverUrls?.last
recent?.subtitle = "\(song.longBylineText ?? "")\(song.shortBylineText ?? "")" recent?.reviewImage = song.reviewUrls?.last
recent?.videoId = song.videoId recent?.title = song.title
recent?.lyricsID = song.lyricsID recent?.subtitle = "\(song.longBylineText ?? "")\(song.shortBylineText ?? "")"
recent?.relatedID = song.relatedID recent?.videoId = song.videoId
recent?.addTime = Date() recent?.lyricsID = song.lyricsID
recent?.level = 3 recent?.relatedID = song.relatedID
recent?.artistID = song.artistID recent?.addTime = Date()
recent?.albumID = song.albumID recent?.level = 3
recent?.playListID = song.playListID recent?.artistID = song.artistID
recent?.albumID = song.albumID
recent?.playListID = song.playListID
MPPositive_RecentlyModel.save()
}
}
// //
MPPositive_DownloadItemModel.save() MPPositive_DownloadItemModel.save()
completion?() completion?()

View File

@ -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
} }
//videoIdparams //videoIdparams
@ -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 {
self.playerRequests[videoId] = nil //
}
failure?(statu) 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,25 +1848,28 @@ extension MP_NetWorkManager {
}else { }else {
//IP //IP
failure?(true) failure?(true)
MP_HUD.error("Failed to obtain resource, please try again later".localizableString(), delay: 1.0, completion: nil) setNumbersFailures()
// }
if let number = UserDefaults.standard.object(forKey: "Number_Failures") as? Int { }
//8IP private func setNumbersFailures() {
if number > 6 { MP_HUD.error("Failed to obtain resource, please try again later".localizableString(), delay: 1.0, completion: nil)
// //
MP_AnalyticsManager.shared.resource_IP_blackAction() if let number = UserDefaults.standard.object(forKey: "Number_Failures") as? Int {
}else { //8IP
//8 if number > 6 {
UserDefaults.standard.set(number+1, forKey: "Number_Failures") //
UserDefaults.standard.synchronize() MP_AnalyticsManager.shared.resource_IP_blackAction()
}
}else { }else {
// //8
UserDefaults.standard.set(1, forKey: "Number_Failures") UserDefaults.standard.set(number+1, forKey: "Number_Failures")
UserDefaults.standard.synchronize() UserDefaults.standard.synchronize()
} }
MP_AnalyticsManager.shared.player_resource_failureAction(locaton ?? "HK") }else {
//
UserDefaults.standard.set(1, forKey: "Number_Failures")
UserDefaults.standard.synchronize()
} }
MP_AnalyticsManager.shared.player_resource_failureAction(locaton ?? "HK")
} }
/// _StreamingData /// _StreamingData

View File

@ -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()
array.forEach { item in
MPPositive_RecentlyModel.delete(item)
} }
} }
MPPositive_RecentlyModel.save()
} }
} }

View File

@ -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 {
///访 ///访

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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