Music_Player3/relax.offline.mp3.music/MP/MPPositive/Models/ViewModels/LoadViewModels/MPPositive_BrowseLoadViewModel.swift
2024-09-06 18:21:15 +08:00

201 lines
8.7 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// MPPositive_LoadMusicModel.swift
// MusicPlayer
//
// Created by Mr.Zhou on 2024/4/25.
//
import UIKit
///bload
class MPPositive_BrowseLoadViewModel: NSObject {
static let shared = MPPositive_BrowseLoadViewModel()
///()
var browseModuleLists:[MPPositive_BrowseModuleListViewModel] = []
///
var personalModuleLists:[MPPositive_PersonalListViewModel] = []
///Library
var libraryList:MPPositive_LibraryListViewModel = .init()
//
private var isAction:Bool = false
override init() {
super.init()
setNetWorkBlock()
}
//
private func setNetWorkBlock() {
//browse
MP_NetWorkManager.shared.browseRequestStateBlock = {
[weak self] (lists) in
guard let self = self else {return}
if isAction == false {
if (lists.first?.items.count ?? 0) != 0 {
print("B面预览数据成功拉取")
//
MP_AnalyticsManager.shared.home_b_module_showsucces_actionAction()
}else {
print("B面预览数据拉取失败")
//
MP_AnalyticsManager.shared.home_b_module_showfailure_errorAction("No Datas")
}
isAction = true
}
//
browseModuleLists.append(contentsOf: lists)
//
browseModuleLists = browseModuleLists.filter{($0.items.count != 0)}
//UI
NotificationCenter.notificationKey.post(notificationName: .positive_browses_reload)
}
//error
MP_NetWorkManager.shared.browseRequestErrorBlock = {
//
MP_AnalyticsManager.shared.home_b_module_showfailure_errorAction("Network loading error, no longer updating page data")
}
}
///
func reloadBrowseLists() {
//
browseModuleLists.removeAll()
//
MP_NetWorkManager.shared.requestBrowseDatas()
//gride
MPPositive_GridLoadViewModel.shared.reloadGrides()
}
///
func getRecentlyData() {
//
MPPositive_LoadCoreModel.shared.reloadRecents{
[weak self] in
guard let self = self else {return}
var lists:[MPPositive_PersonalListViewModel] = []
//
let array = MPPositive_LoadCoreModel.shared.recents
guard array.count >= 3 else {
libraryList.reloadLibrarys {
[weak self] in
print("个性化内容组: \(self?.personalModuleLists.count ?? 0)")
//
NotificationCenter.notificationKey.post(notificationName: .positive_browses_reload)
}
return
}
let recentList1:MPPositive_PersonalListViewModel = .init()
recentList1.title = "Recent Played".localizableString()
recentList1.isRecently = true
//
array.forEach { item in
let browse = MPPositive_BrowseItemModel()
browse.coverUrls = [item.recently.reviewImage ?? ""]
browse.title = item.recently.title
browse.subtitle = item.recently.subtitle
browse.videoId = item.recently.videoId
browse.playListId = item.recently.playListID
browse.artistId = item.recently.artistID
browse.pageType = "MUSIC_VIDEO_TYPE_ATV"
browse.itemType = .single
recentList1.items.append(.init(browse))
}
guard personalModuleLists.isEmpty else {
//
personalModuleLists[0] = recentList1
//
NotificationCenter.notificationKey.post(notificationName: .positive_browses_reload)
return
}
//
lists.append(recentList1)
personalModuleLists = lists
//
NotificationCenter.notificationKey.post(notificationName: .positive_browses_reload)
libraryList.reloadLibrarys {
//
NotificationCenter.notificationKey.post(notificationName: .positive_browses_reload)
}
let group = DispatchGroup()
group.enter()
getRecommondFirstNumberData(array) { [weak self] personl in
guard let self = self else {return}
if let item = personl {
lists.insert(item, at: 1)
}
group.leave()
}
group.enter()
getRecommondSecondNumberData(array) { [weak self] personl in
guard let self = self else {return}
if let item = personl {
lists.append(item)
}
group.leave()
}
group.notify(queue: .main) {
[weak self] in
guard let self = self else {return}
//
personalModuleLists = lists
//
NotificationCenter.notificationKey.post(notificationName: .positive_browses_reload)
}
}
}
///1
func getRecommondFirstNumberData(_ recents:[MPPositive_RecentlyViewModel], completetion:((MPPositive_PersonalListViewModel?) -> Void)?){
let personal:MPPositive_PersonalListViewModel = .init()
//1
if let shuffix = recents.randomElement(), let recommendId = shuffix.recently.relatedID {
personal.title = "Because you listen".localizableString()
//
MP_NetWorkManager.shared.requestRecommend(recommendId) { results in
if results.isEmpty == false, let first = results.first {
//
personal.items = first.items
personal.random = shuffix
if let block = completetion {
block(personal)
}
}else {
if let block = completetion {
block(nil)
}
}
}
}
}
///2
func getRecommondSecondNumberData(_ recents:[MPPositive_RecentlyViewModel], completetion:((MPPositive_PersonalListViewModel?) -> Void)?){
let personal:MPPositive_PersonalListViewModel = .init()
//1
if let shuffix = recents.randomElement(), let recommendId = shuffix.recently.relatedID {
personal.title = "Because you like".localizableString()
//
MP_NetWorkManager.shared.requestRecommend(recommendId) { results in
if results.isEmpty == false, results.count > 1 {
let item = results[1]
//
personal.items = item.items
personal.random = shuffix
if let block = completetion {
block(personal)
}
}else {
if let block = completetion {
block(nil)
}
}
}
}
}
//
func loadMoreBrowseDatas() {
//Browse
guard browseModuleLists.isEmpty == false else {
//
reloadBrowseLists()
return
}
//
MP_NetWorkManager.shared.requestContinuationBrowseDatas()
}
}