diff --git a/WOKA/Alerts/AlertCustomVC.swift b/WOKA/Alerts/AlertCustomVC.swift index 58beb88..c1e9718 100644 --- a/WOKA/Alerts/AlertCustomVC.swift +++ b/WOKA/Alerts/AlertCustomVC.swift @@ -22,6 +22,8 @@ class AlertCustomVC: UIViewController { var yesBtnText: String? var mainTitleText: String? + var outsideViewTapGestureEnabled = true + override func viewDidLoad() { super.viewDidLoad() @@ -29,8 +31,10 @@ class AlertCustomVC: UIViewController { setBtnName() // Dismiss the alert when tapping outside - outsideView.addTapGesture { - self.dismiss(animated: true) + if outsideViewTapGestureEnabled == true{ + outsideView.addTapGesture { + self.dismiss(animated: true) + } } } diff --git a/WOKA/Audio Books/AudioBookHomeVC.swift b/WOKA/Audio Books/AudioBookHomeVC.swift index 346ae3a..5f820ad 100644 --- a/WOKA/Audio Books/AudioBookHomeVC.swift +++ b/WOKA/Audio Books/AudioBookHomeVC.swift @@ -26,6 +26,7 @@ class AudioBookHomeVC: UIViewController { @IBOutlet weak var headerTitleLabel: UILabel! @IBOutlet weak var listenView: ShimmerEffectView! + @IBOutlet weak var noDataView: UIView! @IBOutlet weak var loadMoreBtn: LocalisedElementsButton! @IBOutlet weak var loadMoreActivityIndicator: UIActivityIndicatorView! @@ -125,6 +126,17 @@ class AudioBookHomeVC: UIViewController { } JWPlayerManager.shared.presentPlayer(from: self, playerItems: playerItems, startIndex: 0, contentType: .audioBooks, videoIDs: [postID]) } + + @IBAction func retryBtnTapped(_ sender: LocalisedElementsButton) { + /* + make page 0 as its lazy loading, hide the no data stack as retry is tapped, + start the shimmer and reload tableview so that both header and table shimmer matches, get the karaoke listing + */ + vm.pageNo = 0 + noDataView.isHidden = true + vm.startShimmer() + vm.getShowListing() + } } // MARK: - Delegate for reload @@ -206,16 +218,22 @@ extension AudioBookHomeVC : TableViewSRC{ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let data = vm.audioListData[indexPath.row] - /* - Updated the top header data - */ - vm.headerData = data - if let postID = data.id{ PersistentStorage.shared.addAudioCount(postID: postID) } - vm.setHeaderData() + /* + MAke logic for ads + */ + if let adsData = AuthFunc.shareInstance.adsData, adsData.result?.filter({$0.forPage == AdsEnum.audioBooks.rawValue}).first != nil{ + // check if ads data contains ad for webseries + }else{ + /* + Updated the top header data + */ + vm.headerData = data + vm.setHeaderData() + } let sb = UIStoryboard(name: K.StoryBoard.audioBooks, bundle: nil) let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.AudioBooks.audioBookDetailsVC) as! AudioBookDetailsVC @@ -252,12 +270,23 @@ extension AudioBookHomeVC : CollectionViewSRC{ func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { let data = vm.continueWatchingData[indexPath.row] - vm.headerData = data + if let postID = data.id{ PersistentStorage.shared.addAudioCount(postID: postID) } - vm.setHeaderData() + /* + MAke logic for ads + */ + if let adsData = AuthFunc.shareInstance.adsData, adsData.result?.filter({$0.forPage == AdsEnum.karaoke.rawValue}).first != nil{ + // check if ads data contains ad for webseries + }else{ + /* + Updated the top header data + */ + vm.headerData = data + vm.setHeaderData() + } let sb = UIStoryboard(name: K.StoryBoard.audioBooks, bundle: nil) let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.AudioBooks.audioBookDetailsVC) as! AudioBookDetailsVC diff --git a/WOKA/Audio Books/AudioBookHomeVM.swift b/WOKA/Audio Books/AudioBookHomeVM.swift index 260eef8..769fe5f 100644 --- a/WOKA/Audio Books/AudioBookHomeVM.swift +++ b/WOKA/Audio Books/AudioBookHomeVM.swift @@ -24,7 +24,6 @@ class AudioBookHomeVM{ vc.scrollView.indicatorStyle = .white // or .white startShimmer() setupCell() - getContinueWatching() getShowListing() //Set banner height @@ -140,6 +139,7 @@ class AudioBookHomeVM{ vc.toast(msg: data.message ?? "Unrecognised error" , time: 2) case 1: Utilities.dismissProgressHUD() + getContinueWatching() guard let dataCount = data.data?.totalRecords ,let data = data.data?.audioData else{return} self.audioListData.append(contentsOf: data) self.vc.audioListingTableView.reloadData() @@ -190,12 +190,9 @@ class AudioBookHomeVM{ return } Utilities.dismissProgressHUD() - Utilities.alertWithBtnCompletion(title: "Error", msgBody: error.localizedDescription, okBtnStr: "Retry?", vc: self.vc) { isDone in - if isDone{ - self.getShowListing() - } - } -// vc.toast(msg: error.localizedDescription , time: 2) + vc.toast(msg: error.localizedDescription , time: K.ConstantString.errorTime) + self.stopShimmer() + self.vc.noDataView.isHidden = false } } } diff --git a/WOKA/Audio Books/AudioBooks.storyboard b/WOKA/Audio Books/AudioBooks.storyboard index 0f68718..ac865a7 100644 --- a/WOKA/Audio Books/AudioBooks.storyboard +++ b/WOKA/Audio Books/AudioBooks.storyboard @@ -208,13 +208,60 @@ + + + + + @@ -235,6 +282,7 @@ + @@ -571,6 +619,7 @@ + diff --git a/WOKA/Cart/ViewModel/CartListVM.swift b/WOKA/Cart/ViewModel/CartListVM.swift index c1aabbc..d6c8e1b 100644 --- a/WOKA/Cart/ViewModel/CartListVM.swift +++ b/WOKA/Cart/ViewModel/CartListVM.swift @@ -95,11 +95,7 @@ class CartListVM{ Utilities.dismissProgressHUD() self.refreshControl.endRefreshing() self.checkCount() - Utilities.alertWithBtnCompletion(title: "Error", msgBody: error.localizedDescription, okBtnStr: "Retry?", vc: self.vc) { isDone in - if isDone{ - self.getCartList() - } - } + vc.toast(msg: error.localizedDescription , time: K.ConstantString.errorTime) } } } diff --git a/WOKA/Constants K/ConstantString.swift b/WOKA/Constants K/ConstantString.swift index 18a5230..613f5a4 100644 --- a/WOKA/Constants K/ConstantString.swift +++ b/WOKA/Constants K/ConstantString.swift @@ -42,5 +42,7 @@ extension K{ static let rupeeSign = "₹" static let sync = "Syncing..." + + static let errorTime: Double = 1.6 } } diff --git a/WOKA/Games/Controller/GamesListVC.swift b/WOKA/Games/Controller/GamesListVC.swift index 6b83b76..1817c6b 100644 --- a/WOKA/Games/Controller/GamesListVC.swift +++ b/WOKA/Games/Controller/GamesListVC.swift @@ -21,6 +21,7 @@ class GamesListVC: UIViewController { @IBOutlet weak var headerTitleLabel: UILabel! @IBOutlet weak var gamesLoadingView: ShimmerEffectView! + @IBOutlet weak var noDataView: UIView! @IBOutlet weak var loadMoreBtn: LocalisedElementsButton! @IBOutlet weak var loadMoreActivityIndicator: UIActivityIndicatorView! @@ -47,8 +48,6 @@ class GamesListVC: UIViewController { rewardedAd = try await GADRewardedAd.load( withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest()) rewardedAd?.fullScreenContentDelegate = self - - } catch { print("Failed to load interstitial ad with error: \(error.localizedDescription)") } @@ -134,6 +133,17 @@ class GamesListVC: UIViewController { loadMoreActivityIndicator.startAnimating() vm.getGamesListing(isBtnClick: true) } + + @IBAction func retryBtnTapped(_ sender: LocalisedElementsButton) { + /* + make page 0 as its lazy loading, hide the no data stack as retry is tapped, + start the shimmer and reload tableview so that both header and table shimmer matches, get the karaoke listing + */ + vm.pageNo = 0 + noDataView.isHidden = true + vm.startShimmer() + vm.getGamesListing() + } } // MARK: - TableView DataSource , Delegates @@ -163,11 +173,16 @@ extension GamesListVC : TableViewSRC{ } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - /* - Updated the top header data - */ vm.indexToLoad = indexPath.row - vm.setHeaderData() + + /* + MAke logic for ads + */ + if let adsData = AuthFunc.shareInstance.adsData, adsData.result?.filter({$0.forPage == AdsEnum.games.rawValue}).first != nil{ + // check if ads data contains ad for webseries + }else{ + vm.setHeaderData() + } let data = vm.gameData[indexPath.row] @@ -179,22 +194,32 @@ extension GamesListVC : TableViewSRC{ This is only for test */ if data.title == "WOKA Ludo"{ -// guard let interstitial = interstitial else { -// return print("Ad wasn't ready.") -// } -// -// // The UIViewController parameter is an optional. -// interstitial.present(fromRootViewController: nil) + // guard let interstitial = interstitial else { + // return print("Ad wasn't ready.") + // } + // + // // The UIViewController parameter is an optional. + // interstitial.present(fromRootViewController: nil) guard let rewardedAd = rewardedAd else { return print("Ad wasn't ready.") - } - - // The UIViewController parameter is an optional. + } + + // The UIViewController parameter is an optional. rewardedAd.present(fromRootViewController: nil) { let reward = rewardedAd.adReward print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)") // TODO: Reward the user. - } + } + return + } + + if data.title == "WOKA Carrom"{ + guard let interstitial = interstitial else { + return print("Ad wasn't ready.") + } + + // The UIViewController parameter is an optional. + interstitial.present(fromRootViewController: nil) return } @@ -287,13 +312,13 @@ extension GamesListVC : GADFullScreenContentDelegate{ /// Tells the delegate that the ad dismissed full screen content. func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) { print("Ad did dismiss full screen content.") - let data = vm.gameData.first + let data = vm.gameData[vm.indexToLoad] let sb = UIStoryboard(name: K.StoryBoard.Games, bundle: nil) let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Games.gamesDetailVC) as! GamesDetailVC vcPush.modalPresentationStyle = .overCurrentContext vcPush.modalTransitionStyle = .crossDissolve - vcPush.gameIndex = 0 + vcPush.gameIndex = vm.indexToLoad vcPush.gameData = data vcPush.delegate = self self.present(vcPush, animated: true) diff --git a/WOKA/Games/Games.storyboard b/WOKA/Games/Games.storyboard index cfba77a..ad12c65 100644 --- a/WOKA/Games/Games.storyboard +++ b/WOKA/Games/Games.storyboard @@ -176,16 +176,63 @@ + + + + + @@ -200,6 +247,7 @@ + @@ -605,6 +653,7 @@ + diff --git a/WOKA/Games/ViewModel/GamesListVM.swift b/WOKA/Games/ViewModel/GamesListVM.swift index f70d729..5f8ba8e 100644 --- a/WOKA/Games/ViewModel/GamesListVM.swift +++ b/WOKA/Games/ViewModel/GamesListVM.swift @@ -153,11 +153,9 @@ class GamesListVM{ return } Utilities.dismissProgressHUD() - Utilities.alertWithBtnCompletion(title: "Error", msgBody: error.localizedDescription, okBtnStr: "Retry?", vc: self.vc) { isDone in - if isDone{ - self.getGamesListing() - } - } + self.stopShimmer() + self.vc.noDataView.isHidden = false + vc.toast(msg: error.localizedDescription, time: K.ConstantString.errorTime) } } } diff --git a/WOKA/Karaoke/Controller/KaraokeListingVC.swift b/WOKA/Karaoke/Controller/KaraokeListingVC.swift index b16b37c..7d4fd6b 100644 --- a/WOKA/Karaoke/Controller/KaraokeListingVC.swift +++ b/WOKA/Karaoke/Controller/KaraokeListingVC.swift @@ -16,6 +16,7 @@ class KaraokeListingVC: UIViewController { @IBOutlet weak var headerViewLabelHeight: NSLayoutConstraint! @IBOutlet weak var headerImage: UIImageView! @IBOutlet weak var headerTitleLabel: UILabel! + @IBOutlet weak var noDataStack: UIView! @IBOutlet weak var scrollView: UIScrollView! @@ -120,6 +121,17 @@ class KaraokeListingVC: UIViewController { vcPush.delegate = self self.present(vcPush, animated: true) } + + @IBAction func retryBtnTapped(_ sender: LocalisedElementsButton) { + /* + make page 0 as its lazy loading, hide the no data stack as retry is tapped, + start the shimmer and reload tableview so that both header and table shimmer matches, get the karaoke listing + */ + vm.pageNo = 0 + noDataStack.isHidden = true + vm.startShimmer() + vm.getKaraokeListing() + } } // MARK: - CollectionView Delegate and Data Source @@ -154,10 +166,17 @@ extension KaraokeListingVC : CollectionViewSRC{ } /* - Updated the top header data + MAke logic for ads */ - vm.headerData = data - vm.setHeaderData() + if let adsData = AuthFunc.shareInstance.adsData, adsData.result?.filter({$0.forPage == AdsEnum.karaoke.rawValue}).first != nil{ + // check if ads data contains ad for webseries + }else{ + /* + Updated the top header data + */ + vm.headerData = data + vm.setHeaderData() + } let sb = UIStoryboard(name: K.StoryBoard.Karaoke, bundle: nil) let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Karaoke.karaokeDetailsVC) as! KaraokeDetailsVC @@ -208,9 +227,9 @@ extension KaraokeListingVC : TableViewSRC{ if vm.karaokeListData.count == 0{ cell.showShimmer() }else{ + cell.stopShimmer() let data = vm.karaokeListData[indexPath.row] cell.setKaraokeData(data: data) - cell.stopShimmer() } cell.btnTapped = { [weak self] (type) -> Void in @@ -235,11 +254,19 @@ extension KaraokeListingVC : TableViewSRC{ if let id = data.id{ PersistentStorage.shared.addKaraokeCount(postID: id) } + /* - Updated the top header data + MAke logic for ads */ - vm.headerData = data - vm.setHeaderData() + if let adsData = AuthFunc.shareInstance.adsData, adsData.result?.filter({$0.forPage == AdsEnum.karaoke.rawValue}).first != nil{ + // check if ads data contains ad for webseries + }else{ + /* + Updated the top header data + */ + vm.headerData = data + vm.setHeaderData() + } let sb = UIStoryboard(name: K.StoryBoard.Karaoke, bundle: nil) let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Karaoke.karaokeDetailsVC) as! KaraokeDetailsVC diff --git a/WOKA/Karaoke/Karaoke.storyboard b/WOKA/Karaoke/Karaoke.storyboard index ef71d32..f29a68c 100644 --- a/WOKA/Karaoke/Karaoke.storyboard +++ b/WOKA/Karaoke/Karaoke.storyboard @@ -217,6 +217,49 @@ + @@ -225,9 +268,13 @@ + + + + @@ -242,6 +289,7 @@ + @@ -752,6 +800,7 @@ + diff --git a/WOKA/Karaoke/ViewModel/KaraokeListingVM.swift b/WOKA/Karaoke/ViewModel/KaraokeListingVM.swift index 75749cf..7a402b4 100644 --- a/WOKA/Karaoke/ViewModel/KaraokeListingVM.swift +++ b/WOKA/Karaoke/ViewModel/KaraokeListingVM.swift @@ -27,7 +27,7 @@ class KaraokeListingVM{ vc.title = "KARAOKE".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue) vc.view.applyGradient(colors: [color2, color1], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0)) startShimmer() - getContinueWatching() + getKaraokeListing() //Set banner height @@ -108,7 +108,7 @@ class KaraokeListingVM{ } Utilities.dismissProgressHUD() self.vc.continueWatchingStack.isHidden = true - vc.toast(msg: error.localizedDescription , time: 2) + vc.toast(msg: error.localizedDescription , time: K.ConstantString.errorTime) } } } @@ -122,7 +122,6 @@ class KaraokeListingVM{ switch result{ case .success(let data): guard let self else{ - Utilities.dismissProgressHUD() return } switch data.success{ @@ -130,13 +129,12 @@ class KaraokeListingVM{ /* Error */ - Utilities.dismissProgressHUD() self.vc.loadMoreBtn.isHidden = true self.vc.loadMoreActivityIndicator.stopAnimating() self.vc.loadMoreActivityIndicator.hidesWhenStopped = true // vc.toast(msg: data.message ?? "Unrecognised error" , time: 2) case 1: - Utilities.dismissProgressHUD() + getContinueWatching() guard let dataCount = data.data?.totalRecords, let data = data.data?.karaokeData else{return} self.karaokeListData.append(contentsOf: data) self.vc.karaokeListingTableView.reloadData() @@ -184,11 +182,11 @@ class KaraokeListingVM{ } case .failure(let error): guard let self else{ - Utilities.dismissProgressHUD() return } - Utilities.dismissProgressHUD() + self.stopShimmer() vc.toast(msg: error.localizedDescription , time: 2) + vc.noDataStack.isHidden = false } } } diff --git a/WOKA/Network Adapter/NetworkManager.swift b/WOKA/Network Adapter/NetworkManager.swift index 249d6e0..13050ab 100644 --- a/WOKA/Network Adapter/NetworkManager.swift +++ b/WOKA/Network Adapter/NetworkManager.swift @@ -87,6 +87,7 @@ class NetworkManager{ vcPush.contentLabel = "Please Login Again" vcPush.mainTitleText = "Session Expired." vcPush.yesBtnText = "Login" + vcPush.outsideViewTapGestureEnabled = false vcPush.onDoneBlock = { isDone in AuthFunc.shareInstance.logout() UIApplication.setRootView(LoginNavVC.instantiate(from: .AuthenticationSB)) diff --git a/WOKA/WebSeries/Controller/WebSeriesVC.swift b/WOKA/WebSeries/Controller/WebSeriesVC.swift index 34b42be..14ee984 100644 --- a/WOKA/WebSeries/Controller/WebSeriesVC.swift +++ b/WOKA/WebSeries/Controller/WebSeriesVC.swift @@ -169,10 +169,10 @@ extension WebSeriesVC : TableViewSRC{ if vm.showData.count == 0{ cell.showShimmer() }else{ + cell.stopShimmer() let data = vm.showData[indexPath.row] let categoryID = vm.categoryListingData[vm.dropDownModule.indexForSelectedRow ?? 0].id ?? 0 cell.setData(data: data,selectedCategory: categoryID) - cell.stopShimmer() } cell.btnTapped = { [self] (type) -> Void in diff --git a/WOKA/WebSeries/ViewModel/WebSeriesVM.swift b/WOKA/WebSeries/ViewModel/WebSeriesVM.swift index 4b14583..e095b8b 100644 --- a/WOKA/WebSeries/ViewModel/WebSeriesVM.swift +++ b/WOKA/WebSeries/ViewModel/WebSeriesVM.swift @@ -250,7 +250,7 @@ class WebSeriesVM{ return } Utilities.dismissProgressHUD() - vc.toast(msg: error.localizedDescription , time: 2) + vc.toast(msg: error.localizedDescription , time: K.ConstantString.errorTime) } } }