Files
Woka_Native_iOS/WOKA/Games/Controller/GamesDetailVC.swift
BilalKhanWDI bf189c118d - Fixed loading indicator when language ban shown
- Updated ADs api, Changed the whole response.
- Made changes on webseries for local ads and google ads, improvised the logic.
- Added logic on theme 2 to show google ad
- Karaoke updated for google ads and normal ads.
- Audio Books updated for google ads and normal ads.
- FM updated for google ads.
- Karaoke Player updated for google ads.
-  Games WebView updated for google ads.
- Games Details Interstitial AD updated for google ads.
- Games List updated for google and local ads.
2024-09-23 19:45:24 +05:30

362 lines
16 KiB
Swift

//
// GamesDetailVC.swift
// WOKA
//
// Created by MacBook Pro on 04/07/24.
//
import UIKit
import GoogleMobileAds
import Alamofire
class GamesDetailVC: UIViewController {
@IBOutlet weak var watchingImage: UIImageView!
@IBOutlet weak var watchingTitle: UILabel!
@IBOutlet weak var watchingDesc: UITextView!
@IBOutlet weak var addIcon: UIImageView!
@IBOutlet weak var addLabel: UILabel!
@IBOutlet weak var likeIcon: UIImageView!
@IBOutlet weak var likeLabel: UILabel!
@IBOutlet weak var totalLikes: UILabel!
@IBOutlet weak var addView: UIView!
@IBOutlet weak var shareView: UIView!
@IBOutlet weak var likeView: UIView!
@IBOutlet weak var outerView: UIView!
@IBOutlet weak var contentView: UIView!
var gameData : GamesListDM.GameDatum?
var delegate : ReloadSeriesFavLike?
var gameIndex = 0
//for myList
typealias btnTappedBlock = ( _ from : FavCellCLick) -> Void
var btnTapped : btnTappedBlock?
var reloadType : FavCellCLick?
// private var interstitial: GADInterstitialAd?
// private var rewardedAd: GADRewardedAd?
override func viewDidLoad() {
super.viewDidLoad()
initView()
tapHandler()
GoogleInterstistialADSetup.shareInstance.interstitial?.fullScreenContentDelegate = self
}
@objc func handleTap(_ gesture: UITapGestureRecognizer) {
let location = gesture.location(in: outerView)
if !contentView.frame.contains(location) {
if let postID = gameData?.id{
PersistentStorage.shared.addGamesCount(postID: postID)
}
if let reloadType{
if btnTapped != nil {
btnTapped?(reloadType)
}
}
self.dismiss(animated: true)
}
}
func initView(){
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
outerView.addGestureRecognizer(tapGesture)
if let gameData{
if let url = gameData.thumbnailPath{
watchingImage.imageURL(url, color: .white)
}
totalLikes.text = gameData.likesCount?.toString() ?? "0"
if let like = gameData.isLiked{
switch like{
case true:
likeIcon.image = UIImage(systemName: "hand.thumbsup.fill")
likeLabel.text = "LIKED".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
case false:
likeIcon.image = UIImage(systemName: "hand.thumbsup")
likeLabel.text = "LIKE".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
}
}
if let favourite = gameData.markAsFavourite{
if favourite == true{
addIcon.image = UIImage(systemName: "heart.fill")
addLabel.text = "ADDED".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
}else{
addIcon.image = UIImage(systemName: "heart")
addLabel.text = "ADD".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
}
}
if AuthFunc.shareInstance.getDefaultLanguage() == .english{
if let englishData = gameData.contentMoreDetails?.filter({$0.languageMasterID == 1}).first{
watchingTitle.text = englishData.title
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.watchingDesc.attributedText = sizeText
}
}
}else{
if let hindiData = gameData.contentMoreDetails?.filter({$0.languageMasterID == 2}).first{
watchingTitle.text = hindiData.title
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.watchingDesc.attributedText = sizeText
}
}
}
}
}
func tapHandler(){
self.view.addTapGesture {
self.dismiss(animated: true)
}
addView.addTapGesture { [weak self] in
guard let self else{return}
if let postID = gameData?.id{
PersistentStorage.shared.addGamesCount(postID: postID)
}
if AuthFunc.shareInstance.guestUserLoginPopUp() { return}
if let gameData{
guard let showID = gameData.id, let isFav = gameData.markAsFavourite, let postType = gameData.contentMoreDetails?.first?.postType else{return}
if isFav {
//remove
LikeFavCommonFunc.shareInstance.removeFavourite(postID: showID, postType: postType, categoryID: 0, vc: self) { isDone in
self.gameData?.markAsFavourite = false
// if let index = MyListDataTemp.shareInstance.favListingData?.gameData?.firstIndex(where: {$0.id == showID}){
// MyListDataTemp.shareInstance.favListingData?.gameData?.remove(at: index)
// K.GVar.myListSoftReload = true
// }
K.GVar.reloadGames = true
self.reloadType = .favourite
// To reload MyListViewAllVC
K.GVar.reloadMyListAll = 2
K.GVar.reloadMyListAllID = showID
self.delegate?.updateRows(index: self.gameIndex, type: .favourite, isFav: false, isLike: nil, id: showID)
self.initView()
}
}else{
//add
LikeFavCommonFunc.shareInstance.addFavourite(postID: showID, postType: postType, categoryID: 0, vc: self) { isDone in
self.gameData?.markAsFavourite = true
// if let gameData = self.gameData{
// MyListDataTemp.shareInstance.favListingData?.gameData?.append(gameData)
// K.GVar.myListSoftReload = true
// }
K.GVar.reloadGames = true
self.reloadType = .favourite
// To reload MyListViewAllVC
K.GVar.reloadMyListAll = 1
K.GVar.reloadMyListAllID = showID
self.delegate?.updateRows(index: self.gameIndex, type: .favourite, isFav: true, isLike: nil, id: showID)
self.initView()
}
}
}
}
likeView.addTapGesture { [weak self] in
guard let self else{return}
if let postID = gameData?.id{
PersistentStorage.shared.addGamesCount(postID: postID)
}
if AuthFunc.shareInstance.guestUserLoginPopUp() { return}
if let gameData{
guard let showID = gameData.id, let isLiked = gameData.isLiked, let postType = gameData.contentMoreDetails?.first?.postType else{return}
if isLiked{
//unlike
LikeFavCommonFunc.shareInstance.unlikePost(postID: showID, postType: postType, vc: self) { isDone in
self.gameData?.isLiked = false
if let index = MyListDataTemp.shareInstance.favListingData?.gameData?.firstIndex(where: {$0.id == showID}){
MyListDataTemp.shareInstance.favListingData?.gameData?[index].isLiked = false
MyListDataTemp.shareInstance.favListingData?.gameData?[index].likesCount! -= 1
}
self.delegate?.updateRows(index: self.gameIndex, type: .liked, isFav: nil, isLike: false, id: showID)
K.GVar.myListSoftReload = true
self.reloadType = .favourite
self.initView()
}
}else{
//like
LikeFavCommonFunc.shareInstance.likePost(postID: showID, postType: postType, vc: self) { isDone in
self.gameData?.isLiked = true
if let index = MyListDataTemp.shareInstance.favListingData?.gameData?.firstIndex(where: {$0.id == showID}){
MyListDataTemp.shareInstance.favListingData?.gameData?[index].isLiked = true
MyListDataTemp.shareInstance.favListingData?.gameData?[index].likesCount! += 1
}
self.delegate?.updateRows(index: self.gameIndex, type: .liked, isFav: nil, isLike: true, id: showID)
K.GVar.myListSoftReload = true
self.reloadType = .favourite
self.initView()
}
}
}
}
shareView.addTapGesture { [weak self] in
guard let self else{return}
if let postID = gameData?.id{
PersistentStorage.shared.addGamesCount(postID: postID)
}
if AuthFunc.shareInstance.getUserType() == 1{
let sb = UIStoryboard(name: K.StoryBoard.captcha, bundle: nil)
let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.CaptchaVC.captchaVC) as! CaptchaVC
vcPush.onDoneBlock = {
ShareApp.shareInstance.share(vc: self)
}
vcPush.modalPresentationStyle = .overCurrentContext
vcPush.modalTransitionStyle = .crossDissolve
self.present(vcPush, animated: true)
}else{
ShareApp.shareInstance.share(vc: self)
}
}
}
@IBAction func playNowBtnTapped(_ sender: LocalisedElementsButton) {
if let postID = gameData?.id{
PersistentStorage.shared.addGamesCount(postID: postID)
}
//If Google Interstitial is enable then only check for time and all, otherwise directly load GamesWebView
if let adsData = AuthFunc.shareInstance.adsData, let gamesInterstitialAd = adsData.result?.filter({$0.slug == AdsEnum.gameInterestial.rawValue}).first, gamesInterstitialAd.googleAd != nil{
/*
Show google ads with dispatch queue.
*/
checkAds()
}else{
K.GVar.adTimeStamp = nil
navigateToGamesWebView()
}
}
func checkAds(){
/*
check ad timestamp from gvar
show ads if the saved timestamp time and current time has diffrenece of 30 minutes
*/
if let timeStamp = K.GVar.adTimeStamp{
/*
check if timestamp difference is equal and greater than 30 minutes i.e 1800 seconds
*/
let duration = DateFormatterLib.dateDifferenceINT(date1: timeStamp, date2: Date())
print(duration)
if duration <= 1800{
// dont show ads navigate to webview
navigateToGamesWebView()
}else{
//show ads & reset timestamp to current time
K.GVar.adTimeStamp = Date()
guard let interstitial = GoogleInterstistialADSetup.shareInstance.interstitial else {
// if ad doesnt loads make sure to make adtimestamp nil, and let user navigate to games
K.GVar.adTimeStamp = nil
navigateToGamesWebView()
return print("Ad wasn't ready.")
}
// The UIViewController parameter is an optional.
interstitial.present(fromRootViewController: nil)
}
}else{
/* assing date if it is nil and play the ad.
also it means its the first time show the interstial ad.
*/
K.GVar.adTimeStamp = Date()
guard let interstitial = GoogleInterstistialADSetup.shareInstance.interstitial else {
// if ad doesnt loads make sure to make adtimestamp nil, and let user navigate to games
K.GVar.adTimeStamp = nil
navigateToGamesWebView()
return print("Ad wasn't ready.")
}
// The UIViewController parameter is an optional.
interstitial.present(fromRootViewController: nil)
return
}
}
// private func setupAds(){
// GADInterstitialAd.load(withAdUnitID: K.GoogleAdIDs.gamesDetailsInterStial, request: GADRequest()) { [weak self] ad, error in
// if let error = error {
// print("Failed to load interstitial ad with error: \(error.localizedDescription)")
//
// // If internet is reachable, try to load the ad again
// if self?.reachability?.isReachable == true {
// self?.setupAds()
// }
// return
// }
//
// // Successfully loaded the interstitial ad
// self?.interstitial = ad
// self?.interstitial?.fullScreenContentDelegate = self
// print("Interstitial ad loaded successfully.")
// }
// }
private func navigateToGamesWebView(){
let sb = UIStoryboard(name: K.StoryBoard.Games, bundle: nil)
let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Games.gamesWebViewVC) as! GamesWebViewVC
vcPush.url = self.gameData?.gameURL
vcPush.postID = gameData?.id
vcPush.orientation = self.gameData?.screenOrientation
vcPush.modalTransitionStyle = .crossDissolve
vcPush.modalPresentationStyle = .overFullScreen
self.present(vcPush, animated: true)
}
@IBAction func closeBtnTapped(_ sender: UIButton) {
if let postID = gameData?.id{
PersistentStorage.shared.addGamesCount(postID: postID)
}
if let reloadType{
if btnTapped != nil {
btnTapped?(reloadType)
}
}
self.dismiss(animated: true)
}
}
extension GamesDetailVC : GADFullScreenContentDelegate{
/// Tells the delegate that the ad failed to present full screen content.
func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
print("Ad did fail to present full screen content.")
}
/// Tells the delegate that the ad will present full screen content.
func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("Ad will present full screen content.")
}
/// Tells the delegate that the ad dismissed full screen content.
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("Ad did dismiss full screen content.")
self.navigateToGamesWebView()
//setup ads again and wait for the timestamp 30 minutes
GoogleInterstistialADSetup.shareInstance.setupGoogleIntersitialAD()
}
}