diff --git a/ShortPlay.xcodeproj/project.pbxproj b/ShortPlay.xcodeproj/project.pbxproj index 9003f93..1a5aa8d 100644 --- a/ShortPlay.xcodeproj/project.pbxproj +++ b/ShortPlay.xcodeproj/project.pbxproj @@ -438,11 +438,11 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 36QJHAN62Q; + DEVELOPMENT_TEAM = ""; ENABLE_USER_SCRIPT_SANDBOXING = NO; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ShortPlay/Source/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = ZyreoTV; + INFOPLIST_KEY_CFBundleDisplayName = Thimra; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; INFOPLIST_KEY_UIMainStoryboardFile = ""; @@ -475,11 +475,11 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 36QJHAN62Q; + DEVELOPMENT_TEAM = ""; ENABLE_USER_SCRIPT_SANDBOXING = NO; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ShortPlay/Source/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = ZyreoTV; + INFOPLIST_KEY_CFBundleDisplayName = Thimra; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; INFOPLIST_KEY_UIMainStoryboardFile = ""; diff --git a/ShortPlay/Class/Explore/Controller/SPExploreViewController.swift b/ShortPlay/Class/Explore/Controller/SPExploreViewController.swift index bbbcb33..934e926 100644 --- a/ShortPlay/Class/Explore/Controller/SPExploreViewController.swift +++ b/ShortPlay/Class/Explore/Controller/SPExploreViewController.swift @@ -73,7 +73,7 @@ extension SPExploreViewController { self.setDataArr(dataArr: list) self.play() } else { - + self.addDataArr(dataArr: list) } self.pagination = listModel.pagination } diff --git a/ShortPlay/Class/MyList/Controller/SPPlayHistoryViewController.swift b/ShortPlay/Class/MyList/Controller/SPPlayHistoryViewController.swift index a4966b7..82f4091 100644 --- a/ShortPlay/Class/MyList/Controller/SPPlayHistoryViewController.swift +++ b/ShortPlay/Class/MyList/Controller/SPPlayHistoryViewController.swift @@ -161,6 +161,7 @@ extension SPPlayHistoryViewController: UICollectionViewDelegate, UICollectionVie } else { let vc = SPPlayerDetailViewController() vc.shortPlayId = model.short_play_id + vc.playHistoryModel = model self.navigationController?.pushViewController(vc, animated: true) } } diff --git a/ShortPlay/Class/Player/Controller/SPPlayerDetailViewController.swift b/ShortPlay/Class/Player/Controller/SPPlayerDetailViewController.swift index 4be29aa..5d4d8f2 100644 --- a/ShortPlay/Class/Player/Controller/SPPlayerDetailViewController.swift +++ b/ShortPlay/Class/Player/Controller/SPPlayerDetailViewController.swift @@ -20,6 +20,7 @@ class SPPlayerDetailViewController: SPPlayerListViewController { var videoId: String? var shortPlayId: String? + var playHistoryModel: SPShortModel? private var detailModel: SPVideoDetailModel? @@ -108,7 +109,7 @@ extension SPPlayerDetailViewController { view.shortModel = detailModel?.shortPlayInfo view.currentIndex = self.currentIndexPath.row view.didSelectedIndex = { [weak self] (index) in - self?.scrollToItem(indexPath: IndexPath(row: index, section: 0)) + self?.scrollToItem(indexPath: IndexPath(row: index, section: 0), animated: false) } view.present(in: nil) self.episodeView = view @@ -135,7 +136,7 @@ extension SPPlayerDetailViewController: SPPlayerListViewControllerDataSource, SP self.episodeView?.currentIndex = indexPath.row let videoInfo = detailModel?.episodeList?[indexPath.row] - titleLabel.text = String(format: "kPlayerDetailTitleString".localized, "\(videoInfo?.episode ?? 0)", self.detailModel?.shortPlayInfo?.name ?? "") + titleLabel.text = String(format: "kPlayerDetailTitleString".localized, "\(videoInfo?.episode ?? "0")", self.detailModel?.shortPlayInfo?.name ?? "") } } @@ -149,8 +150,25 @@ extension SPPlayerDetailViewController { guard let self = self else { return } if let model = model { self.detailModel = model - self.reloadData() - self.play() + self.reloadData { [weak self] in + guard let self = self else { return } + + if let playHistoryModel = self.playHistoryModel { + var row: Int? + self.detailModel?.episodeList?.enumerated().forEach({ + if $1.episode == playHistoryModel.current_episode { + row = $0 + } + }) + if let row = row { + self.scrollToItem(indexPath: IndexPath(row: row, section: 0), animated: false) + } + self.playHistoryModel = nil + } else { + self.play() + } + } + } } } diff --git a/ShortPlay/Class/Player/Controller/SPPlayerListViewController.swift b/ShortPlay/Class/Player/Controller/SPPlayerListViewController.swift index 54d6dff..027d8b2 100644 --- a/ShortPlay/Class/Player/Controller/SPPlayerListViewController.swift +++ b/ShortPlay/Class/Player/Controller/SPPlayerListViewController.swift @@ -119,10 +119,27 @@ class SPPlayerListViewController: SPViewController { func setDataArr(dataArr: [Any]) { self.dataArr = dataArr - reloadData() } + func addDataArr(dataArr: [Any]) { + guard dataArr.count > 0 else { return } + + var indexPaths: [IndexPath] = [] + var startRow = self.dataArr.count + + dataArr.forEach { _ in + indexPaths.append(IndexPath(row: startRow, section: 0)) + startRow += 1 + } + self.dataArr += dataArr + + CATransaction.setCompletionBlock(nil) + CATransaction.begin() + self.collectionView.insertItems(at: indexPaths) + CATransaction.commit() + } + func clearDataArr() { self.dataArr.removeAll() @@ -147,7 +164,10 @@ class SPPlayerListViewController: SPViewController { } } - func reloadData() { + func reloadData(completion: (() -> Void)? = nil) { + CATransaction.setCompletionBlock { + completion?() + } CATransaction.begin() self.collectionView.reloadData() CATransaction.commit() @@ -157,8 +177,18 @@ class SPPlayerListViewController: SPViewController { return self.collectionView(self.collectionView, numberOfItemsInSection: 0) } - func scrollToItem(indexPath: IndexPath) { - self.collectionView.scrollToItem(at: indexPath, at: .top, animated: true); + func scrollToItem(indexPath: IndexPath, animated: Bool = true) { + CATransaction.setCompletionBlock { [weak self] in + guard let self = self else { return } + if !animated { + if self.currentIndexPath != indexPath { + self.skip(indexPath: indexPath) + } + } + } + CATransaction.begin() + self.collectionView.scrollToItem(at: indexPath, at: .top, animated: animated); + CATransaction.commit() } } @@ -264,6 +294,8 @@ extension SPPlayerListViewController: UICollectionViewDelegate, UICollectionView didChangeIndexPathForVisible() } + spLog(message: "++++++++\(indexPath)") + return cell } diff --git a/ShortPlay/Class/Player/Model/SPShortModel.swift b/ShortPlay/Class/Player/Model/SPShortModel.swift index af93082..1987a19 100644 --- a/ShortPlay/Class/Player/Model/SPShortModel.swift +++ b/ShortPlay/Class/Player/Model/SPShortModel.swift @@ -27,6 +27,7 @@ class SPShortModel: SPModel, SmartCodable { var tag_type: String? var video_info: SPVideoInfoModel? var watch_total: Int? + var current_episode: String? @IgnoredKey var titleAttributedString: NSAttributedString? diff --git a/ShortPlay/Class/Player/Model/SPVideoInfoModel.swift b/ShortPlay/Class/Player/Model/SPVideoInfoModel.swift index 4076825..2fa760a 100644 --- a/ShortPlay/Class/Player/Model/SPVideoInfoModel.swift +++ b/ShortPlay/Class/Player/Model/SPVideoInfoModel.swift @@ -12,7 +12,7 @@ class SPVideoInfoModel: SPModel, SmartCodable { var coins: Int? var vip_coins: Int? - var episode: Int? + var episode: String? var id: String? var image_url: String? var is_vip: Int? diff --git a/ShortPlay/Class/Player/View/SPEpisodeCell.swift b/ShortPlay/Class/Player/View/SPEpisodeCell.swift index dfb8f7b..44efbe4 100644 --- a/ShortPlay/Class/Player/View/SPEpisodeCell.swift +++ b/ShortPlay/Class/Player/View/SPEpisodeCell.swift @@ -12,7 +12,7 @@ class SPEpisodeCell: SPCollectionViewCell { var videoInfoModel: SPVideoInfoModel? { didSet { - textLabel.text = "\(videoInfoModel?.episode ?? 0)" + textLabel.text = "\(videoInfoModel?.episode ?? "0")" } } diff --git a/ShortPlay/Class/Player/View/SPEpisodeView.swift b/ShortPlay/Class/Player/View/SPEpisodeView.swift index 9117b6b..914fee4 100644 --- a/ShortPlay/Class/Player/View/SPEpisodeView.swift +++ b/ShortPlay/Class/Player/View/SPEpisodeView.swift @@ -39,8 +39,8 @@ class SPEpisodeView: HWPanModalContentView { maxIndex = dataArr.count - 1 } - let minEpisode = dataArr[minIndex].episode ?? 0 - let maxEpisode = dataArr[maxIndex].episode ?? 0 + let minEpisode = dataArr[minIndex].episode ?? "0" + let maxEpisode = dataArr[maxIndex].episode ?? "0" if minEpisode == maxEpisode { menuDataArr.append("\(minEpisode)") diff --git a/ShortPlay/Class/Player/View/SPPlayerListCell.swift b/ShortPlay/Class/Player/View/SPPlayerListCell.swift index 6f12ca7..67323b5 100644 --- a/ShortPlay/Class/Player/View/SPPlayerListCell.swift +++ b/ShortPlay/Class/Player/View/SPPlayerListCell.swift @@ -90,7 +90,7 @@ class SPPlayerListCell: SPCollectionViewCell, SPPlayerProtocol { var videoInfo: SPVideoInfoModel? { didSet { self.controlView.progress = 0 - self.coverImageView.isHidden = false +// self.coverImageView.isHidden = false self.controlView.currentTime = 0 self.controlView.durationTime = 0 @@ -103,6 +103,11 @@ class SPPlayerListCell: SPCollectionViewCell, SPPlayerProtocol { var isCurrent: Bool = false { didSet { controlView.isCurrent = isCurrent + if !isCurrent { +// self.player.replay() + self.player.seekToTime(toTime: 0) + self.coverImageView.isHidden = false + } } } diff --git a/ShortPlay/Libs/Player/SPPlayer.swift b/ShortPlay/Libs/Player/SPPlayer.swift index bd9bd3f..2346086 100644 --- a/ShortPlay/Libs/Player/SPPlayer.swift +++ b/ShortPlay/Libs/Player/SPPlayer.swift @@ -124,7 +124,9 @@ class SPPlayer: NSObject { func setPlayUrl(url: String) { let proxyURL = KTVHTTPCache.proxyURL(withOriginalURL: URL(string: url)) - self.player.assetURL = proxyURL + if proxyURL != self.player.assetURL { + self.player.assetURL = proxyURL + } // self.prepare() }