final commit
This commit is contained in:
4
Podfile
4
Podfile
@@ -1,5 +1,5 @@
|
|||||||
# Uncomment the next line to define a global platform for your project
|
# Uncomment the next line to define a global platform for your project
|
||||||
platform :ios, '13.0'
|
platform :ios, '14.0'
|
||||||
|
|
||||||
target 'WOKA' do
|
target 'WOKA' do
|
||||||
# Comment the next line if you don't want to use dynamic frameworks
|
# Comment the next line if you don't want to use dynamic frameworks
|
||||||
@@ -20,7 +20,7 @@ target 'WOKA' do
|
|||||||
pod 'Google-Mobile-Ads-SDK'
|
pod 'Google-Mobile-Ads-SDK'
|
||||||
|
|
||||||
#JwPlayer
|
#JwPlayer
|
||||||
# pod 'JWPlayerKit'
|
pod 'JWPlayerKit' , '~> 4.19.2'
|
||||||
|
|
||||||
# Bottom line is for removing IPHONEOS_DEPLOYMENT_TARGET
|
# Bottom line is for removing IPHONEOS_DEPLOYMENT_TARGET
|
||||||
post_install do |installer|
|
post_install do |installer|
|
||||||
|
|||||||
@@ -54,7 +54,6 @@
|
|||||||
5255C3FF2C5B67E70030BB22 /* WokaFMVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5255C3FE2C5B67E70030BB22 /* WokaFMVC.swift */; };
|
5255C3FF2C5B67E70030BB22 /* WokaFMVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5255C3FE2C5B67E70030BB22 /* WokaFMVC.swift */; };
|
||||||
5257B2652BDFB6F50086D79B /* CheckPhoneHomeBtnOrNotch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5257B2642BDFB6F50086D79B /* CheckPhoneHomeBtnOrNotch.swift */; };
|
5257B2652BDFB6F50086D79B /* CheckPhoneHomeBtnOrNotch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5257B2642BDFB6F50086D79B /* CheckPhoneHomeBtnOrNotch.swift */; };
|
||||||
5258464F2C491829004F074B /* connectedness.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5258464E2C491829004F074B /* connectedness.swift */; };
|
5258464F2C491829004F074B /* connectedness.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5258464E2C491829004F074B /* connectedness.swift */; };
|
||||||
525855152CBCECC300E6002A /* JWPlayerKit in Frameworks */ = {isa = PBXBuildFile; productRef = 525855142CBCECC300E6002A /* JWPlayerKit */; };
|
|
||||||
525855172CBD3C7100E6002A /* PlayerStatusEnum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525855162CBD3C6C00E6002A /* PlayerStatusEnum.swift */; };
|
525855172CBD3C7100E6002A /* PlayerStatusEnum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525855162CBD3C6C00E6002A /* PlayerStatusEnum.swift */; };
|
||||||
525861D02C4F9E3200C33C79 /* SwipeTableViewFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525861CF2C4F9E3200C33C79 /* SwipeTableViewFont.swift */; };
|
525861D02C4F9E3200C33C79 /* SwipeTableViewFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525861CF2C4F9E3200C33C79 /* SwipeTableViewFont.swift */; };
|
||||||
525861D22C4FC6C000C33C79 /* CartPaymentOptionsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525861D12C4FC6C000C33C79 /* CartPaymentOptionsVC.swift */; };
|
525861D22C4FC6C000C33C79 /* CartPaymentOptionsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525861D12C4FC6C000C33C79 /* CartPaymentOptionsVC.swift */; };
|
||||||
@@ -115,7 +114,6 @@
|
|||||||
527AC6FD2C173A5100434FB7 /* SongListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527AC6FB2C173A5100434FB7 /* SongListCell.swift */; };
|
527AC6FD2C173A5100434FB7 /* SongListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527AC6FB2C173A5100434FB7 /* SongListCell.swift */; };
|
||||||
527AC6FE2C173A5100434FB7 /* SongListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 527AC6FC2C173A5100434FB7 /* SongListCell.xib */; };
|
527AC6FE2C173A5100434FB7 /* SongListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 527AC6FC2C173A5100434FB7 /* SongListCell.xib */; };
|
||||||
527AC7012C182DCE00434FB7 /* TimeStringToSeconds.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527AC7002C182DCE00434FB7 /* TimeStringToSeconds.swift */; };
|
527AC7012C182DCE00434FB7 /* TimeStringToSeconds.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527AC7002C182DCE00434FB7 /* TimeStringToSeconds.swift */; };
|
||||||
5282DB292C92D73B00465BA1 /* GoogleInteractiveMediaAds in Frameworks */ = {isa = PBXBuildFile; productRef = 5282DB282C92D73B00465BA1 /* GoogleInteractiveMediaAds */; };
|
|
||||||
5282DB2F2C981EAD00465BA1 /* AdReusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5282DB2E2C981EAD00465BA1 /* AdReusable.swift */; };
|
5282DB2F2C981EAD00465BA1 /* AdReusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5282DB2E2C981EAD00465BA1 /* AdReusable.swift */; };
|
||||||
528BEF602C2C372900FFDAB8 /* ContinueWatchingVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 528BEF5F2C2C372900FFDAB8 /* ContinueWatchingVC.swift */; };
|
528BEF602C2C372900FFDAB8 /* ContinueWatchingVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 528BEF5F2C2C372900FFDAB8 /* ContinueWatchingVC.swift */; };
|
||||||
528E5F1B2C24531200E33E4E /* SeasonListingDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 528E5F1A2C24531200E33E4E /* SeasonListingDM.swift */; };
|
528E5F1B2C24531200E33E4E /* SeasonListingDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 528E5F1A2C24531200E33E4E /* SeasonListingDM.swift */; };
|
||||||
@@ -761,6 +759,7 @@
|
|||||||
9CBE1B3C2C0F37B200CA6E61 /* DropDown.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DropDown.h; sourceTree = "<group>"; };
|
9CBE1B3C2C0F37B200CA6E61 /* DropDown.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DropDown.h; sourceTree = "<group>"; };
|
||||||
9CC0D2F92C6F33BE0019DF73 /* AuthFuncUserVideoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthFuncUserVideoView.swift; sourceTree = "<group>"; };
|
9CC0D2F92C6F33BE0019DF73 /* AuthFuncUserVideoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthFuncUserVideoView.swift; sourceTree = "<group>"; };
|
||||||
9CC0D2FB2C6F5CAE0019DF73 /* PlayerVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerVM.swift; sourceTree = "<group>"; };
|
9CC0D2FB2C6F5CAE0019DF73 /* PlayerVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerVM.swift; sourceTree = "<group>"; };
|
||||||
|
9CC856602CC2B6BA00444C5B /* WOKA.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = WOKA.xcodeproj; sourceTree = "<group>"; };
|
||||||
9CDAEB022C53B97B00890C47 /* VersionTexts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionTexts.swift; sourceTree = "<group>"; };
|
9CDAEB022C53B97B00890C47 /* VersionTexts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionTexts.swift; sourceTree = "<group>"; };
|
||||||
9CDAEB042C53DB2900890C47 /* ProductDetailsVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductDetailsVC.swift; sourceTree = "<group>"; };
|
9CDAEB042C53DB2900890C47 /* ProductDetailsVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductDetailsVC.swift; sourceTree = "<group>"; };
|
||||||
9CDAEB062C53E42900890C47 /* ProductDetailsVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductDetailsVM.swift; sourceTree = "<group>"; };
|
9CDAEB062C53E42900890C47 /* ProductDetailsVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductDetailsVM.swift; sourceTree = "<group>"; };
|
||||||
@@ -788,14 +787,12 @@
|
|||||||
4469E533EC95AC428FE50FB2 /* Pods_WOKA.framework in Frameworks */,
|
4469E533EC95AC428FE50FB2 /* Pods_WOKA.framework in Frameworks */,
|
||||||
52C83E3F2C493FD700F27563 /* RSKPlaceholderTextView in Frameworks */,
|
52C83E3F2C493FD700F27563 /* RSKPlaceholderTextView in Frameworks */,
|
||||||
9CF6980B2C89A324006007EF /* Lottie in Frameworks */,
|
9CF6980B2C89A324006007EF /* Lottie in Frameworks */,
|
||||||
525855152CBCECC300E6002A /* JWPlayerKit in Frameworks */,
|
|
||||||
9CBA530C2C89A2680046735C /* FirebaseAnalytics in Frameworks */,
|
9CBA530C2C89A2680046735C /* FirebaseAnalytics in Frameworks */,
|
||||||
9CF6980F2C8AFFBF006007EF /* SDWebImage in Frameworks */,
|
9CF6980F2C8AFFBF006007EF /* SDWebImage in Frameworks */,
|
||||||
9CBA530E2C89A2680046735C /* FirebaseCrashlytics in Frameworks */,
|
9CBA530E2C89A2680046735C /* FirebaseCrashlytics in Frameworks */,
|
||||||
528F26F02C6B7BD1003E4D99 /* OneSignalFramework in Frameworks */,
|
528F26F02C6B7BD1003E4D99 /* OneSignalFramework in Frameworks */,
|
||||||
528F26F22C6B7BD1003E4D99 /* OneSignalInAppMessages in Frameworks */,
|
528F26F22C6B7BD1003E4D99 /* OneSignalInAppMessages in Frameworks */,
|
||||||
9CBA53102C89A2680046735C /* FirebasePerformance in Frameworks */,
|
9CBA53102C89A2680046735C /* FirebasePerformance in Frameworks */,
|
||||||
5282DB292C92D73B00465BA1 /* GoogleInteractiveMediaAds in Frameworks */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -940,6 +937,7 @@
|
|||||||
523ED2512BDA2BC700CFED02 = {
|
523ED2512BDA2BC700CFED02 = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
9CC856602CC2B6BA00444C5B /* WOKA.xcodeproj */,
|
||||||
523ED25C2BDA2BC700CFED02 /* WOKA */,
|
523ED25C2BDA2BC700CFED02 /* WOKA */,
|
||||||
523ED2732BDA2BC900CFED02 /* WOKATests */,
|
523ED2732BDA2BC900CFED02 /* WOKATests */,
|
||||||
523ED27D2BDA2BC900CFED02 /* WOKAUITests */,
|
523ED27D2BDA2BC900CFED02 /* WOKAUITests */,
|
||||||
@@ -2090,8 +2088,6 @@
|
|||||||
9CBA530F2C89A2680046735C /* FirebasePerformance */,
|
9CBA530F2C89A2680046735C /* FirebasePerformance */,
|
||||||
9CF6980A2C89A324006007EF /* Lottie */,
|
9CF6980A2C89A324006007EF /* Lottie */,
|
||||||
9CF6980E2C8AFFBF006007EF /* SDWebImage */,
|
9CF6980E2C8AFFBF006007EF /* SDWebImage */,
|
||||||
5282DB282C92D73B00465BA1 /* GoogleInteractiveMediaAds */,
|
|
||||||
525855142CBCECC300E6002A /* JWPlayerKit */,
|
|
||||||
);
|
);
|
||||||
productName = WOKA;
|
productName = WOKA;
|
||||||
productReference = 523ED25A2BDA2BC700CFED02 /* WOKA.app */;
|
productReference = 523ED25A2BDA2BC700CFED02 /* WOKA.app */;
|
||||||
@@ -2195,8 +2191,6 @@
|
|||||||
9CBA530A2C89A2680046735C /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */,
|
9CBA530A2C89A2680046735C /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */,
|
||||||
9CF698092C89A324006007EF /* XCRemoteSwiftPackageReference "lottie-spm" */,
|
9CF698092C89A324006007EF /* XCRemoteSwiftPackageReference "lottie-spm" */,
|
||||||
9CF6980D2C8AFFBF006007EF /* XCRemoteSwiftPackageReference "SDWebImage" */,
|
9CF6980D2C8AFFBF006007EF /* XCRemoteSwiftPackageReference "SDWebImage" */,
|
||||||
5282DB272C92D73B00465BA1 /* XCRemoteSwiftPackageReference "swift-package-manager-google-interactive-media-ads-ios" */,
|
|
||||||
525855132CBCECC300E6002A /* XCRemoteSwiftPackageReference "JWPlayerKit-package" */,
|
|
||||||
);
|
);
|
||||||
productRefGroup = 523ED25B2BDA2BC700CFED02 /* Products */;
|
productRefGroup = 523ED25B2BDA2BC700CFED02 /* Products */;
|
||||||
projectDirPath = "";
|
projectDirPath = "";
|
||||||
@@ -2909,8 +2903,8 @@
|
|||||||
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 = 8;
|
CURRENT_PROJECT_VERSION = 10;
|
||||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
DEVELOPMENT_TEAM = 4S9A74ZB6H;
|
DEVELOPMENT_TEAM = 4S9A74ZB6H;
|
||||||
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
@@ -2953,7 +2947,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 = 8;
|
CURRENT_PROJECT_VERSION = 10;
|
||||||
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;
|
||||||
@@ -3182,22 +3176,6 @@
|
|||||||
/* End XCConfigurationList section */
|
/* End XCConfigurationList section */
|
||||||
|
|
||||||
/* Begin XCRemoteSwiftPackageReference section */
|
/* Begin XCRemoteSwiftPackageReference section */
|
||||||
525855132CBCECC300E6002A /* XCRemoteSwiftPackageReference "JWPlayerKit-package" */ = {
|
|
||||||
isa = XCRemoteSwiftPackageReference;
|
|
||||||
repositoryURL = "https://github.com/jwplayer/JWPlayerKit-package.git";
|
|
||||||
requirement = {
|
|
||||||
kind = exactVersion;
|
|
||||||
version = 4.19.1;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
5282DB272C92D73B00465BA1 /* XCRemoteSwiftPackageReference "swift-package-manager-google-interactive-media-ads-ios" */ = {
|
|
||||||
isa = XCRemoteSwiftPackageReference;
|
|
||||||
repositoryURL = "https://github.com/googleads/swift-package-manager-google-interactive-media-ads-ios";
|
|
||||||
requirement = {
|
|
||||||
branch = main;
|
|
||||||
kind = branch;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
528F26EC2C6B7BD1003E4D99 /* XCRemoteSwiftPackageReference "OneSignal-XCFramework" */ = {
|
528F26EC2C6B7BD1003E4D99 /* XCRemoteSwiftPackageReference "OneSignal-XCFramework" */ = {
|
||||||
isa = XCRemoteSwiftPackageReference;
|
isa = XCRemoteSwiftPackageReference;
|
||||||
repositoryURL = "https://github.com/OneSignal/OneSignal-XCFramework";
|
repositoryURL = "https://github.com/OneSignal/OneSignal-XCFramework";
|
||||||
@@ -3241,16 +3219,6 @@
|
|||||||
/* End XCRemoteSwiftPackageReference section */
|
/* End XCRemoteSwiftPackageReference section */
|
||||||
|
|
||||||
/* Begin XCSwiftPackageProductDependency section */
|
/* Begin XCSwiftPackageProductDependency section */
|
||||||
525855142CBCECC300E6002A /* JWPlayerKit */ = {
|
|
||||||
isa = XCSwiftPackageProductDependency;
|
|
||||||
package = 525855132CBCECC300E6002A /* XCRemoteSwiftPackageReference "JWPlayerKit-package" */;
|
|
||||||
productName = JWPlayerKit;
|
|
||||||
};
|
|
||||||
5282DB282C92D73B00465BA1 /* GoogleInteractiveMediaAds */ = {
|
|
||||||
isa = XCSwiftPackageProductDependency;
|
|
||||||
package = 5282DB272C92D73B00465BA1 /* XCRemoteSwiftPackageReference "swift-package-manager-google-interactive-media-ads-ios" */;
|
|
||||||
productName = GoogleInteractiveMediaAds;
|
|
||||||
};
|
|
||||||
528F26ED2C6B7BD1003E4D99 /* OneSignalExtension */ = {
|
528F26ED2C6B7BD1003E4D99 /* OneSignalExtension */ = {
|
||||||
isa = XCSwiftPackageProductDependency;
|
isa = XCSwiftPackageProductDependency;
|
||||||
package = 528F26EC2C6B7BD1003E4D99 /* XCRemoteSwiftPackageReference "OneSignal-XCFramework" */;
|
package = 528F26EC2C6B7BD1003E4D99 /* XCRemoteSwiftPackageReference "OneSignal-XCFramework" */;
|
||||||
|
|||||||
@@ -55,7 +55,7 @@
|
|||||||
</Testables>
|
</Testables>
|
||||||
</TestAction>
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Release"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
launchStyle = "0"
|
launchStyle = "0"
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ class AudioBookDetailsVC : UIViewController{
|
|||||||
if let postID = audioData?.id{
|
if let postID = audioData?.id{
|
||||||
PersistentStorage.shared.addAudioCount(postID: postID)
|
PersistentStorage.shared.addAudioCount(postID: postID)
|
||||||
}
|
}
|
||||||
|
HapticFeedbackGenerator.shared.simpleSelection()
|
||||||
if AuthFunc.shareInstance.guestUserLoginPopUp() { return}
|
if AuthFunc.shareInstance.guestUserLoginPopUp() { return}
|
||||||
|
|
||||||
if let audioData{
|
if let audioData{
|
||||||
@@ -145,6 +146,7 @@ class AudioBookDetailsVC : UIViewController{
|
|||||||
if let postID = audioData?.id{
|
if let postID = audioData?.id{
|
||||||
PersistentStorage.shared.addAudioCount(postID: postID)
|
PersistentStorage.shared.addAudioCount(postID: postID)
|
||||||
}
|
}
|
||||||
|
HapticFeedbackGenerator.shared.simpleSelection()
|
||||||
if AuthFunc.shareInstance.guestUserLoginPopUp() { return}
|
if AuthFunc.shareInstance.guestUserLoginPopUp() { return}
|
||||||
|
|
||||||
if let audioData{
|
if let audioData{
|
||||||
@@ -222,6 +224,7 @@ class AudioBookDetailsVC : UIViewController{
|
|||||||
}
|
}
|
||||||
|
|
||||||
shareView.addTapGesture { [weak self] in
|
shareView.addTapGesture { [weak self] in
|
||||||
|
HapticFeedbackGenerator.shared.simpleSelection()
|
||||||
guard let self else{return}
|
guard let self else{return}
|
||||||
if let postID = audioData?.id{
|
if let postID = audioData?.id{
|
||||||
PersistentStorage.shared.addAudioCount(postID: postID)
|
PersistentStorage.shared.addAudioCount(postID: postID)
|
||||||
|
|||||||
@@ -211,6 +211,7 @@ extension AudioBookHomeVC : TableViewSRC{
|
|||||||
|
|
||||||
cell.btnTapped = { [weak self] (type) -> Void in
|
cell.btnTapped = { [weak self] (type) -> Void in
|
||||||
guard let self else{return}
|
guard let self else{return}
|
||||||
|
HapticFeedbackGenerator.shared.simpleSelection()
|
||||||
let data = vm.audioListData[indexPath.row]
|
let data = vm.audioListData[indexPath.row]
|
||||||
guard let postID = data.id ,let postType = data.contentMoreDetails?.first?.postType else{return}
|
guard let postID = data.id ,let postType = data.contentMoreDetails?.first?.postType else{return}
|
||||||
let isFav = data.markAsFavourite
|
let isFav = data.markAsFavourite
|
||||||
@@ -266,6 +267,7 @@ extension AudioBookHomeVC : CollectionViewSRC{
|
|||||||
cell.setAudioData(data: data)
|
cell.setAudioData(data: data)
|
||||||
|
|
||||||
cell.btnTapped = { [self] (type) -> Void in
|
cell.btnTapped = { [self] (type) -> Void in
|
||||||
|
HapticFeedbackGenerator.shared.simpleSelection()
|
||||||
guard let postID = data.id ,let postType = data.contentMoreDetails?.first?.postType else{return}
|
guard let postID = data.id ,let postType = data.contentMoreDetails?.first?.postType else{return}
|
||||||
let isFav = data.markAsFavourite
|
let isFav = data.markAsFavourite
|
||||||
let isLiked = data.isLiked
|
let isLiked = data.isLiked
|
||||||
|
|||||||
@@ -46,4 +46,9 @@ extension K{
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct MediaIDs{
|
||||||
|
// this will map the live stream data
|
||||||
|
static let liveStreamMediaID = "YR5pnlIM"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,6 +124,7 @@ class GamesDetailVC: UIViewController {
|
|||||||
|
|
||||||
addView.addTapGesture { [weak self] in
|
addView.addTapGesture { [weak self] in
|
||||||
guard let self else{return}
|
guard let self else{return}
|
||||||
|
HapticFeedbackGenerator.shared.simpleSelection()
|
||||||
if let postID = gameData?.id{
|
if let postID = gameData?.id{
|
||||||
PersistentStorage.shared.addGamesCount(postID: postID)
|
PersistentStorage.shared.addGamesCount(postID: postID)
|
||||||
}
|
}
|
||||||
@@ -173,6 +174,7 @@ class GamesDetailVC: UIViewController {
|
|||||||
|
|
||||||
likeView.addTapGesture { [weak self] in
|
likeView.addTapGesture { [weak self] in
|
||||||
guard let self else{return}
|
guard let self else{return}
|
||||||
|
HapticFeedbackGenerator.shared.simpleSelection()
|
||||||
if let postID = gameData?.id{
|
if let postID = gameData?.id{
|
||||||
PersistentStorage.shared.addGamesCount(postID: postID)
|
PersistentStorage.shared.addGamesCount(postID: postID)
|
||||||
}
|
}
|
||||||
@@ -213,6 +215,7 @@ class GamesDetailVC: UIViewController {
|
|||||||
|
|
||||||
shareView.addTapGesture { [weak self] in
|
shareView.addTapGesture { [weak self] in
|
||||||
guard let self else{return}
|
guard let self else{return}
|
||||||
|
HapticFeedbackGenerator.shared.simpleSelection()
|
||||||
if let postID = gameData?.id{
|
if let postID = gameData?.id{
|
||||||
PersistentStorage.shared.addGamesCount(postID: postID)
|
PersistentStorage.shared.addGamesCount(postID: postID)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -159,6 +159,7 @@ extension GamesListVC : TableViewSRC{
|
|||||||
}
|
}
|
||||||
|
|
||||||
cell.btnTapped = { [self] (type) -> Void in
|
cell.btnTapped = { [self] (type) -> Void in
|
||||||
|
HapticFeedbackGenerator.shared.simpleSelection()
|
||||||
vm.updateFavLikes(type: type, index: indexPath.row)
|
vm.updateFavLikes(type: type, index: indexPath.row)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -813,6 +813,7 @@ extension MyListVC : GADBannerViewDelegate{
|
|||||||
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
|
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
|
||||||
adView.alpha = 0
|
adView.alpha = 0
|
||||||
adView.isHidden = false
|
adView.isHidden = false
|
||||||
|
adHeight.constant = 90
|
||||||
UIView.animate(withDuration: 0.2, animations: { [weak self] in
|
UIView.animate(withDuration: 0.2, animations: { [weak self] in
|
||||||
self?.adView.alpha = 1
|
self?.adView.alpha = 1
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -107,7 +107,6 @@ class MyListVM{
|
|||||||
|
|
||||||
}else if myListAd.googleAd != nil{
|
}else if myListAd.googleAd != nil{
|
||||||
//setup google banner ads.
|
//setup google banner ads.
|
||||||
vc.adHeight.constant = 90
|
|
||||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3, execute: {
|
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)
|
AdReusable.sharedInstance.setupBannerAd(bannerView: self.bottomBanner, in: self.vc.adView, adUnitID: K.GoogleAdIDs.myListNotifications, viewController: self.vc, height: 6,width: 0)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -54,13 +54,13 @@ class JWKaraokePlayerVC: JWPlayerViewController, JWPlayerViewControllerDelegate
|
|||||||
playerView.allowsPictureInPicturePlayback = false
|
playerView.allowsPictureInPicturePlayback = false
|
||||||
playerView.captionStyle = .none
|
playerView.captionStyle = .none
|
||||||
|
|
||||||
let skinStylingBuilder = JWPlayerSkinBuilder()
|
// let skinStylingBuilder = JWPlayerSkinBuilder()
|
||||||
.adCueColor(.yellow)
|
// .adCueColor(.yellow)
|
||||||
// .buttonsColor(.blue)
|
// // .buttonsColor(.blue)
|
||||||
// .backgroundColor(.cyan)
|
// // .backgroundColor(.cyan)
|
||||||
|
//
|
||||||
let skinStyling = try? skinStylingBuilder.build()
|
// let skinStyling = try? skinStylingBuilder.build()
|
||||||
self.styling = skinStyling
|
// self.styling = skinStyling
|
||||||
self.setVisibility(.hidden, for: [.fullscreenButton, .pictureInPictureButton, .settingsButton,.languagesButton, .airplayButton])
|
self.setVisibility(.hidden, for: [.fullscreenButton, .pictureInPictureButton, .settingsButton,.languagesButton, .airplayButton])
|
||||||
|
|
||||||
self.view.bringSubviewToFront(outerStack)
|
self.view.bringSubviewToFront(outerStack)
|
||||||
@@ -113,9 +113,11 @@ class JWKaraokePlayerVC: JWPlayerViewController, JWPlayerViewControllerDelegate
|
|||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func playBtnTapped(_ sender: LocalisedElementsButton) {
|
@IBAction func playBtnTapped(_ sender: LocalisedElementsButton) {
|
||||||
|
// update the clicks.
|
||||||
if let postID = vm.postID{
|
if let postID = vm.postID{
|
||||||
PersistentStorage.shared.addKaraokeCount(postID: postID)
|
PersistentStorage.shared.addKaraokeCount(postID: postID)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !isPlaying {
|
if !isPlaying {
|
||||||
vm.playMixedAudio()
|
vm.playMixedAudio()
|
||||||
sender.setTitle("Pause", for: .normal)
|
sender.setTitle("Pause", for: .normal)
|
||||||
@@ -127,9 +129,9 @@ class JWKaraokePlayerVC: JWPlayerViewController, JWPlayerViewControllerDelegate
|
|||||||
self.startRecordBtn.isEnabled = false
|
self.startRecordBtn.isEnabled = false
|
||||||
self.downloadRecordingBtn.isEnabled = false
|
self.downloadRecordingBtn.isEnabled = false
|
||||||
} else {
|
} else {
|
||||||
|
vm.playerKAraoke.pause()
|
||||||
sender.setTitle("Play", for: .normal)
|
sender.setTitle("Play", for: .normal)
|
||||||
sender.setImage(UIImage(named: "PlayButtonSmall"), for: .normal)
|
sender.setImage(UIImage(named: "PlayButtonSmall"), for: .normal)
|
||||||
|
|
||||||
// Disable Recording while playing, hide controls for jwplayer
|
// Disable Recording while playing, hide controls for jwplayer
|
||||||
self.interfaceBehavior = .normal
|
self.interfaceBehavior = .normal
|
||||||
self.startRecordBtn.isEnabled = true
|
self.startRecordBtn.isEnabled = true
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ class KaraokeDetailsVC: UIViewController {
|
|||||||
func tapHandler(){
|
func tapHandler(){
|
||||||
|
|
||||||
addView.addTapGesture { [weak self] in
|
addView.addTapGesture { [weak self] in
|
||||||
|
HapticFeedbackGenerator.shared.simpleSelection()
|
||||||
if AuthFunc.shareInstance.guestUserLoginPopUp() { return}
|
if AuthFunc.shareInstance.guestUserLoginPopUp() { return}
|
||||||
|
|
||||||
guard let self else{return}
|
guard let self else{return}
|
||||||
@@ -173,6 +174,7 @@ class KaraokeDetailsVC: UIViewController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
likeView.addTapGesture { [weak self] in
|
likeView.addTapGesture { [weak self] in
|
||||||
|
HapticFeedbackGenerator.shared.simpleSelection()
|
||||||
if AuthFunc.shareInstance.guestUserLoginPopUp() { return}
|
if AuthFunc.shareInstance.guestUserLoginPopUp() { return}
|
||||||
|
|
||||||
guard let self else{return}
|
guard let self else{return}
|
||||||
|
|||||||
@@ -164,6 +164,7 @@ extension KaraokeListingVC : CollectionViewSRC{
|
|||||||
cell.setKaraokeData(data: data)
|
cell.setKaraokeData(data: data)
|
||||||
|
|
||||||
cell.btnTapped = { [self] (type) -> Void in
|
cell.btnTapped = { [self] (type) -> Void in
|
||||||
|
HapticFeedbackGenerator.shared.simpleSelection()
|
||||||
guard let postID = data.id ,let postType = data.contentMoreDetails?.first?.postType else{return}
|
guard let postID = data.id ,let postType = data.contentMoreDetails?.first?.postType else{return}
|
||||||
let isFav = data.markAsFavourite
|
let isFav = data.markAsFavourite
|
||||||
let isLiked = data.isLiked
|
let isLiked = data.isLiked
|
||||||
@@ -249,6 +250,7 @@ extension KaraokeListingVC : TableViewSRC{
|
|||||||
|
|
||||||
cell.btnTapped = { [weak self] (type) -> Void in
|
cell.btnTapped = { [weak self] (type) -> Void in
|
||||||
guard let self else{return}
|
guard let self else{return}
|
||||||
|
HapticFeedbackGenerator.shared.simpleSelection()
|
||||||
let data = vm.karaokeListData[indexPath.row]
|
let data = vm.karaokeListData[indexPath.row]
|
||||||
guard let postID = data.id ,let postType = data.contentMoreDetails?.first?.postType else{return}
|
guard let postID = data.id ,let postType = data.contentMoreDetails?.first?.postType else{return}
|
||||||
let isFav = data.markAsFavourite
|
let isFav = data.markAsFavourite
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ class JWKaraokePlayerVM{
|
|||||||
var startTimeStamp = Date()
|
var startTimeStamp = Date()
|
||||||
var headerBannerView = GADBannerView()
|
var headerBannerView = GADBannerView()
|
||||||
|
|
||||||
|
var playerKAraoke = AVPlayer()
|
||||||
|
|
||||||
func initView(){
|
func initView(){
|
||||||
if let adsData = AuthFunc.shareInstance.adsData, let karaokePlayerAd = adsData.result?.filter({$0.slug == AdsEnum.karaokePlayer.rawValue}).first, karaokePlayerAd.googleAd != nil{
|
if let adsData = AuthFunc.shareInstance.adsData, let karaokePlayerAd = adsData.result?.filter({$0.slug == AdsEnum.karaokePlayer.rawValue}).first, karaokePlayerAd.googleAd != nil{
|
||||||
/*
|
/*
|
||||||
@@ -188,27 +190,13 @@ class JWKaraokePlayerVM{
|
|||||||
try FileManager.default.copyItem(at: mixedAudioURL, to: destinationURL)
|
try FileManager.default.copyItem(at: mixedAudioURL, to: destinationURL)
|
||||||
|
|
||||||
// Play the audio
|
// Play the audio
|
||||||
let playerKAraoke = AVPlayer(url: destinationURL)
|
playerKAraoke = AVPlayer(url: destinationURL)
|
||||||
|
|
||||||
// Adding a completion handler to check if the player starts playing
|
// Adding a completion handler to check if the player starts playing
|
||||||
let playerObserver = playerKAraoke.addPeriodicTimeObserver(forInterval: CMTime(seconds: 1, preferredTimescale: 1), queue: .main) { time in
|
let playerObserver = playerKAraoke.addPeriodicTimeObserver(forInterval: CMTime(seconds: 1, preferredTimescale: 1), queue: .main) { time in
|
||||||
print("Playing audio at time: \(time.seconds)")
|
print("Playing audio at time: \(time.seconds)")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Observing when playback finishes
|
|
||||||
NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: playerKAraoke.currentItem, queue: .main) { [weak self] _ in
|
|
||||||
print("Audio finished playing")
|
|
||||||
guard let self else{return}
|
|
||||||
self.vc.playBtn.setTitle("Play", for: .normal)
|
|
||||||
self.vc.playBtn.setImage(UIImage(named: "PlayButtonSmall"), for: .normal)
|
|
||||||
|
|
||||||
// Disable Recording while playing, hide controls for jwplayer
|
|
||||||
self.vc.interfaceBehavior = .normal
|
|
||||||
self.vc.startRecordBtn.isEnabled = true
|
|
||||||
self.vc.downloadRecordingBtn.isEnabled = true
|
|
||||||
// Remove observer
|
|
||||||
playerKAraoke.removeTimeObserver(playerObserver)
|
|
||||||
}
|
|
||||||
|
|
||||||
playerKAraoke.volume = 1.0
|
playerKAraoke.volume = 1.0
|
||||||
playerKAraoke.play()
|
playerKAraoke.play()
|
||||||
@@ -225,6 +213,21 @@ class JWKaraokePlayerVM{
|
|||||||
audioPlayer.play()
|
audioPlayer.play()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Observing when playback finishes
|
||||||
|
NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: playerKAraoke.currentItem, queue: .main) { [weak self] _ in
|
||||||
|
print("Audio finished playing")
|
||||||
|
guard let self else{return}
|
||||||
|
self.vc.playBtn.setTitle("Play", for: .normal)
|
||||||
|
self.vc.playBtn.setImage(UIImage(named: "PlayButtonSmall"), for: .normal)
|
||||||
|
|
||||||
|
// Disable Recording while playing, hide controls for jwplayer
|
||||||
|
self.vc.interfaceBehavior = .normal
|
||||||
|
self.vc.startRecordBtn.isEnabled = true
|
||||||
|
self.vc.downloadRecordingBtn.isEnabled = true
|
||||||
|
// Remove observer
|
||||||
|
playerKAraoke.removeTimeObserver(playerObserver)
|
||||||
|
self.vc.isPlaying = false
|
||||||
|
}
|
||||||
} catch {
|
} catch {
|
||||||
print("Error: \(error.localizedDescription)")
|
print("Error: \(error.localizedDescription)")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import Alamofire
|
|||||||
extension AuthFunc{
|
extension AuthFunc{
|
||||||
|
|
||||||
func userVideoView(postID : Int, postType : Int, duration : Int, catID : Int, onCompletion : @escaping (Bool) -> Void){
|
func userVideoView(postID : Int, postType : Int, duration : Int, catID : Int, onCompletion : @escaping (Bool) -> Void){
|
||||||
|
print("UserVideo View called.")
|
||||||
let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken(),
|
let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken(),
|
||||||
"device-id": AuthFunc.shareInstance.getDeviceUUID()]
|
"device-id": AuthFunc.shareInstance.getDeviceUUID()]
|
||||||
let params : Parameters = ["post_id" : postID,
|
let params : Parameters = ["post_id" : postID,
|
||||||
|
|||||||
@@ -55,17 +55,9 @@ class JWPlayerManager {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// let source = try JWVideoSourceBuilder()
|
|
||||||
// .defaultVideo(true)
|
|
||||||
// .file(url)
|
|
||||||
// .label("0")
|
|
||||||
// .build()
|
|
||||||
|
|
||||||
|
|
||||||
let item = try JWPlayerItemBuilder()
|
let item = try JWPlayerItemBuilder()
|
||||||
.file(url)
|
.file(url)
|
||||||
// .videoSources([source])
|
.title(singleItem.titles ?? "NA")
|
||||||
.title(singleItem.titles ?? "")
|
|
||||||
.posterImage(URL(string: singleItem.poster ?? "")!)
|
.posterImage(URL(string: singleItem.poster ?? "")!)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
@@ -114,16 +106,12 @@ class JWPlayerManager {
|
|||||||
|
|
||||||
// Create an ad break for 30% into the video
|
// Create an ad break for 30% into the video
|
||||||
let finalConfig : JWPlayerConfiguration?
|
let finalConfig : JWPlayerConfiguration?
|
||||||
//
|
|
||||||
// let ad1 = AdBreakItemStruct(adUrl: URL(string: "https://pubads.g.doubleclick.net/gampad/ads?iu=/23204950200/VideoAd&description_url=https%3A%2F%2Fwokaland.com%2F&tfcd=0&npa=0&ad_type=audio_video&sz=640x480%7C1280x720&gdfp_req=1&unviewed_position_start=1&output=vast&env=vp&impl=s&correlator=")!, offset: .midroll(percent: 40))
|
|
||||||
// let ad2 = AdBreakItemStruct(adUrl: URL(string: "https://pubads.g.doubleclick.net/gampad/live/ads?iu=/23204950200/VideoAd&description_url=https%3A%2F%2Fwokaland.com%2F&tfcd=0&npa=0&ad_type=audio_video&sz=640x480%7C1280x720&gdfp_req=1&unviewed_position_start=1&output=vast&env=vp&impl=s&correlator=&nofb=1")!, offset: .midroll(percent: 80))
|
|
||||||
// let ad3 = AdBreakItemStruct(adUrl: URL(string: "https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_preroll_skippable&sz=640x480&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=90")!, offset: .midroll(percent: 90))
|
|
||||||
|
|
||||||
switch contentType{
|
switch contentType{
|
||||||
case .audioBooks:
|
case .audioBooks:
|
||||||
finalConfig = try JWPlayerConfigurationBuilder()
|
finalConfig = try JWPlayerConfigurationBuilder()
|
||||||
.playlist(items: items)
|
.playlist(items: items)
|
||||||
.autostart(true)
|
.autostart(false)
|
||||||
.build()
|
.build()
|
||||||
// if let adConfigs = JWAdsBuilder.shareInstace.createAds(adsData: [ad1,ad2,ad3]){
|
// if let adConfigs = JWAdsBuilder.shareInstace.createAds(adsData: [ad1,ad2,ad3]){
|
||||||
// finalConfig = try JWPlayerConfigurationBuilder()
|
// finalConfig = try JWPlayerConfigurationBuilder()
|
||||||
@@ -173,7 +161,7 @@ class JWPlayerManager {
|
|||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
DispatchQueue.main.async {
|
// DispatchQueue.main.async {
|
||||||
playerVC.videoIndex = startIndex
|
playerVC.videoIndex = startIndex
|
||||||
playerVC.contentType = contentType
|
playerVC.contentType = contentType
|
||||||
playerVC.config = finalConfig
|
playerVC.config = finalConfig
|
||||||
@@ -192,7 +180,7 @@ class JWPlayerManager {
|
|||||||
// print("FullScreen")
|
// print("FullScreen")
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
} catch {
|
} catch {
|
||||||
print("Error creating JWPlayer configuration: \(error)")
|
print("Error creating JWPlayer configuration: \(error)")
|
||||||
Utilities.dismissProgressHUD()
|
Utilities.dismissProgressHUD()
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ struct APIEndPoints {
|
|||||||
static let development = "https://wokanative.betadelivery.com/api/"
|
static let development = "https://wokanative.betadelivery.com/api/"
|
||||||
static let staging = "https://wokastaging.in/api/"
|
static let staging = "https://wokastaging.in/api/"
|
||||||
static let production = "https://wokaland.com/secret-panel-10102023/hidden-admin-portal-20092023/api/"
|
static let production = "https://wokaland.com/secret-panel-10102023/hidden-admin-portal-20092023/api/"
|
||||||
|
static let baseUrlForCurrentEvn = makeURL(path: "")
|
||||||
static let appUrl = "https://apps.apple.com/in/app/woka/id6465305185"
|
static let appUrl = "https://apps.apple.com/in/app/woka/id6465305185"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -95,11 +95,6 @@ class NetworkManager{
|
|||||||
vcPush.modalPresentationStyle = .overCurrentContext
|
vcPush.modalPresentationStyle = .overCurrentContext
|
||||||
vcPush.modalTransitionStyle = .crossDissolve
|
vcPush.modalTransitionStyle = .crossDissolve
|
||||||
topController.present(vcPush, animated: true)
|
topController.present(vcPush, animated: true)
|
||||||
|
|
||||||
// Utilities.alertWithBtnCompletion(title: "Session Expired", msgBody: "Please Login Again", okBtnStr: "OK", vc: topController) { isDone in
|
|
||||||
// AuthFunc.shareInstance.logout()
|
|
||||||
// UIApplication.setRootView(LoginNavVC.instantiate(from: .AuthenticationSB))
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,6 +53,18 @@ class SplashVC: UIViewController {
|
|||||||
|
|
||||||
vm.playSplashSound()
|
vm.playSplashSound()
|
||||||
animateImageScale()
|
animateImageScale()
|
||||||
|
|
||||||
|
// toast if the server is staging or development.
|
||||||
|
switch String(describing:APIEndPoints.BaseURL.baseUrlForCurrentEvn){
|
||||||
|
case APIEndPoints.BaseURL.development:
|
||||||
|
toast(msg: "Server is runnning on Development", time: 1)
|
||||||
|
case APIEndPoints.BaseURL.staging:
|
||||||
|
toast(msg: "Server is runnning on Staging", time: 1)
|
||||||
|
case APIEndPoints.BaseURL.production:
|
||||||
|
print("Server is running on production")
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func languageBtnTapped(_ sender: UIButton) {
|
@IBAction func languageBtnTapped(_ sender: UIButton) {
|
||||||
|
|||||||
@@ -145,7 +145,6 @@ class SplashVM{
|
|||||||
func getVersionHistory(){
|
func getVersionHistory(){
|
||||||
|
|
||||||
let currentAppVersion = Bundle.main.appVersionLong
|
let currentAppVersion = Bundle.main.appVersionLong
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If user is guest then dont do the nw call
|
If user is guest then dont do the nw call
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import UIKit
|
|||||||
import JWPlayerKit
|
import JWPlayerKit
|
||||||
import AVKit
|
import AVKit
|
||||||
|
|
||||||
class PlayerVC: JWPlayerViewController, JWPlayerViewControllerDelegate {
|
class PlayerVC: JWPlayerViewController, JWPlayerViewControllerUIDelegate, JWPlayerViewControllerRelatedDelegate { //JWPlayerViewControllerFullScreenDelegate
|
||||||
|
|
||||||
@IBOutlet weak var backButton: UIButton!
|
@IBOutlet weak var backButton: UIButton!
|
||||||
var previousScale: CGFloat = 1.0
|
var previousScale: CGFloat = 1.0
|
||||||
@@ -48,11 +48,10 @@ class PlayerVC: JWPlayerViewController, JWPlayerViewControllerDelegate {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
self.delegate = self
|
self.setVisibility(.hidden, for: [.fullscreenButton, .pictureInPictureButton,.languagesButton, .chromecastButton, .exitFullScreenButton])
|
||||||
player.configurePlayer(with: config)
|
|
||||||
vm.vc = self
|
vm.vc = self
|
||||||
vm.initView()
|
vm.initView()
|
||||||
//bring back button to the front
|
//bring back button to the front
|
||||||
@@ -60,17 +59,18 @@ class PlayerVC: JWPlayerViewController, JWPlayerViewControllerDelegate {
|
|||||||
NotificationCenter.default.addObserver(self, selector: #selector(appDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
|
NotificationCenter.default.addObserver(self, selector: #selector(appDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(appWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
|
NotificationCenter.default.addObserver(self, selector: #selector(appWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
|
||||||
|
|
||||||
|
// self.fullScreenDelegate = self
|
||||||
let skinStylingBuilder = JWPlayerSkinBuilder()
|
self.uiDelegate = self
|
||||||
.adCueColor(.yellow)
|
self.relatedDelegate = self
|
||||||
// .buttonsColor(.blue)
|
self.player.configurePlayer(with: self.config)
|
||||||
// .backgroundColor(.cyan)
|
// let skinStylingBuilder = JWPlayerSkinBuilder()
|
||||||
|
// .adCueColor(.yellow)
|
||||||
|
// // .buttonsColor(.blue)
|
||||||
|
// // .backgroundColor(.cyan)
|
||||||
|
//
|
||||||
|
// let skinStyling = try? skinStylingBuilder.build()
|
||||||
|
// self.styling = skinStyling
|
||||||
|
|
||||||
let skinStyling = try? skinStylingBuilder.build()
|
|
||||||
self.styling = skinStyling
|
|
||||||
self.setVisibility(.hidden, for: [.fullscreenButton, .pictureInPictureButton,.languagesButton])
|
|
||||||
|
|
||||||
print("Quality:- ", player.visualQualityLevels)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override func viewDidAppear(_ animated: Bool) {
|
override func viewDidAppear(_ animated: Bool) {
|
||||||
@@ -143,7 +143,7 @@ class PlayerVC: JWPlayerViewController, JWPlayerViewControllerDelegate {
|
|||||||
case .trailer:
|
case .trailer:
|
||||||
let duration = DateFormatterLib.dateDifferenceINT(date1: vm.startTimeStamp, date2: Date())
|
let duration = DateFormatterLib.dateDifferenceINT(date1: vm.startTimeStamp, date2: Date())
|
||||||
let totalDuration = duration + vm.totalVideoViewTime
|
let totalDuration = duration + vm.totalVideoViewTime
|
||||||
AuthFunc.shareInstance.userVideoView(postID: 0, postType: PostType.episode.rawValue, duration: totalDuration, catID: 0) { _ in}
|
AuthFunc.shareInstance.userVideoView(postID: 0, postType: PostType.teaser.rawValue, duration: totalDuration, catID: 0) { _ in}
|
||||||
vm.handleBackAction()
|
vm.handleBackAction()
|
||||||
case .continueWatching:
|
case .continueWatching:
|
||||||
if let catID = vm.catID,let postID = vm.videoIDs.first{
|
if let catID = vm.catID,let postID = vm.videoIDs.first{
|
||||||
@@ -250,10 +250,10 @@ class PlayerVC: JWPlayerViewController, JWPlayerViewControllerDelegate {
|
|||||||
print("PlayList Over", vm.currentPlayingIndex)
|
print("PlayList Over", vm.currentPlayingIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
override func jwplayer(_ player: any JWPlayer, didLoadPlaylist playlist: [JWPlayerItem]) {
|
// override func jwplayer(_ player: any JWPlayer, didLoadPlaylist playlist: [JWPlayerItem]) {
|
||||||
super.jwplayer(player, didLoadPlaylist: playlist)
|
// super.jwplayer(player, didLoadPlaylist: playlist)
|
||||||
print("Playlist loaded")
|
// print("Playlist loaded")
|
||||||
}
|
// }
|
||||||
|
|
||||||
// this will give index
|
// this will give index
|
||||||
override func jwplayer(_ player: any JWPlayer, didLoadPlaylistItem item: JWPlayerItem, at index: UInt) {
|
override func jwplayer(_ player: any JWPlayer, didLoadPlaylistItem item: JWPlayerItem, at index: UInt) {
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ class ThemeOneVC: UIViewController {
|
|||||||
|
|
||||||
override func viewDidAppear(_ animated: Bool) {
|
override func viewDidAppear(_ animated: Bool) {
|
||||||
// OFF In Production
|
// OFF In Production
|
||||||
AuthFunc.shareInstance.getAds()
|
// AuthFunc.shareInstance.getAds()
|
||||||
|
|
||||||
K.GVar.topView = .theme1
|
K.GVar.topView = .theme1
|
||||||
|
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ class PlayerVM{
|
|||||||
case .trailer:
|
case .trailer:
|
||||||
let duration = DateFormatterLib.dateDifferenceINT(date1: startTimeStamp, date2: Date())
|
let duration = DateFormatterLib.dateDifferenceINT(date1: startTimeStamp, date2: Date())
|
||||||
let totalDuration = duration + totalVideoViewTime
|
let totalDuration = duration + totalVideoViewTime
|
||||||
AuthFunc.shareInstance.userVideoView(postID: 0, postType: PostType.episode.rawValue, duration: totalDuration, catID: 0) { _ in}
|
AuthFunc.shareInstance.userVideoView(postID: 0, postType: PostType.teaser.rawValue, duration: totalDuration, catID: 0) { _ in}
|
||||||
case .continueWatching:
|
case .continueWatching:
|
||||||
if let catID = catID , let postID = videoIDs.first{
|
if let catID = catID , let postID = videoIDs.first{
|
||||||
let duration = DateFormatterLib.dateDifferenceINT(date1: startTimeStamp, date2: Date())
|
let duration = DateFormatterLib.dateDifferenceINT(date1: startTimeStamp, date2: Date())
|
||||||
|
|||||||
@@ -416,7 +416,10 @@ class ThemeOneVM{
|
|||||||
// title = liveStreamData.name?.titleHin ?? ""
|
// title = liveStreamData.name?.titleHin ?? ""
|
||||||
}
|
}
|
||||||
|
|
||||||
guard let streamURL = URL(string: url) else{return}
|
guard url != "",let streamURL = URL(string: url) else{
|
||||||
|
print("Live strean URL is null")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
playerItem = AVPlayerItem(url: streamURL)
|
playerItem = AVPlayerItem(url: streamURL)
|
||||||
|
|
||||||
@@ -568,6 +571,7 @@ class ThemeOneVM{
|
|||||||
let item = try JWPlayerItemBuilder()
|
let item = try JWPlayerItemBuilder()
|
||||||
.videoSources([videoSourceBuilder])
|
.videoSources([videoSourceBuilder])
|
||||||
.title(title)
|
.title(title)
|
||||||
|
.mediaId(K.MediaIDs.liveStreamMediaID)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
let config = try JWPlayerConfigurationBuilder()
|
let config = try JWPlayerConfigurationBuilder()
|
||||||
|
|||||||
@@ -199,6 +199,7 @@ class ThemeTwoVM{
|
|||||||
// .file(liveStreamURL)
|
// .file(liveStreamURL)
|
||||||
.videoSources([videoSourceBuilder])
|
.videoSources([videoSourceBuilder])
|
||||||
.title(title)
|
.title(title)
|
||||||
|
.mediaId(K.MediaIDs.liveStreamMediaID)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
// Create a JWPlayerConfiguration
|
// Create a JWPlayerConfiguration
|
||||||
|
|||||||
@@ -209,16 +209,19 @@ extension WebSeriesSeasonVC : TableViewSRC{
|
|||||||
var url = String()
|
var url = String()
|
||||||
guard let englishData = i.contentMoreDetails?.filter({$0.languageMasterID == 1}).first, let hindiData = i.contentMoreDetails?.filter({$0.languageMasterID == 2}).first else{return}
|
guard let englishData = i.contentMoreDetails?.filter({$0.languageMasterID == 1}).first, let hindiData = i.contentMoreDetails?.filter({$0.languageMasterID == 2}).first else{return}
|
||||||
|
|
||||||
if let id = i.id{
|
|
||||||
videoIDs.append(id)
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
Based on selected Category language update the url
|
Based on selected Category language update the url
|
||||||
*/
|
*/
|
||||||
if vm.categoryID == 1{ //1- english , 18 - hindi
|
if vm.categoryID == 1{ //1- english , 18 - hindi
|
||||||
url = englishData.contentHDURL ?? ""
|
url = englishData.contentHDURL ?? ""
|
||||||
|
if let id = i.contentMoreDetails?.first?.id{
|
||||||
|
videoIDs.append(id)
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
url = hindiData.contentHDURL ?? ""
|
url = hindiData.contentHDURL ?? ""
|
||||||
|
if let id = i.contentMoreDetails?.last?.id{
|
||||||
|
videoIDs.append(id)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -257,9 +260,9 @@ extension WebSeriesSeasonVC : TableViewSRC{
|
|||||||
vcPush.teaserData = data
|
vcPush.teaserData = data
|
||||||
default:
|
default:
|
||||||
let selectedMediaType = vm.seasonListingData.filter({$0.id == vm.episodeSelectedCateogory!}).first
|
let selectedMediaType = vm.seasonListingData.filter({$0.id == vm.episodeSelectedCateogory!}).first
|
||||||
print(selectedMediaType?.mediaType)
|
|
||||||
let data = vm.seasonEpisodeData[indexPath.row]
|
let data = vm.seasonEpisodeData[indexPath.row]
|
||||||
if let showID = data.id, let catID = self.vm.categoryID{
|
|
||||||
|
if let showID = data.id, let catID = self.vm.categoryID {
|
||||||
PersistentStorage.shared.addWebSeries(catID: catID, postID: showID, postType: .episode)
|
PersistentStorage.shared.addWebSeries(catID: catID, postID: showID, postType: .episode)
|
||||||
}
|
}
|
||||||
vcPush.episodeData = data
|
vcPush.episodeData = data
|
||||||
@@ -296,9 +299,6 @@ extension WebSeriesSeasonVC : TableViewSRC{
|
|||||||
var videoIDs = [Int]()
|
var videoIDs = [Int]()
|
||||||
for i in episodeData{
|
for i in episodeData{
|
||||||
var url = String()
|
var url = String()
|
||||||
if let id = i.id{
|
|
||||||
videoIDs.append(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
guard let englishData = i.contentMoreDetails?.filter({$0.languageMasterID == 1}).first, let hindiData = i.contentMoreDetails?.filter({$0.languageMasterID == 2}).first else{return}
|
guard let englishData = i.contentMoreDetails?.filter({$0.languageMasterID == 1}).first, let hindiData = i.contentMoreDetails?.filter({$0.languageMasterID == 2}).first else{return}
|
||||||
/*
|
/*
|
||||||
@@ -306,8 +306,14 @@ extension WebSeriesSeasonVC : TableViewSRC{
|
|||||||
*/
|
*/
|
||||||
if vm.categoryID == 1{ //1- english , 18 - hindi
|
if vm.categoryID == 1{ //1- english , 18 - hindi
|
||||||
url = englishData.contentHDURL ?? ""
|
url = englishData.contentHDURL ?? ""
|
||||||
|
if let id = i.contentMoreDetails?.first?.id{
|
||||||
|
videoIDs.append(id)
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
url = hindiData.contentHDURL ?? ""
|
url = hindiData.contentHDURL ?? ""
|
||||||
|
if let id = i.contentMoreDetails?.last?.id{
|
||||||
|
videoIDs.append(id)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -193,6 +193,7 @@ extension WebSeriesVC : TableViewSRC {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cell.btnTapped = { [self] (type) -> Void in
|
cell.btnTapped = { [self] (type) -> Void in
|
||||||
|
HapticFeedbackGenerator.shared.simpleSelection()
|
||||||
updateFavLikes(type: type, index: indexPath.row)
|
updateFavLikes(type: type, index: indexPath.row)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ class WebSeriesSeasonVM{
|
|||||||
|
|
||||||
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}
|
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}
|
||||||
PersistentStorage.shared.addWebSeries(catID: categoryID, postID: showID, postType: .series)
|
PersistentStorage.shared.addWebSeries(catID: categoryID, postID: showID, postType: .series)
|
||||||
HapticFeedbackGenerator.shared.lightImpact()
|
HapticFeedbackGenerator.shared.simpleSelection()
|
||||||
if isFav {
|
if isFav {
|
||||||
//remove
|
//remove
|
||||||
LikeFavCommonFunc.shareInstance.removeFavourite(postID: showID, postType: postType, categoryID: categoryID, vc: self.vc) { isDone in
|
LikeFavCommonFunc.shareInstance.removeFavourite(postID: showID, postType: postType, categoryID: categoryID, vc: self.vc) { isDone in
|
||||||
@@ -98,7 +98,7 @@ class WebSeriesSeasonVM{
|
|||||||
|
|
||||||
guard let self ,let indexSelected, let showData, let showID = showData.id, let isLiked = showData.isLiked, let postType = showData.contentMoreDetails?.first?.postType else{return}
|
guard let self ,let indexSelected, let showData, let showID = showData.id, let isLiked = showData.isLiked, let postType = showData.contentMoreDetails?.first?.postType else{return}
|
||||||
PersistentStorage.shared.addWebSeries(catID: self.categoryID ?? 0, postID: showID, postType: .series)
|
PersistentStorage.shared.addWebSeries(catID: self.categoryID ?? 0, postID: showID, postType: .series)
|
||||||
HapticFeedbackGenerator.shared.lightImpact()
|
HapticFeedbackGenerator.shared.simpleSelection()
|
||||||
if isLiked{
|
if isLiked{
|
||||||
LikeFavCommonFunc.shareInstance.unlikePost(postID: showID, postType: postType, vc: self.vc) { isDone in
|
LikeFavCommonFunc.shareInstance.unlikePost(postID: showID, postType: postType, vc: self.vc) { isDone in
|
||||||
self.showData?.isLiked = false
|
self.showData?.isLiked = false
|
||||||
|
|||||||
Reference in New Issue
Block a user