diff --git a/WOKA.xcodeproj/project.pbxproj b/WOKA.xcodeproj/project.pbxproj index 7642746..6df197e 100644 --- a/WOKA.xcodeproj/project.pbxproj +++ b/WOKA.xcodeproj/project.pbxproj @@ -154,6 +154,7 @@ 52CA28FC2BE11A0400708B49 /* UserIntrestVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52CA28FB2BE11A0400708B49 /* UserIntrestVM.swift */; }; 52CC38C32BDF812F00B74C3E /* LocalisedElements.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52CC38C22BDF812F00B74C3E /* LocalisedElements.swift */; }; 52CCD7B02C1AF0F80078BD65 /* RadioVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52CCD7AF2C1AF0F80078BD65 /* RadioVC.swift */; }; + 52D23F112C465E6F003E743A /* LogoutPopupVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D23F102C465E6F003E743A /* LogoutPopupVC.swift */; }; 52D2F3D82C24043D009E52FF /* ShimmerEffectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D2F3D72C24043D009E52FF /* ShimmerEffectView.swift */; }; 52D6A2462C21A29800145908 /* ContinueWatchingDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D6A2452C21A29800145908 /* ContinueWatchingDM.swift */; }; 52D6A2482C21A3A500145908 /* WebSeriesVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D6A2472C21A3A500145908 /* WebSeriesVM.swift */; }; @@ -178,7 +179,7 @@ 52FDBA7D2BFF481A009D7AC7 /* ThemeOneVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52FDBA7C2BFF481A009D7AC7 /* ThemeOneVM.swift */; }; 52FDDAB52BF34DC300E037C1 /* YesNoAlertVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52FDDAB42BF34DC300E037C1 /* YesNoAlertVC.swift */; }; 619A5A1BD8BD968ADC83C106 /* Pods_WOKA.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBA543A4216400A2864E3D3E /* Pods_WOKA.framework */; }; - 9C007F202C255DF200F798C2 /* SeasonEpisodeListingDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C007F1F2C255DF200F798C2 /* SeasonEpisodeListingDM.swift */; }; + 9C007F202C255DF200F798C2 /* EpisodeListingDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C007F1F2C255DF200F798C2 /* EpisodeListingDM.swift */; }; 9C007F232C25603800F798C2 /* WebSeriesEpisodeCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C007F212C25603800F798C2 /* WebSeriesEpisodeCell.swift */; }; 9C007F242C25603800F798C2 /* WebSeriesEpisodeCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9C007F222C25603800F798C2 /* WebSeriesEpisodeCell.xib */; }; 9C0A853F2BEE35340093783D /* ForgotPassDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C0A853E2BEE35340093783D /* ForgotPassDM.swift */; }; @@ -438,6 +439,7 @@ 52CA28FB2BE11A0400708B49 /* UserIntrestVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserIntrestVM.swift; sourceTree = ""; }; 52CC38C22BDF812F00B74C3E /* LocalisedElements.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalisedElements.swift; sourceTree = ""; }; 52CCD7AF2C1AF0F80078BD65 /* RadioVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioVC.swift; sourceTree = ""; }; + 52D23F102C465E6F003E743A /* LogoutPopupVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogoutPopupVC.swift; sourceTree = ""; }; 52D2F3D72C24043D009E52FF /* ShimmerEffectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShimmerEffectView.swift; sourceTree = ""; }; 52D6A2452C21A29800145908 /* ContinueWatchingDM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContinueWatchingDM.swift; sourceTree = ""; }; 52D6A2472C21A3A500145908 /* WebSeriesVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebSeriesVM.swift; sourceTree = ""; }; @@ -463,7 +465,7 @@ 52FDBA7A2BFF2712009D7AC7 /* AuthFuncTimeHandling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthFuncTimeHandling.swift; sourceTree = ""; }; 52FDBA7C2BFF481A009D7AC7 /* ThemeOneVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeOneVM.swift; sourceTree = ""; }; 52FDDAB42BF34DC300E037C1 /* YesNoAlertVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YesNoAlertVC.swift; sourceTree = ""; }; - 9C007F1F2C255DF200F798C2 /* SeasonEpisodeListingDM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeasonEpisodeListingDM.swift; sourceTree = ""; }; + 9C007F1F2C255DF200F798C2 /* EpisodeListingDM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EpisodeListingDM.swift; sourceTree = ""; }; 9C007F212C25603800F798C2 /* WebSeriesEpisodeCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebSeriesEpisodeCell.swift; sourceTree = ""; }; 9C007F222C25603800F798C2 /* WebSeriesEpisodeCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WebSeriesEpisodeCell.xib; sourceTree = ""; }; 9C0A853E2BEE35340093783D /* ForgotPassDM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForgotPassDM.swift; sourceTree = ""; }; @@ -911,6 +913,7 @@ 5259542D2BEA393700191286 /* AlertCustomVC.swift */, 5259542F2BEA394300191286 /* CustomAlerts.storyboard */, 52FDDAB42BF34DC300E037C1 /* YesNoAlertVC.swift */, + 52D23F102C465E6F003E743A /* LogoutPopupVC.swift */, ); path = Alerts; sourceTree = ""; @@ -1167,7 +1170,7 @@ 52D6A24D2C22B3AB00145908 /* WebSeriesShowListDM.swift */, 52D6A2532C22B93F00145908 /* CategoryListingDM.swift */, 528E5F1A2C24531200E33E4E /* SeasonListingDM.swift */, - 9C007F1F2C255DF200F798C2 /* SeasonEpisodeListingDM.swift */, + 9C007F1F2C255DF200F798C2 /* EpisodeListingDM.swift */, 52AC2D242C295A7900337473 /* TeaserDM.swift */, ); path = Model; @@ -1769,7 +1772,7 @@ 52D774EB2BDFC0BF001D87DE /* OTPVC.swift in Sources */, 9C8446872C40FC6E003E3E53 /* AVPlayerTesting.swift in Sources */, 52AF71F42C36C40B00BC5972 /* GamesWebViewVC.swift in Sources */, - 9C007F202C255DF200F798C2 /* SeasonEpisodeListingDM.swift in Sources */, + 9C007F202C255DF200F798C2 /* EpisodeListingDM.swift in Sources */, 52D2F3D82C24043D009E52FF /* ShimmerEffectView.swift in Sources */, 9C27E16F2BDB866500EC1DA9 /* CellIdentifier.swift in Sources */, 52BC3BF22C170264002FACA6 /* MoreVM.swift in Sources */, @@ -1789,6 +1792,7 @@ 523ED25E2BDA2BC700CFED02 /* AppDelegate.swift in Sources */, 9C7939132C0EFCAE00F5D6E6 /* FaqVM.swift in Sources */, 52D774ED2BDFC13F001D87DE /* OTPVM.swift in Sources */, + 52D23F112C465E6F003E743A /* LogoutPopupVC.swift in Sources */, 525327D62BFCC23600F64283 /* SideMenuVM.swift in Sources */, 9CBCB2A32BE50C95007D7934 /* ResetPassUserNameVC.swift in Sources */, 52A3F6A52BECBA8D0000BB0B /* LinkedChildDM.swift in Sources */, diff --git a/WOKA/Alerts/CustomAlerts.storyboard b/WOKA/Alerts/CustomAlerts.storyboard index 136d7c7..44c792f 100644 --- a/WOKA/Alerts/CustomAlerts.storyboard +++ b/WOKA/Alerts/CustomAlerts.storyboard @@ -257,6 +257,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/WOKA/Alerts/LogoutPopupVC.swift b/WOKA/Alerts/LogoutPopupVC.swift new file mode 100644 index 0000000..fd13a87 --- /dev/null +++ b/WOKA/Alerts/LogoutPopupVC.swift @@ -0,0 +1,35 @@ +// +// LogoutPopupVC.swift +// WOKA +// +// Created by MacBook Pro on 16/07/24. +// + +import UIKit + +class LogoutPopupVC: UIViewController { + + @IBOutlet weak var outerView: UIView! + @IBOutlet weak var guestLoginStack: UIStackView! + + override func viewDidLoad() { + super.viewDidLoad() + let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:))) + outerView.addGestureRecognizer(tapGesture) + } + + @objc func handleTap(_ gesture: UITapGestureRecognizer) { + let location = gesture.location(in: outerView) + if !guestLoginStack.frame.contains(location) { + self.dismiss(animated: true) + } + } + + @IBAction func closeBtnTapped(_ sender: UIButton) { + self.dismiss(animated: true) + } + + @IBAction func freeSignInTapped(_ sender: LocalisedElementsButton) { + UIApplication.setRootView(LoginNavVC.instantiate(from: .AuthenticationSB)) + } +} diff --git a/WOKA/Audio Books/AudioBookDetailsVC.swift b/WOKA/Audio Books/AudioBookDetailsVC.swift index 4a218e4..9476a8b 100644 --- a/WOKA/Audio Books/AudioBookDetailsVC.swift +++ b/WOKA/Audio Books/AudioBookDetailsVC.swift @@ -47,6 +47,8 @@ class AudioBookDetailsVC : UIViewController{ func tapHandler(){ addView.addTapGesture { [weak self] in guard let self else{return} + if AuthFunc.shareInstance.guestUserLoginPopUp() { return} + if let audioData{ guard let showID = audioData.id, let isFav = audioData.markAsFavourite, let postType = audioData.contentMoreDetails?.first?.postType else{return} @@ -92,7 +94,8 @@ class AudioBookDetailsVC : UIViewController{ likeView.addTapGesture { [weak self] in guard let self else{return} - + if AuthFunc.shareInstance.guestUserLoginPopUp() { return} + if let audioData{ guard let showID = audioData.id, let isLiked = audioData.isLiked, let postType = audioData.contentMoreDetails?.first?.postType else{return} diff --git a/WOKA/Constants K/StoryBoardID.swift b/WOKA/Constants K/StoryBoardID.swift index 3954888..34bda44 100644 --- a/WOKA/Constants K/StoryBoardID.swift +++ b/WOKA/Constants K/StoryBoardID.swift @@ -37,6 +37,7 @@ extension K{ struct CustomAlerts{ static let alertCustomVC = "AlertCustomVC" static let yesNoAlertVC = "YesNoAlertVC" + static let logoutPopupVC = "LogoutPopupVC" } struct Theme{ diff --git a/WOKA/Games/Controller/GamesDetailVC.swift b/WOKA/Games/Controller/GamesDetailVC.swift index 9f02bef..31dd733 100644 --- a/WOKA/Games/Controller/GamesDetailVC.swift +++ b/WOKA/Games/Controller/GamesDetailVC.swift @@ -91,6 +91,7 @@ class GamesDetailVC: UIViewController { addView.addTapGesture { [weak self] in guard let self else{return} + if AuthFunc.shareInstance.guestUserLoginPopUp() { return} if let gameData{ guard let showID = gameData.id, let isFav = gameData.markAsFavourite, let postType = gameData.contentMoreDetails?.first?.postType else{return} @@ -116,7 +117,8 @@ class GamesDetailVC: UIViewController { likeView.addTapGesture { [weak self] in guard let self else{return} - + if AuthFunc.shareInstance.guestUserLoginPopUp() { return} + if let gameData{ guard let showID = gameData.id, let isLiked = gameData.isLiked, let postType = gameData.contentMoreDetails?.first?.postType else{return} diff --git a/WOKA/Home/Controller/MyListVC.swift b/WOKA/Home/Controller/MyListVC.swift index 185d267..19e4f1f 100644 --- a/WOKA/Home/Controller/MyListVC.swift +++ b/WOKA/Home/Controller/MyListVC.swift @@ -28,6 +28,9 @@ class MyListVC: UIViewController{ @IBOutlet weak var scrollView: UIScrollView! @IBOutlet weak var gradientView: UIView! + @IBOutlet weak var guestLoginView: UIView! + @IBOutlet weak var guestLoginStack: UIStackView! + var vm = MyListVM() override func viewDidLoad() { @@ -75,6 +78,9 @@ class MyListVC: UIViewController{ self.tabBarController?.selectedIndex = 0 } + @IBAction func freeSignIn(_ sender: LocalisedElementsButton) { + UIApplication.setRootView(LoginNavVC.instantiate(from: .AuthenticationSB)) + } } // MARK: - CollectionView Delegate diff --git a/WOKA/Home/Home.storyboard b/WOKA/Home/Home.storyboard index 6c494a9..a9a3cbc 100644 --- a/WOKA/Home/Home.storyboard +++ b/WOKA/Home/Home.storyboard @@ -16,6 +16,9 @@ Exo2-Medium + + Exo2-Regular + Exo2-SemiBold @@ -892,8 +895,8 @@ - diff --git a/WOKA/Home/ViewModel/MyListVM.swift b/WOKA/Home/ViewModel/MyListVM.swift index 83aa255..35fed19 100644 --- a/WOKA/Home/ViewModel/MyListVM.swift +++ b/WOKA/Home/ViewModel/MyListVM.swift @@ -28,10 +28,18 @@ class MyListVM{ var selectedCollection : CollectionSelectionMyList? func initView(){ + NotificationCenter.default.addObserver(self, selector: #selector(languageChanged), name: .languageDidChange, object: nil) + + if AuthFunc.shareInstance.getUserType() == 3{ // handle guest + vc.guestLoginView.isHidden = false + vc.guestLoginStack.isHidden = false + vc.scrollView.isHidden = true + return + } + setupCell() Utilities.startProgressHUD() getFavouriteListing() - NotificationCenter.default.addObserver(self, selector: #selector(languageChanged), name: .languageDidChange, object: nil) } func addGradient(){ diff --git a/WOKA/Karaoke/Controller/KaraokeDetailsVC.swift b/WOKA/Karaoke/Controller/KaraokeDetailsVC.swift index a6229d3..52031b0 100644 --- a/WOKA/Karaoke/Controller/KaraokeDetailsVC.swift +++ b/WOKA/Karaoke/Controller/KaraokeDetailsVC.swift @@ -100,12 +100,14 @@ class KaraokeDetailsVC: UIViewController { } func tapHandler(){ - + self.view.addTapGesture { self.dismiss(animated: true) } addView.addTapGesture { [weak self] in + if AuthFunc.shareInstance.guestUserLoginPopUp() { return} + guard let self else{return} if let karaokeData{ @@ -130,6 +132,8 @@ class KaraokeDetailsVC: UIViewController { } likeView.addTapGesture { [weak self] in + if AuthFunc.shareInstance.guestUserLoginPopUp() { return} + guard let self else{return} if let karaokeData{ diff --git a/WOKA/Localized Module/en.lproj/Localizable.strings b/WOKA/Localized Module/en.lproj/Localizable.strings index 636c00f..9ed8065 100644 --- a/WOKA/Localized Module/en.lproj/Localizable.strings +++ b/WOKA/Localized Module/en.lproj/Localizable.strings @@ -52,3 +52,6 @@ "ऑडियो पुस्तकें" = "Audio Books"; "कराओके" = "Karaoke"; "खेल" = "Games"; +"फ्री साइन इन" = "Free Sign In"; +"कृपया अधिक रोमांच और सुविधाओ के लिए साइन इन करे..." = "To continue, please sign in for more adventures and features..."; +"WOKA से जुड़े रहे" = "Continue to WOKA"; diff --git a/WOKA/Localized Module/hi.lproj/Localizable.strings b/WOKA/Localized Module/hi.lproj/Localizable.strings index 673cc83..c2e313b 100644 --- a/WOKA/Localized Module/hi.lproj/Localizable.strings +++ b/WOKA/Localized Module/hi.lproj/Localizable.strings @@ -214,6 +214,9 @@ "Audio Books" = "ऑडियो पुस्तकें"; "Karaoke" = "कराओके"; "Games" = "खेल"; +"Free Sign In" = "फ्री साइन इन"; +"To continue, please sign in for more adventures and features..." = "कृपया अधिक रोमांच और सुविधाओ के लिए साइन इन करे..."; +"Continue to WOKA" = "WOKA से जुड़े रहे"; /* diff --git a/WOKA/Main/AuthFunc/AuthFunc.swift b/WOKA/Main/AuthFunc/AuthFunc.swift index 1eef5b7..271d256 100644 --- a/WOKA/Main/AuthFunc/AuthFunc.swift +++ b/WOKA/Main/AuthFunc/AuthFunc.swift @@ -75,6 +75,21 @@ class AuthFunc{ return isLoginned } + /* + Logout PopUP Handling + */ + func guestUserLoginPopUp() -> Bool{ + if AuthFunc.shareInstance.getUserType() == 3{ + let sb = UIStoryboard(name: K.StoryBoard.customAlerts, bundle: nil) + let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.CustomAlerts.logoutPopupVC) as! LogoutPopupVC + vcPush.modalPresentationStyle = .overCurrentContext + vcPush.modalTransitionStyle = .crossDissolve + UIApplication.topViewController()?.present(vcPush, animated: true) + return true + } + return false + } + /* This func will return the access token saved at the time of login */ diff --git a/WOKA/Network Adapter/APIEndPoints.swift b/WOKA/Network Adapter/APIEndPoints.swift index 154f2db..6f7cb75 100644 --- a/WOKA/Network Adapter/APIEndPoints.swift +++ b/WOKA/Network Adapter/APIEndPoints.swift @@ -86,7 +86,7 @@ struct APIEndPoints { static let watch_show_listing = makeURL(path: "watch_show_listing") static let category_listing = makeURL(path: "category_listing") static let season_listing = makeURL(path: "season_listing") - static let season_episode_listing = makeURL(path: "season_episode_listing") + static let episode_listing = makeURL(path: "episode_listing") static let teaser_listing = makeURL(path: "teaser_listing") } diff --git a/WOKA/TabBar & SideMenu/Controller/SideMenuVC.swift b/WOKA/TabBar & SideMenu/Controller/SideMenuVC.swift index 2976933..9994314 100644 --- a/WOKA/TabBar & SideMenu/Controller/SideMenuVC.swift +++ b/WOKA/TabBar & SideMenu/Controller/SideMenuVC.swift @@ -91,6 +91,13 @@ class SideMenuVC: UIViewController { } @IBAction func logoutBtnTapped(_ sender: LocalisedElementsButton) { + // if its guest user navigate him to login + if AuthFunc.shareInstance.getUserType() == 3{ + self.sideMenuController?.hideMenu() + UIApplication.setRootView(LoginNavVC.instantiate(from: .AuthenticationSB)) + return + } + let sb = UIStoryboard(name: K.StoryBoard.customAlerts, bundle: nil) let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.CustomAlerts.yesNoAlertVC) as! YesNoAlertVC vcPush.mainTitleText = "WOKA" diff --git a/WOKA/WebSeries/Controller/EpisodeDetailsVC.swift b/WOKA/WebSeries/Controller/EpisodeDetailsVC.swift index aa22c47..46dec63 100644 --- a/WOKA/WebSeries/Controller/EpisodeDetailsVC.swift +++ b/WOKA/WebSeries/Controller/EpisodeDetailsVC.swift @@ -21,7 +21,7 @@ class EpisodeDetailsVC: UIViewController { var teaserData : TeaserDM.ResultData? - var episodeData : SeasonEpisodeListingDM.EpisodeDatum? + var episodeData : EpisodeListingDM.ResultData? override func viewDidLoad() { super.viewDidLoad() diff --git a/WOKA/WebSeries/Controller/WebSeriesSeasonVC.swift b/WOKA/WebSeries/Controller/WebSeriesSeasonVC.swift index 672412f..ae3a01b 100644 --- a/WOKA/WebSeries/Controller/WebSeriesSeasonVC.swift +++ b/WOKA/WebSeries/Controller/WebSeriesSeasonVC.swift @@ -110,7 +110,7 @@ extension WebSeriesSeasonVC : TableViewSRC{ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { switch tableView{ case episodeTableView: - return vm.seasonEpisodeData.first?.episodeData?.count ?? 0 + return vm.seasonEpisodeData.count case teaserTableView: return vm.teaserData.count default: @@ -126,9 +126,8 @@ extension WebSeriesSeasonVC : TableViewSRC{ let cell = tableView.dequeueReusableCell(withIdentifier: K.CellIdentifier.WebSeries.webSeriesEpisodeCell) as! WebSeriesEpisodeCell switch tableView{ case episodeTableView: - if let data = vm.seasonEpisodeData.first?.episodeData?[indexPath.row]{ - cell.setData(data: data) - } + let data = vm.seasonEpisodeData[indexPath.row] + cell.setData(data: data) case teaserTableView: let data = vm.teaserData[indexPath.row] cell.setTeaserData(data: data) @@ -168,7 +167,7 @@ extension WebSeriesSeasonVC : TableViewSRC{ case self.episodeTableView: - guard let episodeData = vm.seasonEpisodeData.first?.episodeData else{return} + let episodeData = vm.seasonEpisodeData for i in episodeData{ var url = String() guard let englishData = i.contentMoreDetails?.filter({$0.languageMasterID == 1}).first, let hindiData = i.contentMoreDetails?.filter({$0.languageMasterID == 2}).first else{return} @@ -210,7 +209,7 @@ extension WebSeriesSeasonVC : TableViewSRC{ let data = vm.teaserData[indexPath.row] vcPush.teaserData = data default: - let data = vm.seasonEpisodeData.first?.episodeData?[indexPath.row] + let data = vm.seasonEpisodeData[indexPath.row] vcPush.episodeData = data } vcPush.onDoneBlock = { [weak self] in @@ -240,7 +239,7 @@ extension WebSeriesSeasonVC : TableViewSRC{ playerItems.append(JwPlayerItemCreate(url: url, poster: teaserData.thumbnailPath, titles: hindiData.title)) } case self.episodeTableView: - guard let episodeData = vm.seasonEpisodeData.first?.episodeData else{return} + let episodeData = vm.seasonEpisodeData for i in episodeData{ var url = String() guard let englishData = i.contentMoreDetails?.filter({$0.languageMasterID == 1}).first, let hindiData = i.contentMoreDetails?.filter({$0.languageMasterID == 2}).first else{return} diff --git a/WOKA/WebSeries/Controller/WebSeriesVC.swift b/WOKA/WebSeries/Controller/WebSeriesVC.swift index 602a40e..43ee267 100644 --- a/WOKA/WebSeries/Controller/WebSeriesVC.swift +++ b/WOKA/WebSeries/Controller/WebSeriesVC.swift @@ -86,7 +86,9 @@ class WebSeriesVC: UIViewController { loadMoreBtn.isHidden = true vm.pageNo += 1 loadMoreActivityIndicator.startAnimating() - vm.getShowListing(categoryID: 18, isBtnClick: true) + if let index = vm.dropDownModule.indexForSelectedRow, let categoryIndex = vm.categoryListingData[index].id{ + vm.getShowListing(categoryID: categoryIndex, isBtnClick: true) + } } } diff --git a/WOKA/WebSeries/Model/SeasonEpisodeListingDM.swift b/WOKA/WebSeries/Model/EpisodeListingDM.swift similarity index 57% rename from WOKA/WebSeries/Model/SeasonEpisodeListingDM.swift rename to WOKA/WebSeries/Model/EpisodeListingDM.swift index f336984..0150091 100644 --- a/WOKA/WebSeries/Model/SeasonEpisodeListingDM.swift +++ b/WOKA/WebSeries/Model/EpisodeListingDM.swift @@ -1,5 +1,5 @@ // -// SeasonEpisodeListingDM.swift +// EpisodeListingDM.swift // WOKA // // Created by Bilal on 21/06/2024. @@ -7,8 +7,10 @@ import Foundation -// MARK: - SeasonEpisodeListingDM -struct SeasonEpisodeListingDM: Codable { +import Foundation + +// MARK: - EpisodeListingDM +struct EpisodeListingDM: Codable { let result: [ResultData]? let totalRecords: Int? @@ -17,52 +19,20 @@ struct SeasonEpisodeListingDM: Codable { case totalRecords = "total_records" } + // MARK: - Result struct ResultData: Codable { - let id, watchShowsMasterID: Int? - let seasonNumber: String? - let noOfEpisodes: Int? - let seasonDescription: String? - let releaseYear: Int? - let seasonTitle: String? - let trailerURL: String? - let thumbnailPath: String? - let thumbnailImgURL: String? - let tagsKeyword, releaseDate, mediaType: String? - let seasonMoreDetails: [MoreDetail]? - let episodeData: [EpisodeDatum]? - let episodeTotalRecords: Int? - - enum CodingKeys: String, CodingKey { - case id - case watchShowsMasterID = "watch_shows_master_id" - case seasonNumber = "season_number" - case noOfEpisodes = "no_of_episodes" - case seasonDescription = "season_description" - case releaseYear = "release_year" - case seasonTitle = "season_title" - case trailerURL = "trailer_url" - case thumbnailPath = "thumbnail_path" - case thumbnailImgURL = "thumbnail_img_url" - case tagsKeyword = "tags_keyword" - case releaseDate = "release_date" - case mediaType = "media_type" - case seasonMoreDetails = "season_more_details" - case episodeData = "episode_data" - case episodeTotalRecords = "episode_total_records" - } - } - - // MARK: - EpisodeDatum - struct EpisodeDatum: Codable { let id, watchShowsMasterID, seasonMasterID, episodeNumber: Int? let episodeTitle, episodeDescription: String? let thumbnailPath: String? let thumbnailImgURL: String? let episodeURL: String? let languageMasterID: Int? - let tagsKeyword, episodeDuration, releaseDate: String? - let contentMoreDetails: [MoreDetail]? + let tagsKeyword, episodeDuration: String? + let releaseDate: String? + let contentMoreDetails: [ContentMoreDetail]? + let seasonData: SeasonData? + let userVideoView: [UserVideoView]? enum CodingKeys: String, CodingKey { case id @@ -79,14 +49,34 @@ struct SeasonEpisodeListingDM: Codable { case episodeDuration = "episode_duration" case releaseDate = "release_date" case contentMoreDetails = "content_more_details" + case seasonData = "season_data" + case userVideoView = "user_video_view" } } + + // MARK: - UserVideoView + struct UserVideoView: Codable { + let id, userID, postID, postType: Int? + let totalWatchedDuration, lastWatchedLeft: String? + let categoryID: Int? - // MARK: - MoreDetail - struct MoreDetail: Codable { + enum CodingKeys: String, CodingKey { + case id + case userID = "user_id" + case postID = "post_id" + case postType = "post_type" + case totalWatchedDuration = "total_watched_duration" + case lastWatchedLeft = "last_watched_left" + case categoryID = "category_id" + } + } + + + // MARK: - ContentMoreDetail + struct ContentMoreDetail: Codable { let id, contentID, postType, languageMasterID: Int? let title, description, tagsKeywords: String? - let contentHDURL, contentSDURL, trailerHDURL, trailerSDURL: String? + let contentHDURL, contentSDURL: String? enum CodingKeys: String, CodingKey { case id @@ -97,8 +87,18 @@ struct SeasonEpisodeListingDM: Codable { case tagsKeywords = "tags_keywords" case contentHDURL = "content_hd_url" case contentSDURL = "content_sd_url" - case trailerHDURL = "trailer_hd_url" - case trailerSDURL = "trailer_sd_url" + } + } + + // MARK: - SeasonData + struct SeasonData: Codable { + let id, watchShowsMasterID: Int? + let seasonNumber: String? + + enum CodingKeys: String, CodingKey { + case id + case watchShowsMasterID = "watch_shows_master_id" + case seasonNumber = "season_number" } } diff --git a/WOKA/WebSeries/View/WebSeriesEpisodeCell.swift b/WOKA/WebSeries/View/WebSeriesEpisodeCell.swift index 5a3ae44..ed3abf4 100644 --- a/WOKA/WebSeries/View/WebSeriesEpisodeCell.swift +++ b/WOKA/WebSeries/View/WebSeriesEpisodeCell.swift @@ -29,7 +29,7 @@ class WebSeriesEpisodeCell: UITableViewCell { // Configure the view for the selected state } - func setData(data : SeasonEpisodeListingDM.EpisodeDatum){ + func setData(data : EpisodeListingDM.ResultData){ if let url = data.thumbnailPath{ self.seasonImage.imageURL(url, color: .black) } diff --git a/WOKA/WebSeries/View/WebSeriesShowListingCell.swift b/WOKA/WebSeries/View/WebSeriesShowListingCell.swift index 0a4011e..6648752 100644 --- a/WOKA/WebSeries/View/WebSeriesShowListingCell.swift +++ b/WOKA/WebSeries/View/WebSeriesShowListingCell.swift @@ -167,6 +167,8 @@ class WebSeriesShowListingCell: UITableViewCell { } @IBAction func btnTapped(_ sender: UIButton) { + if AuthFunc.shareInstance.guestUserLoginPopUp() { return} + switch sender{ case likeBtn: if btnTapped != nil { diff --git a/WOKA/WebSeries/ViewModel/WebSeriesSeasonVM.swift b/WOKA/WebSeries/ViewModel/WebSeriesSeasonVM.swift index cfe94ca..4df113e 100644 --- a/WOKA/WebSeries/ViewModel/WebSeriesSeasonVM.swift +++ b/WOKA/WebSeries/ViewModel/WebSeriesSeasonVM.swift @@ -18,14 +18,15 @@ class WebSeriesSeasonVM{ var seasonListingData = [SeasonListingDM.Result]() - var seasonEpisodeData = [SeasonEpisodeListingDM.ResultData]() + var seasonEpisodeData = [EpisodeListingDM.ResultData]() var teaserData = [TeaserDM.ResultData]() var showData : WebSeriesShowListDM.ShowDatum? var indexSelected : Int? - + var pageNo = 0 + func initView(){ let color1 = #colorLiteral(red: 0.5921568627, green: 0.2588235294, blue: 0.8941176471, alpha: 1) let color2 = #colorLiteral(red: 0.368627451, green: 0.1215686275, blue: 0.768627451, alpha: 1) @@ -39,6 +40,8 @@ class WebSeriesSeasonVM{ func handleTapGesture(){ vc.addView.addTapGesture { [weak self] in + if AuthFunc.shareInstance.guestUserLoginPopUp() { return} + guard let self ,let indexSelected, let categoryID, let showData, let showID = showData.id, let isFav = showData.markAsFavourite, let postType = showData.contentMoreDetails?.first?.postType else{return} if isFav { @@ -61,6 +64,8 @@ class WebSeriesSeasonVM{ } vc.likeView.addTapGesture { [weak self] in + if AuthFunc.shareInstance.guestUserLoginPopUp() { return} + guard let self ,let indexSelected, let showData, let showID = showData.id, let isLiked = showData.isLiked, let postType = showData.contentMoreDetails?.first?.postType else{return} if isLiked{ @@ -216,9 +221,12 @@ class WebSeriesSeasonVM{ Utilities.startProgressHUD() guard let watchShowID = showData?.id, let episodeSelectedCateogory else{return} let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken()] - let params : Parameters = ["watch_show_id" : watchShowID, - "season_id" : episodeSelectedCateogory] - NetworkManager.shareInstance.apiRequest(url: APIEndPoints.WebSeries.season_episode_listing, method: .post,parameters: params,headers : headers) { [weak self](result : Result, NetworkManager.APIError>) in + let params : Parameters = ["watch_show_master_id" : watchShowID, + "season_master_id" : episodeSelectedCateogory, + "api_version" : "v2", + "start" : pageNo, + "limit": 5] + NetworkManager.shareInstance.apiRequest(url: APIEndPoints.WebSeries.episode_listing, method: .post,parameters: params,headers : headers) { [weak self](result : Result, NetworkManager.APIError>) in switch result{ case .success(let data): guard let self else{ @@ -237,15 +245,15 @@ class WebSeriesSeasonVM{ guard let data = data.data?.result else{return} self.seasonEpisodeData.removeAll() self.seasonEpisodeData = data - self.seasonEpisodeData = self.seasonEpisodeData.filter { - $0.episodeData != nil && !$0.episodeData!.isEmpty - } +// self.seasonEpisodeData = self.seasonEpisodeData.filter { +// $0.episodeData != nil && !$0.episodeData!.isEmpty +// } if self.seasonEpisodeData.count == 0{ self.vc.episodeTitle.isHidden = true self.vc.episodeTitle.text = "" }else{ self.vc.episodeTitle.isHidden = false - self.vc.episodeTitle.text = data.first?.mediaType?.uppercased() + self.vc.episodeTitle.text = "Episodes" } self.vc.episodeTableView.reloadData() diff --git a/WOKA/WebSeries/ViewModel/WebSeriesVM.swift b/WOKA/WebSeries/ViewModel/WebSeriesVM.swift index d4b57ae..40524ee 100644 --- a/WOKA/WebSeries/ViewModel/WebSeriesVM.swift +++ b/WOKA/WebSeries/ViewModel/WebSeriesVM.swift @@ -35,8 +35,8 @@ class WebSeriesVM{ vc.title = "WEB SERIES".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue) vc.view.applyGradient(colors: [color2, color1], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0)) - getContinueWatching() getCategoryListing() + getContinueWatching() // for the first load always send hindi as it is default category self.getShowListing(categoryID: 18) @@ -108,7 +108,9 @@ class WebSeriesVM{ //if the language is changed call the showlisting api if let id = categoryListingData[index].id { - getShowListing(categoryID: id) + Utilities.startProgressHUD() + pageNo = 0 + getShowListing(categoryID: id,languageChange: true) } } @@ -116,7 +118,6 @@ class WebSeriesVM{ // MARK: - Api Calls func getContinueWatching(){ -// Utilities.startProgressHUD() let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken()] let params : Parameters = ["post_type" : 3] // 3- webseries NetworkManager.shareInstance.apiRequest(url: APIEndPoints.WebSeries.continue_watching, method: .post,parameters: params,headers : headers) { [weak self](result : Result, NetworkManager.APIError>) in @@ -159,14 +160,14 @@ class WebSeriesVM{ } } - func getShowListing(categoryID : Int, isBtnClick : Bool = false){ + func getShowListing(categoryID : Int, isBtnClick : Bool = false, languageChange : Bool = false){ // Utilities.startProgressHUD() let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken()] let params : Parameters = ["category_id" : categoryID, "api_version" : "v2", "start" : pageNo, - "limit": 10] // from category listing api , default will be 1 - NetworkManager.shareInstance.apiRequest(url: APIEndPoints.WebSeries.watch_show_listing, method: .post,parameters: params,headers: headers) { [weak self](result : Result, NetworkManager.APIError>) in + "limit": 6] // from category listing api , default will be 1 + NetworkManager.shareInstance.apiRequest(url: APIEndPoints.WebSeries.watch_show_listing, method: .post,parameters: params,headers: headers, queue: QueueHelper.utilityGroup) { [weak self](result : Result, NetworkManager.APIError>) in switch result{ case .success(let data): guard let self else{ @@ -182,8 +183,13 @@ class WebSeriesVM{ vc.toast(msg: data.message ?? "Unrecognised error" , time: 2) case 1: Utilities.dismissProgressHUD() - guard let data = data.data?.showData else{return} - self.showData.append(contentsOf: data) + guard let dataCount = data.data?.totalRecords , let data = data.data?.showData else{return} + if languageChange{ + self.showData.removeAll() + self.showData.append(contentsOf: data) + }else{ + self.showData.append(contentsOf: data) + } self.vc.showListingTableView.reloadData() self.vc.tableHeight.constant = self.vc.showListingTableView.contentSize.height + 100 self.vc.showListingTableView.layoutIfNeeded() @@ -194,13 +200,18 @@ class WebSeriesVM{ self.vc.loadMoreActivityIndicator.stopAnimating() self.vc.loadMoreActivityIndicator.hidesWhenStopped = true - if self.showData.count.isMultiple(of: 10) && !self.stopFetch{ - // if not multiple of 10, means more data can be there, show more btn - self.vc.loadMoreBtn.isHidden = false - }else{ - self.stopFetch = true + if self.showData.count == dataCount{ self.vc.loadMoreBtn.isHidden = true + }else{ + self.vc.loadMoreBtn.isHidden = false } +// if self.showData.count.isMultiple(of: 6) && !self.stopFetch{ +// // if not multiple of 10, means more data can be there, show more btn +// self.vc.loadMoreBtn.isHidden = false +// }else{ +// self.stopFetch = true +// self.vc.loadMoreBtn.isHidden = true +// } default: break }