From c6ed16cad23d8f611b47b92c2ba66f45dae4c3bc Mon Sep 17 00:00:00 2001 From: BilalKhanWDI Date: Wed, 14 Aug 2024 20:06:28 +0530 Subject: [PATCH] Completed My List --- WOKA.xcodeproj/project.pbxproj | 20 ++-- WOKA/Audio Books/AudioBookDetailsVC.swift | 23 +++- .../ViewModel/SelectAvatarVM.swift | 4 +- WOKA/Constants K/GVar.swift | 3 + WOKA/Games/Controller/GamesDetailVC.swift | 26 ++++ WOKA/Home/Controller/MyListVC.swift | 62 ++++++++-- WOKA/Home/Controller/MyListViewAllVC.swift | 112 ++++++++++++++++++ WOKA/Home/MyListDataTemp.swift | 9 +- WOKA/Home/ViewModel/MyListVM.swift | 1 + WOKA/Home/ViewModel/MyListViewAllVM.swift | 2 +- .../Karaoke/Controller/KaraokeDetailsVC.swift | 24 +++- WOKA/Network Adapter/NetworkManager.swift | 41 +++++-- WOKA/PersistentStorage.swift | 63 ++++++++++ WOKA/Theme/Controller/PlayerVC.swift | 4 +- WOKA/Theme/ViewModel/MoreVM.swift | 5 +- WOKA/Theme/ViewModel/ThemeOneVM.swift | 64 +--------- WOKA/Theme/ViewModel/UserNotificationVM.swift | 11 +- .../Controller/WebSeriesSeasonVC.swift | 7 +- .../ViewModel/WebSeriesSeasonVM.swift | 7 ++ 19 files changed, 383 insertions(+), 105 deletions(-) diff --git a/WOKA.xcodeproj/project.pbxproj b/WOKA.xcodeproj/project.pbxproj index b91da5f..c5f690f 100644 --- a/WOKA.xcodeproj/project.pbxproj +++ b/WOKA.xcodeproj/project.pbxproj @@ -103,6 +103,7 @@ 527AC6FD2C173A5100434FB7 /* SongListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527AC6FB2C173A5100434FB7 /* SongListCell.swift */; }; 527AC6FE2C173A5100434FB7 /* SongListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 527AC6FC2C173A5100434FB7 /* SongListCell.xib */; }; 527AC7012C182DCE00434FB7 /* TimeStringToSeconds.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527AC7002C182DCE00434FB7 /* TimeStringToSeconds.swift */; }; + 527CA43A2C6C7FBF00EEDD91 /* WOKA.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 527CA4382C6C7FBE00EEDD91 /* WOKA.xcdatamodeld */; }; 528BEF602C2C372900FFDAB8 /* ContinueWatchingVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 528BEF5F2C2C372900FFDAB8 /* ContinueWatchingVC.swift */; }; 528E5F1B2C24531200E33E4E /* SeasonListingDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 528E5F1A2C24531200E33E4E /* SeasonListingDM.swift */; }; 528E5F222C24660F00E33E4E /* SeasonCategoryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 528E5F202C24660F00E33E4E /* SeasonCategoryCell.swift */; }; @@ -348,7 +349,6 @@ 9CDAEB142C54132E00890C47 /* CheckEddDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAEB132C54132E00890C47 /* CheckEddDM.swift */; }; 9CDC343C2BDBBC6B00093089 /* SelectAgeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDC343B2BDBBC6B00093089 /* SelectAgeVC.swift */; }; 9CDCE1452BDB9B9A003FEF11 /* OnBoardMainSound.m4a in Resources */ = {isa = PBXBuildFile; fileRef = 9CDCE1442BDB9B9A003FEF11 /* OnBoardMainSound.m4a */; }; - 9CF5BA9F2C6BCE9E00BD77F9 /* WOKA.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 9CF5BA9D2C6BCE9E00BD77F9 /* WOKA.xcdatamodeld */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -494,6 +494,7 @@ 527AC6FB2C173A5100434FB7 /* SongListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongListCell.swift; sourceTree = ""; }; 527AC6FC2C173A5100434FB7 /* SongListCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SongListCell.xib; sourceTree = ""; }; 527AC7002C182DCE00434FB7 /* TimeStringToSeconds.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeStringToSeconds.swift; sourceTree = ""; }; + 527CA4392C6C7FBE00EEDD91 /* WOKA.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = WOKA.xcdatamodel; sourceTree = ""; }; 528BEF5F2C2C372900FFDAB8 /* ContinueWatchingVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContinueWatchingVC.swift; sourceTree = ""; }; 528E5F1A2C24531200E33E4E /* SeasonListingDM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeasonListingDM.swift; sourceTree = ""; }; 528E5F202C24660F00E33E4E /* SeasonCategoryCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeasonCategoryCell.swift; sourceTree = ""; }; @@ -731,7 +732,6 @@ 9CDCE1412BDB94BA003FEF11 /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/Main.strings; sourceTree = ""; }; 9CDCE1422BDB94BD003FEF11 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Main.strings; sourceTree = ""; }; 9CDCE1442BDB9B9A003FEF11 /* OnBoardMainSound.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = OnBoardMainSound.m4a; sourceTree = ""; }; - 9CF5BA9E2C6BCE9E00BD77F9 /* WOKA.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = WOKA.xcdatamodel; sourceTree = ""; }; C83A2BA3B8F575DC890CC5DD /* Pods-WOKA.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WOKA.debug.xcconfig"; path = "Target Support Files/Pods-WOKA/Pods-WOKA.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -930,7 +930,7 @@ 9C535DC82C00C34000DA6DCD /* Theme */, 52DAC6462C21761700E2F85B /* WebSeries */, 9C834ED92C1C20EC00B29A9C /* WOKA.entitlements */, - 9CF5BA9D2C6BCE9E00BD77F9 /* WOKA.xcdatamodeld */, + 527CA4382C6C7FBE00EEDD91 /* WOKA.xcdatamodeld */, 52ACC1292C610EC900791528 /* PersistentStorage.swift */, ); path = WOKA; @@ -2314,7 +2314,7 @@ 52A6DCA02C4E3AA600F63C51 /* ShopListingCell.swift in Sources */, 525954192BE8CC3400191286 /* ConstantString.swift in Sources */, 52D774EB2BDFC0BF001D87DE /* OTPVC.swift in Sources */, - 9CF5BA9F2C6BCE9E00BD77F9 /* WOKA.xcdatamodeld in Sources */, + 527CA43A2C6C7FBF00EEDD91 /* WOKA.xcdatamodeld in Sources */, 9C8446872C40FC6E003E3E53 /* AVPlayerTesting.swift in Sources */, 52AF71F42C36C40B00BC5972 /* GamesWebViewVC.swift in Sources */, 9C007F202C255DF200F798C2 /* EpisodeListingDM.swift in Sources */, @@ -2738,7 +2738,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = WOKA/WOKA.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 4; DEVELOPMENT_TEAM = 4S9A74ZB6H; ENABLE_USER_SCRIPT_SANDBOXING = NO; GENERATE_INFOPLIST_FILE = YES; @@ -2778,7 +2778,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = WOKA/WOKA.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 4; DEVELOPMENT_TEAM = 4S9A74ZB6H; ENABLE_USER_SCRIPT_SANDBOXING = NO; GENERATE_INFOPLIST_FILE = YES; @@ -3070,14 +3070,14 @@ /* End XCSwiftPackageProductDependency section */ /* Begin XCVersionGroup section */ - 9CF5BA9D2C6BCE9E00BD77F9 /* WOKA.xcdatamodeld */ = { + 527CA4382C6C7FBE00EEDD91 /* WOKA.xcdatamodeld */ = { isa = XCVersionGroup; children = ( - 9CF5BA9E2C6BCE9E00BD77F9 /* WOKA.xcdatamodel */, + 527CA4392C6C7FBE00EEDD91 /* WOKA.xcdatamodel */, ); - currentVersion = 9CF5BA9E2C6BCE9E00BD77F9 /* WOKA.xcdatamodel */; + currentVersion = 527CA4392C6C7FBE00EEDD91 /* WOKA.xcdatamodel */; name = WOKA.xcdatamodeld; - path = /Users/bilal/Desktop/woka_native_ios_swift/WOKA/WOKA.xcdatamodeld; + path = /Users/macbookpro/Desktop/WOKA/WOKA/WOKA.xcdatamodeld; sourceTree = ""; versionGroupType = wrapper.xcdatamodel; }; diff --git a/WOKA/Audio Books/AudioBookDetailsVC.swift b/WOKA/Audio Books/AudioBookDetailsVC.swift index 684f5f2..3876453 100644 --- a/WOKA/Audio Books/AudioBookDetailsVC.swift +++ b/WOKA/Audio Books/AudioBookDetailsVC.swift @@ -33,6 +33,10 @@ class AudioBookDetailsVC : UIViewController{ // var continueAudioData : ListenAudioListingDM.AudioDatum? var audioIndex = 0 + typealias btnTappedBlock = ( _ from : FavCellCLick) -> Void + var btnTapped : btnTappedBlock? + var reloadType : FavCellCLick? + override func viewDidLoad() { super.viewDidLoad() initView() @@ -50,6 +54,13 @@ class AudioBookDetailsVC : UIViewController{ if let postID = audioData?.id{ PersistentStorage.shared.addAudioCount(postID: postID) } + + if let reloadType{ + if btnTapped != nil { + btnTapped?(reloadType) + } + } + self.dismiss(animated: true) } } @@ -78,7 +89,7 @@ class AudioBookDetailsVC : UIViewController{ // } K.GVar.reloadMyListAudioBooks = true - + self.reloadType = .favourite self.delegate?.updateRows(index: self.audioIndex, type: .favourite, isFav: false, isLike: nil, id: showID) self.initView() } @@ -92,7 +103,7 @@ class AudioBookDetailsVC : UIViewController{ // } K.GVar.reloadMyListAudioBooks = true - + self.reloadType = .favourite self.delegate?.updateRows(index: self.audioIndex, type: .favourite, isFav: true, isLike: nil, id: showID) self.initView() } @@ -149,6 +160,7 @@ class AudioBookDetailsVC : UIViewController{ MyListDataTemp.shareInstance.favListingData?.audioData?[index].likesCount! -= 1 K.GVar.myListSoftReload = true } + self.reloadType = .favourite self.delegate?.updateRows(index: self.audioIndex, type: .liked, isFav: nil, isLike: false, id: showID) self.initView() } @@ -162,7 +174,7 @@ class AudioBookDetailsVC : UIViewController{ MyListDataTemp.shareInstance.favListingData?.audioData?[index].likesCount! += 1 K.GVar.myListSoftReload = true } - + self.reloadType = .favourite self.delegate?.updateRows(index: self.audioIndex, type: .liked, isFav: nil, isLike: true, id: showID) self.initView() } @@ -356,6 +368,11 @@ class AudioBookDetailsVC : UIViewController{ if let postID = audioData?.id{ PersistentStorage.shared.addAudioCount(postID: postID) } + if let reloadType{ + if btnTapped != nil { + btnTapped?(reloadType) + } + } self.dismiss(animated: true) } } diff --git a/WOKA/Authentication/ViewModel/SelectAvatarVM.swift b/WOKA/Authentication/ViewModel/SelectAvatarVM.swift index faa6624..014b881 100644 --- a/WOKA/Authentication/ViewModel/SelectAvatarVM.swift +++ b/WOKA/Authentication/ViewModel/SelectAvatarVM.swift @@ -122,7 +122,7 @@ class SelectAvatarVM{ AuthFunc.shareInstance.regData.language_id = "1" } - AuthFunc.shareInstance.regData.language_id = AuthFunc.shareInstance.getOneSignalID() + AuthFunc.shareInstance.regData.one_signal_player_id = AuthFunc.shareInstance.getOneSignalID() Utilities.startProgressHUD() @@ -166,7 +166,7 @@ class SelectAvatarVM{ vcPush.mainTitleText = "Error" vcPush.yesBtnText = "Retry?" vcPush.onDoneBlock = { isDone in - self.getAvatarListing() + self.registerUser() } vcPush.modalPresentationStyle = .overCurrentContext vcPush.modalTransitionStyle = .crossDissolve diff --git a/WOKA/Constants K/GVar.swift b/WOKA/Constants K/GVar.swift index 0ff6570..1a5f609 100644 --- a/WOKA/Constants K/GVar.swift +++ b/WOKA/Constants K/GVar.swift @@ -21,5 +21,8 @@ extension K{ static var reloadGames = false static var reloadHindiWebseries = false static var reloadEnglishWebseries = false + + static var reloadMyListAll = 0 // 0 - null, 1 - add , 2- remove + static var reloadMyListAllID = 0 } } diff --git a/WOKA/Games/Controller/GamesDetailVC.swift b/WOKA/Games/Controller/GamesDetailVC.swift index f32fb7e..6bbb5c2 100644 --- a/WOKA/Games/Controller/GamesDetailVC.swift +++ b/WOKA/Games/Controller/GamesDetailVC.swift @@ -30,6 +30,11 @@ class GamesDetailVC: UIViewController { var delegate : ReloadSeriesFavLike? var gameIndex = 0 + //for myList + typealias btnTappedBlock = ( _ from : FavCellCLick) -> Void + var btnTapped : btnTappedBlock? + var reloadType : FavCellCLick? + override func viewDidLoad() { super.viewDidLoad() initView() @@ -43,6 +48,11 @@ class GamesDetailVC: UIViewController { if let postID = gameData?.id{ PersistentStorage.shared.addGamesCount(postID: postID) } + if let reloadType{ + if btnTapped != nil { + btnTapped?(reloadType) + } + } self.dismiss(animated: true) } } @@ -125,6 +135,11 @@ class GamesDetailVC: UIViewController { // K.GVar.myListSoftReload = true // } K.GVar.reloadGames = true + self.reloadType = .favourite + // To reload MyListViewAllVC + K.GVar.reloadMyListAll = 2 + K.GVar.reloadMyListAllID = showID + self.delegate?.updateRows(index: self.gameIndex, type: .favourite, isFav: false, isLike: nil, id: showID) self.initView() } @@ -137,6 +152,10 @@ class GamesDetailVC: UIViewController { // K.GVar.myListSoftReload = true // } K.GVar.reloadGames = true + self.reloadType = .favourite + // To reload MyListViewAllVC + K.GVar.reloadMyListAll = 1 + K.GVar.reloadMyListAllID = showID self.delegate?.updateRows(index: self.gameIndex, type: .favourite, isFav: true, isLike: nil, id: showID) self.initView() @@ -166,6 +185,7 @@ class GamesDetailVC: UIViewController { } self.delegate?.updateRows(index: self.gameIndex, type: .liked, isFav: nil, isLike: false, id: showID) K.GVar.myListSoftReload = true + self.reloadType = .favourite self.initView() } }else{ @@ -178,6 +198,7 @@ class GamesDetailVC: UIViewController { } self.delegate?.updateRows(index: self.gameIndex, type: .liked, isFav: nil, isLike: true, id: showID) K.GVar.myListSoftReload = true + self.reloadType = .favourite self.initView() } } @@ -214,6 +235,11 @@ class GamesDetailVC: UIViewController { if let postID = gameData?.id{ PersistentStorage.shared.addGamesCount(postID: postID) } + if let reloadType{ + if btnTapped != nil { + btnTapped?(reloadType) + } + } self.dismiss(animated: true) } } diff --git a/WOKA/Home/Controller/MyListVC.swift b/WOKA/Home/Controller/MyListVC.swift index 7fc86e4..ff969e2 100644 --- a/WOKA/Home/Controller/MyListVC.swift +++ b/WOKA/Home/Controller/MyListVC.swift @@ -82,19 +82,40 @@ class MyListVC: UIViewController{ vm.getFavouriteListing() } + if K.GVar.myListSoftReload{ + vm.reloadCollections() + vm.checkNil() + K.GVar.myListSoftReload = false + } + + if MyListDataTemp.shareInstance.isDatafetched == false{ + K.GVar.reloadMyListAudioBooks = false + K.GVar.reloadKaraoke = false + K.GVar.reloadGames = false + K.GVar.reloadHindiWebseries = false + K.GVar.reloadEnglishWebseries = false + return + } + if K.GVar.reloadMyListAudioBooks{ - MyListDataTemp.shareInstance.updateAudioBooks() { isDone in + MyListDataTemp.shareInstance.updateAudioBooks() { [weak self] isDone in + guard let self else{return} if isDone{ self.audioBooksCV.reloadData() + vm.checkNil() + vm.checkViewAll() } } K.GVar.reloadMyListAudioBooks = false } if K.GVar.reloadKaraoke{ - MyListDataTemp.shareInstance.updateKaraoke() { isDone in + MyListDataTemp.shareInstance.updateKaraoke() { [weak self] isDone in + guard let self else{return} if isDone{ self.karaokeCV.reloadData() + vm.checkNil() + vm.checkViewAll() } } K.GVar.reloadKaraoke = false @@ -135,12 +156,7 @@ class MyListVC: UIViewController{ } K.GVar.reloadHindiWebseries = false } - - if K.GVar.myListSoftReload{ - vm.reloadCollections() - vm.checkNil() - K.GVar.myListSoftReload = false - } + } @IBAction func sideBarBtnTapped(_ sender: UIButton) { @@ -549,6 +565,16 @@ extension MyListVC : CollectionViewSRC{ vcPush.modalTransitionStyle = .crossDissolve vcPush.audioData = audioData // vcPush.delegate = self + vcPush.btnTapped = { (type) -> Void in + MyListDataTemp.shareInstance.updateAudioBooks() { [weak self] isDone in + guard let self else{return} + if isDone{ + self.audioBooksCV.reloadData() + vm.checkNil() + vm.checkViewAll() + } + } + } self.vm.selectedCollection = .audioBooksCV self.present(vcPush, animated: true) case karaokeCV: @@ -563,6 +589,16 @@ extension MyListVC : CollectionViewSRC{ vcPush.karaokeData = karaokeData vcPush.karaokeIndex = indexPath.row // vcPush.delegate = self + vcPush.btnTapped = { (type) -> Void in + MyListDataTemp.shareInstance.updateKaraoke() { [weak self] isDone in + guard let self else{return} + if isDone{ + self.karaokeCV.reloadData() + vm.checkNil() + vm.checkViewAll() + } + } + } self.vm.selectedCollection = .karaokeCV self.present(vcPush, animated: true) case gamesCV: @@ -577,6 +613,16 @@ extension MyListVC : CollectionViewSRC{ vcPush.gameData = gameData vcPush.gameIndex = indexPath.row // vcPush.delegate = self + vcPush.btnTapped = { (type) -> Void in + MyListDataTemp.shareInstance.updateGames() { [weak self] isDone in + guard let self else{return} + if isDone{ + self.gamesCV.reloadData() + vm.checkNil() + vm.checkViewAll() + } + } + } self.vm.selectedCollection = .gamesCV self.present(vcPush, animated: true) default: diff --git a/WOKA/Home/Controller/MyListViewAllVC.swift b/WOKA/Home/Controller/MyListViewAllVC.swift index c75c425..263210a 100644 --- a/WOKA/Home/Controller/MyListViewAllVC.swift +++ b/WOKA/Home/Controller/MyListViewAllVC.swift @@ -35,6 +35,117 @@ class MyListViewAllVC: UIViewController { self.navigationController?.setColor(color: .black) } + override func viewDidAppear(_ animated: Bool) { + if K.GVar.reloadMyListAll != 0{ // 0 - null, 1 - add , 2- remove + + // first check if add or remove + if K.GVar.reloadMyListAll == 1{ + switch vm.postType{ + case 1: // webseries + if vm.catID == "1"{ // english + if let englishData = vm.favListingData?.showData?.english, let firstIndex = englishData.firstIndex(where: {$0.id == K.GVar.reloadMyListAllID}){ + + }else{ + vm.pageNo = 0 + vm.getFavouriteListing() + } + }else{// hindi + if let hindiData = vm.favListingData?.showData?.hindi, let firstIndex = hindiData.firstIndex(where: {$0.id == K.GVar.reloadMyListAllID}){ + }else{ + vm.pageNo = 0 + vm.getFavouriteListing() + } + } + case 6: // Games + if let gameData = vm.favListingData?.gameData{ + + } + case 7: + if let audioData = vm.favListingData?.audioData{ + + } + case 8: //KAraoke + if let karaokeData = vm.favListingData?.singKaraokeData{ + + } + default: + break + } + }else if K.GVar.reloadMyListAll == 2{ + switch vm.postType{ + case 1: // webseries + if vm.catID == "1"{ // english + if let englishData = vm.favListingData?.showData?.english, let firstIndex = englishData.firstIndex(where: {$0.id == K.GVar.reloadMyListAllID}){ + vm.favListingData?.showData?.english?.remove(at: firstIndex) + self.tableView.reloadData() + self.tableHeight.constant = self.tableView.contentSize.height + 100 + self.tableView.layoutIfNeeded() + let webSeriesCount = vm.favListingData?.showData?.english?.count ?? 0 + self.tableHeight.constant = CGFloat(webSeriesCount * 230) + }else{ + vm.pageNo = 0 + vm.getFavouriteListing() + } + }else{// hindi + if let hindiData = vm.favListingData?.showData?.hindi, let firstIndex = hindiData.firstIndex(where: {$0.id == K.GVar.reloadMyListAllID}){ + vm.favListingData?.showData?.hindi?.remove(at: firstIndex) + self.tableView.reloadData() + self.tableHeight.constant = self.tableView.contentSize.height + 100 + self.tableView.layoutIfNeeded() + let webSeriesCount = vm.favListingData?.showData?.hindi?.count ?? 0 + self.tableHeight.constant = CGFloat(webSeriesCount * 230) + }else{ + vm.pageNo = 0 + vm.getFavouriteListing() + } + } + case 6: // Games + if let gameData = vm.favListingData?.gameData, let firstIndex = gameData.firstIndex(where: {$0.id == K.GVar.reloadMyListAllID}){ + vm.favListingData?.gameData?.remove(at: firstIndex) + self.tableView.reloadData() + self.tableHeight.constant = self.tableView.contentSize.height + 100 + self.tableView.layoutIfNeeded() + let webSeriesCount = vm.favListingData?.gameData?.count ?? 0 + self.tableHeight.constant = CGFloat(webSeriesCount * 230) + }else{ + vm.pageNo = 0 + vm.getFavouriteListing() + } + case 7: + if let audioData = vm.favListingData?.audioData, let firstIndex = audioData.firstIndex(where: {$0.id == K.GVar.reloadMyListAllID}){ + vm.favListingData?.audioData?.remove(at: firstIndex) + self.tableView.reloadData() + self.tableHeight.constant = self.tableView.contentSize.height + 100 + self.tableView.layoutIfNeeded() + let webSeriesCount = vm.favListingData?.audioData?.count ?? 0 + self.tableHeight.constant = CGFloat(webSeriesCount * 230) + }else{ + vm.pageNo = 0 + vm.getFavouriteListing() + } + case 8: //KAraoke + if let karaokeData = vm.favListingData?.singKaraokeData, let firstIndex = karaokeData.firstIndex(where: {$0.id == K.GVar.reloadMyListAllID}){ + vm.favListingData?.singKaraokeData?.remove(at: firstIndex) + self.tableView.reloadData() + self.tableHeight.constant = self.tableView.contentSize.height + 100 + self.tableView.layoutIfNeeded() + let webSeriesCount = vm.favListingData?.singKaraokeData?.count ?? 0 + self.tableHeight.constant = CGFloat(webSeriesCount * 230) + }else{ + vm.pageNo = 0 + vm.getFavouriteListing() + } + default: + break + } + } + + K.GVar.reloadMyListAll = 0 // reset to null + K.GVar.reloadMyListAllID = 0 + } + print("Appear") + } + override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) self.navigationController?.setNavigationBarHidden(true, animated: animated) @@ -146,6 +257,7 @@ extension MyListViewAllVC : TableViewSRC{ vcPush.modalPresentationStyle = .overCurrentContext vcPush.modalTransitionStyle = .crossDissolve vcPush.karaokeData = karaokeData + self.present(vcPush, animated: true) default: break diff --git a/WOKA/Home/MyListDataTemp.swift b/WOKA/Home/MyListDataTemp.swift index bc2fc2c..e466f88 100644 --- a/WOKA/Home/MyListDataTemp.swift +++ b/WOKA/Home/MyListDataTemp.swift @@ -39,7 +39,8 @@ class MyListDataTemp{ switch data.success{ case 0: Utilities.dismissProgressHUD() - onCompletion(false) + self?.favListingData?.audioData = [] + onCompletion(true) case 1: Utilities.dismissProgressHUD() guard let audioData = data.data?.result?.audioData else{ @@ -77,7 +78,8 @@ class MyListDataTemp{ switch data.success{ case 0: Utilities.dismissProgressHUD() - onCompletion(false) + self?.favListingData?.singKaraokeData = [] + onCompletion(true) case 1: Utilities.dismissProgressHUD() guard let singKaraokeData = data.data?.result?.singKaraokeData else{ @@ -115,7 +117,8 @@ class MyListDataTemp{ switch data.success{ case 0: Utilities.dismissProgressHUD() - onCompletion(false) + self?.favListingData?.gameData = [] + onCompletion(true) case 1: Utilities.dismissProgressHUD() guard let gameData = data.data?.result?.gameData else{ diff --git a/WOKA/Home/ViewModel/MyListVM.swift b/WOKA/Home/ViewModel/MyListVM.swift index f26938b..031d2c8 100644 --- a/WOKA/Home/ViewModel/MyListVM.swift +++ b/WOKA/Home/ViewModel/MyListVM.swift @@ -153,6 +153,7 @@ class MyListVM{ // MyListDataTemp.shareInstance.webSeriesHindi.removeAll() MyListDataTemp.shareInstance.favListingData = data + MyListDataTemp.shareInstance.isDatafetched = true // if var hindiData = MyListDataTemp.shareInstance.favListingData?.showData{ // diff --git a/WOKA/Home/ViewModel/MyListViewAllVM.swift b/WOKA/Home/ViewModel/MyListViewAllVM.swift index b09119c..8cfb2f8 100644 --- a/WOKA/Home/ViewModel/MyListViewAllVM.swift +++ b/WOKA/Home/ViewModel/MyListViewAllVM.swift @@ -17,7 +17,7 @@ class MyListViewAllVM{ var catID = String() var favListingData : FavouriteListingDM.ResultData? - var webSeriesHindi = [FavouriteListingDM.ResultData.ShowDatum]() +// var webSeriesHindi = [FavouriteListingDM.ResultData.ShowDatum]() let refreshControl = UIRefreshControl() func initView(){ diff --git a/WOKA/Karaoke/Controller/KaraokeDetailsVC.swift b/WOKA/Karaoke/Controller/KaraokeDetailsVC.swift index a51033a..ef7cae3 100644 --- a/WOKA/Karaoke/Controller/KaraokeDetailsVC.swift +++ b/WOKA/Karaoke/Controller/KaraokeDetailsVC.swift @@ -37,6 +37,11 @@ class KaraokeDetailsVC: UIViewController { var karaokeIndex = 0 + typealias btnTappedBlock = ( _ from : FavCellCLick) -> Void + var btnTapped : btnTappedBlock? + + var reloadType : FavCellCLick? + override func viewDidLoad() { super.viewDidLoad() initView() @@ -57,6 +62,12 @@ class KaraokeDetailsVC: UIViewController { if let karaokeData , let postID = karaokeData.id{ PersistentStorage.shared.addKaraokeCount(postID: postID) } + + if let reloadType{ + if btnTapped != nil { + btnTapped?(reloadType) + } + } self.dismiss(animated: true) } } @@ -138,7 +149,7 @@ class KaraokeDetailsVC: UIViewController { // K.GVar.myListSoftReload = true // } K.GVar.reloadKaraoke = true - + self.reloadType = .favourite //if coming from mylist self.delegate?.updateRows(index: self.karaokeIndex, type: .favourite, isFav: false, isLike: nil, id: showID) self.initView() @@ -152,7 +163,7 @@ class KaraokeDetailsVC: UIViewController { // K.GVar.myListSoftReload = true // } K.GVar.reloadKaraoke = true - + self.reloadType = .favourite //if coming from mylist self.delegate?.updateRows(index: self.karaokeIndex, type: .favourite, isFav: true, isLike: nil, id: showID) self.initView() @@ -179,7 +190,7 @@ class KaraokeDetailsVC: UIViewController { MyListDataTemp.shareInstance.favListingData?.singKaraokeData?[index].likesCount! -= 1 K.GVar.myListSoftReload = true } - + self.reloadType = .liked self.delegate?.updateRows(index: self.karaokeIndex, type: .liked, isFav: nil, isLike: false, id: showID) self.initView() @@ -194,7 +205,7 @@ class KaraokeDetailsVC: UIViewController { MyListDataTemp.shareInstance.favListingData?.singKaraokeData?[index].likesCount! += 1 K.GVar.myListSoftReload = true } - + self.reloadType = .liked self.delegate?.updateRows(index: self.karaokeIndex, type: .liked, isFav: nil, isLike: true, id: showID) self.initView() } @@ -292,6 +303,11 @@ class KaraokeDetailsVC: UIViewController { @IBAction func closeBtnTapped(_ sender: UIButton) { PersistentStorage.shared.addOthersCount() + if let reloadType{ + if btnTapped != nil { + btnTapped?(reloadType) + } + } self.dismiss(animated: true) } } diff --git a/WOKA/Network Adapter/NetworkManager.swift b/WOKA/Network Adapter/NetworkManager.swift index 71259e4..811b105 100644 --- a/WOKA/Network Adapter/NetworkManager.swift +++ b/WOKA/Network Adapter/NetworkManager.swift @@ -157,15 +157,40 @@ class NetworkManager{ /// - Parameter (header : HTTPHeaders , Params :[String : Any] , URL , Dedocable Generic T Struct.) /// /// - Returns: This function returns a GENERIC response base on the T Model & ERROR . - func nwCallRawJSon(url : String, param : [String : Any],decodable: T.Type,onCompletion: @escaping (T?,Error?) -> Void){ - AF.request(url, method: .post, parameters : param, encoding: JSONEncoding.default, headers: nil, requestModifier : { $0.timeoutInterval = 30 }).validate(contentType: ["application/json"]).responseDecodable { (response: DataResponse) in - switch response.result { - case .success(let data): - onCompletion(data,nil) - case .failure(let error): - onCompletion(nil,error) - } + func nwCallRawJSON(clicksData : [ClicksAnalytics], onCompletion : @escaping (Bool) -> Void){ + let loginCred = getLoginIDPass() + let encoder = JSONEncoder() + encoder.keyEncodingStrategy = .convertToSnakeCase + guard let jsonData = try? encoder.encode(clicksData), + let jsonArray = try? JSONSerialization.jsonObject(with: jsonData, options: .allowFragments) as? [[String: Any]] else { + print("Failed to encode totalClicks array to JSON") + return } + + let url = APIEndPoints.Analytics.user_clicks + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.headers = ["device-id" : AuthFunc.shareInstance.getDeviceUUID(), + "access-token" : AuthFunc.shareInstance.getAccessToken()] + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + do { + // Set the HTTP body with the JSON data + request.httpBody = try JSONSerialization.data(withJSONObject: jsonArray) + } catch let error { + print("Error: \(error.localizedDescription)") + return + } + + AF.request(request).authenticate(username: loginCred.0, password: loginCred.1) + .validate(statusCode: 200..<300) + .responseDecodable(of: CommonResponseModel.self) { response in + switch response.result { + case .success(let data): + onCompletion(true) + case .failure(let error): + onCompletion(false) + } + } } } diff --git a/WOKA/PersistentStorage.swift b/WOKA/PersistentStorage.swift index b39eec7..3db7e9d 100644 --- a/WOKA/PersistentStorage.swift +++ b/WOKA/PersistentStorage.swift @@ -212,6 +212,69 @@ final class PersistentStorage } } + func getAllData() { + //We need to create a context from this container + let managedContext = PersistentStorage.shared.context + let fetchRequest:NSFetchRequest = NSFetchRequest.init(entityName: "UserClicks") + fetchRequest.fetchLimit = 4 + do { + guard let result = try managedContext.fetch(fetchRequest) as? [UserClicks] else {return} + result.forEach { clicks in + // device type 1- android , 2 - iOS + print("ID:-" , PostType(rawValue: Int(clicks.post_type))!, "CatID:- ", clicks.category_id, "PostID:- ", clicks.post_id , "Count:-", clicks.click_counts) + } + } + catch let error + { + debugPrint(error) + } + } + + func sendDataToServer() { + + //We need to create a context from this container + let managedContext = PersistentStorage.shared.context + +// let path = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) + // debugPrint(path[0]) + let fetchRequest:NSFetchRequest = NSFetchRequest.init(entityName: "UserClicks") + fetchRequest.fetchLimit = 4 + do { + guard let result = try managedContext.fetch(fetchRequest) as? [UserClicks] else {return} + var userClicks = [ClicksAnalytics]() + result.forEach { clicks in + // device type 1- android , 2 - iOS + userClicks.append(ClicksAnalytics(postID: Int(clicks.post_id), postType: Int(clicks.post_type), numberOfClicks: Int(clicks.click_counts), deviceType: 2, categoryID: Int(clicks.category_id))) + + print("ID:-" , PostType(rawValue: Int(clicks.post_type))!, "CatID:- ", clicks.category_id, "PostID:- ", clicks.post_id , "Count:-", clicks.click_counts) + } + NetworkManager.shareInstance.nwCallRawJSON(clicksData: userClicks) { isDone in + if isDone{ + self.deleteData(result) + } + } + } + catch let error + { + debugPrint(error) + } + } + + func deleteData(_ data: [UserClicks]) { + let managedContext = PersistentStorage.shared.context + + data.forEach { clicks in + managedContext.delete(clicks) + } + + do { + try managedContext.save() + getAllData() + print("Deleted data") + } catch let error { + debugPrint("Failed to delete data:", error) + } + } // func updateData(){ // //We need to create a context from this container // let managedContext = PersistentStorage.shared.context diff --git a/WOKA/Theme/Controller/PlayerVC.swift b/WOKA/Theme/Controller/PlayerVC.swift index 4672e56..abe40dc 100644 --- a/WOKA/Theme/Controller/PlayerVC.swift +++ b/WOKA/Theme/Controller/PlayerVC.swift @@ -142,7 +142,9 @@ class PlayerVC: JWPlayerViewController, JWPlayerViewControllerDelegate { let isPortrait = UIScreen.main.bounds.size.width < UIScreen.main.bounds.size.height if isPortrait { print("Device is in portrait mode") - self.dismiss(animated: true) + Timer.scheduledTimer(withTimeInterval: 0.4, repeats: false) { _ in + self.dismiss(animated: true) + } } else { print("Device is in landscape mode") if isFullScreenBtn{ diff --git a/WOKA/Theme/ViewModel/MoreVM.swift b/WOKA/Theme/ViewModel/MoreVM.swift index db08cac..0ded4e3 100644 --- a/WOKA/Theme/ViewModel/MoreVM.swift +++ b/WOKA/Theme/ViewModel/MoreVM.swift @@ -42,8 +42,9 @@ class MoreVM{ vc.songTableView.showsHorizontalScrollIndicator = false vc.homeBtn.addTapGesture { - PersistentStorage.shared.addOthersCount() - self.vc.dismiss(animated: true) + self.vc.dismiss(animated: true) { + PersistentStorage.shared.addOthersCount() + } } } diff --git a/WOKA/Theme/ViewModel/ThemeOneVM.swift b/WOKA/Theme/ViewModel/ThemeOneVM.swift index d91dbc1..568911b 100644 --- a/WOKA/Theme/ViewModel/ThemeOneVM.swift +++ b/WOKA/Theme/ViewModel/ThemeOneVM.swift @@ -40,7 +40,6 @@ class ThemeOneVM{ vc.nameLabel.setContentCompressionResistancePriority(.fittingSizeLevel, for: .horizontal) handleBackground() - } private func handleNotificationCenter(){ @@ -206,6 +205,8 @@ class ThemeOneVM{ vcPush.modalPresentationStyle = .fullScreen vcPush.modalTransitionStyle = .crossDissolve self.vc.present(vcPush, animated: true) + +// PersistentStorage.shared.sendDataToServer() } /* 1 = series, 2 = season, 3= episode, 4 = video, 5 = paint, 6 = game, 7 = audio, 8 = kareoke video, 9 = shop product, 10 = parental video, 11 = article, 12 = live TV, 13 = FM, 14 = teaser, 15 others, 16 = Home @@ -440,7 +441,7 @@ class ThemeOneVM{ vc.config = config vc.dismissTapped = self.tapped vc.contentType = .liveStream -// vc.modalPresentationStyle = .fullScreen + vc.modalPresentationStyle = .fullScreen vc.modalTransitionStyle = .crossDissolve // Present the PlayerVC @@ -549,66 +550,11 @@ class ThemeOneVM{ func updateClicks(){ - let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken()] - let params : [[String: Any]] var totalClicks = [ClicksAnalytics]() totalClicks.append(ClicksAnalytics(postID: 0, postType: 15, numberOfClicks: 12, deviceType: 2, categoryID: 0)) + +// NetworkManager.shareInstance.nwCallRawJSON(clicksData: totalClicks) - - // Convert the array to a dictionary for the JSON body - do { - let encoder = JSONEncoder() - let jsonData = try encoder.encode(totalClicks) - let jsonArray = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [[String: Any]] - - if let jsonArray = jsonArray { - NetworkManager.shareInstance.nwCallRawJSon(url: "your_api_url", param: ["data": jsonArray], decodable: CommonResponseModel.self) { response, error in - switch response{ - case .success: - guard let self else{ - Utilities.dismissProgressHUD() - return - } - case .failure(let error): - guard let self else{ - Utilities.dismissProgressHUD() - return - } - Utilities.dismissProgressHUD() - } - } - } - } catch { - print("Error encoding JSON: \(error)") - } - -// NetworkManager.shareInstance.apiRequest(url: APIEndPoints.Analytics.user_clicks , method: .post,parameters: params,headers: headers) { [weak self](result : Result, NetworkManager.APIError>) in -// switch result{ -// case .success(let data): -// guard let self else{ -// Utilities.dismissProgressHUD() -// return -// } -// switch data.success{ -// case 0: -// /* -// Error -// */ -// Utilities.dismissProgressHUD() -// -// case 1: -// Utilities.dismissProgressHUD() -// default: -// break -// } -// case .failure(let error): -// guard let self else{ -// Utilities.dismissProgressHUD() -// return -// } -// Utilities.dismissProgressHUD() -// } -// } } } diff --git a/WOKA/Theme/ViewModel/UserNotificationVM.swift b/WOKA/Theme/ViewModel/UserNotificationVM.swift index 7fe3ce8..e76caad 100644 --- a/WOKA/Theme/ViewModel/UserNotificationVM.swift +++ b/WOKA/Theme/ViewModel/UserNotificationVM.swift @@ -70,12 +70,19 @@ class UserNotificationVM{ refreshControl.endRefreshing() case 1: Utilities.dismissProgressHUD() - guard let data = data.data else{return} + guard let data = data.data else{ + self.vc.noDataStack.isHidden = false + return + } self.userNotification.removeAll() self.userNotification.append(contentsOf: data) feedbackGenerator.impactOccurred() self.vc.tableView.reloadData() - self.vc.noDataStack.isHidden = true + if data.count == 0{ + self.vc.noDataStack.isHidden = false + }else{ + self.vc.noDataStack.isHidden = true + } self.vc.tableView.isHidden = false refreshControl.endRefreshing() default: diff --git a/WOKA/WebSeries/Controller/WebSeriesSeasonVC.swift b/WOKA/WebSeries/Controller/WebSeriesSeasonVC.swift index 9153ee1..b53b82b 100644 --- a/WOKA/WebSeries/Controller/WebSeriesSeasonVC.swift +++ b/WOKA/WebSeries/Controller/WebSeriesSeasonVC.swift @@ -372,12 +372,15 @@ extension WebSeriesSeasonVC : CollectionViewSRC{ } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - vm.episodeSelectedCateogory = vm.seasonListingData[indexPath.row].id - if let seasonID = vm.seasonListingData[indexPath.row].id , let catID = vm.categoryID{ PersistentStorage.shared.addWebSeries(catID: catID, postID: seasonID, postType: .season) } + if vm.episodeSelectedCateogory == vm.seasonListingData[indexPath.row].id{ + return + } + vm.episodeSelectedCateogory = vm.seasonListingData[indexPath.row].id + vm.setSeasonData() episodeTitle.isHidden = false episodeTitle.text = "" diff --git a/WOKA/WebSeries/ViewModel/WebSeriesSeasonVM.swift b/WOKA/WebSeries/ViewModel/WebSeriesSeasonVM.swift index 508adc0..17a02ed 100644 --- a/WOKA/WebSeries/ViewModel/WebSeriesSeasonVM.swift +++ b/WOKA/WebSeries/ViewModel/WebSeriesSeasonVM.swift @@ -53,6 +53,10 @@ class WebSeriesSeasonVM{ self.setShowData() self.vc.likeFavDelegate?.updateRows(index: indexSelected, type: .favourite, isFav: false, isLike: nil, id: showID) + //For updating mylist allview + K.GVar.reloadMyListAll = 2 + K.GVar.reloadMyListAllID = showID + if self.categoryID == 18{ // hindi K.GVar.reloadHindiWebseries = true // if let index = MyListDataTemp.shareInstance.favListingData?.showData?.hindi?.firstIndex(where: {$0.id == showID}){ @@ -75,6 +79,9 @@ class WebSeriesSeasonVM{ self.setShowData() self.vc.likeFavDelegate?.updateRows(index: indexSelected, type: .favourite, isFav: true, isLike: nil, id: showID) + //For updating mylist allview + K.GVar.reloadMyListAll = 1 + K.GVar.reloadMyListAllID = showID // if self.categoryID == 18{ // hindi // guard let showData = self.showData else{return} // MyListDataTemp.shareInstance.favListingData?.showData?.hindi?.append(FavouriteListingDM.ResultData.ShowDatum(id: showData.id, title: showData.title, description: showData.description, thumbnailPath: showData.thumbnailPath, showType: showData.showType, totalSeasons: showData.totalSeasons, totalEpisodes: showData.totalEpisodes, ageRangeMasterID: showData.ageRangeMasterID, genderMasterID: showData.genderMasterID, categoryMasterID: self.categoryID?.toString(), contentMoreDetails: showData.contentMoreDetails, markAsFavourite: showData.markAsFavourite, isLiked: showData.isLiked, likesCount: showData.likesCount, viewsCount: showData.viewsCount, bookmarkCount: showData.bookmarkCount, bookmarkCategoryIDS: "18"))