123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616 |
- import UIKit
- import AVFoundation
- class PQStuckPointMusicController: PQBaseViewController {
-
- var selectedTotalDuration: Float64 = 0
-
- var selectedDataCount: Int = 0
-
- var selectedImageDataCount: Int = 0
-
- var selectedPhotoData: [PQEditVisionTrackMaterialsModel]?
-
- var selectedMusicData: PQVoiceModel?
-
-
-
-
-
-
-
-
- var cacheMusicData: [String: [String: Any]] = Dictionary<String, [String: Any]>.init()
-
- var hotList: [Any] = Array<Any>.init()
-
- let leftMargin: CGFloat = 16
-
- let searchTFH: CGFloat = 37
-
- var pageNum: Int = 0
-
- var tagData: PQStuckPointMusicTagsModel?
-
- var currentPlayData: PQVoiceModel?
-
- var playerItem: AVPlayerItem?
- lazy var avPlayer: AVPlayer = {
- let avPlayer = AVPlayer()
- PQNotification.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: avPlayer.currentItem, queue: .main) { [weak self] notify in
- BFLog(message: "AVPlayerItemDidPlayToEndTime = \(notify)")
- avPlayer.seek(to: CMTime(value: CMTimeValue((self?.currentPlayData?.startTime ?? 0) * 1000), timescale: CMTimeScale(playerTimescale)))
- self?.playStuckPointMusic(itemData: nil)
- }
- PQNotification.addObserver(forName: .AVPlayerItemNewErrorLogEntry, object: avPlayer.currentItem, queue: .main) { notify in
- BFLog(message: "AVPlayerItemNewErrorLogEntry = \(notify)")
- }
- PQNotification.addObserver(forName: .AVPlayerItemFailedToPlayToEndTime, object: avPlayer.currentItem, queue: .main) { notify in
- BFLog(message: "AVPlayerItemFailedToPlayToEndTime = \(notify)")
- }
- PQNotification.addObserver(forName: .AVPlayerItemPlaybackStalled, object: avPlayer.currentItem, queue: .main) { notify in
- BFLog(message: "AVPlayerItemPlaybackStalled = \(notify)")
- }
- avPlayer.addPeriodicTimeObserver(forInterval: CMTime(value: 1, timescale: CMTimeScale(playerTimescale)), queue: .main) { [weak self] cmTime in
- BFLog(message: "addPeriodicTimeObserver = \(cmTime)")
- }
- return avPlayer
- }()
-
- lazy var clearBtn: UIButton = {
- let clearBtn = UIButton(type: .custom)
- clearBtn.setImage(UIImage.init().BF_Image(named: "icon_search_delete"), for: .normal)
- clearBtn.frame = CGRect(x: 0, y: 0, width: 28, height: 32)
- clearBtn.tag = 1
- clearBtn.addTarget(self, action: #selector(btnClick(sender:)), for: .touchUpInside)
- clearBtn.isHidden = true
- return clearBtn
- }()
-
- lazy var searchTF: UITextField = {
- let searchTF = UITextField(frame: CGRect(x: leftMargin, y: cDevice_iPhoneNavBarAndStatusBarHei, width: cScreenWidth - leftMargin * 2, height: searchTFH))
- searchTF.font = UIFont.systemFont(ofSize: 17)
- searchTF.backgroundColor = UIColor.hexColor(hexadecimal: "#F2F2F2")
- searchTF.attributedPlaceholder = NSAttributedString(string: "搜索歌曲名称/歌手", attributes: [.foregroundColor: UIColor.hexColor(hexadecimal: "#BDBDBD"), .font: UIFont.systemFont(ofSize: 14)])
- searchTF.textColor = PQBFConfig.shared.styleTitleColor
- searchTF.addCorner(corner: searchTFH / 2)
- searchTF.leftViewMode = .always
- let leftView = UIView(frame: CGRect(x: 0, y: 0, width: 35, height: 32))
- let imageView = UIImageView(image: UIImage.init().BF_Image(named: "icon_search_s"))
- imageView.frame = CGRect(x: 15, y: 8, width: 16, height: 16)
- leftView.addSubview(imageView)
- searchTF.leftView = leftView
- searchTF.delegate = self
- searchTF.rightViewMode = .always
- let rightView = UIView(frame: CGRect(x: 0, y: 0, width: 40, height: 32))
- rightView.addSubview(clearBtn)
- searchTF.rightView = rightView
- searchTF.delegate = self
- searchTF.returnKeyType = .search
- searchTF.addTarget(self, action: #selector(editingChanged), for: .editingChanged)
- return searchTF
- }()
-
- lazy var topCategoryController: PQStuckPointMusicContentController = {
- let topCategoryController = PQStuckPointMusicContentController()
- addChild(topCategoryController)
- view.addSubview(topCategoryController.view)
- topCategoryController.updateViewFrame(newFrame: CGRect(x: 0, y: searchTF.frame.maxY + cDefaultMargin * 2, width: cDefaultMargin * 12, height: view.frame.height - (searchTF.frame.maxY + cDefaultMargin * 2)))
-
- topCategoryController.didSelectedHandle = { [weak self] _, _, _, itemData in
- if itemData is PQStuckPointMusicTagsModel {
- self?.tagData = itemData as? PQStuckPointMusicTagsModel
- self?.dealWithCategorySelectedData(itemData: itemData as? PQStuckPointMusicTagsModel)
-
- self?.updateMusicCacheData(tagId: (itemData as? PQStuckPointMusicTagsModel)?.tagId ?? 0, tagInfo: nil, pageList: nil, currentTag: self?.tagData)
- }
- self?.playStuckPointMusic(itemData: nil, isClearCurrentMusic: true)
- }
- return topCategoryController
- }()
-
- lazy var musicPageController: PQStuckPointMusicContentController = {
- let musicPageController = PQStuckPointMusicContentController()
- musicPageController.cellHight = cDefaultMargin * 8
- addChild(musicPageController)
- view.addSubview(musicPageController.view)
- musicPageController.updateViewFrame(newFrame: CGRect(x: topCategoryController.view.frame.maxX, y: topCategoryController.view.frame.minY, width: view.frame.width - topCategoryController.view.frame.maxX, height: topCategoryController.view.frame.height))
- musicPageController.contentType = .page
- musicPageController.didSelectedHandle = { [weak self] isTagsClick, _, _, itemData in
- if isTagsClick {
- self?.tagData = (itemData as? PQStuckPointMusicTagsModel)
- let tagId: Int64 = (itemData as? PQStuckPointMusicTagsModel)?.tagId ?? 0
- let parentTagId: Int64 = (itemData as? PQStuckPointMusicTagsModel)?.parentTagId ?? 0
-
- self?.requestPageListData(tagId: tagId, parentTagId: parentTagId)
- } else {
- self?.playStuckPointMusic(itemData: itemData as? PQVoiceModel)
- }
- }
- musicPageController.refreshHandle = { [weak self] isRefresh, _ in
- let tagId: Int64 = self?.tagData?.tagId ?? 0
- let parentTagId: Int64 = self?.tagData?.parentTagId ?? 0
-
- self?.requestPageListData(isRefresh: isRefresh, tagId: tagId, parentTagId: parentTagId)
-
- self?.playStuckPointMusic(itemData: nil, isClearCurrentMusic: true)
- }
- musicPageController.btnClickHandle = { [weak self] _, bgmData in
-
- self?.userstuckPointMusic(musicData: bgmData as? PQVoiceModel)
- }
- return musicPageController
- }()
-
- lazy var searchController: PQStuckPointMusicSearchController = {
- let searchController = PQStuckPointMusicSearchController()
- searchController.selectedDataCount = selectedDataCount
- searchController.selectedImageDataCount = selectedImageDataCount
- searchController.selectedTotalDuration = selectedTotalDuration
- searchController.cellHight = cDefaultMargin * 8
- addChild(searchController)
- view.addSubview(searchController.view)
- searchController.updateViewFrame(newFrame: CGRect(x: 0, y: cDevice_iPhoneNavBarAndStatusBarHei + cDefaultMargin * 2, width: view.frame.width, height: view.frame.height - (cDevice_iPhoneNavBarAndStatusBarHei + cDefaultMargin * 2)))
- searchController.didSelectedHandle = { [weak self] isTagsClick, _, _, itemData in
- if !isTagsClick {
- self?.view.endEditing(true)
- if !(itemData is PQEmptyModel) {
- self?.playStuckPointMusic(itemData: itemData as? PQVoiceModel)
- }
- }
- }
- searchController.btnClickHandle = { [weak self] _, bgmData in
-
- self?.userstuckPointMusic(musicData: bgmData as? PQVoiceModel)
- }
- searchController.scroDidScroHandle = { [weak self] in
- self?.view.endEditing(true)
- }
- searchController.view.isHidden = true
- searchController.contentType = .serach
- return searchController
- }()
- lazy var emptyRemindView: PQEmptyRemindView = {
- let emptyRemindView = PQEmptyRemindView(frame: CGRect(x: 0, y: searchTF.frame.maxY + cDefaultMargin * 2, width: view.frame.width, height: view.frame.height - (searchTF.frame.maxY + cDefaultMargin * 2)))
- emptyRemindView.remindLab.font = UIFont.systemFont(ofSize: 20)
- emptyRemindView.remindLab.textColor = UIColor.hexColor(hexadecimal: "#575757")
- emptyRemindView.isHidden = true
- let emptyData = PQEmptyModel()
- emptyData.title = "暂无音乐"
- emptyRemindView.emptyData = emptyData
- emptyRemindView.fullRefreshBloc = { [weak self] _, _ in
-
- self?.loadRequestTagsList()
- }
- view.addSubview(emptyRemindView)
- return emptyRemindView
- }()
-
- lazy var selectedMusciView: PQStuckPointMusicContentCell = {
- let selectedMusciView = PQStuckPointMusicContentCell(frame: CGRect(x: 0, y: view.frame.height - cDefaultMargin * 6, width: cScreenWidth, height: cDefaultMargin * 6))
- selectedMusciView.confirmContentView.backgroundColor = UIColor.hexColor(hexadecimal: "#333333")
- selectedMusciView.playImageView.isHidden = true
- selectedMusciView.confirmBtn.setTitle(" 继续使用 ", for: .normal)
- selectedMusciView.backgroundColor = UIColor.hexColor(hexadecimal: "#333333")
- view.addSubview(selectedMusciView)
- return selectedMusciView
- }()
- override func viewDidLoad() {
- super.viewDidLoad()
- leftButton(image: "icon_detail_back",tintColor: PQBFConfig.shared.styleTitleColor)
- setTitle(title: "选择音乐主题",color: PQBFConfig.shared.styleTitleColor)
- view.addSubview(searchTF)
- addKeyboardObserver()
-
- loadRequestTagsList()
- PQNotification.addObserver(self, selector: #selector(enterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
- if selectedMusicData != nil {
- let editerVC: PQStuckPointEditerController = PQStuckPointEditerController()
- editerVC.stuckPointMusicData = selectedMusicData
- editerVC.selectedDataCount = selectedDataCount
- editerVC.selectedImageDataCount = selectedImageDataCount
- editerVC.selectedTotalDuration = selectedTotalDuration
- editerVC.selectedPhotoData = selectedPhotoData
- navigationController?.pushViewController(editerVC, animated: true)
- }
-
- PQEventTrackViewModel.baseReportUpload(businessType: .bt_windowView, objectType: .ot_view_selectSyncedUpMusic, pageSource: .sp_stuck_selectSynceedUpMusic, extParams: nil, remindmsg: "卡点视频数据上报-(曝光上报:卡点视频音乐选择页)")
- }
- override func viewWillDisappear(_ animated: Bool) {
- super.viewWillDisappear(animated)
- playStuckPointMusic(itemData: nil)
- }
-
-
-
- @objc func btnClick(sender: UIButton) {
- switch sender.tag {
- case 1:
- searchTF.text = nil
- clearBtn.isHidden = true
- default:
- break
- }
- }
-
-
- func loadRequestTagsList() {
- PQLoadingHUB.shared.showHUB()
- PQStuckPointViewModel.stuckPointMusicCategoryList { [weak self] tags, _, _ in
- PQLoadingHUB.shared.dismissHUB()
- if tags.count > 0 {
- self?.tagData = tags.first
- }
- self?.emptyRemindView.isHidden = tags.count > 0
- if tags.count > 0 {
- self?.topCategoryController.configMusicListData(isRefresh: true, musicListData: tags)
-
- self?.requestPageListData(isHotPage: true, tagId: tags.first?.tagId ?? 0, parentTagId: 0)
- }
- }
- }
-
-
- func loadRequestSubTagsList() {
- PQLoadingHUB.shared.showHUB()
- PQStuckPointViewModel.stuckPointMusicCategoryList(parentTagId: tagData?.tagId ?? 0) { [weak self] tags, _, tagAttributes in
- PQLoadingHUB.shared.dismissHUB()
- if tagAttributes != nil {
- let tagId: Int64 = tags.count > 0 ? (tags.first?.tagId ?? 0) : (self?.tagData?.tagId ?? 0)
- let parentTagId: Int64 = tags.count > 0 ? (self?.tagData?.tagId ?? 0) : 0
- self?.musicPageController.tagsInfo = (tags, tagAttributes) as? ([PQStuckPointMusicTagsModel], ([UICollectionViewLayoutAttributes], CGFloat))
- if tags.count > 0 {
- self?.tagData = tags.first
- }
-
- self?.updateMusicCacheData(tagId: parentTagId > 0 ? parentTagId : tagId, isClearOld: false, tagInfo: self?.musicPageController.tagsInfo, pageList: nil, currentTag: self?.tagData)
-
- self?.requestPageListData(tagId: tagId, parentTagId: parentTagId)
- } else {
-
- self?.resetPageData(isResetData: false)
- }
- }
- }
-
-
-
- func dealWithCategorySelectedData(itemData: PQStuckPointMusicTagsModel?) {
- tagData = itemData
-
- resetPageData(isResetData: true)
- let cacheData = getMusicCacheData(itemData: itemData)
- if cacheData != nil, (cacheData?.0 != nil && (cacheData?.0?.0.count ?? 0) > 0) || (cacheData?.1 != nil && (cacheData?.1?.count ?? 0) > 0) {
- musicPageController.tagsInfo = cacheData?.0
- musicPageController.configMusicListData(isRefresh: true, musicListData: cacheData?.1 ?? [])
- pageNum = ((cacheData?.1?.count ?? 0) / 20) + 1
- tagData = cacheData?.2
- } else {
- pageNum = 1
-
- loadRequestSubTagsList()
- }
- }
-
-
-
-
-
-
- func requestPageListData(isRefresh: Bool = true, isHotPage: Bool = false, tagId: Int64, parentTagId: Int64) {
- PQLoadingHUB.shared.showHUB()
- if isRefresh {
- pageNum = 1
- }
- PQStuckPointViewModel.stuckPointMusicPageList(tagId: tagId, parentTagId: parentTagId, pageNum: pageNum,videoCount: selectedDataCount - selectedImageDataCount,imageCount: selectedImageDataCount,totalDuration: selectedTotalDuration) { [weak self] musicInfo, _ in
- PQLoadingHUB.shared.dismissHUB()
- if musicInfo.count > 0 {
- self?.pageNum = (self?.pageNum ?? 0) + 1
- }
- self?.musicPageController.configMusicListData(isRefresh: isRefresh, musicListData: musicInfo)
-
- self?.updateMusicCacheData(tagId: parentTagId > 0 ? parentTagId : tagId, isClearOld: isRefresh, tagInfo: nil, pageList: musicInfo, currentTag: nil)
- if musicInfo.count > 0, isHotPage, isRefresh {
- self?.hotList = musicInfo
- self?.searchController.hotList = self?.hotList ?? []
- }
- }
- }
-
-
-
- func resetPageData(isResetData: Bool) {
- musicPageController.tagsInfo = nil
- musicPageController.configMusicListData(isResetData: isResetData, isRefresh: true, musicListData: [])
- pageNum = 1
- }
-
-
- func playStuckPointMusic(itemData: PQVoiceModel?, isClearCurrentMusic: Bool = false) {
- if itemData != nil, currentPlayData != itemData {
- if !isValidURL(url: itemData?.musicPath ?? "") {
- cShowHUB(superView: nil, msg: "本歌曲暂无伴奏版本哦~")
- return
- }
- avPlayer.pause()
- playerItem?.removeObserver(self, forKeyPath: "status")
- playerItem?.removeObserver(self, forKeyPath: "error")
- playerItem = AVPlayerItem(url: URL(string: itemData?.musicPath ?? "")!)
- if (itemData?.endTime ?? 0) > 0, (itemData?.endTime ?? 0) > (itemData?.startTime ?? 0) {
- playerItem?.forwardPlaybackEndTime = CMTime(value: CMTimeValue((itemData?.endTime ?? 0) * playerTimescale), timescale: CMTimeScale(playerTimescale))
- }
- avPlayer.replaceCurrentItem(with: playerItem)
- playerItem?.addObserver(self, forKeyPath: "status", options: .new, context: nil)
- playerItem?.addObserver(self, forKeyPath: "error", options: .new, context: nil)
- avPlayer.seek(to: CMTime(value: CMTimeValue((itemData?.startTime ?? 0) * playerTimescale), timescale: CMTimeScale(playerTimescale)))
- avPlayer.play()
- currentPlayData = itemData
- } else if itemData != nil, avPlayer.rate == 0.0 {
- avPlayer.play()
- } else {
- avPlayer.pause()
- musicPageController.updateCurrentPlayMusic(isPlaying: false, isClearCurrentMusic: isClearCurrentMusic)
- searchController.updateCurrentPlayMusic(isPlaying: false, isClearCurrentMusic: isClearCurrentMusic)
- }
- if isClearCurrentMusic {
- avPlayer.pause()
- currentPlayData = nil
- }
- }
-
-
-
- func userstuckPointMusic(musicData: PQVoiceModel?) {
- if musicData != nil {
- let editerVC: PQStuckPointEditerController = PQStuckPointEditerController()
- editerVC.selectedDataCount = selectedDataCount
- editerVC.selectedImageDataCount = selectedImageDataCount
- editerVC.selectedTotalDuration = selectedTotalDuration
- editerVC.stuckPointMusicData = musicData
- editerVC.selectedPhotoData = selectedPhotoData
- navigationController?.pushViewController(editerVC, animated: true)
- }
- }
-
- override func backBtnClick() {
- if searchController.view.isHidden {
- navigationController?.popViewController(animated: true)
-
- PQEventTrackViewModel.baseReportUpload(businessType: .bt_buttonClick, objectType: .ot_click_back, pageSource: .sp_stuck_selectSynceedUpMusic, extParams: nil, remindmsg: "卡点视频数据上报-(点击上报:返回按钮)")
- } else {
- hiddenSearchController()
-
- PQEventTrackViewModel.baseReportUpload(businessType: .bt_buttonClick, objectType: .ot_click_back, pageSource: .sp_stuck_searchSyncedUpMusic, extParams: nil, remindmsg: "卡点视频数据上报-(点击上报:返回按钮)")
- }
- }
-
- @objc func enterBackground() {
- playStuckPointMusic(itemData: nil)
- }
- deinit {
- PQNotification.removeObserver(self)
- avPlayer.currentItem?.removeObserver(self, forKeyPath: "status")
- avPlayer.currentItem?.removeObserver(self, forKeyPath: "error")
- avPlayer.pause()
- avPlayer.replaceCurrentItem(with: nil)
- playerItem = nil
- }
- }
- extension PQStuckPointMusicController: UITextFieldDelegate {
-
- @objc func editingChanged() {
- if searchTF.text != nil, (searchTF.text?.count ?? 0) > 0, searchTF.markedTextRange == nil {
- if searchTF.text?.isSpace ?? false {
- return
- }
- clearBtn.isHidden = false
- }
- }
-
- @objc func loadSearchData() {
- if searchTF.text != nil, (searchTF.text?.count ?? 0) > 0, searchTF.text?.isSpace ?? false {
- cShowHUB(superView: nil, msg: "搜索内容不能为空")
- return
- }
- if searchTF.text != nil, (searchTF.text?.count ?? 0) > 0 {
- BFLog(message: "背景音乐--开始搜索背景音乐-1")
- searchController.loadSearchData(keyword: searchTF.text)
- }
- }
-
-
- func addKeyboardObserver() {
-
- PQNotification.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
- PQNotification.addObserver(self, selector: #selector(keyboardWillHidden), name: UIResponder.keyboardWillHideNotification, object: nil)
- }
-
-
- @objc func keyboardWillShow(notification: Notification) {
- let duration: TimeInterval = TimeInterval("\(notification.userInfo?["UIKeyboardAnimationDurationUserInfoKey"] ?? "1")") ?? 1
- UIView.animate(withDuration: duration) { [weak self] in
- self?.navTitleLabel?.alpha = 0
- self?.searchTF.frame = CGRect(x: cDefaultMargin * 5, y: (cDevice_iPhoneNavBarHei - (self?.searchTFH ?? 37.0)) / 2 + cDevice_iPhoneStatusBarHei, width: cScreenWidth - cDefaultMargin * 7, height: self?.searchTFH ?? 37.0)
- } completion: { _ in
- }
- searchController.view.isHidden = false
- hotList.forEach { item in
- if item is PQVoiceModel {
- (item as? PQVoiceModel)?.isSelected = false
- (item as? PQVoiceModel)?.isPlaying = false
- }
- }
- musicPageController.collectionView.reloadData()
- searchController.hotList = hotList
- playStuckPointMusic(itemData: nil)
-
- PQEventTrackViewModel.baseReportUpload(businessType: .bt_windowView, objectType: .ot_view_searchSyncedUpMusic, pageSource: .sp_stuck_searchSyncedUpMusic, extParams: nil, remindmsg: "卡点视频数据上报-(曝光上报:音乐素材搜索页)")
- }
-
- @objc func keyboardWillHidden() {}
-
-
- func hiddenSearchController() {
- view.endEditing(true)
- UIView.animate(withDuration: 0.3) { [weak self] in
- self?.navTitleLabel?.alpha = 1
- self?.searchTF.frame = CGRect(x: self?.leftMargin ?? 0, y: cDevice_iPhoneNavBarAndStatusBarHei, width: cScreenWidth - (self?.leftMargin ?? 0) * 2, height: self?.searchTFH ?? 0)
- } completion: { _ in
- }
- clearBtn.isHidden = true
- searchController.view.isHidden = true
- playStuckPointMusic(itemData: nil)
- }
- override func touchesBegan(_: Set<UITouch>, with _: UIEvent?) {
- view.endEditing(true)
- }
- func textFieldShouldReturn(_ textField: UITextField) -> Bool {
- loadSearchData()
- view.endEditing(true)
- if textField.text == nil || (textField.text?.count ?? 0) <= 0 {
- cShowHUB(superView: nil, msg: "请先输入搜索内容")
- }
- return true
- }
- }
- extension PQStuckPointMusicController {
-
-
-
- func getMusicCacheData(itemData: PQStuckPointMusicTagsModel?) -> (([PQStuckPointMusicTagsModel], ([UICollectionViewLayoutAttributes], CGFloat))?, [PQVoiceModel]?, PQStuckPointMusicTagsModel?)? {
- if itemData != nil, cacheMusicData.keys.contains("\(itemData?.tagId ?? 0)") {
- let tempData = cacheMusicData["\(itemData?.tagId ?? 0)"]
- return (tempData?["tagInfo"] as? ([PQStuckPointMusicTagsModel], ([UICollectionViewLayoutAttributes], CGFloat)), tempData?["pageList"] as? [PQVoiceModel], tempData?["currentTag"] as? PQStuckPointMusicTagsModel)
- } else {
- return nil
- }
- }
-
-
-
-
-
-
-
-
- func updateMusicCacheData(tagId: Int64, isClearOld: Bool = false, tagInfo: ([PQStuckPointMusicTagsModel], ([UICollectionViewLayoutAttributes], CGFloat))?, pageList: [PQVoiceModel]?, currentTag: PQStuckPointMusicTagsModel?) {
- if (tagInfo != nil && (tagInfo?.0.count ?? 0) > 0) || (pageList != nil && (pageList?.count ?? 0) > 0) || currentTag != nil {
- if cacheMusicData.keys.contains("\(tagId)") {
- var tempDic = cacheMusicData["\(tagId)"]
- if tagInfo != nil, (tagInfo?.0.count ?? 0) > 0 {
- tempDic?["tagInfo"] = tagInfo!
- }
- if pageList != nil, (pageList?.count ?? 0) > 0 {
- var oldPageList: [PQVoiceModel] = (tempDic?["pageList"] as? [PQVoiceModel]) ?? Array<PQVoiceModel>.init()
- if isClearOld {
- oldPageList.removeAll()
- }
- if oldPageList.count > 0 {
- tempDic?["pageList"] = oldPageList + pageList!
- } else {
- tempDic?["pageList"] = pageList!
- }
- }
- if currentTag != nil {
- tempDic?["currentTag"] = currentTag!
- }
- cacheMusicData["\(tagId)"] = tempDic ?? Dictionary<String, Any>.init()
- } else {
- var tempDic: [String: Any] = Dictionary<String, Any>.init()
- if tagInfo != nil, (tagInfo?.0.count ?? 0) > 0 {
- tempDic["tagInfo"] = tagInfo!
- }
- if pageList != nil, (pageList?.count ?? 0) > 0 {
- tempDic["pageList"] = pageList!
- }
- if currentTag != nil {
- tempDic["currentTag"] = currentTag!
- }
- cacheMusicData["\(tagId)"] = tempDic
- }
- }
- }
- }
- extension PQStuckPointMusicController {
- override func observeValue(forKeyPath keyPath: String?, of object: Any?, change _: [NSKeyValueChangeKey: Any]?, context _: UnsafeMutableRawPointer?) {
- if object is AVPlayerItem, keyPath == "status" {
- BFLog(message: "AVPlayerItem - status = \((object as! AVPlayerItem).status.rawValue)")
- switch (object as! AVPlayerItem).status {
- case .unknown:
- break
- case .readyToPlay:
- break
- case .failed:
- break
- default:
- break
- }
- } else if object is AVPlayerItem, keyPath == "error" {
- BFLog(message: "AVPlayerItem - error = \(String(describing: (object as! AVPlayerItem).error))")
- }
- }
- }
|