- started working on karaoke
- made storyboard and module folder - create ui for listing of karaoke - added api for karaoke list, with data model - made ui dynamic for karaoke listing - Matched the continue watching data with the karaoke listing and decreased code - made custom player view for karaoke - added timer to show hide controls in player
This commit is contained in:
@@ -183,6 +183,9 @@
|
||||
9C0A85432BEE3EC90093783D /* NewPasswordVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C0A85422BEE3EC90093783D /* NewPasswordVM.swift */; };
|
||||
9C1C69FA2C106B290035B2C7 /* RSKPlaceholderTextView in Frameworks */ = {isa = PBXBuildFile; productRef = 9C1C69F92C106B290035B2C7 /* RSKPlaceholderTextView */; };
|
||||
9C1C69FC2C106C240035B2C7 /* ContactSupportVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C1C69FB2C106C240035B2C7 /* ContactSupportVM.swift */; };
|
||||
9C21F81C2C37E1FA0050BFCC /* KaraokeContinueWatchingDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C21F81B2C37E1FA0050BFCC /* KaraokeContinueWatchingDM.swift */; };
|
||||
9C21F81E2C37E3CA0050BFCC /* AVPlayerVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C21F81D2C37E3CA0050BFCC /* AVPlayerVC.swift */; };
|
||||
9C21F8222C382A580050BFCC /* AVPlayerVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C21F8212C382A580050BFCC /* AVPlayerVM.swift */; };
|
||||
9C27E1602BDB6ECA00EC1DA9 /* UserDefaultsStruct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C27E15F2BDB6ECA00EC1DA9 /* UserDefaultsStruct.swift */; };
|
||||
9C27E1632BDB6F1900EC1DA9 /* AuthFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C27E1622BDB6F1900EC1DA9 /* AuthFunc.swift */; };
|
||||
9C27E1652BDB6FBC00EC1DA9 /* StoryBoardID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C27E1642BDB6FBC00EC1DA9 /* StoryBoardID.swift */; };
|
||||
@@ -232,6 +235,11 @@
|
||||
9C9BEEC72BEE1BBF004ECC2F /* CollectionViewCenteredFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C9BEEC62BEE1BBF004ECC2F /* CollectionViewCenteredFlowLayout.swift */; };
|
||||
9CA7C6C02C1093E500D73742 /* ProfileVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CA7C6BF2C1093E500D73742 /* ProfileVC.swift */; };
|
||||
9CA7C6C22C1095B600D73742 /* ProfileVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CA7C6C12C1095B600D73742 /* ProfileVM.swift */; };
|
||||
9CB3D0852C37BA530062869D /* Karaoke.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9CB3D0842C37BA530062869D /* Karaoke.storyboard */; };
|
||||
9CB3D08B2C37BBA50062869D /* KaraokeListingVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CB3D08A2C37BBA50062869D /* KaraokeListingVC.swift */; };
|
||||
9CB3D08D2C37CDD60062869D /* KaraokeListingVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CB3D08C2C37CDD50062869D /* KaraokeListingVM.swift */; };
|
||||
9CB3D08F2C37D0D60062869D /* KaraokeListingDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CB3D08E2C37D0D60062869D /* KaraokeListingDM.swift */; };
|
||||
9CB3D0912C37D6930062869D /* KaraokeDetailsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CB3D0902C37D6930062869D /* KaraokeDetailsVC.swift */; };
|
||||
9CB4C5A92C118EF300737C00 /* NavBarColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CB4C5A82C118EF300737C00 /* NavBarColor.swift */; };
|
||||
9CBCB29B2BE4D614007D7934 /* LoginVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CBCB29A2BE4D614007D7934 /* LoginVC.swift */; };
|
||||
9CBCB29D2BE4D6BB007D7934 /* LoginVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CBCB29C2BE4D6BB007D7934 /* LoginVM.swift */; };
|
||||
@@ -455,6 +463,9 @@
|
||||
9C0A85402BEE35670093783D /* ResetPassUserNameVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResetPassUserNameVM.swift; sourceTree = "<group>"; };
|
||||
9C0A85422BEE3EC90093783D /* NewPasswordVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewPasswordVM.swift; sourceTree = "<group>"; };
|
||||
9C1C69FB2C106C240035B2C7 /* ContactSupportVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactSupportVM.swift; sourceTree = "<group>"; };
|
||||
9C21F81B2C37E1FA0050BFCC /* KaraokeContinueWatchingDM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KaraokeContinueWatchingDM.swift; sourceTree = "<group>"; };
|
||||
9C21F81D2C37E3CA0050BFCC /* AVPlayerVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AVPlayerVC.swift; sourceTree = "<group>"; };
|
||||
9C21F8212C382A580050BFCC /* AVPlayerVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AVPlayerVM.swift; sourceTree = "<group>"; };
|
||||
9C27E15F2BDB6ECA00EC1DA9 /* UserDefaultsStruct.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsStruct.swift; sourceTree = "<group>"; };
|
||||
9C27E1622BDB6F1900EC1DA9 /* AuthFunc.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthFunc.swift; sourceTree = "<group>"; };
|
||||
9C27E1642BDB6FBC00EC1DA9 /* StoryBoardID.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoryBoardID.swift; sourceTree = "<group>"; };
|
||||
@@ -493,6 +504,11 @@
|
||||
9C9BEEC62BEE1BBF004ECC2F /* CollectionViewCenteredFlowLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionViewCenteredFlowLayout.swift; sourceTree = "<group>"; };
|
||||
9CA7C6BF2C1093E500D73742 /* ProfileVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileVC.swift; sourceTree = "<group>"; };
|
||||
9CA7C6C12C1095B600D73742 /* ProfileVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileVM.swift; sourceTree = "<group>"; };
|
||||
9CB3D0842C37BA530062869D /* Karaoke.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Karaoke.storyboard; sourceTree = "<group>"; };
|
||||
9CB3D08A2C37BBA50062869D /* KaraokeListingVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KaraokeListingVC.swift; sourceTree = "<group>"; };
|
||||
9CB3D08C2C37CDD50062869D /* KaraokeListingVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KaraokeListingVM.swift; sourceTree = "<group>"; };
|
||||
9CB3D08E2C37D0D60062869D /* KaraokeListingDM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KaraokeListingDM.swift; sourceTree = "<group>"; };
|
||||
9CB3D0902C37D6930062869D /* KaraokeDetailsVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KaraokeDetailsVC.swift; sourceTree = "<group>"; };
|
||||
9CB4C5A82C118EF300737C00 /* NavBarColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavBarColor.swift; sourceTree = "<group>"; };
|
||||
9CBCB29A2BE4D614007D7934 /* LoginVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginVC.swift; sourceTree = "<group>"; };
|
||||
9CBCB29C2BE4D6BB007D7934 /* LoginVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginVM.swift; sourceTree = "<group>"; };
|
||||
@@ -658,6 +674,7 @@
|
||||
523ED25C2BDA2BC700CFED02 /* WOKA */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9CB3D0832C37BA470062869D /* Karaoke */,
|
||||
526A436D2C36A96A00AE148F /* Games */,
|
||||
52BFB52B2C33DA9700BAAE15 /* Audio Books */,
|
||||
52DAC6462C21761700E2F85B /* WebSeries */,
|
||||
@@ -1347,6 +1364,53 @@
|
||||
path = HTML;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
9CB3D0832C37BA470062869D /* Karaoke */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9CB3D0892C37BA650062869D /* Model */,
|
||||
9CB3D0882C37BA630062869D /* View */,
|
||||
9CB3D0872C37BA610062869D /* ViewModel */,
|
||||
9CB3D0862C37BA5F0062869D /* Controller */,
|
||||
9CB3D0842C37BA530062869D /* Karaoke.storyboard */,
|
||||
);
|
||||
path = Karaoke;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
9CB3D0862C37BA5F0062869D /* Controller */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9CB3D08A2C37BBA50062869D /* KaraokeListingVC.swift */,
|
||||
9CB3D0902C37D6930062869D /* KaraokeDetailsVC.swift */,
|
||||
9C21F81D2C37E3CA0050BFCC /* AVPlayerVC.swift */,
|
||||
);
|
||||
path = Controller;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
9CB3D0872C37BA610062869D /* ViewModel */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9CB3D08C2C37CDD50062869D /* KaraokeListingVM.swift */,
|
||||
9C21F8212C382A580050BFCC /* AVPlayerVM.swift */,
|
||||
);
|
||||
path = ViewModel;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
9CB3D0882C37BA630062869D /* View */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
);
|
||||
path = View;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
9CB3D0892C37BA650062869D /* Model */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9CB3D08E2C37D0D60062869D /* KaraokeListingDM.swift */,
|
||||
9C21F81B2C37E1FA0050BFCC /* KaraokeContinueWatchingDM.swift */,
|
||||
);
|
||||
path = Model;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
9CBCB2A62BE5104F007D7934 /* Home */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -1557,6 +1621,7 @@
|
||||
9C834ED62C1C1F9200B29A9C /* Exo2-ExtraBold.ttf in Resources */,
|
||||
9C834ED72C1C1F9200B29A9C /* Exo2-Regular.ttf in Resources */,
|
||||
9C834ED82C1C1F9200B29A9C /* Exo2-Thin.ttf in Resources */,
|
||||
9CB3D0852C37BA530062869D /* Karaoke.storyboard in Resources */,
|
||||
52C6E0262BE3B46A00E22D59 /* SelectAvatarCell.xib in Resources */,
|
||||
52C8B0712BDA7512003B51D0 /* PassingCloud.json in Resources */,
|
||||
9C8C4FB02C1328060017DD3B /* Disclaimer.rtf in Resources */,
|
||||
@@ -1693,6 +1758,7 @@
|
||||
52D2F3D82C24043D009E52FF /* ShimmerEffectView.swift in Sources */,
|
||||
9C27E16F2BDB866500EC1DA9 /* CellIdentifier.swift in Sources */,
|
||||
52BC3BF22C170264002FACA6 /* MoreVM.swift in Sources */,
|
||||
9CB3D08F2C37D0D60062869D /* KaraokeListingDM.swift in Sources */,
|
||||
9CBE1B412C0F37B300CA6E61 /* DPDUIView+Extension.swift in Sources */,
|
||||
9C27E1632BDB6F1900EC1DA9 /* AuthFunc.swift in Sources */,
|
||||
9C0A85412BEE35670093783D /* ResetPassUserNameVM.swift in Sources */,
|
||||
@@ -1704,6 +1770,7 @@
|
||||
52B8D4D92C04A25E00ED65F3 /* UIViewController+Container.swift in Sources */,
|
||||
9C834EDC2C1C26CD00B29A9C /* HtmlText.swift in Sources */,
|
||||
527AC6F72C171C8F00434FB7 /* BlogsCell.swift in Sources */,
|
||||
9C21F81C2C37E1FA0050BFCC /* KaraokeContinueWatchingDM.swift in Sources */,
|
||||
523ED25E2BDA2BC700CFED02 /* AppDelegate.swift in Sources */,
|
||||
9C7939132C0EFCAE00F5D6E6 /* FaqVM.swift in Sources */,
|
||||
52D774ED2BDFC13F001D87DE /* OTPVM.swift in Sources */,
|
||||
@@ -1766,6 +1833,7 @@
|
||||
9CBCB2A12BE4E50A007D7934 /* TextFieldPassword.swift in Sources */,
|
||||
52BC3BEC2C16DF9F002FACA6 /* MyOrdersVC.swift in Sources */,
|
||||
9C56E8482BDBEFAB00E4CA14 /* AssetColor.swift in Sources */,
|
||||
9C21F8222C382A580050BFCC /* AVPlayerVM.swift in Sources */,
|
||||
52BFB5372C33E0C500BAAE15 /* AudioBookHomeVM.swift in Sources */,
|
||||
9C0A85432BEE3EC90093783D /* NewPasswordVM.swift in Sources */,
|
||||
526A43752C36AA4A00AE148F /* GamesListVC.swift in Sources */,
|
||||
@@ -1773,17 +1841,20 @@
|
||||
524C42332C049D590016A11C /* CustomizableSegmentControl.swift in Sources */,
|
||||
9C535DB52C005A6D00DA6DCD /* KeyWindowFix.swift in Sources */,
|
||||
9C9BEEC72BEE1BBF004ECC2F /* CollectionViewCenteredFlowLayout.swift in Sources */,
|
||||
9CB3D08D2C37CDD60062869D /* KaraokeListingVM.swift in Sources */,
|
||||
5222426A2BFC7AFC0085C632 /* SideMenuVC.swift in Sources */,
|
||||
527AC7012C182DCE00434FB7 /* TimeStringToSeconds.swift in Sources */,
|
||||
9CBCB29D2BE4D6BB007D7934 /* LoginVM.swift in Sources */,
|
||||
524C42312C0499560016A11C /* NotificationCenterReloads.swift in Sources */,
|
||||
9C8C4FAE2C1315410017DD3B /* WebViewVC.swift in Sources */,
|
||||
52BC3BE22C0E02EE002FACA6 /* FaqVC.swift in Sources */,
|
||||
9C21F81E2C37E3CA0050BFCC /* AVPlayerVC.swift in Sources */,
|
||||
52A981D02C1AFEE8000E0BEC /* MyListVM.swift in Sources */,
|
||||
5272FCE52BDFDC8C000ECB1D /* UserDetailsRegisterVM.swift in Sources */,
|
||||
528E5F222C24660F00E33E4E /* SeasonCategoryCell.swift in Sources */,
|
||||
525954272BE9178F00191286 /* UserDataDM.swift in Sources */,
|
||||
9C27E1652BDB6FBC00EC1DA9 /* StoryBoardID.swift in Sources */,
|
||||
9CB3D08B2C37BBA50062869D /* KaraokeListingVC.swift in Sources */,
|
||||
52FDBA782BFF23F4009D7AC7 /* TimePeriod.swift in Sources */,
|
||||
527AC6FA2C17387300434FB7 /* SongBlogDM.swift in Sources */,
|
||||
522A931C2C0DE9150098FE49 /* AboutUsVc.swift in Sources */,
|
||||
@@ -1801,6 +1872,7 @@
|
||||
52AC2D252C295A7900337473 /* TeaserDM.swift in Sources */,
|
||||
9C535DC22C00B36900DA6DCD /* ThemeTwoVC.swift in Sources */,
|
||||
9CA7C6C22C1095B600D73742 /* ProfileVM.swift in Sources */,
|
||||
9CB3D0912C37D6930062869D /* KaraokeDetailsVC.swift in Sources */,
|
||||
52E214C72C2AD47F00BC2D29 /* EpisodeDetailsVC.swift in Sources */,
|
||||
52D774F12BDFC53B001D87DE /* StringSubScript.swift in Sources */,
|
||||
9CBE1B3F2C0F37B300CA6E61 /* DPDConstants.swift in Sources */,
|
||||
|
||||
6
WOKA/Assets/Assets.xcassets/Karaoke/Contents.json
Normal file
6
WOKA/Assets/Assets.xcassets/Karaoke/Contents.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
23
WOKA/Assets/Assets.xcassets/Karaoke/Microphone.imageset/Contents.json
vendored
Normal file
23
WOKA/Assets/Assets.xcassets/Karaoke/Microphone.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Microphone.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "Microphone@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "Microphone@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
WOKA/Assets/Assets.xcassets/Karaoke/Microphone.imageset/Microphone.png
vendored
Normal file
BIN
WOKA/Assets/Assets.xcassets/Karaoke/Microphone.imageset/Microphone.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.8 KiB |
BIN
WOKA/Assets/Assets.xcassets/Karaoke/Microphone.imageset/Microphone@2x.png
vendored
Normal file
BIN
WOKA/Assets/Assets.xcassets/Karaoke/Microphone.imageset/Microphone@2x.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.7 KiB |
BIN
WOKA/Assets/Assets.xcassets/Karaoke/Microphone.imageset/Microphone@3x.png
vendored
Normal file
BIN
WOKA/Assets/Assets.xcassets/Karaoke/Microphone.imageset/Microphone@3x.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.9 KiB |
@@ -63,6 +63,37 @@ class ContinueAudioCell: UICollectionViewCell {
|
||||
}
|
||||
}
|
||||
|
||||
func setKaraokeData(data: KaraokeListingDM.KaraokeDatum){
|
||||
//heart.fill , heart , hand.thumbsup.fill , hand.thumbsup
|
||||
if AuthFunc.shareInstance.getDefaultLanguage() == .english{
|
||||
audioBookTitle.text = data.contentMoreDetails?.filter({$0.languageMasterID == 1}).first?.title
|
||||
}else{
|
||||
audioBookTitle.text = data.contentMoreDetails?.filter({$0.languageMasterID == 2}).first?.title
|
||||
}
|
||||
totalLikes.text = data.likesCount?.toString() ?? "0"
|
||||
|
||||
if let url = data.thumbnailPath{
|
||||
audioBookThumbnail.imageURL(url)
|
||||
}
|
||||
|
||||
if let like = data.isLiked{
|
||||
switch like{
|
||||
case true:
|
||||
likeBtn.setImage(UIImage(named: "LikeAdd"), for: .normal)
|
||||
case false:
|
||||
likeBtn.setImage(UIImage(named: "LikeRemove"), for: .normal)
|
||||
}
|
||||
}
|
||||
|
||||
if let favourite = data.markAsFavourite{
|
||||
if favourite == true{
|
||||
favBtn.setImage(UIImage(named: "FavouriteAdd"), for: .normal)
|
||||
}else{
|
||||
favBtn.setImage(UIImage(named: "FavouriteRemove"), for: .normal)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@IBAction func btnTapped(_ sender: UIButton) {
|
||||
switch sender{
|
||||
case likeBtn:
|
||||
|
||||
@@ -19,5 +19,6 @@ extension K{
|
||||
static let webSeries = "WebSeries"
|
||||
static let audioBooks = "AudioBooks"
|
||||
static let Games = "Games"
|
||||
static let Karaoke = "Karaoke"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,5 +81,13 @@ extension K{
|
||||
static let gamesWebViewVC = "GamesWebViewVC"
|
||||
}
|
||||
|
||||
// MARK: - Karaoke
|
||||
|
||||
struct Karaoke{
|
||||
static let karaokeListingVC = "KaraokeListingVC"
|
||||
static let karaokeDetailsVC = "KaraokeDetailsVC"
|
||||
static let aVPlayerVC = "AVPlayerVC"
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -227,6 +227,7 @@ enum DateFormats: String, CaseIterable {
|
||||
case d = "d" // 2
|
||||
case EEEE = "EEEE" // wednesday
|
||||
case EEE = "EEE" // wed
|
||||
case yyyy = "yyyy" // year 2023
|
||||
case yyyy_MM_dd_T_HH_mm_ss_SSSZ = "yyyy_MM_dd_T_HH_mm_ss_SSSZ"
|
||||
|
||||
case yyyy_MM_dd_THH_mm_ss_SSSZ = "yyyy_MM_dd_THH:mm:ss.SSSZ" // 2024-05-21T17:50:15.000000Z
|
||||
|
||||
@@ -506,7 +506,7 @@ extension MyListVC : ReloadSeriesFavLike{
|
||||
|
||||
}
|
||||
|
||||
print(index , type , isFav, isLike)
|
||||
// print(index , type , isFav, isLike)
|
||||
}
|
||||
|
||||
|
||||
|
||||
263
WOKA/Karaoke/Controller/AVPlayerVC.swift
Normal file
263
WOKA/Karaoke/Controller/AVPlayerVC.swift
Normal file
@@ -0,0 +1,263 @@
|
||||
//
|
||||
// AVPlayerVC.swift
|
||||
// WOKA
|
||||
//
|
||||
// Created by Bilal on 05/07/2024.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import AVFoundation
|
||||
|
||||
class AVPlayerVC: UIViewController {
|
||||
|
||||
@IBOutlet weak var videoPlayer: UIView!
|
||||
// @IBOutlet weak var videoPlayerHeight: NSLayoutConstraint!
|
||||
@IBOutlet weak var viewControll: UIView!
|
||||
@IBOutlet weak var stackCtrView: UIStackView!
|
||||
|
||||
@IBOutlet weak var sliderStack: UIStackView!
|
||||
@IBOutlet weak var tintView: UIView!
|
||||
@IBOutlet weak var videoTitle: UILabel!
|
||||
|
||||
@IBOutlet weak var img10SecBack: UIImageView! {
|
||||
didSet {
|
||||
self.img10SecBack.isUserInteractionEnabled = true
|
||||
self.img10SecBack.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(onTap10SecBack)))
|
||||
}
|
||||
}
|
||||
@IBOutlet weak var imgPlay: UIImageView! {
|
||||
didSet {
|
||||
self.imgPlay.isUserInteractionEnabled = true
|
||||
self.imgPlay.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(onTapPlayPause)))
|
||||
}
|
||||
}
|
||||
@IBOutlet weak var img10SecFor: UIImageView! {
|
||||
didSet {
|
||||
self.img10SecFor.isUserInteractionEnabled = true
|
||||
self.img10SecFor.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(onTap10SecNext)))
|
||||
}
|
||||
}
|
||||
|
||||
@IBOutlet weak var lbCurrentTime: UILabel!
|
||||
@IBOutlet weak var lbTotalTime: UILabel!
|
||||
|
||||
|
||||
@IBOutlet weak var seekSlider: UISlider! {
|
||||
didSet {
|
||||
self.seekSlider.addTarget(self, action: #selector(onTapToSlide), for: .valueChanged)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var videoURL : String?
|
||||
var timer : Timer?
|
||||
var titleVideo : String?
|
||||
var vm = AVPlayerVM()
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
vm.vc = self
|
||||
vm.initView()
|
||||
self.videoTitle.text = titleVideo
|
||||
startTimer()
|
||||
|
||||
viewControll.addTapGesture {
|
||||
self.timer?.invalidate()
|
||||
self.showHideControls()
|
||||
}
|
||||
}
|
||||
|
||||
override func viewDidAppear(_ animated: Bool) {
|
||||
self.setVideoPlayer()
|
||||
}
|
||||
|
||||
@IBAction func closeBtnTapped(_ sender: UIButton) {
|
||||
self.dismiss(animated: true)
|
||||
}
|
||||
|
||||
func startTimer(){
|
||||
timer = Timer.scheduledTimer(withTimeInterval: 3.5, repeats: false) { _ in
|
||||
self.showHideControls()
|
||||
}
|
||||
}
|
||||
|
||||
override func viewWillDisappear(_ animated: Bool) {
|
||||
super.viewWillDisappear(animated)
|
||||
self.player?.pause()
|
||||
self.player = nil
|
||||
}
|
||||
|
||||
// MARK: - ShowHideControls
|
||||
|
||||
func showHideControls(){
|
||||
stackCtrView.isHidden.toggle()
|
||||
sliderStack.isHidden.toggle()
|
||||
tintView.isHidden.toggle()
|
||||
|
||||
if !stackCtrView.isHidden{
|
||||
startTimer()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private var player : AVPlayer? = nil
|
||||
private var playerLayer : AVPlayerLayer? = nil
|
||||
|
||||
private func setVideoPlayer() {
|
||||
guard let videoURL, let url = URL(string: videoURL) else { return }
|
||||
|
||||
if self.player == nil {
|
||||
self.player = AVPlayer(url: url)
|
||||
self.playerLayer = AVPlayerLayer(player: self.player)
|
||||
self.playerLayer?.videoGravity = .resizeAspectFill
|
||||
self.playerLayer?.frame = self.videoPlayer.bounds
|
||||
self.playerLayer?.addSublayer(self.viewControll.layer)
|
||||
if let playerLayer = self.playerLayer {
|
||||
self.videoPlayer.layer.addSublayer(playerLayer)
|
||||
}
|
||||
self.player?.play()
|
||||
self.imgPlay.image = UIImage(systemName: "pause.circle")
|
||||
}
|
||||
self.setObserverToPlayer()
|
||||
}
|
||||
|
||||
|
||||
// private var windowInterface : UIInterfaceOrientation? {
|
||||
// return self.view.window?.windowScene?.interfaceOrientation
|
||||
// }
|
||||
|
||||
// override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
|
||||
// super.willTransition(to: newCollection, with: coordinator)
|
||||
// guard let windowInterface = self.windowInterface else { return }
|
||||
// if windowInterface.isPortrait == true {
|
||||
// self.videoPlayerHeight.constant = 300
|
||||
// } else {
|
||||
// self.videoPlayerHeight.constant = self.view.layer.bounds.width
|
||||
// }
|
||||
// print(self.videoPlayerHeight.constant)
|
||||
// DispatchQueue.main.asyncAfter(deadline: .now() + 0.1, execute: {
|
||||
// self.playerLayer?.frame = self.videoPlayer.bounds
|
||||
// })
|
||||
// }
|
||||
|
||||
|
||||
private var timeObserver : Any? = nil
|
||||
|
||||
private func setObserverToPlayer() {
|
||||
let interval = CMTime(seconds: 0.3, preferredTimescale: CMTimeScale(NSEC_PER_SEC))
|
||||
timeObserver = player?.addPeriodicTimeObserver(forInterval: interval, queue: DispatchQueue.main, using: { elapsed in
|
||||
self.updatePlayerTime()
|
||||
})
|
||||
}
|
||||
|
||||
private func updatePlayerTime() {
|
||||
guard let currentTime = self.player?.currentTime() else { return }
|
||||
guard let duration = self.player?.currentItem?.duration else { return }
|
||||
|
||||
let currentTimeInSecond = CMTimeGetSeconds(currentTime)
|
||||
let durationTimeInSecond = CMTimeGetSeconds(duration)
|
||||
|
||||
if self.isThumbSeek == false {
|
||||
self.seekSlider.value = Float(currentTimeInSecond/durationTimeInSecond)
|
||||
}
|
||||
|
||||
let value = Float64(self.seekSlider.value) * CMTimeGetSeconds(duration)
|
||||
|
||||
var hours = value / 3600
|
||||
var mins = (value / 60).truncatingRemainder(dividingBy: 60)
|
||||
var secs = value.truncatingRemainder(dividingBy: 60)
|
||||
var timeformatter = NumberFormatter()
|
||||
timeformatter.minimumIntegerDigits = 2
|
||||
timeformatter.minimumFractionDigits = 0
|
||||
timeformatter.roundingMode = .down
|
||||
guard let hoursStr = timeformatter.string(from: NSNumber(value: hours)), let minsStr = timeformatter.string(from: NSNumber(value: mins)), let secsStr = timeformatter.string(from: NSNumber(value: secs)) else {
|
||||
return
|
||||
}
|
||||
self.lbCurrentTime.text = "\(hoursStr):\(minsStr):\(secsStr)"
|
||||
|
||||
hours = durationTimeInSecond / 3600
|
||||
mins = (durationTimeInSecond / 60).truncatingRemainder(dividingBy: 60)
|
||||
secs = durationTimeInSecond.truncatingRemainder(dividingBy: 60)
|
||||
timeformatter = NumberFormatter()
|
||||
timeformatter.minimumIntegerDigits = 2
|
||||
timeformatter.minimumFractionDigits = 0
|
||||
timeformatter.roundingMode = .down
|
||||
guard let hoursStr = timeformatter.string(from: NSNumber(value: hours)), let minsStr = timeformatter.string(from: NSNumber(value: mins)), let secsStr = timeformatter.string(from: NSNumber(value: secs)) else {
|
||||
return
|
||||
}
|
||||
self.lbTotalTime.text = "\(hoursStr):\(minsStr):\(secsStr)"
|
||||
}
|
||||
|
||||
|
||||
@objc private func onTap10SecNext() {
|
||||
guard let currentTime = self.player?.currentTime() else { return }
|
||||
let seekTime10Sec = CMTimeGetSeconds(currentTime).advanced(by: 10)
|
||||
let seekTime = CMTime(value: CMTimeValue(seekTime10Sec), timescale: 1)
|
||||
self.player?.seek(to: seekTime, completionHandler: { completed in
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
@objc private func onTap10SecBack() {
|
||||
guard let currentTime = self.player?.currentTime() else { return }
|
||||
let seekTime10Sec = CMTimeGetSeconds(currentTime).advanced(by: -10)
|
||||
let seekTime = CMTime(value: CMTimeValue(seekTime10Sec), timescale: 1)
|
||||
self.player?.seek(to: seekTime, completionHandler: { completed in
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
@objc private func onTapPlayPause() {
|
||||
if self.player?.timeControlStatus == .playing {
|
||||
self.imgPlay.image = UIImage(systemName: "play.circle")
|
||||
self.player?.pause()
|
||||
} else {
|
||||
self.imgPlay.image = UIImage(systemName: "pause.circle")
|
||||
self.player?.play()
|
||||
}
|
||||
}
|
||||
|
||||
private var isThumbSeek : Bool = false
|
||||
@objc private func onTapToSlide() {
|
||||
if timer != nil{
|
||||
timer?.invalidate()
|
||||
timer = nil
|
||||
}
|
||||
self.isThumbSeek = true
|
||||
guard let duration = self.player?.currentItem?.duration else { return }
|
||||
let value = Float64(self.seekSlider.value) * CMTimeGetSeconds(duration)
|
||||
if value.isNaN == false {
|
||||
let seekTime = CMTime(value: CMTimeValue(value), timescale: 1)
|
||||
self.player?.seek(to: seekTime, completionHandler: { completed in
|
||||
if completed {
|
||||
self.isThumbSeek = false
|
||||
self.startTimer()
|
||||
// print("Completed")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@objc private func onTapToggleScreen() {
|
||||
if #available(iOS 16.0, *) {
|
||||
guard let windowSceen = self.view.window?.windowScene else { return }
|
||||
if windowSceen.interfaceOrientation == .portrait {
|
||||
windowSceen.requestGeometryUpdate(.iOS(interfaceOrientations: .landscape)) { error in
|
||||
print(error.localizedDescription)
|
||||
}
|
||||
} else {
|
||||
windowSceen.requestGeometryUpdate(.iOS(interfaceOrientations: .portrait)) { error in
|
||||
print(error.localizedDescription)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if UIDevice.current.orientation == .portrait {
|
||||
let orientation = UIInterfaceOrientation.landscapeRight.rawValue
|
||||
UIDevice.current.setValue(orientation, forKey: "orientation")
|
||||
} else {
|
||||
let orientation = UIInterfaceOrientation.portrait.rawValue
|
||||
UIDevice.current.setValue(orientation, forKey: "orientation")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
174
WOKA/Karaoke/Controller/KaraokeDetailsVC.swift
Normal file
174
WOKA/Karaoke/Controller/KaraokeDetailsVC.swift
Normal file
@@ -0,0 +1,174 @@
|
||||
//
|
||||
// KaraokeDetailsVC.swift
|
||||
// WOKA
|
||||
//
|
||||
// Created by Bilal on 05/07/2024.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class KaraokeDetailsVC: UIViewController {
|
||||
|
||||
@IBOutlet weak var watchingImage: UIImageView!
|
||||
@IBOutlet weak var watchingTitle: UILabel!
|
||||
@IBOutlet weak var watchingDesc: UITextView!
|
||||
@IBOutlet weak var releaseDate: UILabel!
|
||||
|
||||
@IBOutlet weak var addIcon: UIImageView!
|
||||
@IBOutlet weak var addLabel: UILabel!
|
||||
@IBOutlet weak var likeIcon: UIImageView!
|
||||
@IBOutlet weak var likeLabel: UILabel!
|
||||
@IBOutlet weak var totalLikes: UILabel!
|
||||
|
||||
@IBOutlet weak var addView: UIView!
|
||||
@IBOutlet weak var shareView: UIView!
|
||||
@IBOutlet weak var likeView: UIView!
|
||||
|
||||
var karaokeData : KaraokeListingDM.KaraokeDatum?
|
||||
var delegate : ReloadAudioBooksFavLike?
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
initView()
|
||||
tapHandler()
|
||||
}
|
||||
|
||||
func initView(){
|
||||
if let karaokeData{
|
||||
if let url = karaokeData.thumbnailPath{
|
||||
watchingImage.imageURL(url, color: .white)
|
||||
}
|
||||
|
||||
totalLikes.text = karaokeData.likesCount?.toString() ?? "0"
|
||||
|
||||
if let releaseDate = karaokeData.releaseDate{
|
||||
if let formatDate = DateFormatterLib.dateMods(dateStr: releaseDate, dateCurrentFormat: .yyyy_MM_dd_HH_mm_ss, dateReturnFormat: .yyyy, stringOrDate: .string).0{
|
||||
self.releaseDate.text = formatDate
|
||||
}
|
||||
}
|
||||
|
||||
if let like = karaokeData.isLiked{
|
||||
switch like{
|
||||
case true:
|
||||
likeIcon.image = UIImage(systemName: "hand.thumbsup.fill")
|
||||
likeLabel.text = "LIKED".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
|
||||
case false:
|
||||
likeIcon.image = UIImage(systemName: "hand.thumbsup")
|
||||
likeLabel.text = "LIKE".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
|
||||
}
|
||||
}
|
||||
|
||||
if let favourite = karaokeData.markAsFavourite{
|
||||
if favourite == true{
|
||||
addIcon.image = UIImage(systemName: "heart.fill")
|
||||
addLabel.text = "ADDED".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
|
||||
}else{
|
||||
addIcon.image = UIImage(systemName: "heart")
|
||||
addLabel.text = "ADD".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
|
||||
}
|
||||
}
|
||||
|
||||
if AuthFunc.shareInstance.getDefaultLanguage() == .english{
|
||||
if let englishData = karaokeData.contentMoreDetails?.filter({$0.languageMasterID == 1}).first{
|
||||
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{
|
||||
if let hindiData = karaokeData.contentMoreDetails?.filter({$0.languageMasterID == 2}).first{
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func tapHandler(){
|
||||
|
||||
self.view.addTapGesture {
|
||||
self.dismiss(animated: true)
|
||||
}
|
||||
|
||||
addView.addTapGesture { [weak self] in
|
||||
guard let self else{return}
|
||||
|
||||
if let karaokeData{
|
||||
guard let showID = karaokeData.id, let isFav = karaokeData.markAsFavourite, let postType = karaokeData.contentMoreDetails?.first?.postType else{return}
|
||||
|
||||
if isFav {
|
||||
LikeFavCommonFunc.shareInstance.removeFavourite(postID: showID, postType: postType, categoryID: 0, vc: self) { isDone in
|
||||
self.karaokeData?.markAsFavourite = false
|
||||
K.GVar.reloadMyList = true
|
||||
self.delegate?.updateRows(id: showID, type: .favourite, isFav: false, isLike: nil)
|
||||
self.initView()
|
||||
}
|
||||
}else{
|
||||
LikeFavCommonFunc.shareInstance.addFavourite(postID: showID, postType: postType, categoryID: 0, vc: self) { isDone in
|
||||
self.karaokeData?.markAsFavourite = true
|
||||
K.GVar.reloadMyList = true
|
||||
self.delegate?.updateRows(id: showID, type: .favourite, isFav: true, isLike: nil)
|
||||
self.initView()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
likeView.addTapGesture { [weak self] in
|
||||
guard let self else{return}
|
||||
|
||||
if let karaokeData{
|
||||
guard let showID = karaokeData.id, let isLiked = karaokeData.isLiked, let postType = karaokeData.contentMoreDetails?.first?.postType else{return}
|
||||
|
||||
if isLiked{
|
||||
LikeFavCommonFunc.shareInstance.unlikePost(postID: showID, postType: postType, vc: self) { isDone in
|
||||
self.karaokeData?.isLiked = false
|
||||
K.GVar.reloadMyList = true
|
||||
self.delegate?.updateRows(id: showID, type: .liked, isFav: nil, isLike: false)
|
||||
self.initView()
|
||||
}
|
||||
}else{
|
||||
LikeFavCommonFunc.shareInstance.likePost(postID: showID, postType: postType, vc: self) { isDone in
|
||||
self.karaokeData?.isLiked = true
|
||||
K.GVar.reloadMyList = true
|
||||
self.delegate?.updateRows(id: showID, type: .liked, isFav: nil, isLike: true)
|
||||
self.initView()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
shareView.addTapGesture {
|
||||
print("share")
|
||||
}
|
||||
}
|
||||
|
||||
@IBAction func playNowBtnTapped(_ sender: LocalisedElementsButton) {
|
||||
let sb = UIStoryboard(name: K.StoryBoard.Karaoke, bundle: nil)
|
||||
let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Karaoke.aVPlayerVC) as! AVPlayerVC
|
||||
if AuthFunc.shareInstance.getDefaultLanguage() == .english{
|
||||
if let englishData = karaokeData?.contentMoreDetails?.filter({$0.languageMasterID == 1}).first{
|
||||
vcPush.titleVideo = englishData.title
|
||||
vcPush.videoURL = englishData.url
|
||||
}
|
||||
}else{
|
||||
if let hindiData = karaokeData?.contentMoreDetails?.filter({$0.languageMasterID == 2}).first{
|
||||
vcPush.titleVideo = hindiData.title
|
||||
vcPush.videoURL = hindiData.url
|
||||
}
|
||||
}
|
||||
self.present(vcPush, animated: true)
|
||||
}
|
||||
|
||||
@IBAction func closeBtnTapped(_ sender: UIButton) {
|
||||
self.dismiss(animated: true) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
233
WOKA/Karaoke/Controller/KaraokeListingVC.swift
Normal file
233
WOKA/Karaoke/Controller/KaraokeListingVC.swift
Normal file
@@ -0,0 +1,233 @@
|
||||
//
|
||||
// KaraokeListingVC.swift
|
||||
// WOKA
|
||||
//
|
||||
// Created by Bilal on 05/07/2024.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class KaraokeListingVC: UIViewController {
|
||||
|
||||
@IBOutlet weak var headerView: ShimmerEffectView!
|
||||
@IBOutlet weak var selectedShowView: ShimmerEffectView!
|
||||
@IBOutlet weak var headerHeight: NSLayoutConstraint!
|
||||
@IBOutlet weak var headerImage: UIImageView!
|
||||
@IBOutlet weak var headerTitleLabel: UILabel!
|
||||
|
||||
@IBOutlet weak var scrollView: UIScrollView!
|
||||
|
||||
@IBOutlet weak var continueWatchingCV: UICollectionView!
|
||||
@IBOutlet weak var continueWatchingStack: UIStackView!
|
||||
|
||||
@IBOutlet weak var karaokeListingTableView: UITableView!
|
||||
@IBOutlet weak var tableHeight: NSLayoutConstraint!
|
||||
|
||||
var vm = KaraokeListingVM()
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
scrollView.delegate = self
|
||||
vm.vc = self
|
||||
vm.initView()
|
||||
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
|
||||
navigationController?.navigationBar.shadowImage = UIImage()
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
navigationController?.setNavigationBarHidden(false, animated: animated)
|
||||
self.navigationController?.setColor(color: .white)
|
||||
}
|
||||
|
||||
override func viewWillDisappear(_ animated: Bool) {
|
||||
super.viewWillDisappear(animated)
|
||||
self.navigationController?.setNavigationBarHidden(true, animated: animated)
|
||||
}
|
||||
|
||||
override func viewDidDisappear(_ animated: Bool) {
|
||||
super.viewDidDisappear(animated)
|
||||
|
||||
// Customize the navigation bar's appearance
|
||||
self.navigationController?.setColor(color: .black)
|
||||
}
|
||||
|
||||
override func viewDidLayoutSubviews() {
|
||||
super.viewDidLayoutSubviews()
|
||||
vm.updateTableHeight()
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - CollectionView Delegate and Data Source
|
||||
|
||||
extension KaraokeListingVC : CollectionViewSRC{
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
||||
return vm.continueWatchingData.count
|
||||
}
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||||
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: K.CellIdentifier.AudioBooks.continueAudioCell, for: indexPath) as! ContinueAudioCell
|
||||
let data = vm.continueWatchingData[indexPath.row]
|
||||
cell.setKaraokeData(data: data)
|
||||
|
||||
cell.btnTapped = { [self] (type) -> Void in
|
||||
vm.updateFavLikes(type: type,id: vm.continueWatchingData[indexPath.row].id ?? 0)
|
||||
}
|
||||
return cell
|
||||
}
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
||||
|
||||
let data = vm.continueWatchingData[indexPath.row]
|
||||
|
||||
/*
|
||||
Updated the top header data
|
||||
*/
|
||||
vm.indexToLoad = vm.karaokeListData.firstIndex(where: {$0.id == data.id}) ?? 0
|
||||
vm.setHeaderData()
|
||||
|
||||
let sb = UIStoryboard(name: K.StoryBoard.Karaoke, bundle: nil)
|
||||
let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Karaoke.karaokeDetailsVC) as! KaraokeDetailsVC
|
||||
vcPush.modalPresentationStyle = .overCurrentContext
|
||||
vcPush.modalTransitionStyle = .crossDissolve
|
||||
vcPush.karaokeData = data
|
||||
vcPush.delegate = self
|
||||
self.present(vcPush, animated: true)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// MARK: - Collection Flow Layout
|
||||
|
||||
extension KaraokeListingVC : UICollectionViewDelegateFlowLayout{
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
|
||||
return 5
|
||||
}
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
|
||||
let inset: CGFloat = 10
|
||||
return UIEdgeInsets(top: 0, left: inset, bottom: 0, right: inset)
|
||||
}
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
|
||||
return 0 // Space between cells
|
||||
}
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
|
||||
let widthPerItem = collectionView.frame.width - 30 // Adjust to your desired width
|
||||
return CGSize(width: widthPerItem, height: 230)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - TableView DataSource , Delegates
|
||||
|
||||
extension KaraokeListingVC : TableViewSRC{
|
||||
|
||||
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||
return vm.karaokeListData.count == 0 ? 2 : vm.karaokeListData.count
|
||||
}
|
||||
|
||||
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||
let cell = tableView.dequeueReusableCell(withIdentifier: K.CellIdentifier.WebSeries.webSeriesShowListingCell) as! WebSeriesShowListingCell
|
||||
|
||||
if vm.karaokeListData.count == 0{
|
||||
cell.showShimmer()
|
||||
}else{
|
||||
let data = vm.karaokeListData[indexPath.row]
|
||||
cell.setKaraokeData(data: data)
|
||||
cell.stopShimmer()
|
||||
}
|
||||
|
||||
cell.btnTapped = { [weak self] (type) -> Void in
|
||||
guard let self , let id = vm.karaokeListData[indexPath.row].id else{return}
|
||||
vm.updateFavLikes(type: type, id: id)
|
||||
}
|
||||
return cell
|
||||
}
|
||||
|
||||
|
||||
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
||||
/*
|
||||
Updated the top header data
|
||||
*/
|
||||
vm.indexToLoad = indexPath.row
|
||||
vm.setHeaderData()
|
||||
|
||||
let data = vm.karaokeListData[indexPath.row]
|
||||
|
||||
let sb = UIStoryboard(name: K.StoryBoard.Karaoke, bundle: nil)
|
||||
let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Karaoke.karaokeDetailsVC) as! KaraokeDetailsVC
|
||||
vcPush.modalPresentationStyle = .overCurrentContext
|
||||
vcPush.modalTransitionStyle = .crossDissolve
|
||||
vcPush.karaokeData = data
|
||||
vcPush.delegate = self
|
||||
self.present(vcPush, animated: true)
|
||||
}
|
||||
}
|
||||
|
||||
extension KaraokeListingVC : ReloadAudioBooksFavLike{
|
||||
func updateRows(id: Int, type: FavCellCLick, isFav: Bool?, isLike: Bool?) {
|
||||
if let isFav{
|
||||
if let continueDataIndex = vm.continueWatchingData.firstIndex(where:{$0.id == id}) {
|
||||
vm.continueWatchingData[continueDataIndex].markAsFavourite = isFav
|
||||
continueWatchingCV.reloadItems(at: [IndexPath(row: continueDataIndex, section: 0)])
|
||||
}
|
||||
|
||||
if let audioListDataIndex = vm.karaokeListData.firstIndex(where:{$0.id == id}) {
|
||||
vm.karaokeListData[audioListDataIndex].markAsFavourite = isFav
|
||||
karaokeListingTableView.reloadRows(at: [IndexPath(row: audioListDataIndex, section: 0)],with: .none)
|
||||
K.GVar.reloadMyList = true
|
||||
}
|
||||
}
|
||||
|
||||
if let isLike{
|
||||
if let continueDataIndex = vm.continueWatchingData.firstIndex(where:{$0.id == id}) {
|
||||
vm.continueWatchingData[continueDataIndex].isLiked = isLike
|
||||
continueWatchingCV.reloadItems(at: [IndexPath(row: continueDataIndex, section: 0)])
|
||||
}
|
||||
|
||||
if let audioListDataIndex = vm.karaokeListData.firstIndex(where:{$0.id == id}) {
|
||||
vm.karaokeListData[audioListDataIndex].isLiked = isLike
|
||||
karaokeListingTableView.reloadRows(at: [IndexPath(row: audioListDataIndex, section: 0)],with: .none)
|
||||
K.GVar.reloadMyList = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
// MARK: - Animating scrollView
|
||||
|
||||
extension KaraokeListingVC: UIScrollViewDelegate {
|
||||
|
||||
func scrollViewDidScroll(_ scrollView: UIScrollView) {
|
||||
|
||||
// Get the current vertical offset of the scroll view
|
||||
let y = scrollView.contentOffset.y
|
||||
|
||||
// Define the height range for the header view
|
||||
let minHeaderHeight: CGFloat = 0.0 // Height at which the header becomes invisible
|
||||
let maxHeaderHeight: CGFloat = 200.0 // Maximum height when fully visible
|
||||
|
||||
// Calculate the new height for the header view based on the scroll position
|
||||
let newHeaderHeight: CGFloat
|
||||
if y < 0 {
|
||||
// When scrolling up beyond the top, ensure the header view is fully expanded
|
||||
newHeaderHeight = maxHeaderHeight
|
||||
} else {
|
||||
// Calculate the new height for the header view, ensuring it doesn't go below the minimum height
|
||||
newHeaderHeight = max(minHeaderHeight, maxHeaderHeight - y)
|
||||
}
|
||||
|
||||
// Update the header view's height constraint with the new height
|
||||
headerHeight.constant = newHeaderHeight
|
||||
|
||||
// Animate the layout changes to smoothly transition the header height
|
||||
UIView.animate(withDuration: 0.3) {
|
||||
self.view.layoutIfNeeded()
|
||||
}
|
||||
}
|
||||
}
|
||||
838
WOKA/Karaoke/Karaoke.storyboard
Normal file
838
WOKA/Karaoke/Karaoke.storyboard
Normal file
@@ -0,0 +1,838 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
|
||||
<capability name="Named colors" minToolsVersion="9.0"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<customFonts key="customFonts">
|
||||
<array key="Exo2-Bold.ttf">
|
||||
<string>Exo2-Bold</string>
|
||||
</array>
|
||||
<array key="Exo2-Medium.ttf">
|
||||
<string>Exo2-Medium</string>
|
||||
</array>
|
||||
<array key="Exo2-Regular.ttf">
|
||||
<string>Exo2-Regular</string>
|
||||
</array>
|
||||
</customFonts>
|
||||
<scenes>
|
||||
<!--Karaoke ListingVC-->
|
||||
<scene sceneID="s0d-6b-0kx">
|
||||
<objects>
|
||||
<viewController storyboardIdentifier="KaraokeListingVC" id="Y6W-OH-hqX" customClass="KaraokeListingVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="5EZ-qb-Rvc">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="V10-F3-AfA" customClass="ShimmerEffectView" customModule="WOKA" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="48" width="414" height="200"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="uTJ-KB-jeA">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="200"/>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="uTJ-KB-jeA" firstAttribute="top" secondItem="V10-F3-AfA" secondAttribute="top" id="09V-JP-CNV"/>
|
||||
<constraint firstAttribute="trailing" secondItem="uTJ-KB-jeA" secondAttribute="trailing" id="WH5-tw-Sla"/>
|
||||
<constraint firstAttribute="height" constant="200" id="bn9-gt-j6P"/>
|
||||
<constraint firstItem="uTJ-KB-jeA" firstAttribute="leading" secondItem="V10-F3-AfA" secondAttribute="leading" id="gaM-gD-jLl"/>
|
||||
<constraint firstAttribute="bottom" secondItem="uTJ-KB-jeA" secondAttribute="bottom" id="oig-tw-8u6"/>
|
||||
</constraints>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="boolean" keyPath="isSkeletonable" value="YES"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</view>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="Bmz-QF-ndz">
|
||||
<rect key="frame" x="0.0" y="248" width="414" height="648"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="JKB-7I-uN7" customClass="ShimmerEffectView" customModule="WOKA" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="108"/>
|
||||
<subviews>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="wYf-OM-xmz">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="108"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fQH-gr-lSI">
|
||||
<rect key="frame" x="182" y="0.0" width="50" height="50"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="50" id="Dm6-9O-x7v"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="26"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gwc-TP-cJR" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
||||
<rect key="frame" x="147" y="58" width="120" height="50"/>
|
||||
<color key="backgroundColor" red="0.80000000000000004" green="0.29411764705882354" blue="0.11372549019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="120" id="J9K-JW-0vT"/>
|
||||
<constraint firstAttribute="height" constant="50" id="frA-2o-y3J"/>
|
||||
</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="SING"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
|
||||
<integer key="value" value="25"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</button>
|
||||
</subviews>
|
||||
</stackView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="wYf-OM-xmz" secondAttribute="trailing" id="BZK-jr-793"/>
|
||||
<constraint firstItem="wYf-OM-xmz" firstAttribute="top" secondItem="JKB-7I-uN7" secondAttribute="top" id="m4X-so-gUD"/>
|
||||
<constraint firstItem="wYf-OM-xmz" firstAttribute="leading" secondItem="JKB-7I-uN7" secondAttribute="leading" id="seZ-wm-9Vq"/>
|
||||
<constraint firstAttribute="bottom" secondItem="wYf-OM-xmz" secondAttribute="bottom" id="v3K-Iy-2YN"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5mW-wO-b1Z">
|
||||
<rect key="frame" x="0.0" y="116" width="414" height="532"/>
|
||||
<subviews>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="WYB-AZ-whM">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="40"/>
|
||||
<subviews>
|
||||
<stackView hidden="YES" opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="CKh-Ui-Z3R">
|
||||
<rect key="frame" x="10" y="0.0" width="394" height="270"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SING AGAIN" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pLt-VK-ajf" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="394" height="40"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="40" id="ber-7r-qLk"/>
|
||||
</constraints>
|
||||
<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"/>
|
||||
</label>
|
||||
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="Dty-MN-L9A">
|
||||
<rect key="frame" x="0.0" y="40" width="394" height="230"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="230" id="q7K-wL-Efx"/>
|
||||
</constraints>
|
||||
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="b0a-SJ-X5m">
|
||||
<size key="itemSize" width="128" height="128"/>
|
||||
<size key="headerReferenceSize" width="0.0" height="0.0"/>
|
||||
<size key="footerReferenceSize" width="0.0" height="0.0"/>
|
||||
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
|
||||
</collectionViewFlowLayout>
|
||||
<cells/>
|
||||
</collectionView>
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="Bm6-Ps-enL">
|
||||
<rect key="frame" x="10" y="0.0" width="394" height="40"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SING ALONG & DANCE" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Zzw-da-LsG" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="394" height="40"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="40" id="S4f-t9-OdX"/>
|
||||
</constraints>
|
||||
<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"/>
|
||||
</label>
|
||||
<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="haV-Gw-hD2">
|
||||
<rect key="frame" x="0.0" y="40" width="394" height="0.0"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" id="X5Z-qL-DJr"/>
|
||||
</constraints>
|
||||
</tableView>
|
||||
</subviews>
|
||||
</stackView>
|
||||
</subviews>
|
||||
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
|
||||
</stackView>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="WYB-AZ-whM" firstAttribute="top" secondItem="5mW-wO-b1Z" secondAttribute="top" id="Yqp-1t-ibi"/>
|
||||
<constraint firstItem="Ecj-Dm-Zf6" firstAttribute="trailing" secondItem="WYB-AZ-whM" secondAttribute="trailing" id="bsf-Fh-0CV"/>
|
||||
<constraint firstItem="WYB-AZ-whM" firstAttribute="width" secondItem="GOx-RM-5Mz" secondAttribute="width" id="rg4-Ic-iec"/>
|
||||
<constraint firstAttribute="bottom" secondItem="WYB-AZ-whM" secondAttribute="bottom" id="uDk-CJ-hxo"/>
|
||||
<constraint firstItem="WYB-AZ-whM" firstAttribute="leading" secondItem="Ecj-Dm-Zf6" secondAttribute="leading" id="ydx-8y-EMr"/>
|
||||
</constraints>
|
||||
<viewLayoutGuide key="contentLayoutGuide" id="GOx-RM-5Mz"/>
|
||||
<viewLayoutGuide key="frameLayoutGuide" id="Ecj-Dm-Zf6"/>
|
||||
</scrollView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="0.019607843140000001" green="0.0" blue="0.21960784310000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</stackView>
|
||||
</subviews>
|
||||
<viewLayoutGuide key="safeArea" id="vDu-zF-Fre"/>
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||
<constraints>
|
||||
<constraint firstItem="vDu-zF-Fre" firstAttribute="trailing" secondItem="V10-F3-AfA" secondAttribute="trailing" id="1l9-kz-QKW"/>
|
||||
<constraint firstItem="Bmz-QF-ndz" firstAttribute="top" secondItem="V10-F3-AfA" secondAttribute="bottom" id="8Cn-al-lcF"/>
|
||||
<constraint firstItem="vDu-zF-Fre" firstAttribute="trailing" secondItem="Bmz-QF-ndz" secondAttribute="trailing" id="CSf-km-OSA"/>
|
||||
<constraint firstItem="V10-F3-AfA" firstAttribute="leading" secondItem="5EZ-qb-Rvc" secondAttribute="leading" id="E9a-Th-8Ln"/>
|
||||
<constraint firstItem="Bmz-QF-ndz" firstAttribute="leading" secondItem="vDu-zF-Fre" secondAttribute="leading" id="VKC-SK-X0W"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Bmz-QF-ndz" secondAttribute="bottom" id="dHE-iN-hq9"/>
|
||||
<constraint firstItem="V10-F3-AfA" firstAttribute="top" secondItem="vDu-zF-Fre" secondAttribute="top" id="dS9-NE-Ap0"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="continueWatchingCV" destination="Dty-MN-L9A" id="A3d-Vy-ObE"/>
|
||||
<outlet property="continueWatchingStack" destination="CKh-Ui-Z3R" id="LPT-Y3-630"/>
|
||||
<outlet property="headerHeight" destination="bn9-gt-j6P" id="ZJh-vu-Mfq"/>
|
||||
<outlet property="headerImage" destination="uTJ-KB-jeA" id="z8L-VL-5Ay"/>
|
||||
<outlet property="headerTitleLabel" destination="fQH-gr-lSI" id="vjR-Yu-eZO"/>
|
||||
<outlet property="headerView" destination="V10-F3-AfA" id="gZb-F6-pQ2"/>
|
||||
<outlet property="karaokeListingTableView" destination="haV-Gw-hD2" id="1En-mN-yVg"/>
|
||||
<outlet property="scrollView" destination="5mW-wO-b1Z" id="vX8-Dp-fHu"/>
|
||||
<outlet property="selectedShowView" destination="JKB-7I-uN7" id="1hm-Jj-hg2"/>
|
||||
<outlet property="tableHeight" destination="X5Z-qL-DJr" id="4j9-E7-nL6"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="Ief-a0-LHa" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="132" y="-27"/>
|
||||
</scene>
|
||||
<!--Karaoke DetailsVC-->
|
||||
<scene sceneID="71D-kH-SvO">
|
||||
<objects>
|
||||
<viewController storyboardIdentifier="KaraokeDetailsVC" id="fax-bi-Mb9" customClass="KaraokeDetailsVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="QYY-qP-IoV">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<view alpha="0.60000002384185791" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ikh-9O-ugN">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="olX-Tk-Nc1">
|
||||
<rect key="frame" x="0.0" y="161.5" width="414" height="587"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="WebSeriesSeasonsBackground" translatesAutoresizingMaskIntoConstraints="NO" id="RCC-UY-QBI">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="587"/>
|
||||
</imageView>
|
||||
<stackView opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="tph-nP-MrO">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="572"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="IDh-Ai-rlj">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="50"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="TJj-V5-5nj">
|
||||
<rect key="frame" x="369" y="10" width="40" height="40"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" secondItem="TJj-V5-5nj" secondAttribute="height" multiplier="1:1" id="UOo-se-mdq"/>
|
||||
</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="fax-bi-Mb9" eventType="touchUpInside" id="a0p-cO-OSj"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="bottom" secondItem="TJj-V5-5nj" secondAttribute="bottom" id="0bb-vU-QkU"/>
|
||||
<constraint firstItem="TJj-V5-5nj" firstAttribute="top" secondItem="IDh-Ai-rlj" secondAttribute="top" constant="10" id="L4y-6J-Ugx"/>
|
||||
<constraint firstAttribute="height" constant="50" id="nXW-an-dJK"/>
|
||||
<constraint firstAttribute="trailing" secondItem="TJj-V5-5nj" secondAttribute="trailing" constant="5" id="ttc-Ua-Yx3"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="p7n-Nl-4Tf" userLabel="MainStack">
|
||||
<rect key="frame" x="0.0" y="50" width="414" height="522"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hNm-hD-9HZ" customClass="ShadowView" customModule="WOKA" customModuleProvider="target">
|
||||
<rect key="frame" x="13" y="5" width="388" height="200"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="ljT-wJ-GOw">
|
||||
<rect key="frame" x="8" y="8" width="372" height="184"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
|
||||
<integer key="value" value="10"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||
<constraints>
|
||||
<constraint firstItem="ljT-wJ-GOw" firstAttribute="leading" secondItem="hNm-hD-9HZ" secondAttribute="leading" constant="8" id="2Wj-Rt-Khs"/>
|
||||
<constraint firstItem="ljT-wJ-GOw" firstAttribute="top" secondItem="hNm-hD-9HZ" secondAttribute="top" constant="8" id="BqF-S9-Yfa"/>
|
||||
<constraint firstAttribute="trailing" secondItem="ljT-wJ-GOw" secondAttribute="trailing" constant="8" id="KrJ-ua-ehk"/>
|
||||
<constraint firstAttribute="bottom" secondItem="ljT-wJ-GOw" secondAttribute="bottom" constant="8" id="M3e-gf-hvb"/>
|
||||
<constraint firstAttribute="height" constant="200" id="lQ6-z8-OoO"/>
|
||||
</constraints>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
|
||||
<integer key="value" value="10"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</view>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" distribution="equalSpacing" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="AAT-V8-hYA">
|
||||
<rect key="frame" x="13" y="215" width="388" height="27"/>
|
||||
<subviews>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="pj3-9k-Ey5">
|
||||
<rect key="frame" x="0.0" y="0.0" width="25" height="27"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="NA" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yfE-Jp-skN">
|
||||
<rect key="frame" x="0.0" y="0.0" width="25" height="22"/>
|
||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
|
||||
<color key="textColor" name="TextDarkBlue"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="imq-Oe-kqw">
|
||||
<rect key="frame" x="0.0" y="27" width="25" height="0.0"/>
|
||||
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="14"/>
|
||||
<color key="textColor" name="TextDarkBlue"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" spacing="4" translatesAutoresizingMaskIntoConstraints="NO" id="MAx-LS-LUd">
|
||||
<rect key="frame" x="355" y="0.0" width="33" height="27"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="hand.thumbsup.fill" catalog="system" translatesAutoresizingMaskIntoConstraints="NO" id="k5s-tz-fsM">
|
||||
<rect key="frame" x="0.0" y="0.5" width="20.5" height="26"/>
|
||||
<color key="tintColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lVK-jF-yhG">
|
||||
<rect key="frame" x="24.5" y="0.0" width="8.5" height="27"/>
|
||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="13"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
</stackView>
|
||||
</subviews>
|
||||
</stackView>
|
||||
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" editable="NO" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="bdm-wK-Ct6">
|
||||
<rect key="frame" x="13" y="252" width="388" height="180"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="180" id="Axj-37-UpH"/>
|
||||
</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" distribution="equalSpacing" translatesAutoresizingMaskIntoConstraints="NO" id="hgO-37-pqN">
|
||||
<rect key="frame" x="13" y="442" width="388" height="50"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="tailTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ULn-gu-noT" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="155" height="50"/>
|
||||
<color key="backgroundColor" red="0.80000000000000004" green="0.29411764709999999" blue="0.1137254902" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="155" id="IUH-j8-s0J"/>
|
||||
<constraint firstAttribute="height" constant="50" id="loe-uS-9Ji"/>
|
||||
</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="SING NOW" image="Microphone"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
|
||||
<integer key="value" value="25"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
<connections>
|
||||
<action selector="playNowBtnTapped:" destination="fax-bi-Mb9" eventType="touchUpInside" id="Wre-hM-W9P"/>
|
||||
</connections>
|
||||
</button>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="2mA-u5-c91">
|
||||
<rect key="frame" x="234.5" y="0.0" width="153.5" height="50"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="OCW-TW-vnc">
|
||||
<rect key="frame" x="0.0" y="0.0" width="40" height="50"/>
|
||||
<subviews>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="b7n-B7-UcT">
|
||||
<rect key="frame" x="0.0" y="0.0" width="40" height="50"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" image="FavouriteRemove" translatesAutoresizingMaskIntoConstraints="NO" id="iIo-ei-G5K">
|
||||
<rect key="frame" x="5" y="0.0" width="30" height="36"/>
|
||||
<color key="tintColor" name="ImageDarkBlue"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="30" id="Loo-CS-Ns2"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ADDED" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LUw-S0-LS7" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||
<rect key="frame" x="0.5" y="36" width="38.5" height="14"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="14" id="Rea-e5-Gi4"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="12"/>
|
||||
<color key="textColor" name="ImageDarkBlue"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
</stackView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="bottom" secondItem="b7n-B7-UcT" secondAttribute="bottom" id="Llz-q5-f20"/>
|
||||
<constraint firstItem="b7n-B7-UcT" firstAttribute="leading" secondItem="OCW-TW-vnc" secondAttribute="leading" id="VFj-nh-da6"/>
|
||||
<constraint firstAttribute="trailing" secondItem="b7n-B7-UcT" secondAttribute="trailing" id="gdg-AQ-d0e"/>
|
||||
<constraint firstAttribute="width" constant="40" id="hw7-EK-Oju"/>
|
||||
<constraint firstItem="b7n-B7-UcT" firstAttribute="top" secondItem="OCW-TW-vnc" secondAttribute="top" id="oKH-Tr-5LJ"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="TCc-f5-EUy" userLabel="Seperator">
|
||||
<rect key="frame" x="48" y="0.0" width="0.5" height="50"/>
|
||||
<color key="backgroundColor" name="TextDarkBlue"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="0.80000000000000004" id="eih-QJ-Tnq"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="D0l-lG-ZC6">
|
||||
<rect key="frame" x="56.5" y="0.0" width="40" height="50"/>
|
||||
<subviews>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="0pH-6w-IXC">
|
||||
<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="nvR-XQ-ABS">
|
||||
<rect key="frame" x="10" y="0.0" width="20" height="36"/>
|
||||
<color key="tintColor" name="ImageDarkBlue"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="20" id="WZy-6q-dBa"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SHARE" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Qhs-1n-fon" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||
<rect key="frame" x="2" y="36" width="36.5" height="14"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="14" id="Kmh-oY-MiV"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="12"/>
|
||||
<color key="textColor" name="ImageDarkBlue"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="40" id="HNF-dd-2o0"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="0pH-6w-IXC" secondAttribute="trailing" id="AQd-PO-jTG"/>
|
||||
<constraint firstItem="0pH-6w-IXC" firstAttribute="leading" secondItem="D0l-lG-ZC6" secondAttribute="leading" id="T3z-tT-FA3"/>
|
||||
<constraint firstAttribute="bottom" secondItem="0pH-6w-IXC" secondAttribute="bottom" id="epT-kt-kmh"/>
|
||||
<constraint firstItem="0pH-6w-IXC" firstAttribute="top" secondItem="D0l-lG-ZC6" secondAttribute="top" id="fJy-Gj-ng9"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="CCM-fu-vha" userLabel="Seperator">
|
||||
<rect key="frame" x="104.5" y="0.0" width="1" height="50"/>
|
||||
<color key="backgroundColor" name="TextDarkBlue"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="0.80000000000000004" id="ayh-gM-YoD"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7yn-Pm-yFj">
|
||||
<rect key="frame" x="113.5" y="0.0" width="40" height="50"/>
|
||||
<subviews>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="ncN-pj-m9R">
|
||||
<rect key="frame" x="0.0" y="0.0" width="40" height="50"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" image="LikeRemove" translatesAutoresizingMaskIntoConstraints="NO" id="Xt6-nt-uzN">
|
||||
<rect key="frame" x="7.5" y="0.0" width="25" height="36"/>
|
||||
<color key="tintColor" name="ImageDarkBlue"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="25" id="QL7-5I-O9B"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LIKE" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bc1-gA-wdL" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||
<rect key="frame" x="8.5" y="36" width="23.5" height="14"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="14" id="JSW-cc-qnq"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="12"/>
|
||||
<color key="textColor" name="ImageDarkBlue"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
</stackView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="ncN-pj-m9R" firstAttribute="top" secondItem="7yn-Pm-yFj" secondAttribute="top" id="7OO-oj-kaq"/>
|
||||
<constraint firstItem="ncN-pj-m9R" firstAttribute="leading" secondItem="7yn-Pm-yFj" secondAttribute="leading" id="C3J-4x-ncF"/>
|
||||
<constraint firstAttribute="trailing" secondItem="ncN-pj-m9R" secondAttribute="trailing" id="Jp8-rv-9Jz"/>
|
||||
<constraint firstAttribute="bottom" secondItem="ncN-pj-m9R" secondAttribute="bottom" id="LZd-Ue-Ynr"/>
|
||||
<constraint firstAttribute="width" constant="40" id="XKb-CY-wj3"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
</stackView>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="50" id="8cV-Cu-v3L"/>
|
||||
</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="RCC-UY-QBI" firstAttribute="top" secondItem="olX-Tk-Nc1" secondAttribute="top" id="9DR-FP-t3I"/>
|
||||
<constraint firstItem="tph-nP-MrO" firstAttribute="leading" secondItem="olX-Tk-Nc1" secondAttribute="leading" id="AU0-1w-j86"/>
|
||||
<constraint firstAttribute="bottom" secondItem="tph-nP-MrO" secondAttribute="bottom" constant="15" id="KYc-N3-n2p"/>
|
||||
<constraint firstAttribute="bottom" secondItem="RCC-UY-QBI" secondAttribute="bottom" id="N8s-Ge-hqZ"/>
|
||||
<constraint firstItem="tph-nP-MrO" firstAttribute="top" secondItem="olX-Tk-Nc1" secondAttribute="top" id="XLQ-OQ-1ov"/>
|
||||
<constraint firstAttribute="trailing" secondItem="RCC-UY-QBI" secondAttribute="trailing" id="e6c-mv-kEl"/>
|
||||
<constraint firstItem="RCC-UY-QBI" firstAttribute="leading" secondItem="olX-Tk-Nc1" secondAttribute="leading" id="jgd-Ha-EsM"/>
|
||||
<constraint firstAttribute="trailing" secondItem="tph-nP-MrO" secondAttribute="trailing" id="vze-yd-9eD"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<viewLayoutGuide key="safeArea" id="9Xz-Cb-aa1"/>
|
||||
<constraints>
|
||||
<constraint firstItem="9Xz-Cb-aa1" firstAttribute="trailing" secondItem="ikh-9O-ugN" secondAttribute="trailing" id="8CP-lV-JgW"/>
|
||||
<constraint firstItem="olX-Tk-Nc1" firstAttribute="centerY" secondItem="9Xz-Cb-aa1" secondAttribute="centerY" id="Kjz-TN-SBM"/>
|
||||
<constraint firstAttribute="bottom" secondItem="ikh-9O-ugN" secondAttribute="bottom" id="bAO-ZZ-ef8"/>
|
||||
<constraint firstItem="olX-Tk-Nc1" firstAttribute="leading" secondItem="9Xz-Cb-aa1" secondAttribute="leading" id="bVr-oR-6Mj"/>
|
||||
<constraint firstItem="ikh-9O-ugN" firstAttribute="top" secondItem="QYY-qP-IoV" secondAttribute="top" id="nsf-dT-eNg"/>
|
||||
<constraint firstItem="9Xz-Cb-aa1" firstAttribute="trailing" secondItem="olX-Tk-Nc1" secondAttribute="trailing" id="pEb-7H-BTe"/>
|
||||
<constraint firstItem="ikh-9O-ugN" firstAttribute="leading" secondItem="QYY-qP-IoV" secondAttribute="leading" id="wAl-8v-5RR"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="addIcon" destination="iIo-ei-G5K" id="DtQ-lC-hxs"/>
|
||||
<outlet property="addLabel" destination="LUw-S0-LS7" id="duA-PF-SKa"/>
|
||||
<outlet property="addView" destination="OCW-TW-vnc" id="Cfd-ml-ETG"/>
|
||||
<outlet property="likeIcon" destination="Xt6-nt-uzN" id="rq8-zW-60b"/>
|
||||
<outlet property="likeLabel" destination="bc1-gA-wdL" id="7Fy-2p-kRj"/>
|
||||
<outlet property="likeView" destination="7yn-Pm-yFj" id="UmV-JD-fkM"/>
|
||||
<outlet property="releaseDate" destination="imq-Oe-kqw" id="WgI-LF-gx2"/>
|
||||
<outlet property="shareView" destination="D0l-lG-ZC6" id="P0S-7X-ToM"/>
|
||||
<outlet property="totalLikes" destination="lVK-jF-yhG" id="os1-on-OtU"/>
|
||||
<outlet property="watchingDesc" destination="bdm-wK-Ct6" id="Sps-Fk-4Nj"/>
|
||||
<outlet property="watchingImage" destination="ljT-wJ-GOw" id="SS0-yn-egm"/>
|
||||
<outlet property="watchingTitle" destination="yfE-Jp-skN" id="89J-Q2-OGK"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="5cV-6X-hPO" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="900" y="-27"/>
|
||||
</scene>
|
||||
<!--PlayerVC-->
|
||||
<scene sceneID="Lao-sU-GdG">
|
||||
<objects>
|
||||
<viewController storyboardIdentifier="AVPlayerVC" id="kQu-aO-Siv" customClass="AVPlayerVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="yFi-ud-U3v">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" translatesAutoresizingMaskIntoConstraints="NO" id="s55-L0-QBA" userLabel="PlayerView">
|
||||
<rect key="frame" x="0.0" y="330" width="418" height="250"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" translatesAutoresizingMaskIntoConstraints="NO" id="l7y-7N-uz2">
|
||||
<rect key="frame" x="0.0" y="0.0" width="418" height="250"/>
|
||||
<subviews>
|
||||
<view alpha="0.5" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7Lc-Yp-x8G">
|
||||
<rect key="frame" x="0.0" y="0.0" width="418" height="250"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</view>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" spacing="6" translatesAutoresizingMaskIntoConstraints="NO" id="Mhh-bR-zKm" userLabel="SliderStack">
|
||||
<rect key="frame" x="5" y="218" width="408" height="30"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="00:00:00" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" translatesAutoresizingMaskIntoConstraints="NO" id="PZq-WO-H32">
|
||||
<rect key="frame" x="0.0" y="0.0" width="50" height="30"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="50" id="nYl-FL-Ois"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" name="Exo2-Medium" family="Exo 2" pointSize="11"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="VKq-Xn-4Nn">
|
||||
<rect key="frame" x="54" y="0.0" width="300" height="31"/>
|
||||
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<color key="thumbTintColor" red="0.80000000000000004" green="0.29411764709999999" blue="0.1137254902" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</slider>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" translatesAutoresizingMaskIntoConstraints="NO" id="0xZ-En-mzk">
|
||||
<rect key="frame" x="358" y="0.0" width="50" height="30"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="50" id="13R-ht-Ooc"/>
|
||||
</constraints>
|
||||
<attributedString key="attributedText">
|
||||
<fragment content="00:00:00">
|
||||
<attributes>
|
||||
<color key="NSColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<font key="NSFont" size="11" name="Exo2-Medium"/>
|
||||
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="truncatingTail" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
|
||||
</attributes>
|
||||
</fragment>
|
||||
</attributedString>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="6xv-b4-3da">
|
||||
<rect key="frame" x="114" y="100" width="190" height="50"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="M0h-b5-LXf">
|
||||
<rect key="frame" x="0.0" y="0.0" width="50" height="50"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.80000000000000004" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="goforward.10" catalog="system" translatesAutoresizingMaskIntoConstraints="NO" id="IKL-qY-FkR">
|
||||
<rect key="frame" x="10" y="8.5" width="30" height="31"/>
|
||||
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="30" id="fYi-bd-7Oh"/>
|
||||
<constraint firstAttribute="width" secondItem="IKL-qY-FkR" secondAttribute="height" multiplier="1:1" id="pb2-c9-VEp"/>
|
||||
<constraint firstAttribute="width" constant="30" id="qsk-r1-nkf"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="IKL-qY-FkR" firstAttribute="centerY" secondItem="M0h-b5-LXf" secondAttribute="centerY" id="Qan-Kc-atl"/>
|
||||
<constraint firstItem="IKL-qY-FkR" firstAttribute="centerX" secondItem="M0h-b5-LXf" secondAttribute="centerX" id="TLc-gj-6lL"/>
|
||||
<constraint firstAttribute="width" secondItem="M0h-b5-LXf" secondAttribute="height" multiplier="1:1" id="sg0-5u-jyP"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="play.circle" catalog="system" translatesAutoresizingMaskIntoConstraints="NO" id="IXg-pG-vEl">
|
||||
<rect key="frame" x="70" y="0.5" width="50" height="49"/>
|
||||
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" secondItem="IXg-pG-vEl" secondAttribute="height" multiplier="1:1" id="HvT-nI-eDI"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Odf-qx-Pl1">
|
||||
<rect key="frame" x="140" y="0.0" width="50" height="50"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.80000000000000004" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="goforward.10" catalog="system" translatesAutoresizingMaskIntoConstraints="NO" id="5Xm-AY-vbf">
|
||||
<rect key="frame" x="10" y="8.5" width="30" height="31"/>
|
||||
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="30" id="W0I-ls-sHd"/>
|
||||
<constraint firstAttribute="height" constant="30" id="fsd-FR-ina"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="5Xm-AY-vbf" firstAttribute="centerY" secondItem="Odf-qx-Pl1" secondAttribute="centerY" id="GaV-xD-TS9"/>
|
||||
<constraint firstItem="5Xm-AY-vbf" firstAttribute="centerX" secondItem="Odf-qx-Pl1" secondAttribute="centerX" id="Qdx-Kz-QQD"/>
|
||||
<constraint firstAttribute="width" secondItem="Odf-qx-Pl1" secondAttribute="height" multiplier="1:1" id="Yan-Ab-Yql"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="50" id="Jgh-NB-a3z"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="6xv-b4-3da" firstAttribute="centerY" secondItem="l7y-7N-uz2" secondAttribute="centerY" id="7EU-vQ-24M"/>
|
||||
<constraint firstItem="7Lc-Yp-x8G" firstAttribute="top" secondItem="l7y-7N-uz2" secondAttribute="top" id="CKx-0J-Lhi"/>
|
||||
<constraint firstItem="Mhh-bR-zKm" firstAttribute="leading" secondItem="l7y-7N-uz2" secondAttribute="leading" constant="5" id="FqT-om-cEo"/>
|
||||
<constraint firstAttribute="bottom" secondItem="7Lc-Yp-x8G" secondAttribute="bottom" id="Rm8-TM-tAn"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Mhh-bR-zKm" secondAttribute="bottom" constant="2" id="ZKX-ak-gaz"/>
|
||||
<constraint firstAttribute="trailing" secondItem="7Lc-Yp-x8G" secondAttribute="trailing" id="bNn-ua-lIq"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Mhh-bR-zKm" secondAttribute="trailing" constant="5" id="cOg-cb-irB"/>
|
||||
<constraint firstItem="7Lc-Yp-x8G" firstAttribute="leading" secondItem="l7y-7N-uz2" secondAttribute="leading" id="fLe-ch-yLB"/>
|
||||
<constraint firstItem="6xv-b4-3da" firstAttribute="centerX" secondItem="l7y-7N-uz2" secondAttribute="centerX" id="wM7-r1-Oob"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="l7y-7N-uz2" firstAttribute="leading" secondItem="s55-L0-QBA" secondAttribute="leading" id="4Hy-iL-uA7"/>
|
||||
<constraint firstAttribute="bottom" secondItem="l7y-7N-uz2" secondAttribute="bottom" id="BPP-v5-npt"/>
|
||||
<constraint firstAttribute="bottom" secondItem="l7y-7N-uz2" secondAttribute="bottom" id="Dpu-H8-UIT"/>
|
||||
<constraint firstAttribute="trailing" secondItem="l7y-7N-uz2" secondAttribute="trailing" id="Mgf-Yb-iW1"/>
|
||||
<constraint firstItem="l7y-7N-uz2" firstAttribute="leading" secondItem="s55-L0-QBA" secondAttribute="leading" id="Ppx-0A-xU4"/>
|
||||
<constraint firstAttribute="height" constant="250" id="VSu-g6-K76"/>
|
||||
<constraint firstItem="l7y-7N-uz2" firstAttribute="top" secondItem="s55-L0-QBA" secondAttribute="top" id="mcF-Rx-XSf"/>
|
||||
<constraint firstAttribute="trailing" secondItem="l7y-7N-uz2" secondAttribute="trailing" id="r6B-rl-7Kz"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="hXe-Fv-Zk9">
|
||||
<rect key="frame" x="10" y="58" width="398" height="30"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="NA" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="alm-nS-A2I">
|
||||
<rect key="frame" x="0.0" y="0.0" width="358" height="30"/>
|
||||
<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"/>
|
||||
</label>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="jlb-0g-59l">
|
||||
<rect key="frame" x="368" y="0.0" width="30" height="30"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" secondItem="jlb-0g-59l" secondAttribute="height" multiplier="1:1" id="9KW-Ku-fD3"/>
|
||||
</constraints>
|
||||
<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" image="CloseIconEmpty"/>
|
||||
<connections>
|
||||
<action selector="closeBtnTapped:" destination="kQu-aO-Siv" eventType="touchUpInside" id="Muc-ee-FGZ"/>
|
||||
<action selector="closeBtnTapped:" destination="fax-bi-Mb9" eventType="touchUpInside" id="jMq-CG-juV"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="jlb-0g-59l" firstAttribute="width" secondItem="jlb-0g-59l" secondAttribute="height" multiplier="1:1" id="Ig1-El-cep"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="jTd-8Q-0y7">
|
||||
<rect key="frame" x="25" y="658" width="368" height="95"/>
|
||||
<subviews>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="gLz-mh-ln0">
|
||||
<rect key="frame" x="0.0" y="0.0" width="368" height="50"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="tailTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4KA-5y-qg7" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="174" height="50"/>
|
||||
<color key="backgroundColor" red="0.80000000000000004" green="0.29411764709999999" blue="0.1137254902" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="50" id="3ZS-GJ-VKY"/>
|
||||
</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="titleEdgeInsets" minX="5" minY="0.0" maxX="0.0" maxY="0.0"/>
|
||||
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="5" maxY="0.0"/>
|
||||
<state key="normal" title="Start Recording" image="Microphone"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
|
||||
<integer key="value" value="25"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
<connections>
|
||||
<action selector="playNowBtnTapped:" destination="fax-bi-Mb9" eventType="touchUpInside" id="dwL-Ob-ZbF"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="249" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="tailTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dz2-DJ-auS" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
||||
<rect key="frame" x="194" y="0.0" width="174" height="50"/>
|
||||
<color key="backgroundColor" name="TextDarkBlue"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="50" id="7d9-YY-TdQ"/>
|
||||
<constraint firstAttribute="width" constant="135" id="DlE-SG-wUQ"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||
<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="Play" image="PlayButtonSmall"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
|
||||
<integer key="value" value="25"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
<connections>
|
||||
<action selector="playNowBtnTapped:" destination="fax-bi-Mb9" eventType="touchUpInside" id="hwK-OY-rQq"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
</stackView>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="tailTruncation" hasAttributedTitle="YES" translatesAutoresizingMaskIntoConstraints="NO" id="k45-7s-jnN" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="65" width="368" height="30"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<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="0.0" minY="0.0" maxX="5" maxY="0.0"/>
|
||||
<state key="normal">
|
||||
<attributedString key="attributedTitle">
|
||||
<fragment content="Download">
|
||||
<attributes>
|
||||
<font key="NSFont" size="16" name=".SFNS-Regular"/>
|
||||
<font key="NSOriginalFont" size="16" name="Farah"/>
|
||||
<paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
|
||||
</attributes>
|
||||
</fragment>
|
||||
<fragment content=" ">
|
||||
<attributes>
|
||||
<font key="NSFont" size="16" name="Farah"/>
|
||||
<paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
|
||||
</attributes>
|
||||
</fragment>
|
||||
<fragment content="Recording">
|
||||
<attributes>
|
||||
<font key="NSFont" size="14" name="Exo2-Regular"/>
|
||||
<paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
|
||||
</attributes>
|
||||
</fragment>
|
||||
</attributedString>
|
||||
</state>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
|
||||
<integer key="value" value="25"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
<connections>
|
||||
<action selector="playNowBtnTapped:" destination="fax-bi-Mb9" eventType="touchUpInside" id="owb-s2-DxU"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
</stackView>
|
||||
</subviews>
|
||||
<viewLayoutGuide key="safeArea" id="oGN-nm-I6a"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="s55-L0-QBA" firstAttribute="centerY" secondItem="oGN-nm-I6a" secondAttribute="centerY" id="3PR-ix-bDs"/>
|
||||
<constraint firstItem="s55-L0-QBA" firstAttribute="leading" secondItem="yFi-ud-U3v" secondAttribute="leading" id="4XW-Wj-pXp"/>
|
||||
<constraint firstItem="jTd-8Q-0y7" firstAttribute="leading" secondItem="oGN-nm-I6a" secondAttribute="leading" constant="25" id="9KV-Cx-Hoq"/>
|
||||
<constraint firstItem="oGN-nm-I6a" firstAttribute="trailing" secondItem="hXe-Fv-Zk9" secondAttribute="trailing" constant="10" id="BHo-KM-sod"/>
|
||||
<constraint firstItem="hXe-Fv-Zk9" firstAttribute="leading" secondItem="oGN-nm-I6a" secondAttribute="leading" constant="10" id="FLp-pS-iEw"/>
|
||||
<constraint firstItem="oGN-nm-I6a" firstAttribute="trailing" secondItem="jTd-8Q-0y7" secondAttribute="trailing" constant="25" id="UbH-Km-hc2"/>
|
||||
<constraint firstItem="hXe-Fv-Zk9" firstAttribute="top" secondItem="oGN-nm-I6a" secondAttribute="top" constant="10" id="ZyD-u6-icH"/>
|
||||
<constraint firstItem="oGN-nm-I6a" firstAttribute="trailing" secondItem="s55-L0-QBA" secondAttribute="trailing" id="bEp-Tx-cmK"/>
|
||||
<constraint firstItem="jTd-8Q-0y7" firstAttribute="top" secondItem="s55-L0-QBA" secondAttribute="bottom" constant="78" id="qj9-jV-aGM"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="img10SecBack" destination="IKL-qY-FkR" id="GuA-TX-UHu"/>
|
||||
<outlet property="img10SecFor" destination="5Xm-AY-vbf" id="LPy-C0-Twz"/>
|
||||
<outlet property="imgPlay" destination="IXg-pG-vEl" id="L33-Hc-mGN"/>
|
||||
<outlet property="lbCurrentTime" destination="PZq-WO-H32" id="n5q-bm-hVP"/>
|
||||
<outlet property="lbTotalTime" destination="0xZ-En-mzk" id="g1U-2U-svw"/>
|
||||
<outlet property="seekSlider" destination="VKq-Xn-4Nn" id="ims-DY-5HR"/>
|
||||
<outlet property="sliderStack" destination="Mhh-bR-zKm" id="Noa-Nd-AK4"/>
|
||||
<outlet property="stackCtrView" destination="6xv-b4-3da" id="BbF-dD-Iek"/>
|
||||
<outlet property="tintView" destination="7Lc-Yp-x8G" id="bOc-mG-HwG"/>
|
||||
<outlet property="videoPlayer" destination="s55-L0-QBA" id="OHf-Ru-O1Y"/>
|
||||
<outlet property="videoTitle" destination="alm-nS-A2I" id="RQN-Uc-WgF"/>
|
||||
<outlet property="viewControll" destination="l7y-7N-uz2" id="zly-5u-1kS"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="4Za-1C-I6p" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1657.9710144927537" y="-27.455357142857142"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="CloseIconEmpty" width="30" height="30"/>
|
||||
<image name="FavouriteRemove" width="42.5" height="42.5"/>
|
||||
<image name="LikeRemove" width="42.5" height="42.5"/>
|
||||
<image name="Microphone" width="31" height="31"/>
|
||||
<image name="PlayButtonSmall" width="28.333333969116211" height="28.333333969116211"/>
|
||||
<image name="ShareImage" width="18" height="18"/>
|
||||
<image name="WebSeriesSeasonsBackground" width="142.66667175292969" height="187.33332824707031"/>
|
||||
<image name="goforward.10" catalog="system" width="119" height="128"/>
|
||||
<image name="hand.thumbsup.fill" catalog="system" width="128" height="121"/>
|
||||
<image name="play.circle" catalog="system" width="128" height="123"/>
|
||||
<namedColor name="ImageDarkBlue">
|
||||
<color red="0.035000000149011612" green="0.0" blue="0.36500000953674316" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</namedColor>
|
||||
<namedColor name="TextDarkBlue">
|
||||
<color red="0.10599999874830246" green="0.050999999046325684" blue="0.60399997234344482" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</namedColor>
|
||||
<systemColor name="labelColor">
|
||||
<color white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</systemColor>
|
||||
<systemColor name="systemBackgroundColor">
|
||||
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</systemColor>
|
||||
</resources>
|
||||
</document>
|
||||
19
WOKA/Karaoke/Model/KaraokeContinueWatchingDM.swift
Normal file
19
WOKA/Karaoke/Model/KaraokeContinueWatchingDM.swift
Normal file
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// KaraokeContinueWatchingDM.swift
|
||||
// WOKA
|
||||
//
|
||||
// Created by Bilal on 05/07/2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
// MARK: - KaraokeListingDM
|
||||
struct KaraokeContinueWatchingDM: Codable {
|
||||
let result: [KaraokeListingDM.KaraokeDatum]?
|
||||
let totalRecords: Int?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case result
|
||||
case totalRecords = "total_records"
|
||||
}
|
||||
}
|
||||
73
WOKA/Karaoke/Model/KaraokeListingDM.swift
Normal file
73
WOKA/Karaoke/Model/KaraokeListingDM.swift
Normal file
@@ -0,0 +1,73 @@
|
||||
//
|
||||
// KaraokeListingDM.swift
|
||||
// WOKA
|
||||
//
|
||||
// Created by Bilal on 05/07/2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
// MARK: - KaraokeListingDM
|
||||
struct KaraokeListingDM: Codable {
|
||||
let karaokeData: [KaraokeDatum]?
|
||||
let totalRecords: Int?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case karaokeData = "karaoke_data"
|
||||
case totalRecords = "total_records"
|
||||
}
|
||||
|
||||
// MARK: - KaraokeDatum
|
||||
struct KaraokeDatum: Codable {
|
||||
let id: Int?
|
||||
let title, description: String?
|
||||
let videoURL: String?
|
||||
let thumbnailPath: String?
|
||||
let releaseDate: String?
|
||||
let duration, categoryMasterID, ageRangeMasterID, genderMasterID: String?
|
||||
let languageMasterID: Int?
|
||||
let contentMoreDetails: [ContentMoreDetail]?
|
||||
// let categoryData, ageRangeData, genderData: [JSONAny]?
|
||||
var markAsFavourite, isLiked: Bool?
|
||||
var viewsCount, likesCount, bookmarkCount: Int?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id, title, description
|
||||
case videoURL = "video_url"
|
||||
case thumbnailPath = "thumbnail_path"
|
||||
case releaseDate = "release_date"
|
||||
case duration
|
||||
case categoryMasterID = "category_master_id"
|
||||
case ageRangeMasterID = "age_range_master_id"
|
||||
case genderMasterID = "gender_master_id"
|
||||
case languageMasterID = "language_master_id"
|
||||
case contentMoreDetails = "content_more_details"
|
||||
// case categoryData = "category_data"
|
||||
// case ageRangeData = "age_range_data"
|
||||
// case genderData = "gender_data"
|
||||
case markAsFavourite = "mark_as_favourite"
|
||||
case isLiked = "is_liked"
|
||||
case viewsCount = "views_count"
|
||||
case likesCount = "likes_count"
|
||||
case bookmarkCount = "bookmark_count"
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - ContentMoreDetail
|
||||
struct ContentMoreDetail: Codable {
|
||||
let id, contentID, postType, languageMasterID: Int?
|
||||
let title, description: String?
|
||||
let url: String?
|
||||
let tagsKeywords: String?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id
|
||||
case contentID = "content_id"
|
||||
case postType = "post_type"
|
||||
case languageMasterID = "language_master_id"
|
||||
case title, description, url
|
||||
case tagsKeywords = "tags_keywords"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
17
WOKA/Karaoke/ViewModel/AVPlayerVM.swift
Normal file
17
WOKA/Karaoke/ViewModel/AVPlayerVM.swift
Normal file
@@ -0,0 +1,17 @@
|
||||
//
|
||||
// AVPlayerVM.swift
|
||||
// WOKA
|
||||
//
|
||||
// Created by Bilal on 05/07/2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
class AVPlayerVM{
|
||||
|
||||
weak var vc : AVPlayerVC!
|
||||
|
||||
func initView(){
|
||||
|
||||
}
|
||||
}
|
||||
241
WOKA/Karaoke/ViewModel/KaraokeListingVM.swift
Normal file
241
WOKA/Karaoke/ViewModel/KaraokeListingVM.swift
Normal file
@@ -0,0 +1,241 @@
|
||||
//
|
||||
// KaraokeListingVM.swift
|
||||
// WOKA
|
||||
//
|
||||
// Created by Bilal on 05/07/2024.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import Alamofire
|
||||
|
||||
class KaraokeListingVM{
|
||||
|
||||
weak var vc : KaraokeListingVC!
|
||||
var karaokeListData = [KaraokeListingDM.KaraokeDatum]()
|
||||
var continueWatchingData = [KaraokeListingDM.KaraokeDatum]()
|
||||
var indexToLoad = 0
|
||||
|
||||
func initView(){
|
||||
setupCell()
|
||||
let color1 = #colorLiteral(red: 0.8, green: 0.6078431373, blue: 0.1098039216, alpha: 1)
|
||||
let color2 = #colorLiteral(red: 0.8, green: 0.2901960784, blue: 0.1098039216, alpha: 1)
|
||||
vc.title = "KARAOKE".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
|
||||
vc.view.applyGradient(colors: [color2, color1], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0))
|
||||
startShimmer()
|
||||
getContinueWatching()
|
||||
getKaraokeListing()
|
||||
}
|
||||
|
||||
func setupCell(){
|
||||
vc.continueWatchingCV.register(UINib(nibName: K.CellIdentifier.AudioBooks.continueAudioCell, bundle: nil), forCellWithReuseIdentifier: K.CellIdentifier.AudioBooks.continueAudioCell)
|
||||
vc.continueWatchingCV.delegate = vc.self
|
||||
vc.continueWatchingCV.dataSource = vc.self
|
||||
|
||||
vc.karaokeListingTableView.register(UINib(nibName: K.CellIdentifier.WebSeries.webSeriesShowListingCell, bundle: nil), forCellReuseIdentifier: K.CellIdentifier.WebSeries.webSeriesShowListingCell)
|
||||
vc.karaokeListingTableView.delegate = vc.self
|
||||
vc.karaokeListingTableView.dataSource = vc.self
|
||||
}
|
||||
|
||||
func updateTableHeight(){
|
||||
self.vc.tableHeight.constant = self.vc.karaokeListingTableView.contentSize.height + 100
|
||||
self.vc.karaokeListingTableView.layoutIfNeeded()
|
||||
self.vc.tableHeight.constant = self.vc.karaokeListingTableView.contentSize.height
|
||||
}
|
||||
|
||||
func setHeaderData(){
|
||||
let data = karaokeListData[indexToLoad]
|
||||
|
||||
if let url = data.thumbnailPath{
|
||||
self.vc.headerImage.imageURL(url, color: .white)
|
||||
}
|
||||
|
||||
if AuthFunc.shareInstance.getDefaultLanguage() == .english{
|
||||
let englishData = data.contentMoreDetails?.filter({$0.languageMasterID == 1}).first
|
||||
vc.headerTitleLabel.text = englishData?.title
|
||||
}else{
|
||||
let hindiData = data.contentMoreDetails?.filter({$0.languageMasterID == 2}).first
|
||||
vc.headerTitleLabel.text = hindiData?.title
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - GetKaraoke Listing
|
||||
|
||||
func getContinueWatching(){
|
||||
// Utilities.startProgressHUD()
|
||||
let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken()]
|
||||
let params : Parameters = ["post_type" : 8] // 8 - Karaoke
|
||||
NetworkManager.shareInstance.apiRequest(url: APIEndPoints.WebSeries.continue_watching, method: .post,parameters: params,headers : headers) { [weak self](result : Result<BaseResponseModel<KaraokeContinueWatchingDM>, NetworkManager.APIError>) in
|
||||
switch result{
|
||||
case .success(let data):
|
||||
guard let self else{
|
||||
Utilities.dismissProgressHUD()
|
||||
return
|
||||
}
|
||||
switch data.success{
|
||||
case 0:
|
||||
/*
|
||||
Error
|
||||
*/
|
||||
Utilities.dismissProgressHUD()
|
||||
// vc.toast(msg: data.message ?? "Unrecognised error" , time: 2)
|
||||
self.vc.continueWatchingStack.isHidden = true
|
||||
case 1:
|
||||
Utilities.dismissProgressHUD()
|
||||
guard let data = data.data?.result else{return}
|
||||
if data.count == 0{
|
||||
self.vc.continueWatchingStack.isHidden = true
|
||||
}else{
|
||||
self.vc.continueWatchingStack.isHidden = false
|
||||
}
|
||||
self.continueWatchingData = data.reversed()
|
||||
self.vc.continueWatchingCV.reloadData()
|
||||
default:
|
||||
break
|
||||
}
|
||||
case .failure(let error):
|
||||
guard let self else{
|
||||
Utilities.dismissProgressHUD()
|
||||
return
|
||||
}
|
||||
Utilities.dismissProgressHUD()
|
||||
self.vc.continueWatchingStack.isHidden = true
|
||||
vc.toast(msg: error.localizedDescription , time: 2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func getKaraokeListing(){
|
||||
// Utilities.startProgressHUD()
|
||||
let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken()]
|
||||
NetworkManager.shareInstance.apiRequest(url: APIEndPoints.Karaoke.sing_karaoke_listing, method: .post,headers: headers) { [weak self](result : Result<BaseResponseModel<KaraokeListingDM>, NetworkManager.APIError>) in
|
||||
switch result{
|
||||
case .success(let data):
|
||||
guard let self else{
|
||||
Utilities.dismissProgressHUD()
|
||||
return
|
||||
}
|
||||
switch data.success{
|
||||
case 0:
|
||||
/*
|
||||
Error
|
||||
*/
|
||||
Utilities.dismissProgressHUD()
|
||||
vc.toast(msg: data.message ?? "Unrecognised error" , time: 2)
|
||||
case 1:
|
||||
Utilities.dismissProgressHUD()
|
||||
guard let data = data.data?.karaokeData else{return}
|
||||
self.karaokeListData.removeAll()
|
||||
self.karaokeListData = data
|
||||
self.vc.karaokeListingTableView.reloadData()
|
||||
self.vc.tableHeight.constant = self.vc.karaokeListingTableView.contentSize.height + 100
|
||||
self.vc.karaokeListingTableView.layoutIfNeeded()
|
||||
self.vc.tableHeight.constant = self.vc.karaokeListingTableView.contentSize.height
|
||||
setHeaderData()
|
||||
self.stopShimmer()
|
||||
default:
|
||||
break
|
||||
}
|
||||
case .failure(let error):
|
||||
guard let self else{
|
||||
Utilities.dismissProgressHUD()
|
||||
return
|
||||
}
|
||||
Utilities.dismissProgressHUD()
|
||||
vc.toast(msg: error.localizedDescription , time: 2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func startShimmer(){
|
||||
vc.headerView.startShimmer()
|
||||
vc.selectedShowView.startShimmer()
|
||||
}
|
||||
|
||||
func stopShimmer(){
|
||||
self.vc.headerView.stopShimmer()
|
||||
self.vc.selectedShowView.stopShimmer()
|
||||
}
|
||||
|
||||
// MARK: - Update Fav Likes
|
||||
|
||||
func updateFavLikes(type : FavCellCLick, id : Int){
|
||||
guard let data = karaokeListData.filter({$0.id == id}).first, let audioListIndex = karaokeListData.firstIndex(where: {$0.id == id}) else{return}
|
||||
switch type {
|
||||
case .favourite:
|
||||
guard let isFav = data.markAsFavourite ,let postID = data.id,let postType = data.contentMoreDetails?.first?.postType else{return}
|
||||
if isFav == true {
|
||||
LikeFavCommonFunc.shareInstance.removeFavourite(postID: postID, postType: postType, categoryID: 0, vc: self.vc) { [unowned self] isDone in
|
||||
if isDone{
|
||||
karaokeListData[audioListIndex].markAsFavourite = false
|
||||
vc.karaokeListingTableView.reloadRows(at: [IndexPath(row: audioListIndex, section: 0)],with: .none)
|
||||
K.GVar.reloadMyList = true
|
||||
|
||||
/*
|
||||
Check if the data is in continue watching
|
||||
*/
|
||||
if let continueWatchingIndex = continueWatchingData.firstIndex(where: { $0.id == id }){
|
||||
continueWatchingData[continueWatchingIndex].markAsFavourite = false
|
||||
vc.continueWatchingCV.reloadItems(at: [IndexPath(row: continueWatchingIndex, section: 0)])
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
LikeFavCommonFunc.shareInstance.addFavourite(postID: postID, postType: postType, categoryID: 0, vc: self.vc) { [unowned self] isDone in
|
||||
if isDone{
|
||||
karaokeListData[audioListIndex].markAsFavourite = true
|
||||
vc.karaokeListingTableView.reloadRows(at: [IndexPath(row: audioListIndex, section: 0)],with: .none)
|
||||
K.GVar.reloadMyList = true
|
||||
|
||||
/*
|
||||
Check if the data is in continue watching
|
||||
*/
|
||||
if let continueWatchingIndex = continueWatchingData.firstIndex(where: { $0.id == id }){
|
||||
continueWatchingData[continueWatchingIndex].markAsFavourite = true
|
||||
vc.continueWatchingCV.reloadItems(at: [IndexPath(row: continueWatchingIndex, section: 0)])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
case .liked:
|
||||
guard let isLiked = data.isLiked ,let postID = data.id,let postType = data.contentMoreDetails?.first?.postType else{return}
|
||||
if isLiked{
|
||||
LikeFavCommonFunc.shareInstance.unlikePost(postID: postID, postType: postType, vc: self.vc) { [unowned self] isDone in
|
||||
if isDone{
|
||||
karaokeListData[audioListIndex].isLiked = false
|
||||
karaokeListData[audioListIndex].likesCount! -= 1
|
||||
vc.karaokeListingTableView.reloadRows(at: [IndexPath(row: audioListIndex, section: 0)],with: .none)
|
||||
K.GVar.reloadMyList = true
|
||||
|
||||
/*
|
||||
Check if the data is in continue watching
|
||||
*/
|
||||
if let continueWatchingIndex = continueWatchingData.firstIndex(where: { $0.id == id }){
|
||||
continueWatchingData[continueWatchingIndex].isLiked = false
|
||||
continueWatchingData[continueWatchingIndex].likesCount! -= 1
|
||||
vc.continueWatchingCV.reloadItems(at: [IndexPath(row: continueWatchingIndex, section: 0)])
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
LikeFavCommonFunc.shareInstance.likePost(postID: postID, postType: postType, vc: self.vc){ [unowned self] isDone in
|
||||
if isDone{
|
||||
karaokeListData[audioListIndex].isLiked = true
|
||||
karaokeListData[audioListIndex].likesCount! += 1
|
||||
vc.karaokeListingTableView.reloadRows(at: [IndexPath(row: audioListIndex, section: 0)],with: .none)
|
||||
K.GVar.reloadMyList = true
|
||||
|
||||
/*
|
||||
Check if the data is in continue watching
|
||||
*/
|
||||
if let continueWatchingIndex = continueWatchingData.firstIndex(where: { $0.id == id }){
|
||||
continueWatchingData[continueWatchingIndex].isLiked = true
|
||||
continueWatchingData[continueWatchingIndex].likesCount! += 1
|
||||
vc.continueWatchingCV.reloadItems(at: [IndexPath(row: continueWatchingIndex, section: 0)])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -243,3 +243,9 @@
|
||||
Games
|
||||
*/
|
||||
"HAVE A FUN TIME" = "आनंद करने का समय";
|
||||
|
||||
/*
|
||||
Karaoke
|
||||
*/
|
||||
"SING ALONG & DANCE" = "साथ गायें और नाचें";
|
||||
"SING NOW" = "अभी गायें";
|
||||
|
||||
@@ -99,6 +99,10 @@ struct APIEndPoints {
|
||||
static let get_token_to_auth_player = makeURL(path: "get_token_to_auth_player")
|
||||
}
|
||||
|
||||
struct Karaoke{
|
||||
static let sing_karaoke_listing = makeURL(path: "sing_karaoke_listing")
|
||||
}
|
||||
|
||||
// Other endpoint categories...
|
||||
struct Links {
|
||||
static let privacyPolicy = "https://www.wokaland.com/privacy-policy/"
|
||||
|
||||
@@ -314,28 +314,8 @@
|
||||
<constraint firstAttribute="bottom" secondItem="r88-JP-phS" secondAttribute="bottom" id="meH-ml-MUc"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillProportionally" spacing="1" translatesAutoresizingMaskIntoConstraints="NO" id="9fz-vc-Ufb" userLabel="Karaoke">
|
||||
<rect key="frame" x="10" y="192.33333333333331" width="95" height="95"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Karaoke" translatesAutoresizingMaskIntoConstraints="NO" id="DWF-Lu-F24">
|
||||
<rect key="frame" x="0.0" y="0.0" width="95" height="79"/>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="KARAOKE" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Yyo-6X-Jk4" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="80" width="95" height="15"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="15" id="Z4M-G5-Rob"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="13"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" secondItem="9fz-vc-Ufb" secondAttribute="height" multiplier="1:1" id="91B-pD-rvh"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ugr-Tf-Y1l">
|
||||
<rect key="frame" x="165" y="200.33333333333331" width="95" height="95"/>
|
||||
<rect key="frame" x="160" y="202.33333333333331" width="95" height="95"/>
|
||||
<subviews>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillProportionally" spacing="1" translatesAutoresizingMaskIntoConstraints="NO" id="JHO-R6-WGZ" userLabel="Audio Books">
|
||||
<rect key="frame" x="0.0" y="0.0" width="95" height="95"/>
|
||||
@@ -364,23 +344,55 @@
|
||||
<constraint firstAttribute="trailing" secondItem="JHO-R6-WGZ" secondAttribute="trailing" id="wrd-vn-ogp"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gk8-xm-Hh5">
|
||||
<rect key="frame" x="10" y="192.33333333333331" width="95" height="95"/>
|
||||
<subviews>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillProportionally" spacing="1" translatesAutoresizingMaskIntoConstraints="NO" id="9fz-vc-Ufb" userLabel="Karaoke">
|
||||
<rect key="frame" x="0.0" y="0.0" width="95" height="95"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Karaoke" translatesAutoresizingMaskIntoConstraints="NO" id="DWF-Lu-F24">
|
||||
<rect key="frame" x="0.0" y="0.0" width="95" height="79"/>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="KARAOKE" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Yyo-6X-Jk4" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="80" width="95" height="15"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="15" id="Z4M-G5-Rob"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="13"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="95" id="Mnv-Cn-1mN"/>
|
||||
<constraint firstAttribute="width" constant="95" id="st2-Tx-v7T"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="9fz-vc-Ufb" firstAttribute="top" secondItem="gk8-xm-Hh5" secondAttribute="top" id="DGl-Ue-JdK"/>
|
||||
<constraint firstAttribute="trailing" secondItem="9fz-vc-Ufb" secondAttribute="trailing" id="vsl-Ld-Iam"/>
|
||||
<constraint firstAttribute="bottom" secondItem="9fz-vc-Ufb" secondAttribute="bottom" id="xGV-rs-7OT"/>
|
||||
<constraint firstItem="9fz-vc-Ufb" firstAttribute="leading" secondItem="gk8-xm-Hh5" secondAttribute="leading" id="yji-Es-JPT"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="Ehe-Th-asW" firstAttribute="baseline" secondItem="lRy-nX-Xia" secondAttribute="firstBaseline" constant="40" id="6HI-BQ-pxx"/>
|
||||
<constraint firstItem="9fz-vc-Ufb" firstAttribute="centerX" secondItem="GGC-rX-Pyw" secondAttribute="centerX" id="7c7-bD-KbL"/>
|
||||
<constraint firstItem="gk8-xm-Hh5" firstAttribute="top" secondItem="GGC-rX-Pyw" secondAttribute="bottom" constant="30" id="6fZ-aH-GOz"/>
|
||||
<constraint firstItem="GGC-rX-Pyw" firstAttribute="leading" secondItem="ppi-HI-rj1" secondAttribute="leading" constant="10" id="Go0-Ui-etR"/>
|
||||
<constraint firstItem="ugr-Tf-Y1l" firstAttribute="centerY" secondItem="gk8-xm-Hh5" secondAttribute="centerY" constant="10" id="Mqx-zA-KmU"/>
|
||||
<constraint firstItem="GGC-rX-Pyw" firstAttribute="centerY" secondItem="lRy-nX-Xia" secondAttribute="centerY" constant="25" id="NmB-T5-Lvq"/>
|
||||
<constraint firstItem="9fz-vc-Ufb" firstAttribute="height" secondItem="ppi-HI-rj1" secondAttribute="height" multiplier="0.208333" id="RjE-7v-VJf"/>
|
||||
<constraint firstItem="lRy-nX-Xia" firstAttribute="height" secondItem="ppi-HI-rj1" secondAttribute="height" multiplier="0.208333" id="Slx-Jj-1Nl"/>
|
||||
<constraint firstItem="ugr-Tf-Y1l" firstAttribute="centerY" secondItem="9fz-vc-Ufb" secondAttribute="centerY" constant="8" id="X1t-Qn-V4F"/>
|
||||
<constraint firstItem="lRy-nX-Xia" firstAttribute="centerX" secondItem="ppi-HI-rj1" secondAttribute="centerX" id="ZMq-Za-1eg"/>
|
||||
<constraint firstItem="Ehe-Th-asW" firstAttribute="height" secondItem="ppi-HI-rj1" secondAttribute="height" multiplier="0.208333" id="bYM-Cl-mWm"/>
|
||||
<constraint firstItem="ugr-Tf-Y1l" firstAttribute="leading" secondItem="9fz-vc-Ufb" secondAttribute="trailing" constant="60" id="d6T-jS-Fvp"/>
|
||||
<constraint firstItem="gk8-xm-Hh5" firstAttribute="leading" secondItem="ppi-HI-rj1" secondAttribute="leading" constant="10" id="c7p-1g-qdM"/>
|
||||
<constraint firstItem="yuF-d6-Tag" firstAttribute="top" secondItem="Ehe-Th-asW" secondAttribute="bottom" constant="40" id="dOG-0I-sH8"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Ehe-Th-asW" secondAttribute="trailing" constant="10" id="h6R-gj-t8n"/>
|
||||
<constraint firstItem="ugr-Tf-Y1l" firstAttribute="leading" secondItem="gk8-xm-Hh5" secondAttribute="trailing" constant="55" id="iiR-AX-YQG"/>
|
||||
<constraint firstItem="Ehe-Th-asW" firstAttribute="top" secondItem="ppi-HI-rj1" secondAttribute="top" constant="-10" id="rPo-rh-Nry"/>
|
||||
<constraint firstItem="9fz-vc-Ufb" firstAttribute="top" secondItem="GGC-rX-Pyw" secondAttribute="bottom" constant="30" id="v9C-zO-CMS"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="-2" translatesAutoresizingMaskIntoConstraints="NO" id="LYo-Uy-0nM" userLabel="More">
|
||||
@@ -458,6 +470,7 @@
|
||||
<outlet property="gamesView" destination="yuF-d6-Tag" id="vpd-Cs-PPf"/>
|
||||
<outlet property="gradientView" destination="jdZ-WQ-xcr" id="EPt-cC-wNC"/>
|
||||
<outlet property="homeGrass" destination="bNd-CB-wx1" id="Rhs-zT-ChZ"/>
|
||||
<outlet property="karaokeView" destination="gk8-xm-Hh5" id="ewe-SE-uSJ"/>
|
||||
<outlet property="liveTVView" destination="kzE-UE-7KK" id="wh1-1v-X4B"/>
|
||||
<outlet property="liveTvPlayer" destination="edI-4n-4AY" id="Ofv-d0-YP4"/>
|
||||
<outlet property="moonImage" destination="Jbf-Kl-35X" id="WBx-uu-r3W"/>
|
||||
|
||||
@@ -41,7 +41,7 @@ class PlayerVC: JWPlayerViewController, JWPlayerViewControllerDelegate {
|
||||
let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene
|
||||
windowScene?.requestGeometryUpdate(.iOS(interfaceOrientations: UIInterfaceOrientationMask.portrait))
|
||||
} else {
|
||||
UIDevice.current.setValue(UIInterfaceOrientationMask.landscapeRight.rawValue, forKey: "orientation")
|
||||
UIDevice.current.setValue(UIInterfaceOrientationMask.portrait.rawValue, forKey: "orientation")
|
||||
}
|
||||
// UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")
|
||||
UIView.setAnimationsEnabled(true)
|
||||
|
||||
@@ -29,6 +29,7 @@ class ThemeOneVC: UIViewController {
|
||||
@IBOutlet weak var moreStack: UIStackView!
|
||||
@IBOutlet weak var bottomArrow: UIImageView!
|
||||
@IBOutlet weak var gamesView: UIView!
|
||||
@IBOutlet weak var karaokeView: UIView!
|
||||
|
||||
var timer: Timer?
|
||||
|
||||
|
||||
@@ -144,6 +144,15 @@ class ThemeOneVM{
|
||||
vc.navigationController?.pushViewController(vcPush, animated: true)
|
||||
}
|
||||
}
|
||||
|
||||
vc.karaokeView.addTapGesture { [self] in
|
||||
ViewButtonAnimation.sharedInstance.btnTapped(in: self.vc, view: self.vc.karaokeView) { [weak self] in
|
||||
guard let self else{return}
|
||||
let sb = UIStoryboard(name: K.StoryBoard.Karaoke, bundle: nil)
|
||||
let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Karaoke.karaokeListingVC) as! KaraokeListingVC
|
||||
vc.navigationController?.pushViewController(vcPush, animated: true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Animate Clouds and LiveTV
|
||||
|
||||
@@ -135,6 +135,37 @@ class WebSeriesShowListingCell: UITableViewCell {
|
||||
}
|
||||
}
|
||||
|
||||
func setKaraokeData(data: KaraokeListingDM.KaraokeDatum){
|
||||
//heart.fill , heart , hand.thumbsup.fill , hand.thumbsup
|
||||
if AuthFunc.shareInstance.getDefaultLanguage() == .english{
|
||||
showTitle.text = data.contentMoreDetails?.filter({$0.languageMasterID == 1}).first?.title
|
||||
}else{
|
||||
showTitle.text = data.contentMoreDetails?.filter({$0.languageMasterID == 2}).first?.title
|
||||
}
|
||||
totalLikes.text = data.likesCount?.toString() ?? "0"
|
||||
|
||||
if let url = data.thumbnailPath{
|
||||
showThumbnail.imageURL(url)
|
||||
}
|
||||
|
||||
if let like = data.isLiked{
|
||||
switch like{
|
||||
case true:
|
||||
likeBtn.setImage(UIImage(named: "LikeAdd"), for: .normal)
|
||||
case false:
|
||||
likeBtn.setImage(UIImage(named: "LikeRemove"), for: .normal)
|
||||
}
|
||||
}
|
||||
|
||||
if let favourite = data.markAsFavourite{
|
||||
if favourite == true{
|
||||
favBtn.setImage(UIImage(named: "FavouriteAdd"), for: .normal)
|
||||
}else{
|
||||
favBtn.setImage(UIImage(named: "FavouriteRemove"), for: .normal)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@IBAction func btnTapped(_ sender: UIButton) {
|
||||
switch sender{
|
||||
case likeBtn:
|
||||
|
||||
Reference in New Issue
Block a user