- Fixed the issue of next and pervious buttons not showing

- Added the trailer button to season episode.
- Trailer language will be based on the category selected
- Reversed data for continue watching
- Added html text convert from response for showing description
- Handled the fav and likes from episodes Screen
This commit is contained in:
2024-06-26 20:01:14 +05:30
parent 3462b48095
commit 61262e8529
15 changed files with 657 additions and 258 deletions

View File

@@ -74,6 +74,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 */; };
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 */; };
528E5F232C24660F00E33E4E /* SeasonCategoryCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 528E5F212C24660F00E33E4E /* SeasonCategoryCell.xib */; };
@@ -328,6 +329,7 @@
527AC6FB2C173A5100434FB7 /* SongListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongListCell.swift; sourceTree = "<group>"; };
527AC6FC2C173A5100434FB7 /* SongListCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SongListCell.xib; sourceTree = "<group>"; };
527AC7002C182DCE00434FB7 /* TimeStringToSeconds.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeStringToSeconds.swift; sourceTree = "<group>"; };
528BEF5F2C2C372900FFDAB8 /* ContinueWatchingVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContinueWatchingVC.swift; sourceTree = "<group>"; };
528E5F1A2C24531200E33E4E /* SeasonListingDM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeasonListingDM.swift; sourceTree = "<group>"; };
528E5F202C24660F00E33E4E /* SeasonCategoryCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeasonCategoryCell.swift; sourceTree = "<group>"; };
528E5F212C24660F00E33E4E /* SeasonCategoryCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SeasonCategoryCell.xib; sourceTree = "<group>"; };
@@ -979,6 +981,7 @@
52DAC64D2C21775300E2F85B /* WebSeriesVC.swift */,
5242FE582C24203E0086A86D /* WebSeriesSeasonVC.swift */,
52E214C62C2AD47F00BC2D29 /* EpisodeDetailsVC.swift */,
528BEF5F2C2C372900FFDAB8 /* ContinueWatchingVC.swift */,
);
path = Controller;
sourceTree = "<group>";
@@ -1581,6 +1584,7 @@
9C834EC62C1C1D9500B29A9C /* BlogDetailsVC.swift in Sources */,
9CBCB2A52BE50D49007D7934 /* NewPasswordVC.swift in Sources */,
9CBCB29F2BE4E13A007D7934 /* ValidatorClass.swift in Sources */,
528BEF602C2C372900FFDAB8 /* ContinueWatchingVC.swift in Sources */,
9CBCB29B2BE4D614007D7934 /* LoginVC.swift in Sources */,
52BC3BE82C0E04A9002FACA6 /* FaqListDM.swift in Sources */,
9C56E83B2BDBC6E600E4CA14 /* SelectAgeVM.swift in Sources */,

View File

@@ -19,5 +19,8 @@
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"template-rendering-intent" : "template"
}
}

View File

@@ -45,6 +45,7 @@ extension K{
static let moreVC = "MoreVC"
static let radioVC = "RadioVC"
static let blogDetailsVC = "BlogDetailsVC"
static let playerVC = "PlayerVC"
}
struct SideBarNav{
@@ -62,6 +63,7 @@ extension K{
static let webSeriesVC = "WebSeriesVC"
static let webSeriesSeasonVC = "WebSeriesSeasonVC"
static let episodeDetailsVC = "EpisodeDetailsVC"
static let continueWatchingVC = "ContinueWatchingVC"
}
}
}

View File

@@ -226,3 +226,9 @@
"CONTINUE WATCHING" = "देखना जारी रखें";
"PLAY TRAILER" = "प्ले ट्रेलर";
"Teaser" = "टीज़र";
"WATCH" = "देखें";
"ADD" = "अप्रिय";
"ADDED" = "प्रिय";
"SHARE" = "शेयर";
"LIKE" = "पसंद";
"LIKED" = "पसंदिता";

View File

