// // SongListCell.swift // WOKA // // Created by Bilal Khan on 10/06/24. // import UIKit class SongListCell: UITableViewCell { @IBOutlet weak var ongoingTimeLabel: UILabel! @IBOutlet weak var totalTimeLabel: UILabel! @IBOutlet weak var songTitle: UILabel! @IBOutlet weak var outerStack: UIStackView! @IBOutlet weak var playPauseImage: UIImageView! @IBOutlet weak var indicatorView: UIView! // var timer: Timer? override func awakeFromNib() { super.awakeFromNib() } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // Configure the view for the selected state } override func prepareForReuse() { super.prepareForReuse() // Invalidate the timer when the cell is reused currentTimePlayer = 0 // self.timer?.invalidate() // self.timer = nil } func setData(data: SongBlogDM.PaintDatum, playerStatus: PlayerStatus, active: Bool, currentTime: Int) { totalTime = data.songDuration?.timeStringToSeconds() ?? 0 ongoingTimeLabel.text = formatTime(currentTime) playPauseImage.image = UIImage(systemName: "play.fill") if active { ongoingTimeLabel.text = formatTime(currentTime) switch playerStatus { case .stopped: showHideLoading(show: false) playPauseImage.image = UIImage(systemName: "play.fill") case .pause: showHideLoading(show: false) playPauseImage.image = UIImage(systemName: "play.fill") case .play, .resume: showHideLoading(show: false) playPauseImage.image = UIImage(systemName: "pause.fill") case .loading: showHideLoading(show: true) break } } else { showHideLoading(show: false) } if let totalDuration = data.songDuration { let totalTimeFiltered = totalDuration.checkHourZero() totalTimeLabel.text = "/" + totalTimeFiltered } else { totalTimeLabel.text = "/" + (data.songDuration ?? "00:00") } songTitle.text = data.title ?? "Unknown Title" } func showHideLoading(show : Bool){ show ? self.indicatorView.showLoading() : self.indicatorView.hideLoading() self.indicatorView.isHidden = !show self.playPauseImage.isHidden = show } func updateCurrentTime() { let timeInSeconds = Int(currentTimePlayer) currentTimePlayer = timeInSeconds ongoingTimeLabel.text = formatTime(currentTimePlayer) } private func formatTime(_ seconds: Int) -> String { // Format time as MM:SS let minutes = seconds / 60 let seconds = seconds % 60 return String(format: "%02d:%02d", minutes, seconds) } }