younger_times
2023-08-08 47a58a1a7d967464e93410e04791aaa4756c1cbd
WanPai/Root/Course/VC/CourseVideoDetailVC.swift
@@ -1,9 +1,9 @@
//
//  CourseVideoDetailVC.swift
//  WanPai
//
//  Created by 无故事王国 on 2023/6/16.
//
   //
   //  CourseVideoDetailVC.swift
   //  WanPai
   //
   //  Created by 无故事王国 on 2023/6/16.
   //
import UIKit
import AVKit
@@ -11,112 +11,157 @@
import JQTools
class CourseVideoDetailVC: BaseVC {
    @IBOutlet weak var view_videoContainer: UIView!
   @IBOutlet weak var view_videoContainer: UIView!
    private var id:Int?
    private var model:ExerciseVideoModel?
   private var id:Int?
   private var model:ExerciseVideoModel?
   private var detailModel:VideoDetailModel?
   private var exerciseVideoDetailModel:ExerciseVideoDetailModel?
    @IBOutlet weak var label_name: UILabel!
    @IBOutlet weak var label_introduce: UILabel!
    @IBOutlet weak var label_studyState: UILabel!
    @IBOutlet weak var img_introduceCover: UIImageView!
    @IBOutlet weak var label_coin: UILabel!
    @IBOutlet weak var cons_imgHei: NSLayoutConstraint!
   @IBOutlet weak var label_name: UILabel!
   @IBOutlet weak var label_introduce: UILabel!
   @IBOutlet weak var label_studyState: UILabel!
   @IBOutlet weak var img_introduceCover: UIImageView!
   @IBOutlet weak var label_coin: UILabel!
   @IBOutlet weak var cons_imgHei: NSLayoutConstraint!
   private var timeDuration:Double = 0
    private lazy var playerVC:AVPlayerViewController = {
        let player = AVPlayerViewController()
        player.allowsPictureInPicturePlayback = true
        player.delegate = self
        return player
    }()
   private lazy var playerVC:AVPlayerViewController = {
      let player = AVPlayerViewController()
      player.allowsPictureInPicturePlayback = true
      player.delegate = self
      return player
   }()
   init(id:Int) {
        super.init(nibName: nil, bundle: nil)
        self.id = id
    }
   init(id:Int) {
      super.init(nibName: nil, bundle: nil)
      self.id = id
   }
    init(model:ExerciseVideoModel){
        super.init(nibName: nil, bundle: nil)
        self.model = model
    }
   init(model:ExerciseVideoModel){
      super.init(nibName: nil, bundle: nil)
      self.model = model
   }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
   required init?(coder: NSCoder) {
      fatalError("init(coder:) has not been implemented")
   }
    override func viewDidLoad() {
        super.viewDidLoad()
   override func viewDidLoad() {
      super.viewDidLoad()
        if let id {
            Services.benefitsVideoDetail(id: id).subscribe(onNext: { [weak self] data in
                if let model = data.data{
                    self?.playerVC.player = AVPlayer(url: URL(string: model.courseVideo)!)
                    self?.playerVC.player?.play()
      if let id {
         Services.benefitsVideoDetail(id: id).subscribe(onNext: { [weak self] data in
            if let model = data.data{
               self?.detailModel = model
               self?.playerVC.player = AVPlayer(url: URL(string: model.courseVideo)!)
               self?.playerVC.player?.play()
                    self?.label_name.text = model.name
                    self?.label_coin.text = "\(model.integral)积分"
                    self?.label_introduce.text = model.introduce
                    if model.study == 1{
                        self?.label_studyState.text = "已学习"
                        self?.label_studyState.backgroundColor = UIColor(hexStr: "#318C10").withAlphaComponent(0.29)
                        self?.label_studyState.textColor = UIColor(hexStr: "#318C10")
                    }else{
                        self?.label_studyState.text = "未学习"
                        self?.label_studyState.backgroundColor = UIColor(hexStr: "#FD9331").withAlphaComponent(0.29)
                        self?.label_studyState.textColor = Def_ThemeColor
                    }
               self?.playerVC.player?.addPeriodicTimeObserver(forInterval: CMTimeMake(value: 1, timescale: 1), queue: DispatchQueue.main) { [weak self](time) in
                  self?.timeDuration += 1
               }
                    SDWebImageDownloader.shared.downloadImage(with: URL(string: model.introductionDrawing)) { image, data, error, state in
                        if let img = image{
                            self?.img_introduceCover.image = img
                            let radio = img.size.width / img.size.height
                            self?.cons_imgHei.constant = JQ_ScreenW * radio
                        }
                    }
                }
            }).disposed(by: disposeBag)
        }
               self?.label_name.text = model.name
               self?.label_coin.text = "\(model.integral)积分"
               self?.label_introduce.text = model.introduce
               if model.study == 1{
                  self?.label_studyState.text = "已学习"
                  self?.label_studyState.backgroundColor = UIColor(hexStr: "#318C10").withAlphaComponent(0.29)
                  self?.label_studyState.textColor = UIColor(hexStr: "#318C10")
               }else{
                  self?.label_studyState.text = "未学习"
                  self?.label_studyState.backgroundColor = UIColor(hexStr: "#FD9331").withAlphaComponent(0.29)
                  self?.label_studyState.textColor = Def_ThemeColor
               }
        if let model{
            Services.exerciseCourseDetail(coursePackageId: model.coursePackageId, videoId: model.videoId).subscribe(onNext: {[weak self] data in
                if let model = data.data{
                    self?.playerVC.player = AVPlayer(url: URL(string: model.videoURL)!)
                    self?.playerVC.player?.play()
               SDWebImageDownloader.shared.downloadImage(with: URL(string: model.introductionDrawing)) { image, data, error, state in
                  if let img = image{
                     self?.img_introduceCover.image = img
                     let radio = img.size.width / img.size.height
                     self?.cons_imgHei.constant = JQ_ScreenW * radio
                  }
               }
            }
         }).disposed(by: disposeBag)
      }
                    self?.label_name.text = model.packageName
                    self?.label_coin.text = "\(model.integral)积分"
                    self?.label_introduce.text = model.synopsis
                    if model.studyStatus == 1{
                        self?.label_studyState.text = "已学习"
                        self?.label_studyState.backgroundColor = UIColor(hexStr: "#318C10").withAlphaComponent(0.29)
                        self?.label_studyState.textColor = UIColor(hexStr: "#318C10")
                    }else{
                        self?.label_studyState.text = "未学习"
                        self?.label_studyState.backgroundColor = UIColor(hexStr: "#FD9331").withAlphaComponent(0.29)
                        self?.label_studyState.textColor = Def_ThemeColor
                    }
      if let model{
         Services.exerciseCourseDetail(coursePackageId: model.coursePackageId, videoId: model.videoId).subscribe(onNext: {[weak self] data in
            if let model = data.data{
               self?.exerciseVideoDetailModel = model
               self?.playerVC.player = AVPlayer(url: URL(string: model.videoURL)!)
               self?.playerVC.player?.play()
                    SDWebImageDownloader.shared.downloadImage(with: URL(string: model.detailedDiagram)) { image, data, error, state in
                        if let img = image{
                            self?.img_introduceCover.image = img
                            let radio = img.size.width / img.size.height
                            self?.cons_imgHei.constant = JQ_ScreenW * radio
                        }
                    }
                }
            }).disposed(by: disposeBag)
        }
    }
               self?.playerVC.player?.addPeriodicTimeObserver(forInterval: CMTimeMake(value: 1, timescale: 1), queue: DispatchQueue.main) { [weak self](time) in
                  self?.timeDuration += 1
               }
    override func setUI() {
        view_videoContainer.addSubview(playerVC.view)
        playerVC.view.frame = view_videoContainer.frame
        self.addChild(playerVC)
        playerVC.didMove(toParent: self)
               self?.label_name.text = model.packageName
               self?.label_coin.text = "\(model.integral)积分"
               self?.label_introduce.text = model.synopsis
               if model.studyStatus == 1{
                  self?.label_studyState.text = "已学习"
                  self?.label_studyState.backgroundColor = UIColor(hexStr: "#318C10").withAlphaComponent(0.29)
                  self?.label_studyState.textColor = UIColor(hexStr: "#318C10")
               }else{
                  self?.label_studyState.text = "未学习"
                  self?.label_studyState.backgroundColor = UIColor(hexStr: "#FD9331").withAlphaComponent(0.29)
                  self?.label_studyState.textColor = Def_ThemeColor
               }
    }
               SDWebImageDownloader.shared.downloadImage(with: URL(string: model.detailedDiagram)) { image, data, error, state in
                  if let img = image{
                     self?.img_introduceCover.image = img
                     let radio = img.size.width / img.size.height
                     self?.cons_imgHei.constant = JQ_ScreenW * radio
                  }
               }
            }
         }).disposed(by: disposeBag)
      }
      NotificationCenter.default.addObserver(self, selector: #selector(playbackEnd), name:NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
   }
   override func setUI() {
      view_videoContainer.addSubview(playerVC.view)
      playerVC.view.frame = view_videoContainer.frame
      self.addChild(playerVC)
      playerVC.didMove(toParent: self)
   }
   @objc private func playbackEnd(){
      if let m = exerciseVideoDetailModel{
         if timeDuration >= CMTimeGetSeconds((playerVC.player?.currentItem?.duration)!) && m.studyStatus == 0 {
            Services.updateVideoStatus(coursePackageId: m.coursePackageId, videoId: m.videoId).subscribe(onNext: {[weak self] data in
               alertSuccess(msg: "已获得积分")
               self?.exerciseVideoDetailModel?.studyStatus = 1
               self?.label_studyState.text = "已学习"
               self?.label_studyState.backgroundColor = UIColor(hexStr: "#318C10").withAlphaComponent(0.29)
               self?.label_studyState.textColor = UIColor(hexStr: "#318C10")
               self?.timeDuration = 0
            }).disposed(by: disposeBag)
         }
      }
      if let m = detailModel{
         if timeDuration >= CMTimeGetSeconds((playerVC.player?.currentItem?.duration)!) && m.study == 0 {
            Services.receiveAward(id: m.id).subscribe(onNext: {[weak self] data in
               alertSuccess(msg: "已获得积分")
               self?.detailModel?.study = 1
               self?.label_studyState.text = "已学习"
               self?.label_studyState.backgroundColor = UIColor(hexStr: "#318C10").withAlphaComponent(0.29)
               self?.label_studyState.textColor = UIColor(hexStr: "#318C10")
               self?.timeDuration = 0
            }).disposed(by: disposeBag)
         }
      }
   }
}