- Worked on my list and notification bottom Banner

- Tc - 69 fixed
- Tc - 70 fixed
- TC 71 fixed
- Added local ads to fm and more section
- Added local ads to mylist
- Fixed a bug for sync
* Fixed the crashing by temporary updating the wokastaging with raw data
This commit is contained in:
2024-10-01 19:57:04 +05:30
parent fedcf71ada
commit 7efcbb2d24
24 changed files with 749 additions and 418 deletions

View File

@@ -2895,7 +2895,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = WOKA/WOKA.entitlements; CODE_SIGN_ENTITLEMENTS = WOKA/WOKA.entitlements;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 3;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 4S9A74ZB6H; DEVELOPMENT_TEAM = 4S9A74ZB6H;
ENABLE_USER_SCRIPT_SANDBOXING = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO;
@@ -2939,7 +2939,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = WOKA/WOKA.entitlements; CODE_SIGN_ENTITLEMENTS = WOKA/WOKA.entitlements;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 3;
DEVELOPMENT_TEAM = 4S9A74ZB6H; DEVELOPMENT_TEAM = 4S9A74ZB6H;
ENABLE_USER_SCRIPT_SANDBOXING = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;

View File

@@ -37,7 +37,8 @@ class AudioBookHomeVM{
startShimmer() startShimmer()
setupCell() setupCell()
getShowListing() getShowListing()
checkAds()
} }
func checkAds(){ func checkAds(){
@@ -135,7 +136,6 @@ class AudioBookHomeVM{
self.vc.continueWatchingStack.isHidden = true self.vc.continueWatchingStack.isHidden = true
case 1: case 1:
Utilities.dismissProgressHUD() Utilities.dismissProgressHUD()
checkAds()
guard let data = data.data?.result else{return} guard let data = data.data?.result else{return}
if data.count == 0{ if data.count == 0{
@@ -264,7 +264,8 @@ class AudioBookHomeVM{
guard let isFav else{return} guard let isFav else{return}
if isFav == true { if isFav == true {
// if is fav then remove it // if is fav then remove it
LikeFavCommonFunc.shareInstance.removeFavourite(postID: postID, postType: postType, categoryID: 0, vc: self.vc) { [unowned self] isDone in LikeFavCommonFunc.shareInstance.removeFavourite(postID: postID, postType: postType, categoryID: 0, vc: self.vc) { [weak self] isDone in
guard let self else{return}
if isDone{ if isDone{
if let showListIndex = audioListData.firstIndex(where: { $0.id == postID }){ if let showListIndex = audioListData.firstIndex(where: { $0.id == postID }){
audioListData[showListIndex].markAsFavourite = false audioListData[showListIndex].markAsFavourite = false
@@ -298,8 +299,9 @@ class AudioBookHomeVM{
} }
} }
}else{ }else{
LikeFavCommonFunc.shareInstance.addFavourite(postID: postID, postType: postType, categoryID: 0, vc: self.vc) { [unowned self] isDone in LikeFavCommonFunc.shareInstance.addFavourite(postID: postID, postType: postType, categoryID: 0, vc: self.vc) { [weak self] isDone in
if isDone{ if isDone{
guard let self else{return}
if let showListIndex = audioListData.firstIndex(where: { $0.id == postID }){ if let showListIndex = audioListData.firstIndex(where: { $0.id == postID }){
audioListData[showListIndex].markAsFavourite = true audioListData[showListIndex].markAsFavourite = true
vc.audioListingTableView.reloadRows(at: [IndexPath(row: showListIndex, section: 0)],with: .none) vc.audioListingTableView.reloadRows(at: [IndexPath(row: showListIndex, section: 0)],with: .none)
@@ -337,7 +339,8 @@ class AudioBookHomeVM{
guard let isLiked else{return} guard let isLiked else{return}
if isLiked{ if isLiked{
// Unlike // Unlike
LikeFavCommonFunc.shareInstance.unlikePost(postID: postID, postType: postType, vc: self.vc) { [unowned self] isDone in LikeFavCommonFunc.shareInstance.unlikePost(postID: postID, postType: postType, vc: self.vc) { [weak self] isDone in
guard let self else{return}
if isDone{ if isDone{
if let showListIndex = audioListData.firstIndex(where: { $0.id == postID }){ if let showListIndex = audioListData.firstIndex(where: { $0.id == postID }){
audioListData[showListIndex].isLiked = false audioListData[showListIndex].isLiked = false
@@ -367,7 +370,8 @@ class AudioBookHomeVM{
} }
}else{ }else{
//Like //Like
LikeFavCommonFunc.shareInstance.likePost(postID: postID, postType: postType, vc: self.vc){ [unowned self] isDone in LikeFavCommonFunc.shareInstance.likePost(postID: postID, postType: postType, vc: self.vc){ [weak self] isDone in
guard let self else{return}
if isDone{ if isDone{
if let showListIndex = audioListData.firstIndex(where: { $0.id == postID }){ if let showListIndex = audioListData.firstIndex(where: { $0.id == postID }){
audioListData[showListIndex].isLiked = true audioListData[showListIndex].isLiked = true

View File

@@ -27,6 +27,8 @@ extension K{
static let myListNotifications = "ca-app-pub-5699008063638916/8922510426" static let myListNotifications = "ca-app-pub-5699008063638916/8922510426"
static let blogs = "ca-app-pub-5699008063638916/8441860789"
// //
// //
// //

View File

@@ -286,7 +286,9 @@ final class PersistentStorage
return return
} else{ } else{
// send data again to server // send data again to server
sendDataToServer() if result.count != 0{
sendDataToServer(isLogout: isLogout)
}
print("Data sent Again.") print("Data sent Again.")
} }
@@ -424,7 +426,9 @@ extension PersistentStorage{
return return
}else{ }else{
// send ads data again to server // send ads data again to server
sendAdsData() if result.count != 0{
sendAdsData()
}
print("Ads Data sent Again.") print("Ads Data sent Again.")
} }

View File

@@ -213,7 +213,8 @@ class GamesListVM{
case .favourite: case .favourite:
guard let isFav = data.markAsFavourite ,let postID = data.id,let postType = data.contentMoreDetails?.first?.postType else{return} guard let isFav = data.markAsFavourite ,let postID = data.id,let postType = data.contentMoreDetails?.first?.postType else{return}
if isFav == true { if isFav == true {
LikeFavCommonFunc.shareInstance.removeFavourite(postID: postID, postType: postType, categoryID: 0, vc: self.vc) { [unowned self] isDone in LikeFavCommonFunc.shareInstance.removeFavourite(postID: postID, postType: postType, categoryID: 0, vc: self.vc) { [weak self] isDone in
guard let self else{return}
if isDone{ if isDone{
gameData[index].markAsFavourite = false gameData[index].markAsFavourite = false
vc.gamesListingTableView.reloadRows(at: [IndexPath(row: index, section: 0)],with: .none) vc.gamesListingTableView.reloadRows(at: [IndexPath(row: index, section: 0)],with: .none)
@@ -228,7 +229,8 @@ class GamesListVM{
} }
} }
}else{ }else{
LikeFavCommonFunc.shareInstance.addFavourite(postID: postID, postType: postType, categoryID: 0, vc: self.vc) { [unowned self] isDone in LikeFavCommonFunc.shareInstance.addFavourite(postID: postID, postType: postType, categoryID: 0, vc: self.vc) { [weak self] isDone in
guard let self else{return}
if isDone{ if isDone{
gameData[index].markAsFavourite = true gameData[index].markAsFavourite = true
vc.gamesListingTableView.reloadRows(at: [IndexPath(row: index, section: 0)],with: .none) vc.gamesListingTableView.reloadRows(at: [IndexPath(row: index, section: 0)],with: .none)
@@ -246,7 +248,8 @@ class GamesListVM{
case .liked: case .liked:
guard let isLiked = data.isLiked ,let postID = data.id,let postType = data.contentMoreDetails?.first?.postType else{return} guard let isLiked = data.isLiked ,let postID = data.id,let postType = data.contentMoreDetails?.first?.postType else{return}
if isLiked{ if isLiked{
LikeFavCommonFunc.shareInstance.unlikePost(postID: postID, postType: postType, vc: self.vc) { [unowned self] isDone in LikeFavCommonFunc.shareInstance.unlikePost(postID: postID, postType: postType, vc: self.vc) { [weak self] isDone in
guard let self else{return}
if isDone{ if isDone{
gameData[index].isLiked = false gameData[index].isLiked = false
gameData[index].likesCount! -= 1 gameData[index].likesCount! -= 1
@@ -264,7 +267,8 @@ class GamesListVM{
} }
} }
}else{ }else{
LikeFavCommonFunc.shareInstance.likePost(postID: postID, postType: postType, vc: self.vc){ [unowned self] isDone in LikeFavCommonFunc.shareInstance.likePost(postID: postID, postType: postType, vc: self.vc){ [weak self] isDone in
guard let self else{return}
if isDone{ if isDone{
gameData[index].isLiked = true gameData[index].isLiked = true
gameData[index].likesCount! += 1 gameData[index].likesCount! += 1

View File

@@ -41,6 +41,7 @@ class MyListVC: UIViewController{
@IBOutlet weak var shimmerStack: UIStackView! @IBOutlet weak var shimmerStack: UIStackView!
@IBOutlet var shimmerView: [ShimmerEffectView]! @IBOutlet var shimmerView: [ShimmerEffectView]!
@IBOutlet weak var adView: UIView! @IBOutlet weak var adView: UIView!
@IBOutlet weak var adHeight: NSLayoutConstraint!
var vm = MyListVM() var vm = MyListVM()
@@ -61,7 +62,8 @@ class MyListVC: UIViewController{
} }
@objc func refresh(_ sender: AnyObject) { @objc func refresh(_ sender: AnyObject) {
Timer.scheduledTimer(withTimeInterval: 1, repeats: false) { [unowned self] _ in Timer.scheduledTimer(withTimeInterval: 1, repeats: false) { [weak self] _ in
guard let self else{return}
vm.getFavouriteListing() vm.getFavouriteListing()
} }
} }
@@ -807,10 +809,9 @@ extension MyListVC : UICollectionViewDelegateFlowLayout{
// MARK: - Google Ad Banner Delegate // MARK: - Google Ad Banner Delegate
extension MyListVC : GADBannerViewDelegate{ extension MyListVC : GADBannerViewDelegate{
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) { func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
adView.isHidden = false
bannerView.alpha = 0 bannerView.alpha = 0
bannerView.backgroundColor = #colorLiteral(red: 0.01960784314, green: 0, blue: 0.2196078431, alpha: 1)
UIView.animate(withDuration: 0.2, animations: { UIView.animate(withDuration: 0.2, animations: {
bannerView.alpha = 1 bannerView.alpha = 1
}) })
@@ -818,6 +819,11 @@ extension MyListVC : GADBannerViewDelegate{
} }
func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) { func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) {
UIView.animate(withDuration: 0.2, animations: { [weak self] in
guard let self else{return}
bannerView.alpha = 0
adHeight.constant = 0
})
print("bannerView:didFailToReceiveAdWithError: \(error.localizedDescription)") print("bannerView:didFailToReceiveAdWithError: \(error.localizedDescription)")
} }

View File

@@ -1071,312 +1071,307 @@
</label> </label>
</subviews> </subviews>
</stackView> </stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="R9v-rE-NRk"> <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SyC-Qw-kzE">
<rect key="frame" x="0.0" y="119" width="430" height="725"/> <rect key="frame" x="0.0" y="121" width="430" height="723"/>
<subviews> <subviews>
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SyC-Qw-kzE"> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="45l-57-MA3">
<rect key="frame" x="0.0" y="0.0" width="430" height="725"/> <rect key="frame" x="0.0" y="0.0" width="430" height="1385"/>
<subviews> <subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="45l-57-MA3"> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="vZT-j7-NyY">
<rect key="frame" x="0.0" y="0.0" width="430" height="1385"/> <rect key="frame" x="0.0" y="10" width="430" height="261"/>
<subviews> <subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="vZT-j7-NyY"> <stackView opaque="NO" contentMode="scaleToFill" distribution="equalSpacing" translatesAutoresizingMaskIntoConstraints="NO" id="i8e-Ix-aOR">
<rect key="frame" x="0.0" y="10" width="430" height="261"/> <rect key="frame" x="0.0" y="0.0" width="430" height="31"/>
<subviews> <subviews>
<stackView opaque="NO" contentMode="scaleToFill" distribution="equalSpacing" translatesAutoresizingMaskIntoConstraints="NO" id="i8e-Ix-aOR"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="WEBSERIES (ENGLISH)" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xht-7u-pAV" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="430" height="31"/> <rect key="frame" x="10" y="0.0" width="410" height="31"/>
<subviews> <fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="WEBSERIES (ENGLISH)" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xht-7u-pAV" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target"> <color key="textColor" name="TextDarkBlue"/>
<rect key="frame" x="10" y="0.0" width="410" height="31"/> <nil key="highlightedColor"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/> </label>
<color key="textColor" name="TextDarkBlue"/> <button hidden="YES" opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="zNj-21-nce" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<nil key="highlightedColor"/> <rect key="frame" x="0.0" y="0.0" width="100" height="31"/>
</label> <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<button hidden="YES" opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="zNj-21-nce" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="100" height="31"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="width" constant="100" id="xos-0R-tR3"/>
</constraints>
<color key="tintColor" name="ImageDarkBlue"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain">
<attributedString key="attributedTitle">
<fragment content="VIEW ALL">
<attributes>
<font key="NSFont" size="14" name="Exo2-Bold"/>
</attributes>
</fragment>
</attributedString>
</buttonConfiguration>
<connections>
<action selector="viewAllBtnTapped:" destination="55l-Gk-Npk" eventType="touchUpInside" id="kfL-Hw-odi"/>
</connections>
</button>
</subviews>
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
</stackView>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="6Y6-vJ-OYT">
<rect key="frame" x="0.0" y="31" width="430" height="230"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="230" id="wyY-bJ-KIZ"/> <constraint firstAttribute="width" constant="100" id="xos-0R-tR3"/>
</constraints> </constraints>
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="fxC-do-NZl"> <color key="tintColor" name="ImageDarkBlue"/>
<size key="itemSize" width="128" height="128"/> <state key="normal" title="Button"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/> <buttonConfiguration key="configuration" style="plain">
<size key="footerReferenceSize" width="0.0" height="0.0"/> <attributedString key="attributedTitle">
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/> <fragment content="VIEW ALL">
</collectionViewFlowLayout> <attributes>
<cells/> <font key="NSFont" size="14" name="Exo2-Bold"/>
</collectionView> </attributes>
</fragment>
</attributedString>
</buttonConfiguration>
<connections>
<action selector="viewAllBtnTapped:" destination="55l-Gk-Npk" eventType="touchUpInside" id="kfL-Hw-odi"/>
</connections>
</button>
</subviews> </subviews>
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
</stackView> </stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="h1g-o9-Qbb"> <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="6Y6-vJ-OYT">
<rect key="frame" x="0.0" y="281" width="430" height="261"/> <rect key="frame" x="0.0" y="31" width="430" height="230"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5FA-pO-H2O">
<rect key="frame" x="0.0" y="0.0" width="430" height="31"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="WEBSERIES (HINDI)" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="UTS-hr-ix6" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="10" y="0.0" width="410" height="31"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="textColor" name="TextDarkBlue"/>
<nil key="highlightedColor"/>
</label>
<button hidden="YES" opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="PHL-y5-hHs" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="100" height="31"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="width" constant="100" id="kCo-dL-89G"/>
</constraints>
<color key="tintColor" name="ImageDarkBlue"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain">
<attributedString key="attributedTitle">
<fragment content="VIEW ALL">
<attributes>
<font key="NSFont" size="14" name="Exo2-Bold"/>
</attributes>
</fragment>
</attributedString>
</buttonConfiguration>
<connections>
<action selector="viewAllBtnTapped:" destination="55l-Gk-Npk" eventType="touchUpInside" id="M41-T6-ZPA"/>
</connections>
</button>
</subviews>
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
</stackView>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="aW7-x8-HRh">
<rect key="frame" x="0.0" y="31" width="430" height="230"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="230" id="rMj-vz-b8j"/>
</constraints>
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="zYF-w0-QcX">
<size key="itemSize" width="128" height="128"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<cells/>
</collectionView>
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="G4a-BA-Nw8">
<rect key="frame" x="0.0" y="552" width="430" height="261"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xQU-Hb-duc">
<rect key="frame" x="0.0" y="0.0" width="430" height="31"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="AUDIO BOOKS" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uOV-bc-Z6x" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="10" y="0.0" width="410" height="31"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="textColor" name="TextDarkBlue"/>
<nil key="highlightedColor"/>
</label>
<button hidden="YES" opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="f9x-Vl-IXu" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="100" height="31"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="width" constant="100" id="U3P-PG-Fle"/>
</constraints>
<color key="tintColor" name="ImageDarkBlue"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain">
<attributedString key="attributedTitle">
<fragment content="VIEW ALL">
<attributes>
<font key="NSFont" size="14" name="Exo2-Bold"/>
</attributes>
</fragment>
</attributedString>
</buttonConfiguration>
<connections>
<action selector="viewAllBtnTapped:" destination="55l-Gk-Npk" eventType="touchUpInside" id="dK1-eI-Lq5"/>
</connections>
</button>
</subviews>
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
</stackView>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="ABR-no-OBf">
<rect key="frame" x="0.0" y="31" width="430" height="230"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="230" id="hbc-ha-qTS"/>
</constraints>
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="fFv-qj-izU">
<size key="itemSize" width="128" height="128"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<view key="backgroundView" hidden="YES" alpha="0.59999999999999998" contentMode="scaleToFill" id="ygH-wj-cLk">
<rect key="frame" x="0.0" y="0.0" width="430" height="230"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<cells/>
</collectionView>
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="jE2-WP-tD4">
<rect key="frame" x="0.0" y="823" width="430" height="261"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="YGM-QR-sbm">
<rect key="frame" x="0.0" y="0.0" width="430" height="31"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="KARAOKE" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JBX-qP-uJM" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="10" y="0.0" width="410" height="31"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="textColor" name="TextDarkBlue"/>
<nil key="highlightedColor"/>
</label>
<button hidden="YES" opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="MNq-YB-EUG" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="100" height="31"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="width" constant="100" id="bma-Om-NPP"/>
</constraints>
<color key="tintColor" name="ImageDarkBlue"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain">
<attributedString key="attributedTitle">
<fragment content="VIEW ALL">
<attributes>
<font key="NSFont" size="14" name="Exo2-Bold"/>
</attributes>
</fragment>
</attributedString>
</buttonConfiguration>
<connections>
<action selector="viewAllBtnTapped:" destination="55l-Gk-Npk" eventType="touchUpInside" id="pAS-gT-xTU"/>
</connections>
</button>
</subviews>
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
</stackView>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="Grz-ok-w2U">
<rect key="frame" x="0.0" y="31" width="430" height="230"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="230" id="cJI-sp-1u2"/>
</constraints>
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="IHu-Jh-YN9">
<size key="itemSize" width="128" height="128"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<cells/>
</collectionView>
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="Cgp-Ok-Imj">
<rect key="frame" x="0.0" y="1094" width="430" height="261"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="V6u-Uf-Yc7">
<rect key="frame" x="0.0" y="0.0" width="430" height="31"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="GAMES" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Qph-Fh-w3E" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="10" y="0.0" width="410" height="31"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="textColor" name="TextDarkBlue"/>
<nil key="highlightedColor"/>
</label>
<button hidden="YES" opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="KaX-7S-wh3" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="100" height="31"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="width" constant="100" id="mzh-ro-W0m"/>
</constraints>
<color key="tintColor" name="ImageDarkBlue"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain">
<attributedString key="attributedTitle">
<fragment content="VIEW ALL">
<attributes>
<font key="NSFont" size="14" name="Exo2-Bold"/>
</attributes>
</fragment>
</attributedString>
</buttonConfiguration>
<connections>
<action selector="viewAllBtnTapped:" destination="55l-Gk-Npk" eventType="touchUpInside" id="ley-C1-dsk"/>
</connections>
</button>
</subviews>
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
</stackView>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="5ff-Y7-nit">
<rect key="frame" x="0.0" y="31" width="430" height="230"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="230" id="vnV-51-p2Q"/>
</constraints>
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="bOQ-ng-G9a">
<size key="itemSize" width="128" height="128"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<cells/>
</collectionView>
</subviews>
</stackView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="F2F-sK-9oY">
<rect key="frame" x="0.0" y="1365" width="430" height="20"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="20" id="Jsj-FP-k6f"/> <constraint firstAttribute="height" constant="230" id="wyY-bJ-KIZ"/>
</constraints> </constraints>
</view> <collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="fxC-do-NZl">
<size key="itemSize" width="128" height="128"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<cells/>
</collectionView>
</subviews> </subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<edgeInsets key="layoutMargins" top="10" left="0.0" bottom="0.0" right="0.0"/>
</stackView> </stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="h1g-o9-Qbb">
<rect key="frame" x="0.0" y="281" width="430" height="261"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5FA-pO-H2O">
<rect key="frame" x="0.0" y="0.0" width="430" height="31"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="WEBSERIES (HINDI)" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="UTS-hr-ix6" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="10" y="0.0" width="410" height="31"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="textColor" name="TextDarkBlue"/>
<nil key="highlightedColor"/>
</label>
<button hidden="YES" opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="PHL-y5-hHs" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="100" height="31"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="width" constant="100" id="kCo-dL-89G"/>
</constraints>
<color key="tintColor" name="ImageDarkBlue"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain">
<attributedString key="attributedTitle">
<fragment content="VIEW ALL">
<attributes>
<font key="NSFont" size="14" name="Exo2-Bold"/>
</attributes>
</fragment>
</attributedString>
</buttonConfiguration>
<connections>
<action selector="viewAllBtnTapped:" destination="55l-Gk-Npk" eventType="touchUpInside" id="M41-T6-ZPA"/>
</connections>
</button>
</subviews>
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
</stackView>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="aW7-x8-HRh">
<rect key="frame" x="0.0" y="31" width="430" height="230"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="230" id="rMj-vz-b8j"/>
</constraints>
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="zYF-w0-QcX">
<size key="itemSize" width="128" height="128"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<cells/>
</collectionView>
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="G4a-BA-Nw8">
<rect key="frame" x="0.0" y="552" width="430" height="261"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xQU-Hb-duc">
<rect key="frame" x="0.0" y="0.0" width="430" height="31"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="AUDIO BOOKS" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uOV-bc-Z6x" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="10" y="0.0" width="410" height="31"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="textColor" name="TextDarkBlue"/>
<nil key="highlightedColor"/>
</label>
<button hidden="YES" opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="f9x-Vl-IXu" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="100" height="31"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="width" constant="100" id="U3P-PG-Fle"/>
</constraints>
<color key="tintColor" name="ImageDarkBlue"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain">
<attributedString key="attributedTitle">
<fragment content="VIEW ALL">
<attributes>
<font key="NSFont" size="14" name="Exo2-Bold"/>
</attributes>
</fragment>
</attributedString>
</buttonConfiguration>
<connections>
<action selector="viewAllBtnTapped:" destination="55l-Gk-Npk" eventType="touchUpInside" id="dK1-eI-Lq5"/>
</connections>
</button>
</subviews>
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
</stackView>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="ABR-no-OBf">
<rect key="frame" x="0.0" y="31" width="430" height="230"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="230" id="hbc-ha-qTS"/>
</constraints>
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="fFv-qj-izU">
<size key="itemSize" width="128" height="128"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<view key="backgroundView" hidden="YES" alpha="0.59999999999999998" contentMode="scaleToFill" id="ygH-wj-cLk">
<rect key="frame" x="0.0" y="0.0" width="430" height="230"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<cells/>
</collectionView>
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="jE2-WP-tD4">
<rect key="frame" x="0.0" y="823" width="430" height="261"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="YGM-QR-sbm">
<rect key="frame" x="0.0" y="0.0" width="430" height="31"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="KARAOKE" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JBX-qP-uJM" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="10" y="0.0" width="410" height="31"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="textColor" name="TextDarkBlue"/>
<nil key="highlightedColor"/>
</label>
<button hidden="YES" opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="MNq-YB-EUG" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="100" height="31"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="width" constant="100" id="bma-Om-NPP"/>
</constraints>
<color key="tintColor" name="ImageDarkBlue"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain">
<attributedString key="attributedTitle">
<fragment content="VIEW ALL">
<attributes>
<font key="NSFont" size="14" name="Exo2-Bold"/>
</attributes>
</fragment>
</attributedString>
</buttonConfiguration>
<connections>
<action selector="viewAllBtnTapped:" destination="55l-Gk-Npk" eventType="touchUpInside" id="pAS-gT-xTU"/>
</connections>
</button>
</subviews>
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
</stackView>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="Grz-ok-w2U">
<rect key="frame" x="0.0" y="31" width="430" height="230"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="230" id="cJI-sp-1u2"/>
</constraints>
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="IHu-Jh-YN9">
<size key="itemSize" width="128" height="128"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<cells/>
</collectionView>
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="Cgp-Ok-Imj">
<rect key="frame" x="0.0" y="1094" width="430" height="261"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="V6u-Uf-Yc7">
<rect key="frame" x="0.0" y="0.0" width="430" height="31"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="GAMES" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Qph-Fh-w3E" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="10" y="0.0" width="410" height="31"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="textColor" name="TextDarkBlue"/>
<nil key="highlightedColor"/>
</label>
<button hidden="YES" opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="KaX-7S-wh3" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="100" height="31"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="width" constant="100" id="mzh-ro-W0m"/>
</constraints>
<color key="tintColor" name="ImageDarkBlue"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain">
<attributedString key="attributedTitle">
<fragment content="VIEW ALL">
<attributes>
<font key="NSFont" size="14" name="Exo2-Bold"/>
</attributes>
</fragment>
</attributedString>
</buttonConfiguration>
<connections>
<action selector="viewAllBtnTapped:" destination="55l-Gk-Npk" eventType="touchUpInside" id="ley-C1-dsk"/>
</connections>
</button>
</subviews>
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
</stackView>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="5ff-Y7-nit">
<rect key="frame" x="0.0" y="31" width="430" height="230"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="230" id="vnV-51-p2Q"/>
</constraints>
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="bOQ-ng-G9a">
<size key="itemSize" width="128" height="128"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<cells/>
</collectionView>
</subviews>
</stackView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="F2F-sK-9oY">
<rect key="frame" x="0.0" y="1365" width="430" height="20"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="20" id="Jsj-FP-k6f"/>
</constraints>
</view>
</subviews> </subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints> <edgeInsets key="layoutMargins" top="10" left="0.0" bottom="0.0" right="0.0"/>
<constraint firstAttribute="bottom" secondItem="45l-57-MA3" secondAttribute="bottom" id="Nkr-Hz-XSO"/> </stackView>
<constraint firstItem="ijh-ix-uLc" firstAttribute="trailing" secondItem="45l-57-MA3" secondAttribute="trailing" id="Wxo-E8-K4H"/>
<constraint firstItem="45l-57-MA3" firstAttribute="width" secondItem="ac6-o2-deF" secondAttribute="width" id="f31-pJ-z1V"/>
<constraint firstItem="45l-57-MA3" firstAttribute="top" secondItem="SyC-Qw-kzE" secondAttribute="top" id="gqz-lr-K2w"/>
<constraint firstItem="45l-57-MA3" firstAttribute="leading" secondItem="ijh-ix-uLc" secondAttribute="leading" id="tlR-4G-Hsf"/>
</constraints>
<viewLayoutGuide key="contentLayoutGuide" id="ac6-o2-deF"/>
<viewLayoutGuide key="frameLayoutGuide" id="ijh-ix-uLc"/>
</scrollView>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Rrg-6L-VMo">
<rect key="frame" x="0.0" y="0.0" width="430" height="100"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="100" id="2WA-Xw-Yxf"/>
</constraints>
</view>
</subviews> </subviews>
</stackView> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="bottom" secondItem="45l-57-MA3" secondAttribute="bottom" id="Nkr-Hz-XSO"/>
<constraint firstItem="ijh-ix-uLc" firstAttribute="trailing" secondItem="45l-57-MA3" secondAttribute="trailing" id="Wxo-E8-K4H"/>
<constraint firstItem="45l-57-MA3" firstAttribute="width" secondItem="ac6-o2-deF" secondAttribute="width" id="f31-pJ-z1V"/>
<constraint firstItem="45l-57-MA3" firstAttribute="top" secondItem="SyC-Qw-kzE" secondAttribute="top" id="gqz-lr-K2w"/>
<constraint firstItem="45l-57-MA3" firstAttribute="leading" secondItem="ijh-ix-uLc" secondAttribute="leading" id="tlR-4G-Hsf"/>
</constraints>
<viewLayoutGuide key="contentLayoutGuide" id="ac6-o2-deF"/>
<viewLayoutGuide key="frameLayoutGuide" id="ijh-ix-uLc"/>
</scrollView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Rrg-6L-VMo">
<rect key="frame" x="0.0" y="844" width="430" height="0.0"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" id="2WA-Xw-Yxf"/>
</constraints>
</view>
<stackView hidden="YES" opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="25" translatesAutoresizingMaskIntoConstraints="NO" id="Dau-7f-0vb" userLabel="GuestLoginStack"> <stackView hidden="YES" opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="25" translatesAutoresizingMaskIntoConstraints="NO" id="Dau-7f-0vb" userLabel="GuestLoginStack">
<rect key="frame" x="20" y="346.66666666666669" width="390" height="214.66666666666669"/> <rect key="frame" x="20" y="346.66666666666669" width="390" height="214.66666666666669"/>
<subviews> <subviews>
@@ -1474,15 +1469,12 @@
</userDefinedRuntimeAttribute> </userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes> </userDefinedRuntimeAttributes>
</stackView> </stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="n3b-MP-wOW"> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillEqually" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="n3b-MP-wOW">
<rect key="frame" x="0.0" y="126" width="430" height="660"/> <rect key="frame" x="0.0" y="126" width="430" height="708"/>
<subviews> <subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zVG-vD-Pa9" customClass="ShimmerEffectView" customModule="WOKA" customModuleProvider="target"> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zVG-vD-Pa9" customClass="ShimmerEffectView" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="15" y="10" width="400" height="200"/> <rect key="frame" x="15" y="10" width="400" height="216"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/> <color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstAttribute="height" constant="200" id="BOv-Or-mtr"/>
</constraints>
<userDefinedRuntimeAttributes> <userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<integer key="value" value="10"/> <integer key="value" value="10"/>
@@ -1490,11 +1482,8 @@
</userDefinedRuntimeAttributes> </userDefinedRuntimeAttributes>
</view> </view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5PD-9x-fXz" customClass="ShimmerEffectView" customModule="WOKA" customModuleProvider="target"> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5PD-9x-fXz" customClass="ShimmerEffectView" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="15" y="230" width="400" height="200"/> <rect key="frame" x="15" y="246" width="400" height="216"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/> <color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstAttribute="height" constant="200" id="1Hd-rU-zAi"/>
</constraints>
<userDefinedRuntimeAttributes> <userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<integer key="value" value="10"/> <integer key="value" value="10"/>
@@ -1502,11 +1491,8 @@
</userDefinedRuntimeAttributes> </userDefinedRuntimeAttributes>
</view> </view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="LMU-lo-nNz" customClass="ShimmerEffectView" customModule="WOKA" customModuleProvider="target"> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="LMU-lo-nNz" customClass="ShimmerEffectView" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="15" y="450" width="400" height="200"/> <rect key="frame" x="15" y="482" width="400" height="216"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/> <color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstAttribute="height" constant="200" id="xlu-qi-KIb"/>
</constraints>
<userDefinedRuntimeAttributes> <userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<integer key="value" value="10"/> <integer key="value" value="10"/>
@@ -1523,10 +1509,9 @@
<constraints> <constraints>
<constraint firstItem="Dau-7f-0vb" firstAttribute="centerY" secondItem="fPD-rO-ZgU" secondAttribute="centerY" id="0rW-IM-pWT"/> <constraint firstItem="Dau-7f-0vb" firstAttribute="centerY" secondItem="fPD-rO-ZgU" secondAttribute="centerY" id="0rW-IM-pWT"/>
<constraint firstItem="fPD-rO-ZgU" firstAttribute="trailing" secondItem="a7Y-B6-f0Q" secondAttribute="trailing" constant="15" id="1TC-Nf-fdz"/> <constraint firstItem="fPD-rO-ZgU" firstAttribute="trailing" secondItem="a7Y-B6-f0Q" secondAttribute="trailing" constant="15" id="1TC-Nf-fdz"/>
<constraint firstItem="fPD-rO-ZgU" firstAttribute="trailing" secondItem="R9v-rE-NRk" secondAttribute="trailing" id="4X2-zG-Zll"/>
<constraint firstItem="jbL-QO-JJl" firstAttribute="leading" secondItem="5ML-g4-686" secondAttribute="trailing" constant="15" id="5bI-AA-E64"/> <constraint firstItem="jbL-QO-JJl" firstAttribute="leading" secondItem="5ML-g4-686" secondAttribute="trailing" constant="15" id="5bI-AA-E64"/>
<constraint firstItem="fPD-rO-ZgU" firstAttribute="leading" secondItem="R9v-rE-NRk" secondAttribute="leading" id="8SS-M5-jO9"/> <constraint firstItem="Rrg-6L-VMo" firstAttribute="top" secondItem="n3b-MP-wOW" secondAttribute="bottom" constant="10" id="ACM-Nd-PMA"/>
<constraint firstItem="R9v-rE-NRk" firstAttribute="top" secondItem="cxl-Av-gEU" secondAttribute="bottom" constant="3" id="Bcb-dt-tuA"/> <constraint firstItem="fPD-rO-ZgU" firstAttribute="trailing" secondItem="Rrg-6L-VMo" secondAttribute="trailing" id="CkS-3X-HNC"/>
<constraint firstItem="n3b-MP-wOW" firstAttribute="leading" secondItem="fPD-rO-ZgU" secondAttribute="leading" id="E1C-E8-97R"/> <constraint firstItem="n3b-MP-wOW" firstAttribute="leading" secondItem="fPD-rO-ZgU" secondAttribute="leading" id="E1C-E8-97R"/>
<constraint firstItem="n3b-MP-wOW" firstAttribute="trailing" secondItem="fPD-rO-ZgU" secondAttribute="trailing" id="I4g-uI-OU6"/> <constraint firstItem="n3b-MP-wOW" firstAttribute="trailing" secondItem="fPD-rO-ZgU" secondAttribute="trailing" id="I4g-uI-OU6"/>
<constraint firstItem="fTK-nk-bN9" firstAttribute="leading" secondItem="fPD-rO-ZgU" secondAttribute="leading" id="KDZ-vt-s13"/> <constraint firstItem="fTK-nk-bN9" firstAttribute="leading" secondItem="fPD-rO-ZgU" secondAttribute="leading" id="KDZ-vt-s13"/>
@@ -1534,24 +1519,29 @@
<constraint firstItem="cxl-Av-gEU" firstAttribute="bottom" secondItem="a7Y-B6-f0Q" secondAttribute="bottom" constant="7" id="Lur-Ax-w8w"/> <constraint firstItem="cxl-Av-gEU" firstAttribute="bottom" secondItem="a7Y-B6-f0Q" secondAttribute="bottom" constant="7" id="Lur-Ax-w8w"/>
<constraint firstItem="Dau-7f-0vb" firstAttribute="leading" secondItem="23B-pX-ODs" secondAttribute="leading" constant="20" id="M71-ET-eJZ"/> <constraint firstItem="Dau-7f-0vb" firstAttribute="leading" secondItem="23B-pX-ODs" secondAttribute="leading" constant="20" id="M71-ET-eJZ"/>
<constraint firstItem="5ML-g4-686" firstAttribute="leading" secondItem="23B-pX-ODs" secondAttribute="leading" constant="5" id="Na5-Wr-DSa"/> <constraint firstItem="5ML-g4-686" firstAttribute="leading" secondItem="23B-pX-ODs" secondAttribute="leading" constant="5" id="Na5-Wr-DSa"/>
<constraint firstItem="n3b-MP-wOW" firstAttribute="bottom" relation="lessThanOrEqual" secondItem="fPD-rO-ZgU" secondAttribute="bottom" id="UgR-R8-f7G"/> <constraint firstItem="SyC-Qw-kzE" firstAttribute="top" secondItem="cxl-Av-gEU" secondAttribute="bottom" constant="5" id="Pp9-XV-Tip"/>
<constraint firstItem="fPD-rO-ZgU" firstAttribute="bottom" secondItem="Rrg-6L-VMo" secondAttribute="bottom" constant="5" id="VRV-bg-TtW"/>
<constraint firstItem="fPD-rO-ZgU" firstAttribute="trailing" secondItem="SyC-Qw-kzE" secondAttribute="trailing" id="Wl8-mF-eC2"/>
<constraint firstItem="fPD-rO-ZgU" firstAttribute="trailing" secondItem="fTK-nk-bN9" secondAttribute="trailing" id="XRW-xO-sGx"/> <constraint firstItem="fPD-rO-ZgU" firstAttribute="trailing" secondItem="fTK-nk-bN9" secondAttribute="trailing" id="XRW-xO-sGx"/>
<constraint firstItem="cxl-Av-gEU" firstAttribute="top" secondItem="23B-pX-ODs" secondAttribute="top" id="Y0G-Ua-UcP"/> <constraint firstItem="cxl-Av-gEU" firstAttribute="top" secondItem="23B-pX-ODs" secondAttribute="top" id="Y0G-Ua-UcP"/>
<constraint firstItem="QHo-nZ-miK" firstAttribute="centerX" secondItem="fPD-rO-ZgU" secondAttribute="centerX" id="ZkK-bD-6Ys"/> <constraint firstItem="QHo-nZ-miK" firstAttribute="centerX" secondItem="fPD-rO-ZgU" secondAttribute="centerX" id="ZkK-bD-6Ys"/>
<constraint firstItem="5ML-g4-686" firstAttribute="centerY" secondItem="a7Y-B6-f0Q" secondAttribute="centerY" id="aC4-mQ-heC"/> <constraint firstItem="5ML-g4-686" firstAttribute="centerY" secondItem="a7Y-B6-f0Q" secondAttribute="centerY" id="aC4-mQ-heC"/>
<constraint firstAttribute="trailing" secondItem="Dau-7f-0vb" secondAttribute="trailing" constant="20" id="ejF-GB-Yna"/> <constraint firstAttribute="trailing" secondItem="Dau-7f-0vb" secondAttribute="trailing" constant="20" id="ejF-GB-Yna"/>
<constraint firstItem="Rrg-6L-VMo" firstAttribute="leading" secondItem="fPD-rO-ZgU" secondAttribute="leading" id="gLf-nH-NyK"/>
<constraint firstItem="jbL-QO-JJl" firstAttribute="centerY" secondItem="5ML-g4-686" secondAttribute="centerY" constant="-1" id="h8B-5o-mja"/> <constraint firstItem="jbL-QO-JJl" firstAttribute="centerY" secondItem="5ML-g4-686" secondAttribute="centerY" constant="-1" id="h8B-5o-mja"/>
<constraint firstItem="cxl-Av-gEU" firstAttribute="leading" secondItem="fPD-rO-ZgU" secondAttribute="leading" id="iba-8r-UBq"/> <constraint firstItem="cxl-Av-gEU" firstAttribute="leading" secondItem="fPD-rO-ZgU" secondAttribute="leading" id="iba-8r-UBq"/>
<constraint firstItem="R9v-rE-NRk" firstAttribute="bottom" secondItem="fPD-rO-ZgU" secondAttribute="bottom" constant="-5" id="kah-7Y-Q6c"/>
<constraint firstItem="QHo-nZ-miK" firstAttribute="centerY" secondItem="fPD-rO-ZgU" secondAttribute="centerY" id="npC-Cx-MHl"/> <constraint firstItem="QHo-nZ-miK" firstAttribute="centerY" secondItem="fPD-rO-ZgU" secondAttribute="centerY" id="npC-Cx-MHl"/>
<constraint firstItem="SyC-Qw-kzE" firstAttribute="leading" secondItem="fPD-rO-ZgU" secondAttribute="leading" id="sWG-F2-NbZ"/>
<constraint firstItem="fPD-rO-ZgU" firstAttribute="trailing" secondItem="cxl-Av-gEU" secondAttribute="trailing" id="usz-Hi-BR2"/> <constraint firstItem="fPD-rO-ZgU" firstAttribute="trailing" secondItem="cxl-Av-gEU" secondAttribute="trailing" id="usz-Hi-BR2"/>
<constraint firstItem="fPD-rO-ZgU" firstAttribute="bottom" secondItem="fTK-nk-bN9" secondAttribute="bottom" constant="-20" id="vmC-a4-Yy3"/> <constraint firstItem="fPD-rO-ZgU" firstAttribute="bottom" secondItem="fTK-nk-bN9" secondAttribute="bottom" constant="-20" id="vmC-a4-Yy3"/>
<constraint firstItem="Rrg-6L-VMo" firstAttribute="top" secondItem="SyC-Qw-kzE" secondAttribute="bottom" id="ws3-JU-UqR"/>
<constraint firstItem="n3b-MP-wOW" firstAttribute="top" secondItem="cxl-Av-gEU" secondAttribute="bottom" constant="10" id="xGm-9v-fwc"/> <constraint firstItem="n3b-MP-wOW" firstAttribute="top" secondItem="cxl-Av-gEU" secondAttribute="bottom" constant="10" id="xGm-9v-fwc"/>
</constraints> </constraints>
</view> </view>
<tabBarItem key="tabBarItem" title="MY LIST" image="HeartIcon" id="dhn-IV-GcD"/> <tabBarItem key="tabBarItem" title="MY LIST" image="HeartIcon" id="dhn-IV-GcD"/>
<navigationItem key="navigationItem" id="dCO-Wi-XFC"/> <navigationItem key="navigationItem" id="dCO-Wi-XFC"/>
<connections> <connections>
<outlet property="adHeight" destination="2WA-Xw-Yxf" id="rvv-7V-ouL"/>
<outlet property="adView" destination="Rrg-6L-VMo" id="v99-o1-P5B"/> <outlet property="adView" destination="Rrg-6L-VMo" id="v99-o1-P5B"/>
<outlet property="audioBooksBtn" destination="f9x-Vl-IXu" id="POf-cl-Ccb"/> <outlet property="audioBooksBtn" destination="f9x-Vl-IXu" id="POf-cl-Ccb"/>
<outlet property="audioBooksCV" destination="ABR-no-OBf" id="axa-Ry-rEx"/> <outlet property="audioBooksCV" destination="ABR-no-OBf" id="axa-Ry-rEx"/>
@@ -1667,10 +1657,10 @@
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor> </systemColor>
<systemColor name="systemGreenColor"> <systemColor name="systemGreenColor">
<color red="0.20392156859999999" green="0.78039215689999997" blue="0.34901960780000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color red="0.20392156862745098" green="0.7803921568627451" blue="0.34901960784313724" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</systemColor> </systemColor>
<systemColor name="systemMintColor"> <systemColor name="systemMintColor">
<color red="0.0" green="0.78039215689999997" blue="0.74509803919999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color red="0.0" green="0.7803921568627451" blue="0.74509803921568629" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</systemColor> </systemColor>
</resources> </resources>
</document> </document>

View File

@@ -37,6 +37,59 @@ class MyListVM{
startShimmer(load: false) startShimmer(load: false)
return return
} }
/*
First check if webSeries ad is present via slug, then check for Local Ads, if not then check google ads.
*/
if let adsData = AuthFunc.shareInstance.adsData, let myListAd = adsData.result?.filter({$0.slug == AdsEnum.myList.rawValue}).first{
// check if ads data contains LocalAD for webseries
if let advertisement = myListAd.advertisement,let bannerImage = advertisement.bannerImage{
// vc.imageAdView.imageURL(bannerImage, color: .white)
// vc.imageAdView.alpha = 0
let height = UIScreen.main.bounds.width * 0.192
vc.adHeight.constant = height
let imageView = UIImageView()
// Set the image you want to display
imageView.imageURL(bannerImage, color: .white)
// Enable auto-layout
imageView.translatesAutoresizingMaskIntoConstraints = false
// Add the UIImageView to the view
vc.adView.addSubview(imageView)
// Set UIImageView to match the size of the parent UIView
NSLayoutConstraint.activate([
imageView.leadingAnchor.constraint(equalTo: vc.adView.leadingAnchor),
imageView.trailingAnchor.constraint(equalTo: vc.adView.trailingAnchor),
imageView.topAnchor.constraint(equalTo: vc.adView.topAnchor),
imageView.bottomAnchor.constraint(equalTo: vc.adView.bottomAnchor)
])
imageView.contentMode = .scaleAspectFit
UIView.animate(withDuration: 0.2, animations: { [weak self] in
guard let self else{return}
vc.adView.alpha = 1
})
vc.adView.addTapGesture {
if let adID = myListAd.id{
PersistentStorage.shared.addAdsCount(adID: adID ,clicks: 1)
}
if let adLink = myListAd.advertisement?.adLink ,let url = URL(string: adLink), UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
}
}
}else if myListAd.googleAd != nil{
//setup google banner ads.
vc.adHeight.constant = 90
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3, execute: {
AdReusable.sharedInstance.setupBannerAd(bannerView: self.bottomBanner, in: self.vc.adView, adUnitID: K.GoogleAdIDs.myListNotifications, viewController: self.vc, height: 6,width: 0)
})
}
}
setupCell() setupCell()
startShimmer(load: true) startShimmer(load: true)
@@ -59,18 +112,7 @@ class MyListVM{
shimmer.startShimmer() shimmer.startShimmer()
}else{ }else{
shimmer.stopShimmer() shimmer.stopShimmer()
/*
If ads found then only load it or else directly append the data and reload
*/
if let adsData = AuthFunc.shareInstance.adsData{
// check if ads data contains ad for webseries
if let myListAd = adsData.result?.filter({$0.slug == AdsEnum.myList.rawValue}).first, myListAd.googleAd != nil{
//setup google banner ads.
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3, execute: {
AdReusable.sharedInstance.setupBannerAd(bannerView: self.bottomBanner, in: self.vc.adView, adUnitID: K.GoogleAdIDs.myListNotifications, viewController: self.vc, height: 6,width: 0)
})
}
}
} }
} }
} }

View File

@@ -243,7 +243,8 @@ class KaraokeListingVM{
case .favourite: case .favourite:
guard let isFav else{return} guard let isFav else{return}
if isFav == true { if isFav == true {
LikeFavCommonFunc.shareInstance.removeFavourite(postID: postID, postType: postType, categoryID: 0, vc: self.vc) { [unowned self] isDone in LikeFavCommonFunc.shareInstance.removeFavourite(postID: postID, postType: postType, categoryID: 0, vc: self.vc) { [weak self] isDone in
guard let self else{return}
if isDone{ if isDone{
if let showListIndex = karaokeListData.firstIndex(where: { $0.id == postID }){ if let showListIndex = karaokeListData.firstIndex(where: { $0.id == postID }){
karaokeListData[showListIndex].markAsFavourite = false karaokeListData[showListIndex].markAsFavourite = false
@@ -278,7 +279,8 @@ class KaraokeListingVM{
} }
} }
}else{ }else{
LikeFavCommonFunc.shareInstance.addFavourite(postID: postID, postType: postType, categoryID: 0, vc: self.vc) { [unowned self] isDone in LikeFavCommonFunc.shareInstance.addFavourite(postID: postID, postType: postType, categoryID: 0, vc: self.vc) { [weak self] isDone in
guard let self else{return}
if isDone{ if isDone{
if let showListIndex = karaokeListData.firstIndex(where: { $0.id == postID }){ if let showListIndex = karaokeListData.firstIndex(where: { $0.id == postID }){
karaokeListData[showListIndex].markAsFavourite = true karaokeListData[showListIndex].markAsFavourite = true
@@ -318,7 +320,8 @@ class KaraokeListingVM{
case .liked: case .liked:
guard let isLiked else{return} guard let isLiked else{return}
if isLiked{ if isLiked{
LikeFavCommonFunc.shareInstance.unlikePost(postID: postID, postType: postType, vc: self.vc) { [unowned self] isDone in LikeFavCommonFunc.shareInstance.unlikePost(postID: postID, postType: postType, vc: self.vc) { [weak self] isDone in
guard let self else{return}
if isDone{ if isDone{
if let showListIndex = karaokeListData.firstIndex(where: { $0.id == postID }){ if let showListIndex = karaokeListData.firstIndex(where: { $0.id == postID }){
karaokeListData[showListIndex].isLiked = false karaokeListData[showListIndex].isLiked = false
@@ -348,7 +351,8 @@ class KaraokeListingVM{
} }
} }
}else{ }else{
LikeFavCommonFunc.shareInstance.likePost(postID: postID, postType: postType, vc: self.vc){ [unowned self] isDone in LikeFavCommonFunc.shareInstance.likePost(postID: postID, postType: postType, vc: self.vc){ [weak self] isDone in
guard let self else{return}
if isDone{ if isDone{
if let showListIndex = karaokeListData.firstIndex(where: { $0.id == postID }){ if let showListIndex = karaokeListData.firstIndex(where: { $0.id == postID }){
karaokeListData[showListIndex].isLiked = true karaokeListData[showListIndex].isLiked = true

View File

@@ -32,6 +32,7 @@ enum AdsEnum : String{
case webSeriesVideoAd = "web-series-video-ad" case webSeriesVideoAd = "web-series-video-ad"
case more = "more" case more = "more"
case myList = "my-list" case myList = "my-list"
case shopListing = "shop-listing"
} }
class AuthFunc{ class AuthFunc{

View File

@@ -122,17 +122,17 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="OrderBottom" translatesAutoresizingMaskIntoConstraints="NO" id="DtQ-TG-hwD"> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="OrderBottom" translatesAutoresizingMaskIntoConstraints="NO" id="DtQ-TG-hwD">
<rect key="frame" x="0.0" y="-269.66666666666669" width="393" height="294.66666666666669"/> <rect key="frame" x="0.0" y="523.33333333333326" width="393" height="294.66666666666674"/>
</imageView> </imageView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="JOc-da-KgM"> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="JOc-da-KgM">
<rect key="frame" x="0.0" y="59" width="393" height="0.0"/> <rect key="frame" x="0.0" y="59" width="393" height="793"/>
<subviews> <subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="NEV-vt-kk0"> <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="NEV-vt-kk0">
<rect key="frame" x="0.0" y="0.0" width="393" height="0.0"/> <rect key="frame" x="0.0" y="0.0" width="393" height="793"/>
<color key="backgroundColor" red="0.82745098039999998" green="0.93725490199999995" blue="0.97254901959999995" alpha="1" colorSpace="calibratedRGB"/> <color key="backgroundColor" red="0.82745098039999998" green="0.93725490199999995" blue="0.97254901959999995" alpha="1" colorSpace="calibratedRGB"/>
</tableView> </tableView>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="eJP-tZ-U4b"> <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="eJP-tZ-U4b">
<rect key="frame" x="0.0" y="0.0" width="393" height="7"/> <rect key="frame" x="0.0" y="0.0" width="393" height="100"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="100" id="IH1-wm-lv7"/> <constraint firstAttribute="height" constant="100" id="IH1-wm-lv7"/>
@@ -299,19 +299,19 @@
<color key="backgroundColor" red="0.82745098039999998" green="0.93725490199999995" blue="0.97254901959999995" alpha="1" colorSpace="calibratedRGB"/> <color key="backgroundColor" red="0.82745098039999998" green="0.93725490199999995" blue="0.97254901959999995" alpha="1" colorSpace="calibratedRGB"/>
</view> </view>
<stackView hidden="YES" opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="PDw-D2-MIm"> <stackView hidden="YES" opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="PDw-D2-MIm">
<rect key="frame" x="113.66666666666669" y="318" width="166" height="241.33333333333337"/> <rect key="frame" x="113.66666666666669" y="318" width="166" height="241"/>
<subviews> <subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="SupportGirlImage" translatesAutoresizingMaskIntoConstraints="NO" id="fqC-iZ-FnK"> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="SupportGirlImage" translatesAutoresizingMaskIntoConstraints="NO" id="fqC-iZ-FnK">
<rect key="frame" x="0.0" y="0.0" width="166" height="166.33333333333334"/> <rect key="frame" x="0.0" y="0.0" width="166" height="166"/>
</imageView> </imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="No Data Found!" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WMd-v5-3Bf" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="No Data Found!" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WMd-v5-3Bf" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="176.33333333333331" width="166" height="24"/> <rect key="frame" x="0.0" y="176" width="166" height="24"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="20"/> <fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="20"/>
<color key="textColor" name="TextDarkBlue"/> <color key="textColor" name="TextDarkBlue"/>
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="upB-Eu-Ooo"> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="upB-Eu-Ooo">
<rect key="frame" x="0.0" y="210.33333333333331" width="166" height="31"/> <rect key="frame" x="0.0" y="210" width="166" height="31"/>
<color key="tintColor" name="TextDarkBlue"/> <color key="tintColor" name="TextDarkBlue"/>
<state key="normal" title="Button"/> <state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain" title="Retry?"> <buttonConfiguration key="configuration" style="plain" title="Retry?">
@@ -327,7 +327,7 @@
<rect key="frame" x="0.0" y="557.33333333333348" width="393" height="294.66666666666663"/> <rect key="frame" x="0.0" y="557.33333333333348" width="393" height="294.66666666666663"/>
</imageView> </imageView>
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="3" translatesAutoresizingMaskIntoConstraints="NO" id="o04-js-Fsc"> <stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="3" translatesAutoresizingMaskIntoConstraints="NO" id="o04-js-Fsc">
<rect key="frame" x="0.0" y="59" width="393" height="100"/> <rect key="frame" x="0.0" y="59" width="393" height="759"/>
<subviews> <subviews>
<scrollView hidden="YES" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="wxy-J9-S7w"> <scrollView hidden="YES" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="wxy-J9-S7w">
<rect key="frame" x="0.0" y="0.0" width="393" height="0.0"/> <rect key="frame" x="0.0" y="0.0" width="393" height="0.0"/>
@@ -468,7 +468,7 @@
<viewLayoutGuide key="frameLayoutGuide" id="fDN-IE-ujI"/> <viewLayoutGuide key="frameLayoutGuide" id="fDN-IE-ujI"/>
</scrollView> </scrollView>
<view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5An-pm-UM9"> <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5An-pm-UM9">
<rect key="frame" x="0.0" y="0.0" width="393" height="100"/> <rect key="frame" x="0.0" y="0.0" width="393" height="759"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view> </view>
</subviews> </subviews>
@@ -486,7 +486,7 @@
<constraint firstItem="5An-pm-UM9" firstAttribute="height" secondItem="NNP-0A-zEH" secondAttribute="height" multiplier="0.117371" id="7Td-mI-4fw"/> <constraint firstItem="5An-pm-UM9" firstAttribute="height" secondItem="NNP-0A-zEH" secondAttribute="height" multiplier="0.117371" id="7Td-mI-4fw"/>
<constraint firstItem="Sf0-tQ-I1Z" firstAttribute="leading" secondItem="lMc-y6-eRf" secondAttribute="leading" id="CvR-51-mma"/> <constraint firstItem="Sf0-tQ-I1Z" firstAttribute="leading" secondItem="lMc-y6-eRf" secondAttribute="leading" id="CvR-51-mma"/>
<constraint firstAttribute="bottom" secondItem="11o-Wz-oVy" secondAttribute="bottom" id="IUM-Qf-wbF"/> <constraint firstAttribute="bottom" secondItem="11o-Wz-oVy" secondAttribute="bottom" id="IUM-Qf-wbF"/>
<constraint firstItem="lMc-y6-eRf" firstAttribute="bottom" secondItem="o04-js-Fsc" secondAttribute="bottom" id="Ioe-Vu-iTK"/> <constraint firstAttribute="bottom" secondItem="o04-js-Fsc" secondAttribute="bottom" id="Ioe-Vu-iTK"/>
<constraint firstItem="11o-Wz-oVy" firstAttribute="trailing" secondItem="lMc-y6-eRf" secondAttribute="trailing" id="TWL-yC-bnk"/> <constraint firstItem="11o-Wz-oVy" firstAttribute="trailing" secondItem="lMc-y6-eRf" secondAttribute="trailing" id="TWL-yC-bnk"/>
<constraint firstItem="PDw-D2-MIm" firstAttribute="centerX" secondItem="lMc-y6-eRf" secondAttribute="centerX" id="gM9-yg-ZFf"/> <constraint firstItem="PDw-D2-MIm" firstAttribute="centerX" secondItem="lMc-y6-eRf" secondAttribute="centerX" id="gM9-yg-ZFf"/>
<constraint firstItem="o04-js-Fsc" firstAttribute="trailing" secondItem="lMc-y6-eRf" secondAttribute="trailing" id="kFn-fd-4dc"/> <constraint firstItem="o04-js-Fsc" firstAttribute="trailing" secondItem="lMc-y6-eRf" secondAttribute="trailing" id="kFn-fd-4dc"/>

View File

@@ -117,10 +117,10 @@ class SideMenuVC: UIViewController {
/* /*
Make sure all data is synced to the server for click data & ad impressions Make sure all data is synced to the server for click data & ad impressions
*/ */
vm.checkData()
PersistentStorage.shared.sendAdsData(isLogout: true) PersistentStorage.shared.sendAdsData(isLogout: true)
PersistentStorage.shared.sendDataToServer(isLogout: true) PersistentStorage.shared.sendDataToServer(isLogout: true)
Utilities.startProgressHUD(msg: "Syncing...") Utilities.startProgressHUD(msg: "Syncing...")
vm.checkData()
// self.timer. // self.timer.
case .no: case .no:

View File

@@ -73,7 +73,8 @@ class TabBarVC: UITabBarController {
vcPush.contentLabel = "By clicking the button below, your account will be deactivated. Your data will be erased after one month." vcPush.contentLabel = "By clicking the button below, your account will be deactivated. Your data will be erased after one month."
vcPush.yesBtnText = "Deactivate" vcPush.yesBtnText = "Deactivate"
vcPush.noBtnText = "Cancel" vcPush.noBtnText = "Cancel"
vcPush.onDoneBlock = { [unowned self] mode in vcPush.onDoneBlock = { [weak self] mode in
guard let self else{return}
switch mode{ switch mode{
case .yes: case .yes:
//If user clicked nav him to login screen. Call the api. //If user clicked nav him to login screen. Call the api.
@@ -229,7 +230,8 @@ class TabBarVC: UITabBarController {
self.customTabBarView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner] self.customTabBarView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
self.customTabBarView.layer.masksToBounds = false self.customTabBarView.layer.masksToBounds = false
self.customTabBarView.layer.shadowColor = UIColor.red.withAlphaComponent(0.8).cgColor // self.customTabBarView.layer.shadowColor = UIColor.red.withAlphaComponent(0.8).cgColor
self.customTabBarView.layer.shadowColor = UIColor.gray.withAlphaComponent(0.7).cgColor
self.customTabBarView.layer.shadowOffset = CGSize(width: -4, height: -6) self.customTabBarView.layer.shadowOffset = CGSize(width: -4, height: -6)
self.customTabBarView.layer.shadowOpacity = 0.5 self.customTabBarView.layer.shadowOpacity = 0.5
self.customTabBarView.layer.shadowRadius = 20 self.customTabBarView.layer.shadowRadius = 20

View File

@@ -571,17 +571,23 @@
<constraint firstAttribute="height" constant="45" id="zp2-aZ-QTM"/> <constraint firstAttribute="height" constant="45" id="zp2-aZ-QTM"/>
</constraints> </constraints>
</view> </view>
<imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="McL-5g-B8j">
<rect key="frame" x="0.0" y="45" width="414" height="220"/>
<constraints>
<constraint firstAttribute="height" constant="220" id="qbi-tz-gsi"/>
</constraints>
</imageView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="U0W-18-4oe"> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="U0W-18-4oe">
<rect key="frame" x="0.0" y="45" width="414" height="222.5"/> <rect key="frame" x="0.0" y="45" width="414" height="224"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" text="Coming Soon on WOKA" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="D2p-c5-usH" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" text="Coming Soon on WOKA" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="D2p-c5-usH" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="10" y="10" width="394" height="22.5"/> <rect key="frame" x="10" y="10" width="394" height="24"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="20"/> <fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="20"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UKc-92-GPa"> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UKc-92-GPa">
<rect key="frame" x="10" y="42.5" width="394" height="180"/> <rect key="frame" x="10" y="44" width="394" height="180"/>
<subviews> <subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="MasilaComingSoon" translatesAutoresizingMaskIntoConstraints="NO" id="Kj9-jH-Y88"> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="MasilaComingSoon" translatesAutoresizingMaskIntoConstraints="NO" id="Kj9-jH-Y88">
<rect key="frame" x="7" y="7" width="380" height="140"/> <rect key="frame" x="7" y="7" width="380" height="140"/>
@@ -643,7 +649,7 @@
<edgeInsets key="layoutMargins" top="10" left="10" bottom="0.0" right="10"/> <edgeInsets key="layoutMargins" top="10" left="10" bottom="0.0" right="10"/>
</stackView> </stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="Qcq-yj-AzB"> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="Qcq-yj-AzB">
<rect key="frame" x="0.0" y="267.5" width="414" height="209"/> <rect key="frame" x="0.0" y="269" width="414" height="209"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" text="BLOGS" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lW0-W4-2hl" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" text="BLOGS" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lW0-W4-2hl" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="10" y="10" width="394" height="24"/> <rect key="frame" x="10" y="10" width="394" height="24"/>
@@ -669,7 +675,7 @@
<edgeInsets key="layoutMargins" top="10" left="10" bottom="0.0" right="10"/> <edgeInsets key="layoutMargins" top="10" left="10" bottom="0.0" right="10"/>
</stackView> </stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="pJu-fq-XmG"> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="pJu-fq-XmG">
<rect key="frame" x="0.0" y="476.5" width="414" height="322.5"/> <rect key="frame" x="0.0" y="478" width="414" height="321"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" text="WOKA Songs" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FSJ-QT-rAW" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" text="WOKA Songs" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FSJ-QT-rAW" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="10" y="10" width="394" height="24"/> <rect key="frame" x="10" y="10" width="394" height="24"/>
@@ -678,7 +684,7 @@
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="31Z-fz-1ec"> <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="31Z-fz-1ec">
<rect key="frame" x="10" y="44" width="394" height="278.5"/> <rect key="frame" x="10" y="44" width="394" height="277"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</tableView> </tableView>
</subviews> </subviews>
@@ -687,7 +693,7 @@
</subviews> </subviews>
</stackView> </stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="7bh-PD-sIH"> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="7bh-PD-sIH">
<rect key="frame" x="164.5" y="439.5" width="85" height="20"/> <rect key="frame" x="164.5" y="441" width="85" height="20"/>
<subviews> <subviews>
<activityIndicatorView hidden="YES" opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" hidesWhenStopped="YES" style="medium" translatesAutoresizingMaskIntoConstraints="NO" id="S8Q-xR-4aq"> <activityIndicatorView hidden="YES" opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" hidesWhenStopped="YES" style="medium" translatesAutoresizingMaskIntoConstraints="NO" id="S8Q-xR-4aq">
<rect key="frame" x="0.0" y="0.0" width="85" height="20"/> <rect key="frame" x="0.0" y="0.0" width="85" height="20"/>
@@ -718,7 +724,7 @@
</constraints> </constraints>
</stackView> </stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="xv5-81-JIV"> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="xv5-81-JIV">
<rect key="frame" x="164.5" y="708" width="85" height="20"/> <rect key="frame" x="164.5" y="708.5" width="85" height="20"/>
<subviews> <subviews>
<activityIndicatorView hidden="YES" opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" hidesWhenStopped="YES" style="medium" translatesAutoresizingMaskIntoConstraints="NO" id="dLn-zw-LM2"> <activityIndicatorView hidden="YES" opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" hidesWhenStopped="YES" style="medium" translatesAutoresizingMaskIntoConstraints="NO" id="dLn-zw-LM2">
<rect key="frame" x="0.0" y="0.0" width="85" height="20"/> <rect key="frame" x="0.0" y="0.0" width="85" height="20"/>
@@ -771,6 +777,8 @@
<outlet property="blogRetryBtn" destination="aPf-ys-h6r" id="fRu-AA-2ti"/> <outlet property="blogRetryBtn" destination="aPf-ys-h6r" id="fRu-AA-2ti"/>
<outlet property="blogRetryStack" destination="7bh-PD-sIH" id="F4y-Fk-af0"/> <outlet property="blogRetryStack" destination="7bh-PD-sIH" id="F4y-Fk-af0"/>
<outlet property="blogsCollectionView" destination="xup-gW-Kjh" id="BO7-LF-aAg"/> <outlet property="blogsCollectionView" destination="xup-gW-Kjh" id="BO7-LF-aAg"/>
<outlet property="customAdHeight" destination="qbi-tz-gsi" id="3Xd-4K-Pan"/>
<outlet property="customAdImage" destination="McL-5g-B8j" id="aqi-cZ-ReN"/>
<outlet property="homeBtn" destination="4TT-Wr-ovV" id="mPm-rr-jvC"/> <outlet property="homeBtn" destination="4TT-Wr-ovV" id="mPm-rr-jvC"/>
<outlet property="songActivityIndicator" destination="dLn-zw-LM2" id="qZm-9Z-va8"/> <outlet property="songActivityIndicator" destination="dLn-zw-LM2" id="qZm-9Z-va8"/>
<outlet property="songRetry" destination="zAr-x7-tdY" id="0TO-oQ-fEw"/> <outlet property="songRetry" destination="zAr-x7-tdY" id="0TO-oQ-fEw"/>
@@ -792,10 +800,22 @@
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/> <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="4Jz-rO-ToO"> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="Db8-ro-w0q">
<rect key="frame" x="0.0" y="63" width="414" height="799"/> <rect key="frame" x="0.0" y="63" width="414" height="833"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <subviews>
</tableView> <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="4Jz-rO-ToO">
<rect key="frame" x="0.0" y="0.0" width="414" height="833"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</tableView>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jiP-Bp-oG5">
<rect key="frame" x="0.0" y="0.0" width="414" height="100"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="100" id="mG7-Co-R8y"/>
</constraints>
</view>
</subviews>
</stackView>
<stackView hidden="YES" opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="5iZ-Hr-WYt"> <stackView hidden="YES" opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="5iZ-Hr-WYt">
<rect key="frame" x="104" y="332" width="206" height="246"/> <rect key="frame" x="104" y="332" width="206" height="246"/>
<subviews> <subviews>
@@ -833,14 +853,16 @@
<color key="backgroundColor" systemColor="systemBackgroundColor"/> <color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints> <constraints>
<constraint firstItem="5iZ-Hr-WYt" firstAttribute="centerX" secondItem="HwS-aW-IIl" secondAttribute="centerX" id="8XX-Fi-e5E"/> <constraint firstItem="5iZ-Hr-WYt" firstAttribute="centerX" secondItem="HwS-aW-IIl" secondAttribute="centerX" id="8XX-Fi-e5E"/>
<constraint firstItem="4Jz-rO-ToO" firstAttribute="leading" secondItem="HwS-aW-IIl" secondAttribute="leading" id="Pwc-fY-ijS"/> <constraint firstItem="Db8-ro-w0q" firstAttribute="leading" secondItem="HwS-aW-IIl" secondAttribute="leading" id="Kab-Cl-2qT"/>
<constraint firstItem="Db8-ro-w0q" firstAttribute="top" secondItem="HwS-aW-IIl" secondAttribute="top" constant="15" id="OkJ-d1-Qot"/>
<constraint firstItem="Db8-ro-w0q" firstAttribute="bottom" secondItem="U8N-8z-auR" secondAttribute="bottom" id="Pgv-Rq-nA4"/>
<constraint firstItem="5iZ-Hr-WYt" firstAttribute="centerY" secondItem="HwS-aW-IIl" secondAttribute="centerY" id="XyJ-qZ-IcC"/> <constraint firstItem="5iZ-Hr-WYt" firstAttribute="centerY" secondItem="HwS-aW-IIl" secondAttribute="centerY" id="XyJ-qZ-IcC"/>
<constraint firstItem="HwS-aW-IIl" firstAttribute="trailing" secondItem="4Jz-rO-ToO" secondAttribute="trailing" id="pPA-fS-veG"/> <constraint firstItem="Db8-ro-w0q" firstAttribute="trailing" secondItem="HwS-aW-IIl" secondAttribute="trailing" id="z0P-j5-e9x"/>
<constraint firstItem="HwS-aW-IIl" firstAttribute="bottom" secondItem="4Jz-rO-ToO" secondAttribute="bottom" id="x2e-Ns-hm9"/>
<constraint firstItem="4Jz-rO-ToO" firstAttribute="top" secondItem="HwS-aW-IIl" secondAttribute="top" constant="15" id="zIS-dJ-FOj"/>
</constraints> </constraints>
</view> </view>
<connections> <connections>
<outlet property="adView" destination="jiP-Bp-oG5" id="MhV-eX-Ne8"/>
<outlet property="adViewHeight" destination="mG7-Co-R8y" id="Wbv-eB-OMz"/>
<outlet property="noDataStack" destination="5iZ-Hr-WYt" id="TzW-oN-ZPU"/> <outlet property="noDataStack" destination="5iZ-Hr-WYt" id="TzW-oN-ZPU"/>
<outlet property="tableView" destination="4Jz-rO-ToO" id="AgO-yU-AtX"/> <outlet property="tableView" destination="4Jz-rO-ToO" id="AgO-yU-AtX"/>
</connections> </connections>
@@ -1193,8 +1215,8 @@
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="ZSR-bh-wqJ"> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="ZSR-bh-wqJ">
<rect key="frame" x="0.0" y="58" width="414" height="804"/> <rect key="frame" x="0.0" y="58" width="414" height="804"/>
<subviews> <subviews>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" ambiguous="YES" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="CPI-Sd-MIf"> <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="CPI-Sd-MIf">
<rect key="frame" x="0.0" y="0.0" width="414" height="676"/> <rect key="frame" x="0.0" y="0.0" width="414" height="804"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="X8i-uF-7dA"> <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="X8i-uF-7dA">
<size key="itemSize" width="128" height="128"/> <size key="itemSize" width="128" height="128"/>
@@ -1204,10 +1226,12 @@
</collectionViewFlowLayout> </collectionViewFlowLayout>
<cells/> <cells/>
</collectionView> </collectionView>
<view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="aFI-x1-1GD"> <imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="aQC-Wm-HT0">
<rect key="frame" x="0.0" y="676" width="414" height="128"/> <rect key="frame" x="0.0" y="0.0" width="414" height="90"/>
<color key="backgroundColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints>
</view> <constraint firstAttribute="height" constant="90" id="ir7-aq-vhI"/>
</constraints>
</imageView>
</subviews> </subviews>
</stackView> </stackView>
<stackView hidden="YES" opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="Nqj-wh-mOZ"> <stackView hidden="YES" opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="Nqj-wh-mOZ">
@@ -1263,6 +1287,8 @@
</view> </view>
<connections> <connections>
<outlet property="blogCV" destination="CPI-Sd-MIf" id="uEI-y6-hiB"/> <outlet property="blogCV" destination="CPI-Sd-MIf" id="uEI-y6-hiB"/>
<outlet property="imageAdHeight" destination="ir7-aq-vhI" id="Pkp-03-0Y3"/>
<outlet property="imageAdView" destination="aQC-Wm-HT0" id="hC5-nT-yk0"/>
<outlet property="noDataStack" destination="Nqj-wh-mOZ" id="tx5-Mj-77M"/> <outlet property="noDataStack" destination="Nqj-wh-mOZ" id="tx5-Mj-77M"/>
</connections> </connections>
</viewController> </viewController>

View File

@@ -6,13 +6,17 @@
// //
import UIKit import UIKit
import GoogleMobileAds
class BlogsVC: UIViewController { class BlogsVC: UIViewController {
@IBOutlet weak var blogCV: UICollectionView! @IBOutlet weak var blogCV: UICollectionView!
@IBOutlet weak var noDataStack: UIStackView! @IBOutlet weak var noDataStack: UIStackView!
@IBOutlet weak var imageAdView: UIImageView!
@IBOutlet weak var imageAdHeight: NSLayoutConstraint!
var blogData = [BlogDM.Blog]() var blogData = [BlogDM.Blog]()
var bottomBannerView = GADBannerView()
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
@@ -25,6 +29,43 @@ class BlogsVC: UIViewController {
self.view.applyGradient(colors: [color2, color1], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0)) self.view.applyGradient(colors: [color2, color1], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0))
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationController?.navigationBar.shadowImage = UIImage() navigationController?.navigationBar.shadowImage = UIImage()
/*
First check if webSeries ad is present via slug, then check for Local Ads, if not then check google ads.
*/
if let adsData = AuthFunc.shareInstance.adsData, let blogAd = adsData.result?.filter({$0.slug == AdsEnum.shopListing.rawValue}).first{
// check if ads data contains LocalAD for webseries
if let advertisement = blogAd.advertisement,let bannerImage = advertisement.bannerImage{
imageAdView.imageURL(bannerImage, color: .white)
imageAdView.alpha = 0
let height = UIScreen.main.bounds.width * 0.192
imageAdHeight.constant = height
UIView.animate(withDuration: 0.2, animations: { [weak self] in
guard let self else{return}
imageAdView.alpha = 1
imageAdView.isHidden = false
})
imageAdView.addTapGesture {
if let adID = blogAd.id{
PersistentStorage.shared.addAdsCount(adID: adID ,clicks: 1)
}
if let adLink = blogAd.advertisement?.adLink ,let url = URL(string: adLink), UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
}
}
}else if blogAd.googleAd != nil{
/*
Show google ads with dispatch queue.
*/
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2, execute: { [weak self] in
guard let self else{return}
AdReusable.sharedInstance.setupBannerAd(bannerView: bottomBannerView, in: imageAdView, adUnitID: K.GoogleAdIDs.blogs, viewController: self)
})
}
}
} }
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
@@ -139,3 +180,39 @@ extension BlogsVC : UICollectionViewDelegateFlowLayout{
return CGSize(width: widthPerItem, height: widthPerItem) return CGSize(width: widthPerItem, height: widthPerItem)
} }
} }
// MARK: - Google Ad Banner Delegate
extension BlogsVC : GADBannerViewDelegate{
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
bannerView.alpha = 0
bannerView.backgroundColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
UIView.animate(withDuration: 0.3, animations: { [weak self] in
guard let self else{return}
bannerView.alpha = 1
imageAdView.isHidden = false
})
print("bannerViewDidReceiveAd")
}
func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) {
imageAdView.isHidden = true
print("bannerView:didFailToReceiveAdWithError: \(error.localizedDescription)")
}
func bannerViewDidRecordImpression(_ bannerView: GADBannerView) {
print("bannerViewDidRecordImpression")
}
func bannerViewWillPresentScreen(_ bannerView: GADBannerView) {
print("bannerViewWillPresentScreen")
}
func bannerViewWillDismissScreen(_ bannerView: GADBannerView) {
print("bannerViewWillDIsmissScreen")
}
func bannerViewDidDismissScreen(_ bannerView: GADBannerView) {
print("bannerViewDidDismissScreen")
}
}

View File

@@ -24,6 +24,8 @@ class MoreVC: UIViewController {
@IBOutlet weak var songRetry: LocalisedElementsButton! @IBOutlet weak var songRetry: LocalisedElementsButton!
@IBOutlet weak var trailerTask: UIStackView! @IBOutlet weak var trailerTask: UIStackView!
@IBOutlet weak var trailerView: UIView! @IBOutlet weak var trailerView: UIView!
@IBOutlet weak var customAdImage: UIImageView!
@IBOutlet weak var customAdHeight: NSLayoutConstraint!
var vm = MoreVM() var vm = MoreVM()
var timeObserverToken: Any? var timeObserverToken: Any?
@@ -243,7 +245,8 @@ extension MoreVC : GADBannerViewDelegate{
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) { func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
bannerView.alpha = 0 bannerView.alpha = 0
bannerView.backgroundColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1) bannerView.backgroundColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
UIView.animate(withDuration: 0.3, animations: { [unowned self] in UIView.animate(withDuration: 0.3, animations: { [weak self] in
guard let self else{return}
trailerView.alpha = 0 trailerView.alpha = 0
bannerView.alpha = 1 bannerView.alpha = 1
}) })

View File

@@ -6,27 +6,25 @@
// //
import UIKit import UIKit
import GoogleMobileAds
class UserNotificationVC: UIViewController { class UserNotificationVC: UIViewController {
@IBOutlet weak var tableView: UITableView! @IBOutlet weak var tableView: UITableView!
@IBOutlet weak var noDataStack: UIStackView! @IBOutlet weak var noDataStack: UIStackView!
@IBOutlet weak var adView: UIView!
@IBOutlet weak var adViewHeight: NSLayoutConstraint!
var vm = UserNotificationVM() var vm = UserNotificationVM()
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
vm.vc = self vm.vc = self
vm.initView() vm.initView()
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationController?.navigationBar.shadowImage = UIImage() navigationController?.navigationBar.shadowImage = UIImage()
} }
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated) super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(false, animated: animated) navigationController?.setNavigationBarHidden(false, animated: animated)
@@ -99,3 +97,43 @@ extension UserNotificationVC : TableViewSRC{
} }
} }
} }
// MARK: - Google Ad Banner Delegate
extension UserNotificationVC : GADBannerViewDelegate{
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
adView.isHidden = false
bannerView.alpha = 0
UIView.animate(withDuration: 0.2, animations: {
bannerView.alpha = 1
})
print("bannerViewDidReceiveAd")
}
func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) {
UIView.animate(withDuration: 0.2, animations: { [weak self] in
guard let self else{return}
bannerView.alpha = 0
self.adView.isHidden = false
})
print("bannerView:didFailToReceiveAdWithError: \(error.localizedDescription)")
}
func bannerViewDidRecordImpression(_ bannerView: GADBannerView) {
print("bannerViewDidRecordImpression")
}
func bannerViewWillPresentScreen(_ bannerView: GADBannerView) {
print("bannerViewWillPresentScreen")
}
func bannerViewWillDismissScreen(_ bannerView: GADBannerView) {
print("bannerViewWillDIsmissScreen")
}
func bannerViewDidDismissScreen(_ bannerView: GADBannerView) {
print("bannerViewDidDismissScreen")
}
}

View File

@@ -53,8 +53,42 @@ class MoreVM{
} }
} }
if let adsData = AuthFunc.shareInstance.adsData, let moreAd = adsData.result?.filter({$0.slug == AdsEnum.more.rawValue}).first, moreAd.googleAd != nil{ /*
AdReusable.sharedInstance.setupBannerAd(bannerView: headerBannerView, in: vc.trailerTask, adUnitID: K.GoogleAdIDs.splashBanner2, viewController: self.vc, height: 5, width: 15) First check if webSeries ad is present via slug, then check for Local Ads, if not then check google ads.
*/
if let adsData = AuthFunc.shareInstance.adsData, let moreAd = adsData.result?.filter({$0.slug == AdsEnum.more.rawValue}).first{
// check if ads data contains LocalAD for webseries
if let advertisement = moreAd.advertisement,let bannerImage = advertisement.bannerImage{
vc.customAdImage.imageURL(bannerImage, color: .white)
vc.customAdImage.alpha = 0
let height = UIScreen.main.bounds.width * 0.55
vc.customAdHeight.constant = height
vc.trailerTask.isHidden = true
vc.customAdImage.isHidden = false
UIView.animate(withDuration: 0.2, animations: { [weak self] in
guard let self else{return}
vc.customAdImage.alpha = 1
})
vc.customAdImage.addTapGesture {
if let adID = moreAd.id{
PersistentStorage.shared.addAdsCount(adID: adID ,clicks: 1)
}
if let adLink = moreAd.advertisement?.adLink ,let url = URL(string: adLink), UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
}
}
}else if moreAd.googleAd != nil{
/*
Show google ads with dispatch queue.
*/
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2, execute: { [weak self] in
guard let self else{return}
AdReusable.sharedInstance.setupBannerAd(bannerView: headerBannerView, in: vc.trailerTask, adUnitID: K.GoogleAdIDs.splashBanner2, viewController: self.vc, height: 5, width: 15)
})
}
} }
} }
@@ -292,7 +326,9 @@ extension MoreVM{
let commandCenter = MPRemoteCommandCenter.shared() let commandCenter = MPRemoteCommandCenter.shared()
// Enable play command // Enable play command
commandCenter.playCommand.addTarget { [unowned self] event in commandCenter.playCommand.addTarget { [weak self] event in
guard let self else{return .commandFailed}
if player?.rate == 0.0 { if player?.rate == 0.0 {
player?.play() player?.play()
return .success return .success
@@ -301,7 +337,9 @@ extension MoreVM{
} }
// Enable pause command // Enable pause command
commandCenter.pauseCommand.addTarget { [unowned self] event in commandCenter.pauseCommand.addTarget { [weak self] event in
guard let self else{return .commandFailed}
if player?.rate == 1.0 { if player?.rate == 1.0 {
// player?.pause() // player?.pause()
if let currentIndexPlayingSong{ if let currentIndexPlayingSong{

View File

@@ -51,7 +51,7 @@ class ThemeOneVM{
func initView(){ func initView(){
GoogleInterstistialADSetup.shareInstance.setupGoogleIntersitialAD() GoogleInterstistialADSetup.shareInstance.setupGoogleIntersitialAD()
// requestIDFA() requestIDFA()
AuthFunc.shareInstance.initTimePeriods() AuthFunc.shareInstance.initTimePeriods()
startInitialTimer() startInitialTimer()
// moveCloudView() // moveCloudView()

View File

@@ -7,6 +7,7 @@
import UIKit import UIKit
import Alamofire import Alamofire
import GoogleMobileAds
class UserNotificationVM{ class UserNotificationVM{
@@ -14,7 +15,8 @@ class UserNotificationVM{
var userNotification = [UserNotificationDM]() var userNotification = [UserNotificationDM]()
let refreshControl = UIRefreshControl() let refreshControl = UIRefreshControl()
let feedbackGenerator = UIImpactFeedbackGenerator(style: .light) let feedbackGenerator = UIImpactFeedbackGenerator(style: .light)
var bottomBanner = GADBannerView()
func initView(){ func initView(){
let color1 = #colorLiteral(red: 0.05490196078, green: 0.01176470588, blue: 0.3882352941, alpha: 1) let color1 = #colorLiteral(red: 0.05490196078, green: 0.01176470588, blue: 0.3882352941, alpha: 1)
let color2 = #colorLiteral(red: 0.2041364683, green: 0.156624428, blue: 0.5904380268, alpha: 1) let color2 = #colorLiteral(red: 0.2041364683, green: 0.156624428, blue: 0.5904380268, alpha: 1)
@@ -29,6 +31,60 @@ class UserNotificationVM{
refreshControl.tintColor = .white refreshControl.tintColor = .white
refreshControl.addTarget(self, action: #selector(self.refresh(_:)), for: .valueChanged) refreshControl.addTarget(self, action: #selector(self.refresh(_:)), for: .valueChanged)
vc.tableView.addSubview(refreshControl) vc.tableView.addSubview(refreshControl)
/*
First check if webSeries ad is present via slug, then check for Local Ads, if not then check google ads.
*/
if let adsData = AuthFunc.shareInstance.adsData, let notificatonAd = adsData.result?.filter({$0.slug == AdsEnum.myList.rawValue}).first{
// check if ads data contains LocalAD for webseries
if let advertisement = notificatonAd.advertisement,let bannerImage = advertisement.bannerImage{
let height = UIScreen.main.bounds.width * 0.192
vc.adViewHeight.constant = height
vc.adView.alpha = 0
let imageView = UIImageView()
// Set the image you want to display
imageView.imageURL(bannerImage, color: .white)
// Enable auto-layout
imageView.translatesAutoresizingMaskIntoConstraints = false
// Add the UIImageView to the view
vc.adView.addSubview(imageView)
// Set UIImageView to match the size of the parent UIView
NSLayoutConstraint.activate([
imageView.leadingAnchor.constraint(equalTo: vc.adView.leadingAnchor),
imageView.trailingAnchor.constraint(equalTo: vc.adView.trailingAnchor),
imageView.topAnchor.constraint(equalTo: vc.adView.topAnchor),
imageView.bottomAnchor.constraint(equalTo: vc.adView.bottomAnchor)
])
imageView.contentMode = .scaleAspectFit
UIView.animate(withDuration: 0.2, animations: { [weak self] in
guard let self else{return}
vc.adView.alpha = 1
vc.adView.isHidden = false
})
vc.adView.addTapGesture {
if let adID = notificatonAd.id{
PersistentStorage.shared.addAdsCount(adID: adID ,clicks: 1)
}
if let adLink = notificatonAd.advertisement?.adLink ,let url = URL(string: adLink), UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
}
}
}else if notificatonAd.googleAd != nil{
/*
Show google ads with dispatch queue.
*/
//setup google banner ads.
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3, execute: {
AdReusable.sharedInstance.setupBannerAd(bannerView: self.bottomBanner, in: self.vc.adView, adUnitID: K.GoogleAdIDs.myListNotifications, viewController: self.vc, height: 6,width: 0)
})
}
}
} }
func setupCell(){ func setupCell(){

View File

@@ -19,7 +19,8 @@ class WokaFMVC: UIViewController {
@IBOutlet weak var volMinusBtnn: UIButton! @IBOutlet weak var volMinusBtnn: UIButton!
@IBOutlet weak var activityIndicator: UIActivityIndicatorView! @IBOutlet weak var activityIndicator: UIActivityIndicatorView!
@IBOutlet weak var blackView: UIView! @IBOutlet weak var blackView: UIView!
@IBOutlet weak var adView: UIView! @IBOutlet weak var imageAdView: UIImageView!
@IBOutlet weak var imageAdHeight: NSLayoutConstraint!
var vm = WokaFMVM() var vm = WokaFMVM()
@@ -63,9 +64,7 @@ class WokaFMVC: UIViewController {
} }
} }
} }
} }
@objc func appWillEnterForeground(){ @objc func appWillEnterForeground(){
vm.stopMPNowPlayin() vm.stopMPNowPlayin()
@@ -242,15 +241,19 @@ extension UIButton {
extension WokaFMVC : GADBannerViewDelegate{ extension WokaFMVC : GADBannerViewDelegate{
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) { func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
print("bannerViewDidReceiveAd") print("bannerViewDidReceiveAd")
adView.isHidden = false imageAdView.isHidden = false
bannerView.alpha = 0 bannerView.alpha = 0
bannerView.backgroundColor = #colorLiteral(red: 0.01960784314, green: 0, blue: 0.2196078431, alpha: 1)
UIView.animate(withDuration: 0.2, animations: { UIView.animate(withDuration: 0.2, animations: {
bannerView.alpha = 1 bannerView.alpha = 1
}) })
} }
func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) { func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) {
UIView.animate(withDuration: 0.2, animations: { [weak self] in
guard let self else{return}
bannerView.alpha = 0
imageAdView.isHidden = true
})
print("bannerView:didFailToReceiveAdWithError: \(error.localizedDescription)") print("bannerView:didFailToReceiveAdWithError: \(error.localizedDescription)")
} }

View File

@@ -102,7 +102,8 @@ class WokaFMVM{
let commandCenter = MPRemoteCommandCenter.shared() let commandCenter = MPRemoteCommandCenter.shared()
// Enable play command // Enable play command
commandCenter.playCommand.addTarget { [unowned self] event in commandCenter.playCommand.addTarget { [weak self] event in
guard let self else{return .commandFailed}
if player.rate == 0.0 { if player.rate == 0.0 {
player.play() player.play()
return .success return .success
@@ -111,7 +112,8 @@ class WokaFMVM{
} }
// Enable pause command // Enable pause command
commandCenter.pauseCommand.addTarget { [unowned self] event in commandCenter.pauseCommand.addTarget { [weak self] event in
guard let self else{return .commandFailed}
if player.rate == 1.0 { if player.rate == 1.0 {
player.pause() player.pause()
return .success return .success
@@ -154,16 +156,41 @@ class WokaFMVM{
func setGoogleAd(){ func setGoogleAd(){
if let adsData = AuthFunc.shareInstance.adsData, let fmAd = adsData.result?.filter({$0.slug == AdsEnum.fm.rawValue}).first, fmAd.googleAd != nil{ /*
/* First check if webSeries ad is present via slug, then check for Local Ads, if not then check google ads.
Show google ads with dispatch queue. */
*/ if let adsData = AuthFunc.shareInstance.adsData, let fmAd = adsData.result?.filter({$0.slug == AdsEnum.fm.rawValue}).first{
DispatchQueue.main.asyncAfter(deadline: .now() + 0.8, execute: { [weak self] in
guard let self else{return} // check if ads data contains LocalAD for webseries
AdReusable.sharedInstance.setupBannerAd(bannerView: self.bottomBannerView, in: vc.adView, adUnitID: K.GoogleAdIDs.wokaFM, viewController: self.vc) if let advertisement = fmAd.advertisement,let bannerImage = advertisement.bannerImage{
}) vc.imageAdView.imageURL(bannerImage, color: .white)
vc.imageAdView.alpha = 0
let height = UIScreen.main.bounds.width * 0.192
vc.imageAdHeight.constant = height
UIView.animate(withDuration: 0.2, animations: { [weak self] in
guard let self else{return}
vc.imageAdView.alpha = 1
vc.imageAdView.isHidden = false
})
vc.imageAdView.addTapGesture {
if let adID = fmAd.id{
PersistentStorage.shared.addAdsCount(adID: adID ,clicks: 1)
}
if let adLink = fmAd.advertisement?.adLink ,let url = URL(string: adLink), UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
}
}
}else{
/*
Show google ads with dispatch queue.
*/
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3, execute: { [weak self] in
guard let self else{return}
AdReusable.sharedInstance.setupBannerAd(bannerView: self.bottomBannerView, in: vc.imageAdView, adUnitID: K.GoogleAdIDs.wokaFM, viewController: self.vc)
})
}
} }
} }
// MARK: - Setup AV & Player // MARK: - Setup AV & Player

View File

@@ -153,13 +153,12 @@
<constraint firstAttribute="trailing" secondItem="RH0-xQ-zUi" secondAttribute="trailing" id="xbH-kE-W5r"/> <constraint firstAttribute="trailing" secondItem="RH0-xQ-zUi" secondAttribute="trailing" id="xbH-kE-W5r"/>
</constraints> </constraints>
</view> </view>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="IEh-tF-XpP"> <imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="7j5-ca-d4P">
<rect key="frame" x="0.0" y="0.0" width="393" height="100"/> <rect key="frame" x="0.0" y="0.0" width="393" height="100"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="100" id="e7j-5I-ing"/> <constraint firstAttribute="height" constant="100" id="OYG-5T-sWE"/>
</constraints> </constraints>
</view> </imageView>
</subviews> </subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints> <constraints>
@@ -188,8 +187,9 @@
</view> </view>
<connections> <connections>
<outlet property="activityIndicator" destination="cnz-PV-85Z" id="iyM-Kv-Wiu"/> <outlet property="activityIndicator" destination="cnz-PV-85Z" id="iyM-Kv-Wiu"/>
<outlet property="adView" destination="IEh-tF-XpP" id="Txy-PR-TyV"/>
<outlet property="blackView" destination="ezz-dQ-HXQ" id="Cf0-Kd-uci"/> <outlet property="blackView" destination="ezz-dQ-HXQ" id="Cf0-Kd-uci"/>
<outlet property="imageAdHeight" destination="OYG-5T-sWE" id="cej-o8-zHJ"/>
<outlet property="imageAdView" destination="7j5-ca-d4P" id="YKs-MO-Ry3"/>
<outlet property="mainView" destination="5fM-ca-UBK" id="Lpo-rO-4gm"/> <outlet property="mainView" destination="5fM-ca-UBK" id="Lpo-rO-4gm"/>
<outlet property="playBtn" destination="JBl-cN-PnX" id="FWa-0w-oaU"/> <outlet property="playBtn" destination="JBl-cN-PnX" id="FWa-0w-oaU"/>
<outlet property="roundView" destination="V0i-Kx-TXO" id="lX7-RL-7t0"/> <outlet property="roundView" destination="V0i-Kx-TXO" id="lX7-RL-7t0"/>

View File

@@ -201,7 +201,8 @@ extension WebSeriesVC : TableViewSRC{
if let categoryIds = data.favouriteCategoryIDS?.rawValue { if let categoryIds = data.favouriteCategoryIDS?.rawValue {
let components = categoryIds.components(separatedBy: ",") let components = categoryIds.components(separatedBy: ",")
if isFav == true && (components.first == categoryID.toString() || components.last == categoryID.toString()){ if isFav == true && (components.first == categoryID.toString() || components.last == categoryID.toString()){
LikeFavCommonFunc.shareInstance.removeFavourite(postID: postID, postType: postType, categoryID: categoryID, vc: self) { [unowned self] isDone in LikeFavCommonFunc.shareInstance.removeFavourite(postID: postID, postType: postType, categoryID: categoryID, vc: self) { [weak self] isDone in
guard let self else{return}
if isDone{ if isDone{
vm.showData[index].markAsFavourite = false vm.showData[index].markAsFavourite = false
vm.showData[index].favouriteCategoryIDS = ValueWrapper.stringValue("") vm.showData[index].favouriteCategoryIDS = ValueWrapper.stringValue("")
@@ -229,7 +230,8 @@ extension WebSeriesVC : TableViewSRC{
} }
} }
}else{ }else{
LikeFavCommonFunc.shareInstance.addFavourite(postID: postID, postType: postType, categoryID: categoryID, vc: self) { [unowned self] isDone in LikeFavCommonFunc.shareInstance.addFavourite(postID: postID, postType: postType, categoryID: categoryID, vc: self) { [weak self] isDone in
guard let self else{return}
if isDone{ if isDone{
vm.showData[index].markAsFavourite = true vm.showData[index].markAsFavourite = true
vm.showData[index].favouriteCategoryIDS = ValueWrapper.stringValue(categoryID.toString()) vm.showData[index].favouriteCategoryIDS = ValueWrapper.stringValue(categoryID.toString())
@@ -263,7 +265,8 @@ extension WebSeriesVC : TableViewSRC{
case .liked: case .liked:
guard let isLiked = data.isLiked ,let postID = data.id,let postType = data.contentMoreDetails?.first?.postType else{return} guard let isLiked = data.isLiked ,let postID = data.id,let postType = data.contentMoreDetails?.first?.postType else{return}
if isLiked{ if isLiked{
LikeFavCommonFunc.shareInstance.unlikePost(postID: postID, postType: postType, vc: self) { [unowned self] isDone in LikeFavCommonFunc.shareInstance.unlikePost(postID: postID, postType: postType, vc: self) { [weak self] isDone in
guard let self else{return}
if isDone{ if isDone{
vm.showData[index].isLiked = false vm.showData[index].isLiked = false
vm.showData[index].likesCount! -= 1 vm.showData[index].likesCount! -= 1
@@ -283,7 +286,8 @@ extension WebSeriesVC : TableViewSRC{
} }
} }
}else{ }else{
LikeFavCommonFunc.shareInstance.likePost(postID: postID, postType: postType, vc: self){ [unowned self] isDone in LikeFavCommonFunc.shareInstance.likePost(postID: postID, postType: postType, vc: self){ [weak self] isDone in
guard let self else{return}
if isDone{ if isDone{
vm.showData[index].isLiked = true vm.showData[index].isLiked = true
vm.showData[index].likesCount! += 1 vm.showData[index].likesCount! += 1