Fixed a status issue with favorite songs

dev
wenlei 7 months ago
parent c58578ea96
commit d3ffe765bf

@ -1924,7 +1924,7 @@
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 13;
CURRENT_PROJECT_VERSION = 15;
DEVELOPMENT_TEAM = AY569L2R6W;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
GENERATE_INFOPLIST_FILE = YES;
@ -1965,7 +1965,7 @@
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 13;
CURRENT_PROJECT_VERSION = 15;
DEVELOPMENT_TEAM = AY569L2R6W;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
GENERATE_INFOPLIST_FILE = YES;

@ -25,10 +25,6 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate, WXApiDelegate {
libsManager.setupLibs(with: window)
Application.shared.presentInitialScreen(in: window!)
}
func sceneDidDisconnect(_ scene: UIScene) {

@ -59,6 +59,12 @@ struct Configs {
//
static let complaintPath = "http://cdn.indie.cn/html/agreement/complaintGuidelines.html"
//
static let shareJournalPath = "http://cdn.indie.cn/html/journal.html?"
static let shareAudioTrackPath = "http://cdn.indie.cn/html/music.html?"
// static let Documents = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]

@ -27,6 +27,12 @@ extension Array where Element == AudioTrack {
self.append(newTrack)
}
}
mutating func replace(track newTrack: AudioTrack) {
if let index = self.firstIndex(where: { $0.id == newTrack.id }) {
self[index] = newTrack
}
}

@ -46,6 +46,35 @@ class AudioManager {
setupRemoteTransportControls()
currentTrack.subscribe { audioTrack in
guard let audioTrack = audioTrack.element,
let track = audioTrack else { return }
do {
let trackData = try JSONEncoder().encode(track)
PINCache.shared.setObject(trackData, forKey: "CurrentTrack")
} catch {
print("Encoding failed for Playlist: \(error)")
}
}.disposed(by: disposeBag)
playlist.subscribe { audioTracks in
guard let audioTracks = audioTracks.element else { return }
//
do {
let listData = try JSONEncoder().encode(audioTracks)
PINCache.shared.setObject(listData, forKey: "CurrentPlaylist")
} catch {
print("Encoding failed for Playlist: \(error)")
}
}.disposed(by: disposeBag)
}
@ -77,15 +106,6 @@ class AudioManager {
func setPlaylist(list: [AudioTrack]) {
self.playlist.accept(list)
//
do {
let listData = try JSONEncoder().encode(list)
PINCache.shared.setObject(listData, forKey: "CurrentPlaylist")
} catch {
print("Encoding failed for Playlist: \(error)")
}
}
@ -99,17 +119,19 @@ class AudioManager {
try AVAudioSession.sharedInstance().setMode(.default)
try AVAudioSession.sharedInstance().setActive(true, options: .notifyOthersOnDeactivation)
let playerItem: AVPlayerItem = AVPlayerItem.init(asset: CachingAVURLAsset(url: url))
// let playerItem: AVPlayerItem = AVPlayerItem(url: url)
// let playerItem: AVPlayerItem = AVPlayerItem.init(asset: CachingAVURLAsset(url: url))
let playerItem: AVPlayerItem = AVPlayerItem(url: url)
print("playerItem \(url)")
self.disposeBag = DisposeBag.init()
self.currentTrack.accept(track)
// self.disposeBag = DisposeBag.init()
player?.pause()
player = AVPlayer(playerItem: playerItem)
player?.play()
player?.volume = 1
self.currentTrack.accept(track)
NotificationCenter.default.post(name: .notiPlayAudioTrack, object: track)
if currentTrackIndex + 1 == self.playlist.value.count && playerType.value == .FM {
needAddNewAudio.accept(())
@ -144,14 +166,7 @@ class AudioManager {
}).disposed(by: disposeBag)
//
do {
let trackData = try JSONEncoder().encode(track)
PINCache.shared.setObject(trackData, forKey: "CurrentTrack")
} catch {
print("Encoding failed for Playlist: \(error)")
}
} catch {

@ -24,7 +24,8 @@ class LibsManager: NSObject {
super.init()
}
func setupSwiftDate() {
let chinaTime = Region.init(calendar: Calendars.gregorian, zone: Zones.current, locale: Locales.chinese)
SwiftDate.defaultRegion = chinaTime

@ -103,33 +103,54 @@ class AudioMoreActionViewModel: ViewModel, ViewModelType {
return (action, audioTrack)
}
.subscribe(onNext: { [weak self] (action, audioTrack) in
guard let self = self else { return }
guard let self = self , let audioTrack = audioTrack else { return }
switch action {
case .share:
toShare.accept(())
case .like:
guard let id = audioTrack?.id,
let haveCollect = audioTrack.value?.haveCollect else { return }
guard let haveCollect = audioTrack.haveCollect else { return }
if haveCollect {
self.requestCancelLike(journalNo: id)
self.requestCancelLike(journalNo: audioTrack.id)
.subscribe { _ in
var new = self.audioTrack.value
new?.haveCollect = false
guard var new = self.audioTrack.value else { return }
new.haveCollect = false
self.audioTrack.accept(new)
dismiss.accept(())
var playlist = AudioManager.sharedInstance.playlist.value
playlist.replace(track: new)
AudioManager.sharedInstance.setPlaylist(list: playlist)
if audioTrack.id == AudioManager.sharedInstance.currentTrack.value?.id {
AudioManager.sharedInstance.currentTrack.accept(new)
}
} onError: { error in
}.disposed(by: self.rx.disposeBag)
} else {
self.requestLike(journalNo: id)
self.requestLike(journalNo: audioTrack.id)
.subscribe { _ in
var new = self.audioTrack.value
new?.haveCollect = true
guard var new = self.audioTrack.value else { return }
new.haveCollect = true
self.audioTrack.accept(new)
dismiss.accept(())
var playlist = AudioManager.sharedInstance.playlist.value
playlist.replace(track: new)
AudioManager.sharedInstance.setPlaylist(list: playlist)
if audioTrack.id == AudioManager.sharedInstance.currentTrack.value?.id {
AudioManager.sharedInstance.currentTrack.accept(new)
}
} onError: { error in
}.disposed(by: self.rx.disposeBag)
@ -138,11 +159,9 @@ class AudioMoreActionViewModel: ViewModel, ViewModelType {
case .timing(let audioMoreActionDetail):
toTiming.accept(())
case .download:
guard let audioTrack = audioTrack else { return }
DownloadManager.shared.download(audioTrack)
dismiss.accept(())
}

@ -100,14 +100,14 @@ class CommentDetailViewController: TableViewController {
viewModel.likeSelected.accept(item.comment)
}.disposed(by: cell.disposeBag)
// cell.avatarView.rx.tapGesture().when(.recognized)
// .subscribe { [weak self] tap in
// guard let userID = item.userId else { return }
//
// let personalViewModel = PersonalViewModel.init(userID: userID, provider: viewModel.provider)
// self?.navigator.show(segue: .personal(viewModel: personalViewModel), sender: self?.presentingViewController)
//
// }.disposed(by: cell.rx.disposeBag)
cell.avatarView.rx.tapGesture().when(.recognized)
.subscribe { [weak self] tap in
guard let userID = item.comment.userId else { return }
let personalViewModel = PersonalViewModel.init(userID: userID, provider: viewModel.provider)
self?.navigator.show(segue: .personal(viewModel: personalViewModel), sender: self)
}.disposed(by: cell.rx.disposeBag)
cell.rx.longPressGesture().when(.recognized)

@ -126,11 +126,6 @@ class JournalDetailController: TableViewController {
} else {
viewModel.modelSelected.accept(audioTrack)
}
}.disposed(by: cell.disposeBag)

@ -107,8 +107,13 @@ class ShareActionController: ViewController {
let shareCardViewModel = ShareCardViewModel.init(audioTrack: viewModel.audioTrack, journal: viewModel.journal, provider: viewModel.provider)
self?.navigator.show(segue: .shareCrad(viewModel: shareCardViewModel), sender: self, transition: .navigationPresent(type: .share))
case .url:
if let audioTrack = viewModel.audioTrack {
UIPasteboard.general.string = Configs.Path.shareAudioTrackPath + "id=\(audioTrack.id)"
} else if let journal = viewModel.journal {
UIPasteboard.general.string = Configs.Path.shareJournalPath + "id=\(journal.id)"
}
UIPasteboard.general.string = ""
self?.navigator.dismiss(sender: self)
}
}.disposed(by: rx.disposeBag)

@ -220,7 +220,7 @@ class ShareSingleView: UIView {
authorLabel.text = (audioTrack.artist ?? "") + "/" + (audioTrack.album ?? "")
if let image = EFQRCode.generate(
for: "https://www.baidu.com",
for: Configs.Path.shareAudioTrackPath + "id=\(audioTrack.id)",
watermark: UIImage(named: "WWF")?.cgImage
) {
qrCodeView.image = UIImage.init(cgImage: image)
@ -388,7 +388,7 @@ class ShareJournalView: UIView {
tagArray = journal.tags ?? []
if let image = EFQRCode.generate(
for: "https://www.baidu.com",
for: Configs.Path.shareJournalPath + "id=\(journal.id)",
watermark: UIImage(named: "WWF")?.cgImage
) {
qrCodeView.image = UIImage.init(cgImage: image)

@ -80,8 +80,6 @@ class PlayerViewModel: ViewModel, ViewModelType {
func transform(input: Input) -> Output {
input.likeButtonTrigger.asObservable()
.subscribe(onNext: {[weak self] in
guard let self = self,
@ -218,11 +216,12 @@ class PlayerViewModel: ViewModel, ViewModelType {
func updateAudioTrack(audioTrack: AudioTrack) {
self.currentAudioTrack.accept(audioTrack)
AudioManager.sharedInstance.currentTrack.accept(audioTrack)
var playlist = AudioManager.sharedInstance.playlist.value
playlist.replaceOrAdd(track: audioTrack)
AudioManager.sharedInstance.playlist.accept(playlist)
AudioManager.sharedInstance.setPlaylist(list: playlist)
}

Loading…
Cancel
Save