Files
Woka_Native_iOS/WOKA/WebSeries/JWPlayerManager.swift
BilalKhanWDI 41e770f991 - Completed lingual file
- Completed the default top header set as per the selcection on user, first load will select 0th index
- Completed player for audio books
- Handled error response for audio listing
- AudioBook Details View added like fav
- Fixed the nav bar color issue.
- Finished games module
2024-07-04 19:48:15 +05:30

185 lines
6.8 KiB
Swift

//
// JWPlayerManager.swift
// WOKA
//
// Created by MacBook Pro on 24/06/24.
//
import UIKit
import JWPlayerKit
enum VideoContentType{
case liveStream
case webSeries
case trailer
case continueWatching
case audioBooks
case games
}
struct JwPlayerItemCreate{
var url : String
var poster : String?
var titles : String?
}
class JWPlayerManager {
static let shared = JWPlayerManager()
private init() {}
func presentPlayer(from viewController: UIViewController,playerItems : [JwPlayerItemCreate], startIndex: Int = 0, contentType : VideoContentType , completion: (() -> Void)? = nil) {
let sb = UIStoryboard(name: K.StoryBoard.theme, bundle: nil)
let playerVC = sb.instantiateViewController(identifier: K.StoryBoardID.Theme.playerVC) as! PlayerVC
DispatchQueue.main.async {
do {
// Create an array to hold the JWPlayerItems
var items: [JWPlayerItem] = []
// Ensure the liveStreamURLs and titles arrays have the same count, if titles are provided
// if let titles = titles, titles.count != liveStreamURLs.count {
// print("Titles count does not match URLs count")
// Utilities.dismissProgressHUD()
// return
// }
switch contentType{
case .webSeries:
// Iterate over the liveStreamURLs to create JWPlayerItems
for (index, singleItem) in playerItems.enumerated() {
guard let url = URL(string: singleItem.url) else {
print("Invalid live stream URL at index \(index)")
continue
}
let item = try JWPlayerItemBuilder()
.file(url)
.title(singleItem.titles ?? "")
.posterImage(URL(string: singleItem.poster ?? "")!)
.build()
items.append(item)
}
case .liveStream:
guard let liveStreamItem = playerItems.first else {
print("Invalid live stream URL")
return
}
let item = try JWPlayerItemBuilder()
.file(URL(string: liveStreamItem.url)!)
.title(liveStreamItem.titles ?? "Trailer")
.build()
items.append(item)
case .trailer:
guard let liveStreamItem = playerItems.first else {
print("Invalid live stream URL")
return
}
let item = try JWPlayerItemBuilder()
.file(URL(string: liveStreamItem.url)!)
.title(liveStreamItem.titles ?? "Trailer")
.build()
items.append(item)
case .continueWatching, .audioBooks, .games:
guard let liveStreamItem = playerItems.first else {
print("Invalid live stream URL")
return
}
let item = try JWPlayerItemBuilder()
.file(URL(string: liveStreamItem.url)!)
.title(liveStreamItem.titles ?? "Trailer")
.build()
items.append(item)
}
// Ensure there is at least one valid item
guard !items.isEmpty else {
print("No valid items to play")
Utilities.dismissProgressHUD()
return
}
// Create a JWPlayerConfiguration with the playlist
let config = try JWPlayerConfigurationBuilder()
.playlist(items: items)
.autostart(false)
.build()
playerVC.videoIndex = startIndex
playerVC.contentType = contentType
playerVC.config = config
playerVC.modalPresentationStyle = .overFullScreen
// Present the PlayerVC
Utilities.dismissProgressHUD()
viewController.present(playerVC, animated: false) {
completion?()
playerVC.transitionToFullScreen(animated: true) {
print("FullScreen")
}
}
} catch {
print("Error creating JWPlayer configuration: \(error)")
Utilities.dismissProgressHUD()
}
// Dismiss the progress HUD after the view controller presentation
}
}
// func presentPlayer(from viewController: UIViewController, withURL liveStreamURL: String, title: String = "Testing Title", completion: (() -> Void)? = nil) {
// Utilities.startProgressHUD(msg: "Loading...")
//
// let sb = UIStoryboard(name: K.StoryBoard.theme, bundle: nil)
// guard let playerVC = sb.instantiateViewController(identifier: "PlayerVC") as? PlayerVC else {
// print("PlayerVC not found")
// Utilities.dismissProgressHUD()
// return
// }
//
// DispatchQueue.main.async {
// do {
// // Ensure the liveStreamURL is valid
// guard let url = URL(string: liveStreamURL) else {
// print("Invalid live stream URL")
// Utilities.dismissProgressHUD()
// return
// }
//
// // Create a JWPlayerItem
// let item = try JWPlayerItemBuilder()
// .file(url)
// .title(title)
// .build()
//
// // Create a JWPlayerConfiguration
// let config = try JWPlayerConfigurationBuilder()
// .playlist(items: [item])
// .autostart(true)
// .build()
//
// playerVC.config = config
// playerVC.modalPresentationStyle = .overFullScreen
//
// // Present the PlayerVC
// viewController.present(playerVC, animated: false) {
// completion?()
// playerVC.transitionToFullScreen(animated: true) {
// print("FullScreen")
// }
// }
// } catch {
// print("Error creating JWPlayer configuration: \(error)")
// Utilities.dismissProgressHUD()
// }
//
// // Dismiss the progress HUD after the view controller presentation
// Utilities.dismissProgressHUD()
// }
// }
}