@@ -13,7 +13,9 @@ class PlayerVC: JWPlayerViewController, JWPlayerViewControllerDelegate {
@IBOutlet weak var innerPlayerView: UIView!
var previousScale: CGFloat = 1.0
// let backButton = UIButton(type: .system)
var contentType : VideoContentType?
var config: JWPlayerConfiguration!
var dismissTapped: (() -> Void)?
var videoIndex : Int?
@@ -54,7 +56,7 @@ class PlayerVC: JWPlayerViewController, JWPlayerViewControllerDelegate {
//Disable Picture in Picture
playerView.allowsPictureInPicturePlayback = false
// playerView.captionStyle = .none
playerView.captionStyle = .none
}
@objc func applicationDidBecomeActive() {
@@ -86,37 +88,38 @@ class PlayerVC: JWPlayerViewController, JWPlayerViewControllerDelegate {
override func jwplayer(_ player: any JWPlayer, didFinishLoadingWithTime loadTime: TimeInterval) {
super.jwplayer(player, didFinishLoadingWithTime: loadTime)
print("LoadTime", loadTime)
// self.player.play()
}
//Playlist Functions
//
// override func jwplayer(_ player: any JWPlayer, didLoadPlaylist playlist: [JWPlayerItem]) {
// print("DidLoad", playlist.count , playlist)
//// player.loadPlayerItemAt(index: videoIndex ?? 0)
//// player.play(relatedContent: videoIndex ?? 0)
//
// override func jwplayerHasSeeked(_ player: any JWPlayer) {
//// if player.getState() != .playing{
//// print("Again Play")
//// player.play()
//// }
// print("Seeked " , player.getState())
// }
//
override func jwplayerHasSeeked(_ player: any JWPlayer) {
// player.play()
if player.getState() != .playing{
print("Again Play")
player.play()
}
print("Seeked")
}
override func jwplayer(_ player: any JWPlayer, didLoadPlaylistItem item: JWPlayerItem, at index: UInt) {
// player.loadPlayerItemAt(index: 4)
// player.play(relatedContent: 4)
print("Item" , item)
}
override func jwplayerIsReady(_ player: JWPlayer) {
super.jwplayerIsReady(player)
// player.seek(to: 30)
// player.play()
switch contentType {
case .liveStream:
player.play()
case .webSeries:
if videoIndex == 0{
player.play()
}else{
player.nextUpPlaylistIndex = videoIndex ?? 0
player.next()
}
case .trailer:
player.play()
case .continueWatching:
player.play()
case nil:
break
}
print("IsReady")
}

View File

@@ -221,7 +221,6 @@ class ThemeOneVM{
// Create a JWPlayerItem
let item = try JWPlayerItemBuilder()
.file(liveStreamURL)
.title("Testing Title")
.build()
// Create a JWPlayerConfiguration
@@ -232,6 +231,7 @@ class ThemeOneVM{
vc.config = config
vc.dismissTapped = self.tapped
vc.contentType = .liveStream
vc.modalPresentationStyle = .overFullScreen
// Present the PlayerVC
@@ -250,56 +250,6 @@ class ThemeOneVM{
Utilities.dismissProgressHUD()
}
}
// @objc func handleTap(_ sender: UITapGestureRecognizer) {
// Utilities.startProgressHUD(msg: "Loading...")
// print("tapped")
// let vc = self.vc.storyboard?.instantiateViewController(identifier: "PlayerVC") as! PlayerVC
//
// DispatchQueue.main.async {
// do {
// // Create a JWMediaTrack with the thumbnails .vtt file
// // let thumbnailTrack = try JWThumbnailTrackBuilder()
// // .file(URL(string:"https://content.jwplatform.com/videos/Agy4RIje-Ysj2G4DQ.mp4")!)
// // .build()
//
// // Create a JWPlayerItem
// let item = try JWPlayerItemBuilder()
// .file(URL(string: self.liveStreamURL)!)
// .title("Testing Title")
//// .posterImage(URL(string: "https://img.freepik.com/free-photo/painting-mountain-lake-with-mountain-background_188544-9126.jpg")!)
// // .mediaTracks([thumbnailTrack])
// .build()
//
// // Create a config, and give it the item as a playlist.
// let config = try JWPlayerConfigurationBuilder()
// .playlist(items: [item])
// .autostart(true)
//// .preload(.auto)
//// .repeatContent(true)
// .build()
//
// vc.config = config
// vc.dismissTapped = self.tapped
//
// vc.modalPresentationStyle = .overFullScreen
// Utilities.dismissProgressHUD()
// self.vc.present(vc, animated: false) {
// self.stopLiveStream()
// vc.transitionToFullScreen(animated: true) {
// print("FullScreen")
// }
// // vc.setDeviceOrientation(orientation: .landscapeRight)
// }
//// Utilities.dismissProgressHUD()
//// self.vc.navigationController?.pushViewController(vc, animated: true)
//// self.stopLiveStream()
// }
// catch {
// // Handle Error
// }
// }
// }
func tapped(){
Timer.scheduledTimer(withTimeInterval: 0.2, repeats: false) { _ in

View File

@@ -81,7 +81,6 @@ class ThemeTwoVM{
// Create a JWPlayerItem
let item = try JWPlayerItemBuilder()
.file(URL(string: self.liveStreamURL)!)
.title("Testing Title")
// .posterImage(URL(string: "https://img.freepik.com/free-photo/painting-mountain-lake-with-mountain-background_188544-9126.jpg")!)
// .mediaTracks([thumbnailTrack])
.build()
@@ -96,7 +95,7 @@ class ThemeTwoVM{
vc.config = config
vc.dismissTapped = self.tapped
vc.contentType = .liveStream
vc.modalPresentationStyle = .overFullScreen
Utilities.dismissProgressHUD()
self.vc.present(vc, animated: false) {

View File

@@ -0,0 +1,84 @@
//
// ContinueWatchingVC.swift
// WOKA
//
// Created by MacBook Pro on 26/06/24.
//
import UIKit
class ContinueWatchingVC: UIViewController {
@IBOutlet weak var watchingImage: UIImageView!
@IBOutlet weak var watchingTitle: UILabel!
@IBOutlet weak var watchingDesc: UITextView!
var watchData : ContinueWatchingDM.ResultData?
// This ID is from webseries main screen, where user selectes
var categoryID : Int?
override func viewDidLoad() {
super.viewDidLoad()
if watchData != nil{
setData()
}
}
func setData(){
guard let watchData else{return}
if let url = watchData.thumbnailPath{
self.watchingImage.imageURL(url, color: .black)
}
if AuthFunc.shareInstance.getDefaultLanguage() == .english{
guard let englishData = watchData.contentMoreDetails?.filter({$0.languageMasterID == 1}).first else{return}
watchingTitle.text = englishData.title
if let desc = englishData.description?.replacingOccurrences(of: "<br>", with: "").htmlToAttributedString{
let sizeText = NSMutableAttributedString(attributedString: desc)
sizeText.setFontFace(font: FontCustom.shareInstance.customFont(fontName: .Exo2_Regular, size: 15),color: UIColor.appColor(.TextDarkBlue)!)
self.watchingDesc.attributedText = sizeText
}
}else{
guard let hindiData = watchData.contentMoreDetails?.filter({$0.languageMasterID == 2}).first else{return}
watchingTitle.text = hindiData.title
if let desc = hindiData.description?.replacingOccurrences(of: "<br>", with: "").htmlToAttributedString{
let sizeText = NSMutableAttributedString(attributedString: desc)
sizeText.setFontFace(font: FontCustom.shareInstance.customFont(fontName: .Exo2_Regular, size: 15),color: UIColor.appColor(.TextDarkBlue)!)
self.watchingDesc.attributedText = sizeText
}
}
}
@IBAction func watchBtnTapped(_ sender: LocalisedElementsButton) {
guard let watchData else{return}
var playerItem = JwPlayerItemCreate(url: "", poster: "", titles: "")
playerItem.poster = watchData.thumbnailPath
if AuthFunc.shareInstance.getDefaultLanguage() == .english{
guard let englishData = watchData.contentMoreDetails?.filter({$0.languageMasterID == 1}).first else{return}
playerItem.titles = englishData.title
}else{
guard let hindiData = watchData.contentMoreDetails?.filter({$0.languageMasterID == 2}).first else{return}
playerItem.titles = hindiData.title
}
if categoryID == 1{
guard let englishData = watchData.contentMoreDetails?.filter({$0.languageMasterID == 1}).first, let url = englishData.contentHDURL else{return}
playerItem.url = url
}else if categoryID == 18{
guard let hindiData = watchData.contentMoreDetails?.filter({$0.languageMasterID == 2}).first, let url = hindiData.contentHDURL else{return}
playerItem.url = url
}
JWPlayerManager.shared.presentPlayer(from: self, playerItems: [playerItem], startIndex: 0, contentType: .continueWatching)
}
@IBAction func closeBtnTapped(_ sender: LocalisedElementsButton) {
self.dismiss(animated: true) {
}
}
}

View File

@@ -69,11 +69,19 @@ class EpisodeDetailsVC: UIViewController {
if AuthFunc.shareInstance.getDefaultLanguage() == .english{
guard let englishData = teaserData.contentMoreDetails?.filter({$0.languageMasterID == 1}).first else{return}
episodeTitle.text = englishData.title
episodeDesc.text = englishData.description
if let desc = englishData.description?.replacingOccurrences(of: "<br>", with: "").htmlToAttributedString{
let sizeText = NSMutableAttributedString(attributedString: desc)
sizeText.setFontFace(font: FontCustom.shareInstance.customFont(fontName: .Exo2_Regular, size: 15),color: UIColor.appColor(.TextDarkBlue)!)
self.episodeDesc.attributedText = sizeText
}
}else{
guard let hindiData = teaserData.contentMoreDetails?.filter({$0.languageMasterID == 2}).first else{return}
episodeTitle.text = hindiData.title
episodeDesc.text = hindiData.description
if let desc = hindiData.description?.replacingOccurrences(of: "<br>", with: "").htmlToAttributedString{
let sizeText = NSMutableAttributedString(attributedString: desc)
sizeText.setFontFace(font: FontCustom.shareInstance.customFont(fontName: .Exo2_Regular, size: 15),color: UIColor.appColor(.TextDarkBlue)!)
self.episodeDesc.attributedText = sizeText
}
}
mediaType.text = "Teaser".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue) + " " + (teaserData.serialNumber?.toString() ?? "0")

View File

@@ -36,9 +36,11 @@ class WebSeriesSeasonVC: UIViewController {
@IBOutlet weak var likeLabel: UILabel!
@IBOutlet weak var totalLikes: UILabel!
@IBOutlet weak var addStack: UIStackView!
@IBOutlet weak var shareStack: UIStackView!
@IBOutlet weak var likeStack: UIStackView!
@IBOutlet weak var addView: UIView!
@IBOutlet weak var shareView: UIView!
@IBOutlet weak var likeView: UIView!
var likeFavDelegate : ReloadSeriesFavLike?
override func viewDidLoad() {
super.viewDidLoad()
@@ -70,6 +72,20 @@ class WebSeriesSeasonVC: UIViewController {
@IBAction func watchBtnTapped(_ sender: LocalisedElementsButton) {
}
@IBAction func playTrailerBtnTapped(_ sender: LocalisedElementsButton) {
// 1-> english , 18- hindi
let seasonData = vm.seasonListingData.filter({$0.id == vm.episodeSelectedCateogory}).first
if vm.categoryID == 1{
guard let englishData = seasonData?.seasonMoreDetails?.filter({$0.languageMasterID == 1}).first , let url = englishData.trailerHDURL , let title = englishData.title else{return}
let playerItem = JwPlayerItemCreate(url: url, poster: seasonData?.thumbnailPath, titles: title)
JWPlayerManager.shared.presentPlayer(from: self, playerItems: [playerItem], startIndex: 0, contentType: .trailer)
}else if vm.categoryID == 18{
guard let hindiData = seasonData?.seasonMoreDetails?.filter({$0.languageMasterID == 2}).first , let url = hindiData.trailerHDURL , let title = hindiData.title else{return}
let playerItem = JwPlayerItemCreate(url: url, poster: seasonData?.thumbnailPath, titles: title)
JWPlayerManager.shared.presentPlayer(from: self, playerItems: [playerItem], startIndex: 0, contentType: .trailer)
}
}
@IBAction func retryBtnTapped(_ sender: LocalisedElementsButton) {
}
@@ -108,25 +124,44 @@ extension WebSeriesSeasonVC : TableViewSRC{
}
cell.btnTapped = { [self] () -> Void in
var urls = [String]()
var title = [String]()
var poster = [String]()
if let episodeData = vm.seasonEpisodeData.first?.episodeData{
for i in episodeData{
urls.append(i.episodeURL ?? "")
title.append(i.episodeTitle ?? "Episode")
poster.append(i.thumbnailPath ?? "")
var playerItems = [JwPlayerItemCreate]()
if let episodeData = vm.seasonEpisodeData.first?.episodeData {
if vm.categoryID == 1{
playerItems = episodeData.flatMap { episode in
episode.contentMoreDetails?
.filter { $0.languageMasterID == 1 }
.prefix(1)
.compactMap { data in
if let url = data.contentHDURL, let title = data.title {
return JwPlayerItemCreate(url: url, poster: episode.thumbnailPath, titles: title)
}
return nil
} ?? []
}
}else if vm.categoryID == 18{
playerItems = episodeData.flatMap { episode in
episode.contentMoreDetails?
.filter { $0.languageMasterID == 2 }
.prefix(1)
.compactMap { data in
if let url = data.contentHDURL, let title = data.title {
return JwPlayerItemCreate(url: url, poster: episode.thumbnailPath, titles: title)
}
return nil
} ?? []
}
}
}
// if let data = vm.seasonEpisodeData.first?.episodeData?[indexPath.row] , let url = data.episodeURL{
JWPlayerManager.shared.presentPlayer(from: self, playerItems: playerItems, startIndex: indexPath.row, contentType: .webSeries)
// Ensure indexPath.row is valid before proceeding
if indexPath.row < urls.count {
JWPlayerManager.shared.presentPlayer(from: self, withURLs: urls, poster: poster, titles: title, startIndex: indexPath.row)
} else {
print("Index out of bounds for episode data")
}// }
// if indexPath.row < playerItems.count {
// } else {
// print("Index out of bounds for episode data")
// }
}
return cell
@@ -146,20 +181,14 @@ extension WebSeriesSeasonVC : TableViewSRC{
}
vcPush.onDoneBlock = { [weak self] in
guard let self else{return}
var urls = [String]()
var title = [String]()
var poster = [String]()
if let episodeData = vm.seasonEpisodeData.first?.episodeData{
for i in episodeData{
urls.append(i.episodeURL ?? "")
title.append(i.episodeTitle ?? "Episode")
poster.append(i.thumbnailPath ?? "")
var playerItems = [JwPlayerItemCreate]()
if let episodeData = vm.seasonEpisodeData.first?.episodeData {
// Use compactMap to create an array of JwPlayerItemCreate instances
playerItems = episodeData.compactMap { episode in
JwPlayerItemCreate(url: episode.episodeURL ?? "", poster: episode.thumbnailPath, titles: episode.episodeTitle)
}
}
// if let data = vm.seasonEpisodeData.first?.episodeData?[indexPath.row] , let url = data.episodeURL{
JWPlayerManager.shared.presentPlayer(from: self, withURLs: urls, poster: poster, titles: title,startIndex: indexPath.row)
// }
JWPlayerManager.shared.presentPlayer(from: self, playerItems: playerItems,startIndex: indexPath.row, contentType: .webSeries)
}
vcPush.modalPresentationStyle = .overCurrentContext

View File

@@ -7,6 +7,10 @@
import UIKit
protocol ReloadSeriesFavLike{
func updateRows(index : Int, type : FavCellCLick)
}
class WebSeriesVC: UIViewController {
@IBOutlet weak var headerView: ShimmerEffectView!
@@ -59,8 +63,9 @@ class WebSeriesVC: UIViewController {
}
// MARK: - Tap Handler
@IBAction func playTrailer(_ sender: LocalisedElementsButton) {
let item = JwPlayerItemCreate(url: vm.masilaUrl, poster: nil, titles: "Masila")
JWPlayerManager.shared.presentPlayer(from: self, playerItems: [item], contentType: .trailer)
}
@IBAction func expandLanguageTapped(_ sender: UIButton) {
@@ -199,6 +204,8 @@ extension WebSeriesVC : TableViewSRC{
let sb = UIStoryboard(name: K.StoryBoard.webSeries, bundle: nil)
let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.WebSeries.webSeriesSeasonVC) as! WebSeriesSeasonVC
vcPush.vm.showData = showData
vcPush.vm.indexSelected = indexPath.row
vcPush.likeFavDelegate = self
if let selectedIndex = vm.dropDownModule.indexForSelectedRow{
let categoryID = vm.categoryListingData[selectedIndex]
vcPush.vm.categoryID = categoryID.id
@@ -207,6 +214,14 @@ extension WebSeriesVC : TableViewSRC{
}
}
extension WebSeriesVC : ReloadSeriesFavLike{
func updateRows(index: Int, type: FavCellCLick) {
print(index , type)
updateFavLikes(type: type, index: index)
}
}
// MARK: - CollectionView Delegate and Data Source
extension WebSeriesVC : CollectionViewSRC{
@@ -223,7 +238,19 @@ extension WebSeriesVC : CollectionViewSRC{
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print(indexPath.row)
let data = vm.continueWatchingData[indexPath.row]
let sb = UIStoryboard(name: K.StoryBoard.webSeries, bundle: nil)
let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.WebSeries.continueWatchingVC) as! ContinueWatchingVC
vcPush.modalPresentationStyle = .overCurrentContext
vcPush.modalTransitionStyle = .crossDissolve
vcPush.watchData = data
if let selectedIndex = vm.dropDownModule.indexForSelectedRow{
let categoryID = vm.categoryListingData[selectedIndex]
vcPush.categoryID = categoryID.id
}
self.present(vcPush, animated: true)
}
}

View File

@@ -8,22 +8,28 @@
import UIKit
import JWPlayerKit
enum VideoContentType{
case liveStream
case webSeries
case trailer
case continueWatching
}
struct JwPlayerItemCreate{
var url : String
var poster : String?
var titles : String?
}
class JWPlayerManager {
static let shared = JWPlayerManager()
private init() {}
func presentPlayer(from viewController: UIViewController, withURLs liveStreamURLs: [String], poster : [String], titles: [String]? = nil, startIndex: Int = 0, completion: (() -> Void)? = nil) {
DispatchQueue.main.async {
Utilities.startProgressHUD(msg: "Loading...")
}
func presentPlayer(from viewController: UIViewController,playerItems : [JwPlayerItemCreate], startIndex: Int = 0, contentType : VideoContentType , completion: (() -> Void)? = nil) {
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
}
let playerVC = sb.instantiateViewController(identifier: K.StoryBoardID.Theme.playerVC) as! PlayerVC
DispatchQueue.main.async {
do {
@@ -31,32 +37,62 @@ class JWPlayerManager {
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
}
// if let titles = titles, titles.count != liveStreamURLs.count {
// print("Titles count does not match URLs count")
// Utilities.dismissProgressHUD()
// return
// }
// Iterate over the liveStreamURLs to create JWPlayerItems
for (index, urlString) in liveStreamURLs.enumerated() {
guard let url = URL(string: urlString) else {
print("Invalid live stream URL at index \(index)")
continue
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
}
// Use the corresponding title if provided, otherwise use a default title
let itemTitle = titles?[index] ?? "Default Title \(index + 1)"
let itemPoster = poster[index]
let item = try JWPlayerItemBuilder()
.file(url)
.title(itemTitle)
.posterImage(URL(string: itemPoster)!)
.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:
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 {
@@ -72,10 +108,12 @@ class JWPlayerManager {
.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) {
@@ -88,7 +126,6 @@ class JWPlayerManager {
}
// Dismiss the progress HUD after the view controller presentation
Utilities.dismissProgressHUD()
}
}

View File

@@ -24,12 +24,32 @@ class WebSeriesSeasonVM{
var showData : WebSeriesShowListDM.ShowDatum?
var indexSelected : Int?
func initView(){
getSeasonListing()
setupCell()
setShowData()
vc.shareStack.addTapGesture {
vc.addView.addTapGesture { [weak self] in
guard let self else{return}
// if let showData, let fav = showData.markAsFavourite{
// if fav{
// self.showData?.markAsFavourite = false
//// self.showData?.likesCount! -= 1
// }else{
// self.showData?.markAsFavourite = true
//// self.showData?.likesCount! += 1
// }
// }
// setShowData()
vc.likeFavDelegate?.updateRows(index: indexSelected!, type: .favourite)
}
vc.likeView.addTapGesture { [weak self] in
guard let self else{return}
vc.likeFavDelegate?.updateRows(index: indexSelected!, type: .liked)
}
vc.shareView.addTapGesture {
print("share")
}
}
@@ -41,10 +61,10 @@ class WebSeriesSeasonVM{
switch like{
case true:
vc.likeIcon.image = UIImage(systemName: "hand.thumbsup.fill")
vc.likeLabel.text = "Liked"
vc.likeLabel.text = "LIKED".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
case false:
vc.likeIcon.image = UIImage(systemName: "hand.thumbsup")
vc.likeLabel.text = "Like"
vc.likeLabel.text = "LIKE".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
}
}
@@ -53,20 +73,20 @@ class WebSeriesSeasonVM{
let components = categoryIds.components(separatedBy: ",")
if favourite == true && (components.first == categoryID?.toString() || components.last == categoryID?.toString()){
vc.addIcon.image = UIImage(systemName: "heart.fill")
vc.addLabel.text = "Added"
vc.addLabel.text = "ADDED".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
}else{
vc.addIcon.image = UIImage(systemName: "heart")
vc.addLabel.text = "Add"
vc.addLabel.text = "ADD".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
}
return
}
if favourite == true && showData.favouriteCategoryIDS?.intValue == categoryID{
vc.addIcon.image = UIImage(systemName: "heart.fill")
vc.addLabel.text = "Added"
vc.addLabel.text = "ADDED".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
}else{
vc.addIcon.image = UIImage(systemName: "heart")
vc.addLabel.text = "Add"
vc.addLabel.text = "ADD".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
}
}
}

View File

@@ -19,6 +19,9 @@ class WebSeriesVM{
let dropDownModule = DropDown()
var dataSource = [String]()
//Static url for masila
var masilaUrl = "https://content.jwplatform.com/videos/Iygt11AD-Ysj2G4DQ.mp4"
func initView(){
setupCell()
self.vc.tableHeight.constant = self.vc.showListingTableView.contentSize.height + 100
@@ -136,7 +139,7 @@ class WebSeriesVM{
}else{
self.vc.continueWatchingStack.isHidden = false
}
self.continueWatchingData = data
self.continueWatchingData = data.reversed()
self.vc.continueWatchingCV.reloadData()
default:
break

View File

@@ -35,42 +35,14 @@
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="MasilaComingSoon" translatesAutoresizingMaskIntoConstraints="NO" id="wnB-dE-0v3">
<rect key="frame" x="0.0" y="0.0" width="393" height="200"/>
</imageView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="orj-ne-be7" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="136.66666666666666" y="77.666666666666657" width="119.99999999999997" height="45"/>
<color key="backgroundColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="120" id="sN9-Fh-ZMR"/>
<constraint firstAttribute="height" constant="45" id="zYM-Uz-Qxe">
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<real key="value" value="22.5"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</constraint>
</constraints>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="14"/>
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="PLAY TRAILER"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<integer key="value" value="20"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="playTrailer:" destination="Y6W-OH-hqX" eventType="touchUpInside" id="nTB-Is-3cV"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="orj-ne-be7" firstAttribute="centerY" secondItem="bTO-Ql-tyN" secondAttribute="centerY" id="A2N-UU-G5r"/>
<constraint firstAttribute="bottom" secondItem="wnB-dE-0v3" secondAttribute="bottom" id="BG4-7Q-bIb"/>
<constraint firstAttribute="trailing" secondItem="wnB-dE-0v3" secondAttribute="trailing" id="JQb-FA-v0E"/>
<constraint firstItem="wnB-dE-0v3" firstAttribute="top" secondItem="bTO-Ql-tyN" secondAttribute="top" id="LAu-Iu-1sV"/>
<constraint firstAttribute="height" constant="200" id="X2g-lr-CX0"/>
<constraint firstItem="wnB-dE-0v3" firstAttribute="leading" secondItem="bTO-Ql-tyN" secondAttribute="leading" id="sQQ-a5-rhV"/>
<constraint firstItem="orj-ne-be7" firstAttribute="centerX" secondItem="bTO-Ql-tyN" secondAttribute="centerX" id="x74-Vl-ZwA"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="isSkeletonable" value="YES"/>
@@ -80,10 +52,10 @@
<rect key="frame" x="0.0" y="259" width="393" height="593"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Cog-DZ-ib0" customClass="ShimmerEffectView" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="393" height="103"/>
<rect key="frame" x="0.0" y="0.0" width="393" height="108"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="tRo-aT-Zuf">
<rect key="frame" x="0.0" y="0.0" width="393" height="103"/>
<rect key="frame" x="0.0" y="0.0" width="393" height="108"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="MASILA" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RDe-bw-Rsd">
<rect key="frame" x="145.66666666666666" y="0.0" width="102" height="50"/>
@@ -95,10 +67,10 @@
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Vyo-SD-Uke" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="136.66666666666666" y="58" width="119.99999999999997" height="45"/>
<rect key="frame" x="136.66666666666666" y="58" width="119.99999999999997" height="50"/>
<color key="backgroundColor" red="0.36862745099999999" green="0.1215686275" blue="0.76862745099999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="45" id="Xr1-4J-QSr"/>
<constraint firstAttribute="height" constant="50" id="Xr1-4J-QSr"/>
<constraint firstAttribute="width" constant="120" id="wO4-9d-U0h"/>
</constraints>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="14"/>
@@ -107,9 +79,12 @@
<state key="normal" title="TRAILER"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<integer key="value" value="20"/>
<integer key="value" value="25"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="playTrailer:" destination="Y6W-OH-hqX" eventType="touchUpInside" id="mYK-8n-Mg1"/>
</connections>
</button>
</subviews>
</stackView>
@@ -123,7 +98,7 @@
</constraints>
</view>
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rom-H6-7RC">
<rect key="frame" x="0.0" y="111" width="393" height="482"/>
<rect key="frame" x="0.0" y="116" width="393" height="477"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="c6v-VU-iKP">
<rect key="frame" x="0.0" y="0.0" width="393" height="105"/>
@@ -293,7 +268,7 @@
<rect key="frame" x="0.0" y="59" width="393" height="793"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="JVZ-ee-mig">
<rect key="frame" x="0.0" y="0.0" width="393" height="681.33333333333337"/>
<rect key="frame" x="0.0" y="0.0" width="393" height="638"/>
<subviews>
<view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8zm-IG-hTk">
<rect key="frame" x="0.0" y="0.0" width="393" height="553"/>
@@ -301,11 +276,6 @@
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="WebSeriesSeasonsBackground" translatesAutoresizingMaskIntoConstraints="NO" id="GF4-9m-aNo">
<rect key="frame" x="0.0" y="0.0" width="393" height="553"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<integer key="value" value="5"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</imageView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="ZDd-3v-Wdp">
<rect key="frame" x="10" y="10" width="373" height="503"/>
@@ -321,12 +291,40 @@
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</imageView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vxz-5K-k00" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="126.66666666666666" y="83" width="120" height="40"/>
<color key="backgroundColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="120" id="fc9-2B-CtU"/>
<constraint firstAttribute="height" constant="40" id="g04-7R-e5G">
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<integer key="value" value="20"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</constraint>
</constraints>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="14"/>
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="PLAY TRAILER"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<integer key="value" value="20"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="playTrailerBtnTapped:" destination="sPj-Um-9Xm" eventType="touchUpInside" id="ju7-P7-Vs0"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="ygJ-Op-sJP" secondAttribute="trailing" constant="8" id="5jT-M0-FSX"/>
<constraint firstItem="ygJ-Op-sJP" firstAttribute="top" secondItem="Am7-iA-6bG" secondAttribute="top" constant="8" id="FMB-f9-hlG"/>
<constraint firstItem="vxz-5K-k00" firstAttribute="centerX" secondItem="Am7-iA-6bG" secondAttribute="centerX" id="X7q-jb-ExV"/>
<constraint firstAttribute="bottom" secondItem="ygJ-Op-sJP" secondAttribute="bottom" constant="8" id="b4t-4K-wrZ"/>
<constraint firstItem="vxz-5K-k00" firstAttribute="centerY" secondItem="Am7-iA-6bG" secondAttribute="centerY" id="fZd-eA-qa7"/>
<constraint firstItem="ygJ-Op-sJP" firstAttribute="leading" secondItem="Am7-iA-6bG" secondAttribute="leading" constant="8" id="wSF-bR-JNe"/>
</constraints>
<userDefinedRuntimeAttributes>
@@ -404,15 +402,15 @@
<rect key="frame" x="0.0" y="453" width="373" height="50"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="PzY-0K-yPM" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="130" height="50"/>
<rect key="frame" x="0.0" y="0.0" width="135" height="50"/>
<color key="backgroundColor" red="0.36862745099999999" green="0.1215686275" blue="0.76862745099999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="130" id="UqM-B3-bVp"/>
<constraint firstAttribute="width" constant="135" id="UqM-B3-bVp"/>
<constraint firstAttribute="height" constant="50" id="ldT-CD-cmn"/>
</constraints>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<inset key="titleEdgeInsets" minX="15" minY="0.0" maxX="0.0" maxY="0.0"/>
<inset key="titleEdgeInsets" minX="10" minY="0.0" maxX="0.0" maxY="0.0"/>
<state key="normal" title="WATCH" image="PlayButtonSmall">
<preferredSymbolConfiguration key="preferredSymbolConfiguration" scale="small"/>
</state>
@@ -422,80 +420,131 @@
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="playTrailerBtnTapped:" destination="sPj-Um-9Xm" eventType="touchUpInside" id="f7Z-6c-eXL"/>
<action selector="watchBtnTapped:" destination="sPj-Um-9Xm" eventType="touchUpInside" id="I1O-Rx-JeC"/>
</connections>
</button>
<stackView opaque="NO" contentMode="scaleToFill" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="6gf-lV-70S">
<rect key="frame" x="247.66666666666671" y="0.0" width="125.33333333333334" height="50"/>
<rect key="frame" x="219.33333333333337" y="0.0" width="153.66666666666663" height="50"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="iyr-1k-HHN">
<rect key="frame" x="0.0" y="0.0" width="30" height="50"/>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="SoI-DX-Bve">
<rect key="frame" x="0.0" y="0.0" width="40" height="50"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" image="heart" catalog="system" translatesAutoresizingMaskIntoConstraints="NO" id="QkS-fP-ADo">
<rect key="frame" x="0.0" y="1.9999999999999964" width="30" height="32.333333333333329"/>
<color key="tintColor" name="TextDarkBlue"/>
<constraints>
<constraint firstAttribute="width" constant="30" id="4SG-I2-B6S"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ADD" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tlx-NG-HWl">
<rect key="frame" x="3.3333333333333144" y="35.333333333333371" width="23.666666666666668" height="14.666666666666664"/>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="12"/>
<color key="textColor" name="TextDarkBlue"/>
<nil key="highlightedColor"/>
</label>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="iyr-1k-HHN">
<rect key="frame" x="0.0" y="0.0" width="40" height="50"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" image="heart" catalog="system" translatesAutoresizingMaskIntoConstraints="NO" id="QkS-fP-ADo">
<rect key="frame" x="5" y="2" width="30" height="33"/>
<color key="tintColor" name="TextDarkBlue"/>
<constraints>
<constraint firstAttribute="width" constant="30" id="MvO-j1-tEk"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ADDED" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tlx-NG-HWl" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="1" y="36" width="38.333333333333336" height="14"/>
<constraints>
<constraint firstAttribute="height" constant="14" id="LAN-B9-IDU"/>
</constraints>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="12"/>
<color key="textColor" name="TextDarkBlue"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
</subviews>
</stackView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9xJ-TL-8CA">
<rect key="frame" x="38" y="0.0" width="1" height="50"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="iyr-1k-HHN" firstAttribute="top" secondItem="SoI-DX-Bve" secondAttribute="top" id="SJh-uj-KAd"/>
<constraint firstItem="iyr-1k-HHN" firstAttribute="leading" secondItem="SoI-DX-Bve" secondAttribute="leading" id="eyS-wf-utZ"/>
<constraint firstAttribute="bottom" secondItem="iyr-1k-HHN" secondAttribute="bottom" id="pe5-pH-03D"/>
<constraint firstAttribute="width" constant="40" id="sd9-WS-oYY"/>
<constraint firstAttribute="trailing" secondItem="iyr-1k-HHN" secondAttribute="trailing" id="sg5-1o-Qa4"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9xJ-TL-8CA" userLabel="AddView">
<rect key="frame" x="47.999999999999972" y="0.0" width="1" height="50"/>
<color key="backgroundColor" name="TextDarkBlue"/>
<constraints>
<constraint firstAttribute="width" constant="0.80000000000000004" id="y2u-9V-Gis"/>
</constraints>
</view>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="Lag-16-uzP">
<rect key="frame" x="47" y="0.0" width="36.666666666666657" height="50"/>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="u6J-48-CIL">
<rect key="frame" x="56.999999999999972" y="0.0" width="40" height="50"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="center" horizontalHuggingPriority="251" image="ShareImage" translatesAutoresizingMaskIntoConstraints="NO" id="Azy-gL-vtW">
<rect key="frame" x="3.3333333333333144" y="0.0" width="30" height="35.333333333333336"/>
<color key="tintColor" name="TextDarkBlue"/>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="Lag-16-uzP">
<rect key="frame" x="0.0" y="0.0" width="40" height="50"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" image="ShareImage" translatesAutoresizingMaskIntoConstraints="NO" id="Azy-gL-vtW">
<rect key="frame" x="10" y="0.0" width="20" height="36"/>
<color key="tintColor" name="TextDarkBlue"/>
<constraints>
<constraint firstAttribute="width" constant="20" id="clk-de-Plw"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SHARE" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="a4Q-xN-IE4" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="1.6666666666666856" y="36" width="36.666666666666664" height="14"/>
<constraints>
<constraint firstAttribute="height" constant="14" id="rTT-BS-v4Y"/>
</constraints>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="12"/>
<color key="textColor" name="TextDarkBlue"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstAttribute="width" constant="30" id="DYv-5U-6mY"/>
<constraint firstAttribute="width" constant="40" id="RZk-Y1-zM3"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SHARE" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="a4Q-xN-IE4">
<rect key="frame" x="0.0" y="35.333333333333371" width="36.666666666666664" height="14.666666666666664"/>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="12"/>
<color key="textColor" name="TextDarkBlue"/>
<nil key="highlightedColor"/>
</label>
</stackView>
</subviews>
</stackView>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="Lag-16-uzP" firstAttribute="leading" secondItem="u6J-48-CIL" secondAttribute="leading" id="DES-rC-Hu2"/>
<constraint firstItem="Lag-16-uzP" firstAttribute="top" secondItem="u6J-48-CIL" secondAttribute="top" id="ZDU-xF-iEX"/>
<constraint firstAttribute="bottom" secondItem="Lag-16-uzP" secondAttribute="bottom" id="vh5-A1-YRo"/>
<constraint firstAttribute="trailing" secondItem="Lag-16-uzP" secondAttribute="trailing" id="yso-0a-hHN"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gs2-gk-Fn0">
<rect key="frame" x="91.666666666666629" y="0.0" width="0.6666666666666714" height="50"/>
<rect key="frame" x="104.99999999999997" y="0.0" width="0.6666666666666714" height="50"/>
<color key="backgroundColor" name="TextDarkBlue"/>
<constraints>
<constraint firstAttribute="width" constant="0.80000000000000004" id="2M1-wj-hEy"/>
</constraints>
</view>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="8UJ-rG-fB2">
<rect key="frame" x="100.33333333333331" y="0.0" width="25" height="50"/>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="GRu-Ep-rmR">
<rect key="frame" x="113.66666666666666" y="0.0" width="40" height="50"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" image="hand.thumbsup" catalog="system" translatesAutoresizingMaskIntoConstraints="NO" id="f9M-ON-9gL">
<rect key="frame" x="0.0" y="-0.33333333333333215" width="25" height="35.333333333333329"/>
<color key="tintColor" name="TextDarkBlue"/>
<constraints>
<constraint firstAttribute="width" constant="25" id="UAK-v9-EKA"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LIKE" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Q4V-Gl-g6v">
<rect key="frame" x="1" y="35.333333333333371" width="23.333333333333332" height="14.666666666666664"/>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="12"/>
<color key="textColor" name="TextDarkBlue"/>
<nil key="highlightedColor"/>
</label>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="8UJ-rG-fB2">
<rect key="frame" x="0.0" y="0.0" width="40" height="50"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" image="hand.thumbsup" catalog="system" translatesAutoresizingMaskIntoConstraints="NO" id="f9M-ON-9gL">
<rect key="frame" x="7.6666666666666856" y="-0.33333333333333215" width="25" height="36"/>
<color key="tintColor" name="TextDarkBlue"/>
<constraints>
<constraint firstAttribute="width" constant="25" id="UAK-v9-EKA"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LIKE" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Q4V-Gl-g6v" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="8.3333333333333126" y="36" width="23.333333333333329" height="14"/>
<constraints>
<constraint firstAttribute="height" constant="14" id="169-aC-7et"/>
</constraints>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="12"/>
<color key="textColor" name="TextDarkBlue"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
</subviews>
</stackView>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="8UJ-rG-fB2" firstAttribute="leading" secondItem="GRu-Ep-rmR" secondAttribute="leading" id="Mhv-LT-2uu"/>
<constraint firstAttribute="trailing" secondItem="8UJ-rG-fB2" secondAttribute="trailing" id="OPq-vL-uxf"/>
<constraint firstItem="8UJ-rG-fB2" firstAttribute="top" secondItem="GRu-Ep-rmR" secondAttribute="top" id="VTr-j1-KdO"/>
<constraint firstAttribute="width" constant="40" id="d8w-cX-rrb"/>
<constraint firstAttribute="bottom" secondItem="8UJ-rG-fB2" secondAttribute="bottom" id="eeq-nm-2VG"/>
</constraints>
</view>
</subviews>
</stackView>
</subviews>
@@ -546,13 +595,13 @@
<edgeInsets key="layoutMargins" top="0.0" left="5" bottom="0.0" right="5"/>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="Idg-Al-Eib" userLabel="EpisodeStack">
<rect key="frame" x="0.0" y="623" width="393" height="26.666666666666629"/>
<rect key="frame" x="0.0" y="623" width="393" height="5"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="cd8-G8-MXm">
<rect key="frame" x="0.0" y="0.0" width="393" height="21.666666666666668"/>
<rect key="frame" x="0.0" y="0.0" width="393" height="0.0"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SONGS" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yzq-z1-mIE">
<rect key="frame" x="10" y="0.0" width="373" height="21.666666666666668"/>
<label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SONGS" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yzq-z1-mIE">
<rect key="frame" x="0.0" y="0.0" width="58.333333333333336" height="0.0"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
@@ -561,7 +610,7 @@
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
</stackView>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="-1" estimatedRowHeight="244" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="RJP-uy-ll3">
<rect key="frame" x="0.0" y="26.666666666666629" width="393" height="0.0"/>
<rect key="frame" x="0.0" y="5" width="393" height="0.0"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" id="F3X-r1-O8N"/>
@@ -570,13 +619,13 @@
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="4WM-II-43s" userLabel="Teaser Stack">
<rect key="frame" x="0.0" y="654.66666666666663" width="393" height="26.666666666666629"/>
<rect key="frame" x="0.0" y="633" width="393" height="5"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="vrf-Fc-axK">
<rect key="frame" x="0.0" y="0.0" width="393" height="21.666666666666668"/>
<rect key="frame" x="0.0" y="0.0" width="393" height="0.0"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="TEASERS" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dfh-1T-Hnq" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="10" y="0.0" width="373" height="21.666666666666668"/>
<label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="TEASERS" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dfh-1T-Hnq" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="76.333333333333329" height="0.0"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
@@ -585,7 +634,7 @@
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
</stackView>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="-1" estimatedRowHeight="244" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="hvm-6m-itF">
<rect key="frame" x="0.0" y="26.666666666666742" width="393" height="0.0"/>
<rect key="frame" x="0.0" y="5" width="393" height="0.0"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" id="KQj-Vb-7pU"/>
@@ -621,20 +670,20 @@
<connections>
<outlet property="addIcon" destination="QkS-fP-ADo" id="H3a-fb-Mgw"/>
<outlet property="addLabel" destination="tlx-NG-HWl" id="IHA-Oz-faM"/>
<outlet property="addStack" destination="iyr-1k-HHN" id="PBF-2C-nPZ"/>
<outlet property="addView" destination="SoI-DX-Bve" id="ICd-dl-my9"/>
<outlet property="categoryCV" destination="rAO-uI-Djj" id="9vd-ge-YZ5"/>
<outlet property="episodeTableView" destination="RJP-uy-ll3" id="EEa-5i-fyE"/>
<outlet property="episodeTitle" destination="yzq-z1-mIE" id="cfL-Qn-sa3"/>
<outlet property="likeIcon" destination="f9M-ON-9gL" id="Iyp-MI-UfT"/>
<outlet property="likeLabel" destination="Q4V-Gl-g6v" id="p5K-OM-Lmn"/>
<outlet property="likeStack" destination="8UJ-rG-fB2" id="Ktz-EP-lgH"/>
<outlet property="likeView" destination="GRu-Ep-rmR" id="F5U-OH-z0d"/>
<outlet property="seasonDate" destination="3AX-wl-iqI" id="4Zq-76-ZN2"/>
<outlet property="seasonDesc" destination="DLr-9j-LSn" id="hpg-2G-M9N"/>
<outlet property="seasonEpisodes" destination="G0i-Q1-Tic" id="t9J-Zm-eqb"/>
<outlet property="seasonImage" destination="ygJ-Op-sJP" id="cXY-pG-3ce"/>
<outlet property="seasonMediaType" destination="F1N-Se-lI3" id="8Wb-HP-3bZ"/>
<outlet property="seasonTitle" destination="AdX-OP-Gcd" id="I39-xA-Z1d"/>
<outlet property="shareStack" destination="Lag-16-uzP" id="jjy-Lv-6on"/>
<outlet property="shareView" destination="u6J-48-CIL" id="0BT-tn-2wD"/>
<outlet property="tableHeight" destination="F3X-r1-O8N" id="O70-hN-czC"/>
<outlet property="teaserTableHeight" destination="KQj-Vb-7pU" id="VEU-Ws-iAi"/>
<outlet property="teaserTableView" destination="hvm-6m-itF" id="4Sl-Om-Pu6"/>
@@ -834,6 +883,181 @@
</objects>
<point key="canvasLocation" x="1610" y="4"/>
</scene>
<!--Continue WatchingVC-->
<scene sceneID="QKb-eS-DPl">
<objects>
<viewController storyboardIdentifier="ContinueWatchingVC" id="F49-Rd-hhU" customClass="ContinueWatchingVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="XSr-gC-K01">
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view alpha="0.60000002384185791" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="WoT-kA-uJY">
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="cCC-Ly-sXY">
<rect key="frame" x="0.0" y="147.66666666666669" width="393" height="581.66666666666652"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="WebSeriesSeasonsBackground" translatesAutoresizingMaskIntoConstraints="NO" id="0Df-F5-uq8">
<rect key="frame" x="0.0" y="0.0" width="393" height="581.66666666666663"/>
</imageView>
<stackView opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="A9m-RO-LDo">
<rect key="frame" x="0.0" y="0.0" width="393" height="566.66666666666663"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dID-xZ-qMx">
<rect key="frame" x="0.0" y="0.0" width="393" height="50"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5t5-Gg-oPV">
<rect key="frame" x="348" y="10" width="40" height="40"/>
<constraints>
<constraint firstAttribute="width" secondItem="5t5-Gg-oPV" secondAttribute="height" multiplier="1:1" id="ZfT-2o-OTP"/>
</constraints>
<color key="tintColor" red="0.1058823529" green="0.050980392159999999" blue="0.60392156860000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" image="CloseIconEmpty"/>
<connections>
<action selector="closeBtnTapped:" destination="F49-Rd-hhU" eventType="touchUpInside" id="39l-gF-kZw"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="LBy-g6-FsH"/>
<constraint firstItem="5t5-Gg-oPV" firstAttribute="top" secondItem="dID-xZ-qMx" secondAttribute="top" constant="10" id="n73-bN-xc0"/>
<constraint firstAttribute="bottom" secondItem="5t5-Gg-oPV" secondAttribute="bottom" id="sKp-Ys-R2A"/>
<constraint firstAttribute="trailing" secondItem="5t5-Gg-oPV" secondAttribute="trailing" constant="5" id="vXm-ix-43a"/>
</constraints>
</view>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="4wN-dj-Wtb" userLabel="MainStack">
<rect key="frame" x="0.0" y="50" width="393" height="516.66666666666663"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Xm0-dV-EHz" customClass="ShadowView" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="13" y="5" width="367" height="200"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="lCX-qg-W0T">
<rect key="frame" x="8" y="8" width="351" height="184"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<integer key="value" value="10"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</imageView>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstAttribute="bottom" secondItem="lCX-qg-W0T" secondAttribute="bottom" constant="8" id="7iU-8W-f0I"/>
<constraint firstItem="lCX-qg-W0T" firstAttribute="top" secondItem="Xm0-dV-EHz" secondAttribute="top" constant="8" id="CBz-iA-PkR"/>
<constraint firstAttribute="trailing" secondItem="lCX-qg-W0T" secondAttribute="trailing" constant="8" id="D4Z-hv-ird"/>
<constraint firstItem="lCX-qg-W0T" firstAttribute="leading" secondItem="Xm0-dV-EHz" secondAttribute="leading" constant="8" id="eeP-Mk-DYW"/>
<constraint firstAttribute="height" constant="200" id="tx6-5Y-fPi"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<integer key="value" value="10"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="0Xd-z8-qHM">
<rect key="frame" x="13" y="215.00000000000003" width="367" height="21.666666666666657"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="dasdasdas" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1Fo-Xt-kpO">
<rect key="frame" x="0.0" y="0.0" width="367" height="21.666666666666668"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="textColor" name="TextDarkBlue"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="MUz-A4-7TT">
<rect key="frame" x="13" y="246.66666666666663" width="367" height="180"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="180" id="T3B-wL-okY"/>
</constraints>
<string key="text">Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.</string>
<color key="textColor" systemColor="labelColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="top" translatesAutoresizingMaskIntoConstraints="NO" id="eAN-rJ-25F">
<rect key="frame" x="13" y="436.66666666666674" width="367" height="50"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="tailTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Eyz-VT-32D" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="125" height="50"/>
<color key="backgroundColor" red="0.0" green="0.47843137254901957" blue="0.75294117647058822" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="125" id="h0n-M1-I4Q"/>
<constraint firstAttribute="height" constant="50" id="kdA-Ps-IuX"/>
</constraints>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<inset key="titleEdgeInsets" minX="5" minY="0.0" maxX="0.0" maxY="0.0"/>
<inset key="imageEdgeInsets" minX="-10" minY="0.0" maxX="10" maxY="0.0"/>
<state key="normal" title="WATCH" image="PlayButtonSmall">
<preferredSymbolConfiguration key="preferredSymbolConfiguration" scale="small"/>
</state>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<integer key="value" value="25"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="watchBtnTapped:" destination="sPj-Um-9Xm" eventType="touchUpInside" id="Rxg-KV-4e0"/>
<action selector="watchBtnTapped:" destination="F49-Rd-hhU" eventType="touchUpInside" id="stF-47-9jP"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstAttribute="height" constant="50" id="hIv-fn-gO3"/>
</constraints>
</stackView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<edgeInsets key="layoutMargins" top="5" left="13" bottom="30" right="13"/>
</stackView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<integer key="value" value="10"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</stackView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="A9m-RO-LDo" firstAttribute="top" secondItem="cCC-Ly-sXY" secondAttribute="top" id="CGo-kZ-4Vv"/>
<constraint firstAttribute="trailing" secondItem="A9m-RO-LDo" secondAttribute="trailing" id="DgC-Fn-ILo"/>
<constraint firstItem="0Df-F5-uq8" firstAttribute="top" secondItem="cCC-Ly-sXY" secondAttribute="top" id="Emz-Ll-rlS"/>
<constraint firstItem="0Df-F5-uq8" firstAttribute="leading" secondItem="cCC-Ly-sXY" secondAttribute="leading" id="FbO-PS-sIw"/>
<constraint firstItem="A9m-RO-LDo" firstAttribute="leading" secondItem="cCC-Ly-sXY" secondAttribute="leading" id="Meu-W4-Ff1"/>
<constraint firstAttribute="trailing" secondItem="0Df-F5-uq8" secondAttribute="trailing" id="P5a-Ct-cM6"/>
<constraint firstAttribute="bottom" secondItem="A9m-RO-LDo" secondAttribute="bottom" constant="15" id="Zl8-Fe-tMW"/>
<constraint firstAttribute="bottom" secondItem="0Df-F5-uq8" secondAttribute="bottom" id="sXN-vd-MjG"/>
</constraints>
</view>
</subviews>
<viewLayoutGuide key="safeArea" id="8XZ-dc-rEM"/>
<constraints>
<constraint firstItem="WoT-kA-uJY" firstAttribute="top" secondItem="XSr-gC-K01" secondAttribute="top" id="A1f-9G-aKQ"/>
<constraint firstAttribute="bottom" secondItem="WoT-kA-uJY" secondAttribute="bottom" id="Asb-9v-YtB"/>
<constraint firstItem="cCC-Ly-sXY" firstAttribute="centerY" secondItem="8XZ-dc-rEM" secondAttribute="centerY" id="E0V-PQ-QO3"/>
<constraint firstItem="WoT-kA-uJY" firstAttribute="leading" secondItem="8XZ-dc-rEM" secondAttribute="leading" id="Le4-64-bRk"/>
<constraint firstItem="cCC-Ly-sXY" firstAttribute="leading" secondItem="8XZ-dc-rEM" secondAttribute="leading" id="Oi1-7c-HSm"/>
<constraint firstItem="8XZ-dc-rEM" firstAttribute="trailing" secondItem="cCC-Ly-sXY" secondAttribute="trailing" id="T3K-5P-LHw"/>
<constraint firstItem="WoT-kA-uJY" firstAttribute="trailing" secondItem="8XZ-dc-rEM" secondAttribute="trailing" id="b2M-nU-Vsp"/>
</constraints>
</view>
<connections>
<outlet property="watchingDesc" destination="MUz-A4-7TT" id="Lmh-1V-12C"/>
<outlet property="watchingImage" destination="lCX-qg-W0T" id="u95-td-2nl"/>
<outlet property="watchingTitle" destination="1Fo-Xt-kpO" id="j8W-DX-lYb"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="wwK-SV-q6o" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2416" y="4"/>
</scene>
</scenes>
<resources>
<image name="CloseIconEmpty" width="30" height="30"/>