- Finished favourite and like in episode listing screen, also updating the websites view - Handled the teaser data player play. Also now teaser will play according to category language, titles and desc will be base on app language - My list merged hindi and English. Now if hindi version is like and same content is aavailable in English it will be replicated - Handled the fav and likes reload if user navigates from my list to season rising
293 lines
13 KiB
Swift
293 lines
13 KiB
Swift
//
|
|
// WebSeriesSeasonVM.swift
|
|
// WOKA
|
|
//
|
|
// Created by MacBook Pro on 20/06/24.
|
|
//
|
|
|
|
import Foundation
|
|
import Alamofire
|
|
|
|
class WebSeriesSeasonVM{
|
|
|
|
weak var vc : WebSeriesSeasonVC!
|
|
|
|
var categoryID : Int?
|
|
|
|
var episodeSelectedCateogory : Int?
|
|
|
|
var seasonListingData = [SeasonListingDM.Result]()
|
|
|
|
var seasonEpisodeData = [SeasonEpisodeListingDM.ResultData]()
|
|
|
|
var teaserData = [TeaserDM.ResultData]()
|
|
|
|
var showData : WebSeriesShowListDM.ShowDatum?
|
|
|
|
var indexSelected : Int?
|
|
|
|
func initView(){
|
|
getSeasonListing()
|
|
setupCell()
|
|
setShowData()
|
|
|
|
vc.addView.addTapGesture { [weak self] in
|
|
|
|
guard let self ,let indexSelected, let categoryID, let showData, let isFav = showData.markAsFavourite else{return}
|
|
vc.likeFavDelegate?.updateRows(index: indexSelected, type: .favourite)
|
|
|
|
if isFav {
|
|
self.showData?.markAsFavourite = false
|
|
self.showData?.favouriteCategoryIDS = ValueWrapper.stringValue("")
|
|
}else{
|
|
self.showData?.markAsFavourite = true
|
|
self.showData?.favouriteCategoryIDS = ValueWrapper.stringValue(categoryID.toString())
|
|
}
|
|
setShowData()
|
|
}
|
|
vc.likeView.addTapGesture { [weak self] in
|
|
guard let self ,let indexSelected, let showData, let isLiked = showData.isLiked else{return}
|
|
vc.likeFavDelegate?.updateRows(index: indexSelected, type: .liked)
|
|
if isLiked{
|
|
self.showData?.isLiked = false
|
|
self.showData?.likesCount! -= 1
|
|
}else{
|
|
self.showData?.isLiked = true
|
|
self.showData?.likesCount! += 1
|
|
}
|
|
setShowData()
|
|
}
|
|
vc.shareView.addTapGesture {
|
|
print("share")
|
|
}
|
|
}
|
|
|
|
func setShowData(){
|
|
guard let showData else{return}
|
|
vc.totalLikes.text = showData.likesCount?.toString() ?? "0"
|
|
if let like = showData.isLiked{
|
|
switch like{
|
|
case true:
|
|
vc.likeIcon.image = UIImage(systemName: "hand.thumbsup.fill")
|
|
vc.likeLabel.text = "LIKED".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
|
|
case false:
|
|
vc.likeIcon.image = UIImage(systemName: "hand.thumbsup")
|
|
vc.likeLabel.text = "LIKE".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
|
|
}
|
|
}
|
|
|
|
if let favourite = showData.markAsFavourite{
|
|
if let categoryIds = showData.favouriteCategoryIDS?.rawValue { // if string, it means category is selected for multiple language
|
|
let components = categoryIds.components(separatedBy: ",")
|
|
if favourite == true && (components.first == categoryID?.toString() || components.last == categoryID?.toString()){
|
|
vc.addIcon.image = UIImage(systemName: "heart.fill")
|
|
vc.addLabel.text = "ADDED".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
|
|
}else{
|
|
vc.addIcon.image = UIImage(systemName: "heart")
|
|
vc.addLabel.text = "ADD".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
|
|
}
|
|
return
|
|
}
|
|
|
|
if favourite == true && showData.favouriteCategoryIDS?.intValue == categoryID{
|
|
vc.addIcon.image = UIImage(systemName: "heart.fill")
|
|
vc.addLabel.text = "ADDED".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
|
|
}else{
|
|
vc.addIcon.image = UIImage(systemName: "heart")
|
|
vc.addLabel.text = "ADD".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
|
|
}
|
|
}
|
|
}
|
|
|
|
func setupCell(){
|
|
vc.categoryCV.register(UINib(nibName: K.CellIdentifier.WebSeries.seasonCategoryCell, bundle: nil), forCellWithReuseIdentifier: K.CellIdentifier.WebSeries.seasonCategoryCell)
|
|
vc.categoryCV.delegate = vc.self
|
|
vc.categoryCV.dataSource = vc.self
|
|
|
|
vc.episodeTableView.register(UINib(nibName: K.CellIdentifier.WebSeries.webSeriesEpisodeCell, bundle: nil), forCellReuseIdentifier: K.CellIdentifier.WebSeries.webSeriesEpisodeCell)
|
|
vc.episodeTableView.delegate = vc.self
|
|
vc.episodeTableView.dataSource = vc.self
|
|
|
|
vc.teaserTableView.register(UINib(nibName: K.CellIdentifier.WebSeries.webSeriesEpisodeCell, bundle: nil), forCellReuseIdentifier: K.CellIdentifier.WebSeries.webSeriesEpisodeCell)
|
|
vc.teaserTableView.delegate = vc.self
|
|
vc.teaserTableView.dataSource = vc.self
|
|
}
|
|
|
|
// MARK: - Api Calls
|
|
|
|
func getSeasonListing(){
|
|
Utilities.startProgressHUD()
|
|
guard let watchShowID = showData?.id, let categoryID else{return}
|
|
let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken()]
|
|
let params : Parameters = ["watch_show_id" : watchShowID,
|
|
"category_id" : categoryID]
|
|
NetworkManager.shareInstance.apiRequest(url: APIEndPoints.WebSeries.season_listing, method: .post,parameters: params,headers : headers) { [weak self](result : Result<BaseResponseModel<SeasonListingDM>, NetworkManager.APIError>) in
|
|
switch result{
|
|
case .success(let data):
|
|
guard let self else{
|
|
Utilities.dismissProgressHUD()
|
|
return
|
|
}
|
|
switch data.success{
|
|
case 0:
|
|
/*
|
|
Error
|
|
*/
|
|
Utilities.dismissProgressHUD()
|
|
vc.toast(msg: data.message ?? "Unrecognised error" , time: 2)
|
|
case 1:
|
|
Utilities.dismissProgressHUD()
|
|
guard let data = data.data?.result else{return}
|
|
self.seasonListingData = data
|
|
episodeSelectedCateogory = seasonListingData.first?.id
|
|
setSeasonData()
|
|
getSeasonEpisode()
|
|
getTeaserListing()
|
|
self.vc.categoryCV.reloadData()
|
|
default:
|
|
break
|
|
}
|
|
case .failure(let error):
|
|
guard let self else{
|
|
Utilities.dismissProgressHUD()
|
|
return
|
|
}
|
|
Utilities.dismissProgressHUD()
|
|
vc.toast(msg: error.localizedDescription , time: 2)
|
|
}
|
|
}
|
|
}
|
|
|
|
func setSeasonData(){
|
|
guard let data = seasonListingData.filter({$0.id == episodeSelectedCateogory}).first else{return}
|
|
vc.seasonImage.imageURL(data.thumbnailPath!, color: UIColor.appColor(.TextDarkBlue)!)
|
|
|
|
if AuthFunc.shareInstance.getDefaultLanguage() == .english{
|
|
let englishData = data.seasonMoreDetails?.filter({$0.languageMasterID == 1}).first
|
|
vc.seasonTitle.text = (englishData?.title ?? "NA") + "\n" + (data.seasonNumber ?? "NA")
|
|
|
|
if let desc = englishData?.description?.replacingOccurrences(of: "<br>", with: "").htmlToAttributedString{
|
|
let sizeText = NSMutableAttributedString(attributedString: desc)
|
|
sizeText.setFontFace(font: FontCustom.shareInstance.customFont(fontName: .Exo2_Regular, size: 15),color: UIColor.appColor(.TextDarkBlue)!)
|
|
self.vc.seasonDesc.attributedText = sizeText
|
|
}
|
|
}else{
|
|
let hindiData = data.seasonMoreDetails?.filter({$0.languageMasterID == 2}).first
|
|
vc.seasonTitle.text = (hindiData?.title ?? "NA") + "\n" + (data.seasonNumber ?? "NA")
|
|
if let desc = hindiData?.description?.replacingOccurrences(of: "<br>", with: "").htmlToAttributedString{
|
|
let sizeText = NSMutableAttributedString(attributedString: desc)
|
|
sizeText.setFontFace(font: FontCustom.shareInstance.customFont(fontName: .Exo2_Regular, size: 15),color: UIColor.appColor(.TextDarkBlue)!)
|
|
self.vc.seasonDesc.attributedText = sizeText
|
|
}
|
|
}
|
|
|
|
vc.seasonDate.text = data.releaseYear?.toString()
|
|
vc.seasonEpisodes.text = data.noOfEpisodes?.toString()
|
|
vc.seasonMediaType.text = data.mediaType
|
|
}
|
|
|
|
func getSeasonEpisode(){
|
|
Utilities.startProgressHUD()
|
|
guard let watchShowID = showData?.id, let episodeSelectedCateogory else{return}
|
|
let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken()]
|
|
let params : Parameters = ["watch_show_id" : watchShowID,
|
|
"season_id" : episodeSelectedCateogory]
|
|
NetworkManager.shareInstance.apiRequest(url: APIEndPoints.WebSeries.season_episode_listing, method: .post,parameters: params,headers : headers) { [weak self](result : Result<BaseResponseModel<SeasonEpisodeListingDM>, NetworkManager.APIError>) in
|
|
switch result{
|
|
case .success(let data):
|
|
guard let self else{
|
|
Utilities.dismissProgressHUD()
|
|
return
|
|
}
|
|
switch data.success{
|
|
case 0:
|
|
/*
|
|
Error
|
|
*/
|
|
Utilities.dismissProgressHUD()
|
|
vc.toast(msg: data.message ?? "Unrecognised error" , time: 2)
|
|
case 1:
|
|
Utilities.dismissProgressHUD()
|
|
guard let data = data.data?.result else{return}
|
|
self.seasonEpisodeData.removeAll()
|
|
self.seasonEpisodeData = data
|
|
self.seasonEpisodeData = self.seasonEpisodeData.filter {
|
|
$0.episodeData != nil && !$0.episodeData!.isEmpty
|
|
}
|
|
if self.seasonEpisodeData.count == 0{
|
|
self.vc.episodeTitle.isHidden = true
|
|
self.vc.episodeTitle.text = ""
|
|
}else{
|
|
self.vc.episodeTitle.isHidden = false
|
|
self.vc.episodeTitle.text = data.first?.mediaType?.uppercased()
|
|
}
|
|
|
|
self.vc.episodeTableView.reloadData()
|
|
self.vc.tableHeight.constant = self.vc.episodeTableView.contentSize.height + 100
|
|
self.vc.episodeTableView.layoutIfNeeded()
|
|
self.vc.tableHeight.constant = self.vc.episodeTableView.contentSize.height
|
|
default:
|
|
break
|
|
}
|
|
case .failure(let error):
|
|
guard let self else{
|
|
Utilities.dismissProgressHUD()
|
|
return
|
|
}
|
|
Utilities.dismissProgressHUD()
|
|
vc.toast(msg: error.localizedDescription , time: 2)
|
|
}
|
|
}
|
|
}
|
|
|
|
func getTeaserListing(){
|
|
guard let watchShowID = showData?.id, let episodeSelectedCateogory else{return}
|
|
let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken()]
|
|
let params : Parameters = ["watch_show_master_id" : watchShowID,
|
|
"season_master_id" : episodeSelectedCateogory]
|
|
NetworkManager.shareInstance.apiRequest(url: APIEndPoints.WebSeries.teaser_listing, method: .post,parameters: params,headers : headers) { [weak self](result : Result<BaseResponseModel<TeaserDM>, NetworkManager.APIError>) in
|
|
switch result{
|
|
case .success(let data):
|
|
guard let self else{
|
|
Utilities.dismissProgressHUD()
|
|
return
|
|
}
|
|
switch data.success{
|
|
case 0:
|
|
/*
|
|
Error
|
|
*/
|
|
Utilities.dismissProgressHUD()
|
|
self.teaserData.removeAll()
|
|
self.reloadTeaserTable()
|
|
self.vc.teaserTitle.isHidden = true
|
|
// vc.toast(msg: data.message ?? "Unrecognised error" , time: 2)
|
|
case 1:
|
|
Utilities.dismissProgressHUD()
|
|
guard let data = data.data?.result else{return}
|
|
self.teaserData.removeAll()
|
|
self.teaserData = data
|
|
self.reloadTeaserTable()
|
|
self.vc.teaserTitle.isHidden = false
|
|
default:
|
|
break
|
|
}
|
|
case .failure(let error):
|
|
guard let self else{
|
|
Utilities.dismissProgressHUD()
|
|
return
|
|
}
|
|
Utilities.dismissProgressHUD()
|
|
vc.toast(msg: error.localizedDescription , time: 2)
|
|
}
|
|
}
|
|
}
|
|
|
|
private func reloadTeaserTable(){
|
|
self.vc.teaserTableView.reloadData()
|
|
self.vc.teaserTableHeight.constant = self.vc.teaserTableView.contentSize.height + 100
|
|
self.vc.teaserTableView.layoutIfNeeded()
|
|
self.vc.teaserTableHeight.constant = self.vc.teaserTableView.contentSize.height
|
|
}
|
|
}
|