From e2466f2d2c8674e837557693786f9765fadf9286 Mon Sep 17 00:00:00 2001 From: sauvignon1989 Date: Fri, 11 Sep 2020 07:44:19 +0900 Subject: [PATCH 01/18] add ranking scene --- Alibili.xcodeproj/project.pbxproj | 4 + Alibili/Base.lproj/Main.storyboard | 59 ++++++++- Alibili/RankingCollectionViewController.swift | 112 ++++++++++++++++++ 3 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 Alibili/RankingCollectionViewController.swift diff --git a/Alibili.xcodeproj/project.pbxproj b/Alibili.xcodeproj/project.pbxproj index c511f32..305d428 100644 --- a/Alibili.xcodeproj/project.pbxproj +++ b/Alibili.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ CA00ACD322D2F0B7005ECFFE /* RootViewNavigator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA00ACD222D2F0B7005ECFFE /* RootViewNavigator.swift */; }; CA05132422D933BA008B4B48 /* CellDateComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA05132222D933BA008B4B48 /* CellDateComposer.swift */; }; CA05132622D933E8008B4B48 /* CellDataItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA05132522D933E8008B4B48 /* CellDataItem.swift */; }; + CA46D4DD250ADF6300DD38CA /* RankingCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA46D4C7250ADF6300DD38CA /* RankingCollectionViewController.swift */; }; CA4C66E02507A62C0049B522 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA4C66CA2507A62C0049B522 /* Metal.framework */; }; CA4C66E22507A64D0049B522 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA4C66E12507A64D0049B522 /* CoreServices.framework */; }; CA4C66EC250859290049B522 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA4C66EB250859290049B522 /* Utilities.swift */; }; @@ -261,6 +262,7 @@ CA00ACD222D2F0B7005ECFFE /* RootViewNavigator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewNavigator.swift; sourceTree = ""; }; CA05132222D933BA008B4B48 /* CellDateComposer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CellDateComposer.swift; sourceTree = ""; }; CA05132522D933E8008B4B48 /* CellDataItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CellDataItem.swift; sourceTree = ""; }; + CA46D4C7250ADF6300DD38CA /* RankingCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RankingCollectionViewController.swift; sourceTree = ""; }; CA4C66CA2507A62C0049B522 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; }; CA4C66E12507A64D0049B522 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; }; CA4C66EB250859290049B522 /* Utilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utilities.swift; sourceTree = ""; }; @@ -369,6 +371,7 @@ CA00ACD222D2F0B7005ECFFE /* RootViewNavigator.swift */, CA73155C22D33E100046A75B /* CollectionViewCell.swift */, CA73156022D3420D0046A75B /* SubscriptionsCollectionViewController.swift */, + CA46D4C7250ADF6300DD38CA /* RankingCollectionViewController.swift */, CA4C67022509ADCC0049B522 /* HistoryCollectionViewController.swift */, CA4C670C250A4E550049B522 /* VideoRelationCollectionViewController.swift */, CA705E5622DADA1200615664 /* VideoPlayViewController.swift */, @@ -740,6 +743,7 @@ CA4C6707250A14040049B522 /* VideoDetailViewController.swift in Sources */, CAF4F2EE22E349D000CCE549 /* DanmuData.swift in Sources */, CA00AC5B22D1DE82005ECFFE /* ProfileViewController.swift in Sources */, + CA46D4DD250ADF6300DD38CA /* RankingCollectionViewController.swift in Sources */, CA00AC5922D1DE82005ECFFE /* AppDelegate.swift in Sources */, CA73156122D3420D0046A75B /* SubscriptionsCollectionViewController.swift in Sources */, CA705E5722DADA1200615664 /* VideoPlayViewController.swift in Sources */, diff --git a/Alibili/Base.lproj/Main.storyboard b/Alibili/Base.lproj/Main.storyboard index 2d41b73..86909c2 100644 --- a/Alibili/Base.lproj/Main.storyboard +++ b/Alibili/Base.lproj/Main.storyboard @@ -176,6 +176,7 @@ + @@ -441,8 +442,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + diff --git a/Alibili/RankingCollectionViewController.swift b/Alibili/RankingCollectionViewController.swift new file mode 100644 index 0000000..2f323ff --- /dev/null +++ b/Alibili/RankingCollectionViewController.swift @@ -0,0 +1,112 @@ +// +// HistoryCollectionViewController.swift +// Alibili +// +// Created by xnzhang on 2020/09/10. +// Copyright © 2020 Xiaonan Zhang. All rights reserved. +// + +import Foundation +import UIKit +import Alamofire +import SwiftyJSON +import AVKit + +private let reuseIdentifier = CollectionViewCell.reuseIdentifier + +class RankingCollectionViewController: UICollectionViewController { + + private let cookieManager:CookieManager = CookieManager() + + private let cellComposer = CellDataComposer() + + private var targetSize = CGSize.zero + + var dataItemGourp:[JSON] = [] + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + + let kColumnCnt: Int = 3 + let kCellSpacing: CGFloat = 40 + + let imgWidth = (collectionView.frame.width - (kCellSpacing * (CGFloat(kColumnCnt) - 1))) / CGFloat(kColumnCnt) + targetSize = CGSize(width: imgWidth, height: imgWidth * 9 / 16) + + let layout = UICollectionViewFlowLayout() + layout.itemSize = targetSize + layout.minimumInteritemSpacing = kCellSpacing + layout.minimumLineSpacing = kCellSpacing + collectionView.collectionViewLayout = layout + + if(cookieManager.isUserCookieSet(forKey: "User-Cookie")){ + loadRankingData() + } + } + + func loadRankingData() -> Void { + let headers: HTTPHeaders = [ + "Set-Cookie":cookieManager.getUserCookie(forKey: "User-Cookie")!, + "Accept": "application/json" + ] + AF.request(Urls.getRanking(day: "3"), headers: headers).responseJSON { response in + switch(response.result) { + case .success(let data): + let json = JSON(data) + self.dataItemGourp.append(contentsOf: json["data"]["list"].array ?? []) + DispatchQueue.main.async{ + self.collectionView.reloadData() + } + case .failure(let error): + print(error) + break + } + } + } + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. + } + */ + + // MARK: UICollectionViewDataSource + + override func numberOfSections(in collectionView: UICollectionView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + + override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of items + return self.dataItemGourp.count + } + + override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CollectionViewCell.reuseIdentifier, for: indexPath) + return cell + } + + override func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { + guard let cell = cell as? CollectionViewCell else { fatalError("Expected to display a `CollectionViewCell`.") } +// cell.backgroundColor = randomColor() + let item = dataItemGourp[indexPath.item] + // Configure the cell. + cellComposer.compose(cell, cellStyle: targetSize ,withDataItem: CellDataItem(jsonData: item)) + } + + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + if let destination = segue.destination as? + VideoDetailViewController, let index = + collectionView.indexPathsForSelectedItems?.first { + let item = dataItemGourp[index.item] + destination.videoJson = CellDataItem(jsonData: item) + } + } +} From a0b38d928c30ba1e91ecc941c922ff6abed14924 Mon Sep 17 00:00:00 2001 From: sauvignon1989 Date: Fri, 11 Sep 2020 20:45:21 +0900 Subject: [PATCH 02/18] change title --- Alibili/Base.lproj/Main.storyboard | 2 +- Alibili/CellDataItem.swift | 26 -------------------------- 2 files changed, 1 insertion(+), 27 deletions(-) diff --git a/Alibili/Base.lproj/Main.storyboard b/Alibili/Base.lproj/Main.storyboard index 86909c2..bc0c69c 100644 --- a/Alibili/Base.lproj/Main.storyboard +++ b/Alibili/Base.lproj/Main.storyboard @@ -488,7 +488,7 @@ - + diff --git a/Alibili/CellDataItem.swift b/Alibili/CellDataItem.swift index 29ea092..862d24b 100644 --- a/Alibili/CellDataItem.swift +++ b/Alibili/CellDataItem.swift @@ -10,11 +10,6 @@ import Foundation import SwiftyJSON struct CellDataItem: Codable, Equatable { - // "dimension" : { - // "height" : 818, - // "width" : 1920, - // "rotate" : 0 - // }, var cid:String var pic: String var owner:Owner @@ -76,27 +71,6 @@ struct Owner : Codable{ } } -//struct CellDataItem: Codable, Equatable { -// -// let id: String -// let fold: String -// let bangumi: String -// var archive: Archive -// var official_verify : OfficialVerify -// let type:Int -// let pubdate :String -// -// init(jsonData:JSON) { -// self.id = jsonData["id"].stringValue -// self.fold = jsonData["fold"].stringValue -// self.bangumi = jsonData["bangumi"].stringValue -// self.archive = Archive(jsonData: jsonData["archive"]) -// self.official_verify = OfficialVerify(jsonData: jsonData["official_verify"]) -// self.type = jsonData["type"].int! -// self.pubdate = jsonData["pubdate"].stringValue -// } -//} - // MARK: Equatable func ==(lhs: CellDataItem, rhs: CellDataItem)-> Bool { From 847212049c48f8c71606fcf3cd18c7893450c373 Mon Sep 17 00:00:00 2001 From: sauvignon1989 Date: Fri, 11 Sep 2020 21:31:38 +0900 Subject: [PATCH 03/18] change cell data struct --- Alibili/CellDataItem.swift | 32 ++++++++----- Alibili/RankingCollectionViewController.swift | 4 ++ ...ubscriptionsCollectionViewController.swift | 3 ++ Alibili/VideoDetailViewController.swift | 46 +++++++++++++------ Alibili/VideoPlayViewController.swift | 27 ++--------- 5 files changed, 64 insertions(+), 48 deletions(-) diff --git a/Alibili/CellDataItem.swift b/Alibili/CellDataItem.swift index 862d24b..4526948 100644 --- a/Alibili/CellDataItem.swift +++ b/Alibili/CellDataItem.swift @@ -12,37 +12,47 @@ import SwiftyJSON struct CellDataItem: Codable, Equatable { var cid:String var pic: String - var owner:Owner + var title :String + var aid :String + var bvid :String + var videoDetail: VideoDetail + + init(jsonData:JSON) { + self.cid = jsonData["cid"].stringValue + self.bvid = jsonData["bvid"].stringValue + self.pic = jsonData["pic"].stringValue + self.aid = jsonData["aid"].stringValue + self.title = jsonData["title"].stringValue + self.videoDetail = VideoDetail(jsonData: jsonData) + } +} + +struct VideoDetail: Codable { var videos:Int + var owner:Owner var tid :String var ctime:String var duration:String var desc:String - var title :String var pubdate:String var state:Int var attribute:String var tname:String var copyright:Int - var aid :String var dynamic:String init(jsonData:JSON) { - self.cid = jsonData["cid"].stringValue - self.pic = jsonData["pic"].stringValue + self.videos = jsonData["videos"].int ?? -1 self.owner = Owner(jsonData: jsonData["role"]) - self.videos = jsonData["videos"].int! self.tid = jsonData["tid"].stringValue self.ctime = jsonData["ctime"].stringValue self.duration = jsonData["duration"].stringValue self.desc = jsonData["desc"].stringValue - self.title = jsonData["title"].stringValue self.pubdate = jsonData["pubdate"].stringValue - self.state = jsonData["state"].int! + self.state = jsonData["state"].int ?? -1 self.attribute = jsonData["attribute"].stringValue self.tname = jsonData["tname"].stringValue - self.copyright = jsonData["copyright"].int! - self.aid = jsonData["aid"].stringValue + self.copyright = jsonData["copyright"].int ?? -1 self.dynamic = jsonData["dynamic"].stringValue } } @@ -53,7 +63,7 @@ struct OfficialVerify: Codable { var desc :String init(jsonData:JSON) { - self.role = jsonData["role"].int! + self.role = jsonData["role"].int ?? -1 self.title = jsonData["title"].stringValue self.desc = jsonData["desc"].stringValue } diff --git a/Alibili/RankingCollectionViewController.swift b/Alibili/RankingCollectionViewController.swift index 2f323ff..231bc81 100644 --- a/Alibili/RankingCollectionViewController.swift +++ b/Alibili/RankingCollectionViewController.swift @@ -98,6 +98,10 @@ class RankingCollectionViewController: UICollectionViewController { // cell.backgroundColor = randomColor() let item = dataItemGourp[indexPath.item] // Configure the cell. + if (indexPath.item == 0) { + print(CellDataItem(jsonData: item)) + } + cellComposer.compose(cell, cellStyle: targetSize ,withDataItem: CellDataItem(jsonData: item)) } diff --git a/Alibili/SubscriptionsCollectionViewController.swift b/Alibili/SubscriptionsCollectionViewController.swift index 0c4a782..009767e 100644 --- a/Alibili/SubscriptionsCollectionViewController.swift +++ b/Alibili/SubscriptionsCollectionViewController.swift @@ -102,6 +102,9 @@ class SubscriptionsCollectionViewController: UICollectionViewController { // cell.backgroundColor = randomColor() let item = dataItemGourp[indexPath.item]["archive"] // Configure the cell. + if (indexPath.item == 0) { + print(CellDataItem(jsonData: item)) + } cellComposer.compose(cell, cellStyle: targetSize ,withDataItem: CellDataItem(jsonData: item)) if dataItemGourp.count - 1 == indexPath.item { diff --git a/Alibili/VideoDetailViewController.swift b/Alibili/VideoDetailViewController.swift index 500195d..096098d 100644 --- a/Alibili/VideoDetailViewController.swift +++ b/Alibili/VideoDetailViewController.swift @@ -7,18 +7,21 @@ // import UIKit +import Alamofire +import SwiftyJSON class VideoDetailViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { private let cookieManager:CookieManager = CookieManager() var videoJson:CellDataItem! + private var aId: String = "" + private var cId: String = "" + var parts:[Int] = [] @IBOutlet weak var VideoTitle: UITextView! @IBOutlet weak var VideoDescription: UITextView! @IBOutlet weak var PartTableView: UITableView! - var parts:[Int] = [] - override func viewDidLoad() { super.viewDidLoad() @@ -27,18 +30,9 @@ class VideoDetailViewController: UIViewController, UITableViewDelegate, UITableV // Do any additional setup after loading the view. VideoTitle.text = videoJson.title - parts = Array(1...videoJson.videos) - - VideoDescription.text = videoJson.desc -// print(VideoDescription.text.count) -// let range = NSMakeRange(VideoDescription.text.count - 1, 1) -// VideoDescription.scrollRangeToVisible(range) -// let blurEffect = UIBlurEffect(style: UIBlurEffect.Style.dark) -// let blurEffectView = UIVisualEffectView(effect: blurEffect) -// blurEffectView.frame = view.bounds -// blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight] -// self.view.addSubview(blurEffectView) +// parts = Array(1...videoJson.videos) +// VideoDescription.text = videoJson.desc guard let image = self.processImage(named: videoJson.pic) else { return } let backgroundImage = UIImageView(frame: UIScreen.main.bounds) @@ -101,7 +95,8 @@ class VideoDetailViewController: UIViewController, UITableViewDelegate, UITableV VideoPlayerViewController, let index = PartTableView.indexPathsForSelectedRows?.first { destination.pageNum = index.row - destination.videoJson = self.videoJson + destination.aid = self.aId + destination.cid = self.cId } if let destination = segue.destination as? @@ -111,6 +106,29 @@ class VideoDetailViewController: UIViewController, UITableViewDelegate, UITableV } } + func loadData(aid:String,pageNum:Int) -> Void { + if(cookieManager.isUserCookieSet(forKey: "User-Cookie")){ + let headers: HTTPHeaders = [ + "Set-Cookie":cookieManager.getUserCookie(forKey: "User-Cookie")!, + "Accept": "application/json" + ] + AF.request(Urls.getVideoInfo(avId: aid),headers:headers).responseJSON { response in + switch(response.result) { + case .success(let data): + let json = JSON(data) + self.cId = json["data"]["cid"].stringValue + if pageNum != 0 { +// cId = json["data"]["pages"][pageNum]["cid"].stringValue + } + + case .failure(let error): + print(error) + break + } + } + } + } + /* // MARK: - tableview delegate & datasource - */ diff --git a/Alibili/VideoPlayViewController.swift b/Alibili/VideoPlayViewController.swift index 4066c1f..ff3e992 100644 --- a/Alibili/VideoPlayViewController.swift +++ b/Alibili/VideoPlayViewController.swift @@ -37,12 +37,15 @@ class VideoPlayerViewController: UIViewController, BarrageRendererDelegate, VLCM var barrageRenderer:BarrageRenderer! var danmuList:[CUnsignedLongLong : [DanmuData]] = [:] + var aid: String = "" + var cid: String = "" + override func viewDidLoad() { super.viewDidLoad() playerView.addSubview(activityIndicatiorView) activityIndicatiorView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true activityIndicatiorView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true - loadData(avId: videoJson.aid, pageNum: pageNum) + loadMediaData(avId: aid, cid: cid) } func walkTextSpriteDescriptorWithDirection(direction:UInt, text:String) -> BarrageDescriptor{ @@ -184,26 +187,4 @@ class VideoPlayerViewController: UIViewController, BarrageRendererDelegate, VLCM print("default") } } - - - func loadData(avId:String,pageNum:Int) -> Void { - AF.request(Urls.getVideoInfo(avId: avId)).responseJSON { response in - switch(response.result) { - case .success(let data): - let json = JSON(data) - var cid = json["data"]["cid"].stringValue - print(avId) - print(pageNum) - print(cid) - if pageNum != 0 { - cid = json["data"]["pages"][pageNum]["cid"].stringValue - } - self.loadMediaData(avId: avId, cid: cid) - - case .failure(let error): - print(error) - break - } - } - } } From 69e8d930f2eecefca8b64e646cee1fc8e8d2fdd9 Mon Sep 17 00:00:00 2001 From: sauvignon1989 Date: Sat, 12 Sep 2020 07:38:13 +0900 Subject: [PATCH 04/18] finish ranking --- Alibili/CookieManager.swift | 1 - Alibili/LoginViewController.swift | 1 - Alibili/ProfileViewController.swift | 15 ----- Alibili/RankingCollectionViewController.swift | 4 -- ...ubscriptionsCollectionViewController.swift | 67 ------------------- Alibili/VideoDetailViewController.swift | 29 ++++---- Alibili/VideoPlayViewController.swift | 35 ++++++++-- 7 files changed, 45 insertions(+), 107 deletions(-) diff --git a/Alibili/CookieManager.swift b/Alibili/CookieManager.swift index ff43bb9..50063d5 100644 --- a/Alibili/CookieManager.swift +++ b/Alibili/CookieManager.swift @@ -68,7 +68,6 @@ class CookieManager { if let cookies = HTTPCookieStorage.shared.cookies(for: url) { for cookie in cookies { if (cookie.name == name) { - print(cookie) return cookie.value } } diff --git a/Alibili/LoginViewController.swift b/Alibili/LoginViewController.swift index 9ddbd75..5a1a550 100644 --- a/Alibili/LoginViewController.swift +++ b/Alibili/LoginViewController.swift @@ -91,7 +91,6 @@ class LoginViewController: UIViewController { } }else{ if let data = dictionary["data"] as? Int { - print(data) if data == -2{ self.startValidation() } diff --git a/Alibili/ProfileViewController.swift b/Alibili/ProfileViewController.swift index b1fc8b8..e6b2f4b 100644 --- a/Alibili/ProfileViewController.swift +++ b/Alibili/ProfileViewController.swift @@ -46,21 +46,6 @@ class ProfileViewController: UIViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) - -// if(cookieManager.isUserCookieSet(forKey: "User-Cookie")){ -// let headers: HTTPHeaders = [ -// "Set-Cookie":cookieManager.getUserCookie(forKey: "User-Cookie")!, -// "Accept": "application/json" -// ] -// AF.request(Urls.getUserInfo, headers: headers).responseJSON { response in -//// print("Result: \(response.result)") -// } -// -// } -// else{ -// let destinationController = storyboard!.instantiateViewController(withIdentifier: "login") -// present(destinationController, animated: true, completion: nil) -// } } diff --git a/Alibili/RankingCollectionViewController.swift b/Alibili/RankingCollectionViewController.swift index 231bc81..2f323ff 100644 --- a/Alibili/RankingCollectionViewController.swift +++ b/Alibili/RankingCollectionViewController.swift @@ -98,10 +98,6 @@ class RankingCollectionViewController: UICollectionViewController { // cell.backgroundColor = randomColor() let item = dataItemGourp[indexPath.item] // Configure the cell. - if (indexPath.item == 0) { - print(CellDataItem(jsonData: item)) - } - cellComposer.compose(cell, cellStyle: targetSize ,withDataItem: CellDataItem(jsonData: item)) } diff --git a/Alibili/SubscriptionsCollectionViewController.swift b/Alibili/SubscriptionsCollectionViewController.swift index 009767e..71076d7 100644 --- a/Alibili/SubscriptionsCollectionViewController.swift +++ b/Alibili/SubscriptionsCollectionViewController.swift @@ -102,9 +102,6 @@ class SubscriptionsCollectionViewController: UICollectionViewController { // cell.backgroundColor = randomColor() let item = dataItemGourp[indexPath.item]["archive"] // Configure the cell. - if (indexPath.item == 0) { - print(CellDataItem(jsonData: item)) - } cellComposer.compose(cell, cellStyle: targetSize ,withDataItem: CellDataItem(jsonData: item)) if dataItemGourp.count - 1 == indexPath.item { @@ -160,67 +157,3 @@ class SubscriptionsCollectionViewController: UICollectionViewController { */ } - -// print(Urls.getVideo(avId: String, pageNum: String)) -// AF.request(Urls.getVideo(avId: String, pageNum: String), headers: headers).responseString { response in -// -// if let playInfoRange = response.description.range(of: #"__playinfo__=(.*?)<\/script>"#, -// options: .regularExpression) { -// let playInfoString = response.description[playInfoRange].replacingOccurrences( -// of: "__playinfo__=(.*?)$", -// with: "$1", -// options: .regularExpression, -// range: playInfoRange -// ).replacingOccurrences(of: "\\\"", with: "\"") -// if let dataFromString = playInfoString.data(using: .utf8, allowLossyConversion: false) { -// do { -// let json = try JSON(data: dataFromString) -// print(json) -// } catch { -// print(error) -// } -// } -// -// -// } else { -// print("1 -----") -// } -// print("----------------------------") -// if let initialStateRange = response.description.range(of: #"__INITIAL_STATE__=(.*?)\};"#, -// options: .regularExpression) { -// var initialStateString = response.description[initialStateRange].replacingOccurrences( -// of: #"__INITIAL_STATE__=(.*?)\};$"#, -// with: #"$1"#, -// options: .regularExpression, -// range: initialStateRange -// ).replacingOccurrences(of: "\\u002F", with: "/") -// .replacingOccurrences(of: #"\/"#, with: "/") -// .replacingOccurrences(of: "\\\"", with: "\"") -// .replacingOccurrences(of: #",\"embedPlayer\":\"EmbedPlayer(.*?)\)\""#, with: "", options: [.regularExpression]) -// -// initialStateString.append("}") -// -// -// if let dataFromString = initialStateString.data(using: .utf8, allowLossyConversion: false) { -// do { -// let json = try JSON(data: dataFromString) -// print(json) -// } catch { -// print(error) -// } -// } -// -// } else { -// print("2 -----") -// } -// print(response) -// switch(response.result) { -// case .success(let data): -//// let json = JSON(data) -// print(data) -// case .failure(let error): -// print(error) -// break -// } -// -// } diff --git a/Alibili/VideoDetailViewController.swift b/Alibili/VideoDetailViewController.swift index 096098d..fdbc1bf 100644 --- a/Alibili/VideoDetailViewController.swift +++ b/Alibili/VideoDetailViewController.swift @@ -14,8 +14,7 @@ class VideoDetailViewController: UIViewController, UITableViewDelegate, UITableV private let cookieManager:CookieManager = CookieManager() var videoJson:CellDataItem! - private var aId: String = "" - private var cId: String = "" + var videoInfo:JSON = JSON({}) var parts:[Int] = [] @IBOutlet weak var VideoTitle: UITextView! @@ -31,8 +30,12 @@ class VideoDetailViewController: UIViewController, UITableViewDelegate, UITableV // Do any additional setup after loading the view. VideoTitle.text = videoJson.title -// parts = Array(1...videoJson.videos) -// VideoDescription.text = videoJson.desc + if videoJson.videoDetail.videos == -1 { + loadData(aid: videoJson.aid) + } else { + parts = Array(1...videoJson.videoDetail.videos) + VideoDescription.text = videoJson.videoDetail.desc + } guard let image = self.processImage(named: videoJson.pic) else { return } let backgroundImage = UIImageView(frame: UIScreen.main.bounds) @@ -94,19 +97,18 @@ class VideoDetailViewController: UIViewController, UITableViewDelegate, UITableV if let destination = segue.destination as? VideoPlayerViewController, let index = PartTableView.indexPathsForSelectedRows?.first { + destination.videoInfo = self.videoInfo destination.pageNum = index.row - destination.aid = self.aId - destination.cid = self.cId + destination.videoJson = self.videoJson } if let destination = segue.destination as? VideoRelationCollectionViewController { destination.aid = videoJson.aid - } } - func loadData(aid:String,pageNum:Int) -> Void { + func loadData(aid:String) -> Void { if(cookieManager.isUserCookieSet(forKey: "User-Cookie")){ let headers: HTTPHeaders = [ "Set-Cookie":cookieManager.getUserCookie(forKey: "User-Cookie")!, @@ -115,12 +117,11 @@ class VideoDetailViewController: UIViewController, UITableViewDelegate, UITableV AF.request(Urls.getVideoInfo(avId: aid),headers:headers).responseJSON { response in switch(response.result) { case .success(let data): - let json = JSON(data) - self.cId = json["data"]["cid"].stringValue - if pageNum != 0 { -// cId = json["data"]["pages"][pageNum]["cid"].stringValue - } - + self.videoInfo = JSON(data)["data"] + self.videoJson.videoDetail = VideoDetail(jsonData: self.videoInfo) + self.parts = Array(1...self.videoJson.videoDetail.videos) + self.VideoDescription.text = self.videoJson.videoDetail.desc + self.PartTableView.reloadData() case .failure(let error): print(error) break diff --git a/Alibili/VideoPlayViewController.swift b/Alibili/VideoPlayViewController.swift index ff3e992..8bbbdf3 100644 --- a/Alibili/VideoPlayViewController.swift +++ b/Alibili/VideoPlayViewController.swift @@ -27,7 +27,7 @@ class VideoPlayerViewController: UIViewController, BarrageRendererDelegate, VLCM var observation: NSKeyValueObservation? private let cookieManager:CookieManager = CookieManager() - var videoJson:CellDataItem! + var pageNum:Int = 0 let player:VLCMediaPlayer = VLCMediaPlayer() var videoLength:CUnsignedLongLong = 0 @@ -37,15 +37,15 @@ class VideoPlayerViewController: UIViewController, BarrageRendererDelegate, VLCM var barrageRenderer:BarrageRenderer! var danmuList:[CUnsignedLongLong : [DanmuData]] = [:] - var aid: String = "" - var cid: String = "" + var videoJson:CellDataItem! + var videoInfo: JSON = JSON({}) override func viewDidLoad() { super.viewDidLoad() playerView.addSubview(activityIndicatiorView) activityIndicatiorView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true activityIndicatiorView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true - loadMediaData(avId: aid, cid: cid) + loadData(avId: videoJson.aid, pageNum: pageNum) } func walkTextSpriteDescriptorWithDirection(direction:UInt, text:String) -> BarrageDescriptor{ @@ -93,7 +93,6 @@ class VideoPlayerViewController: UIViewController, BarrageRendererDelegate, VLCM } func loadDanmuData(cid:String) -> Void { - print(Urls.getDanmu(cid: cid)) AF.request(Urls.getDanmu(cid: cid)).responseString(encoding: String.Encoding.utf8) { response in var statusCode = response.response?.statusCode switch response.result { @@ -187,4 +186,30 @@ class VideoPlayerViewController: UIViewController, BarrageRendererDelegate, VLCM print("default") } } + + func loadData(avId:String, pageNum:Int) -> Void { + if self.videoInfo.isEmpty { + AF.request(Urls.getVideoInfo(avId: avId)).responseJSON { response in + switch(response.result) { + case .success(let data): + self.videoInfo = JSON(data)["data"] + var cid = self.videoInfo["cid"].stringValue + if pageNum != 0 { + cid = self.videoInfo["pages"][pageNum]["cid"].stringValue + } + self.loadMediaData(avId: avId, cid: cid) + case .failure(let error): + print(error) + break + } + } + } else { + var cid = self.videoInfo["cid"].stringValue + if pageNum != 0 { + cid = self.videoInfo["pages"][pageNum]["cid"].stringValue + } + self.loadMediaData(avId: avId, cid: cid) + } + + } } From a92375c9afe2823ce4c4f9a5ea5f82ddec8e8e92 Mon Sep 17 00:00:00 2001 From: sauvignon1989 Date: Sat, 12 Sep 2020 07:58:40 +0900 Subject: [PATCH 05/18] fix bug --- Alibili/CellDataItem.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Alibili/CellDataItem.swift b/Alibili/CellDataItem.swift index 5fd8efc..0649694 100644 --- a/Alibili/CellDataItem.swift +++ b/Alibili/CellDataItem.swift @@ -15,7 +15,6 @@ struct CellDataItem: Codable, Equatable { var pic: String var title :String var aid :String - var bvid :String var videoDetail: VideoDetail init(jsonData:JSON) { From 1b9dcb2ca2add018a51caf3a1d7f93dda7ae1d58 Mon Sep 17 00:00:00 2001 From: sauvignon1989 Date: Sat, 12 Sep 2020 10:14:06 +0900 Subject: [PATCH 06/18] add uploader button --- Alibili/Base.lproj/Main.storyboard | 91 +++++++++++--- Alibili/CellDataItem.swift | 2 +- Alibili/MainNavigationController.swift | 31 ----- Alibili/TableViewController.swift | 93 --------------- ...ploaderCollectionViewController copy.swift | 112 ++++++++++++++++++ Alibili/VideoDetailViewController.swift | 3 + 6 files changed, 193 insertions(+), 139 deletions(-) delete mode 100644 Alibili/MainNavigationController.swift delete mode 100644 Alibili/TableViewController.swift create mode 100644 Alibili/UploaderCollectionViewController copy.swift diff --git a/Alibili/Base.lproj/Main.storyboard b/Alibili/Base.lproj/Main.storyboard index bc0c69c..28be8c8 100644 --- a/Alibili/Base.lproj/Main.storyboard +++ b/Alibili/Base.lproj/Main.storyboard @@ -2,7 +2,6 @@ - @@ -102,18 +101,12 @@ - - + + - - - - - - - - + + @@ -144,18 +137,33 @@ - + + + + + + + + + + + @@ -163,7 +171,7 @@ - + @@ -393,7 +401,7 @@ - + @@ -498,6 +506,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Alibili/CellDataItem.swift b/Alibili/CellDataItem.swift index 0649694..2a72069 100644 --- a/Alibili/CellDataItem.swift +++ b/Alibili/CellDataItem.swift @@ -43,7 +43,7 @@ struct VideoDetail: Codable { init(jsonData:JSON) { self.videos = jsonData["videos"].int ?? -1 - self.owner = Owner(jsonData: jsonData["role"]) + self.owner = Owner(jsonData: jsonData["owner"]) self.tid = jsonData["tid"].stringValue self.ctime = jsonData["ctime"].stringValue self.duration = jsonData["duration"].stringValue diff --git a/Alibili/MainNavigationController.swift b/Alibili/MainNavigationController.swift deleted file mode 100644 index 4501251..0000000 --- a/Alibili/MainNavigationController.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// MainNavigationController.swift -// Alibili -// -// Created by Xiaonan Zhang on 2019/07/08. -// Copyright © 2019 Xiaonan Zhang. All rights reserved. -// - -import UIKit -import Foundation - -class MainNavigationController: UINavigationController { - - override func viewDidLoad() { - super.viewDidLoad() - - // Do any additional setup after loading the view. - } - - - /* - // MARK: - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. - } - */ - -} diff --git a/Alibili/TableViewController.swift b/Alibili/TableViewController.swift deleted file mode 100644 index 8901e9f..0000000 --- a/Alibili/TableViewController.swift +++ /dev/null @@ -1,93 +0,0 @@ -// -// TableViewController.swift -// Alibili -// -// Created by Xiaonan Zhang on 2019/07/07. -// Copyright © 2019 Xiaonan Zhang. All rights reserved. -// - -import UIKit - -class TableViewController: UITableViewController { - - let contents = Array(1...100) - - override func viewDidLoad() { - super.viewDidLoad() - - // Uncomment the following line to preserve selection between presentations - // self.clearsSelectionOnViewWillAppear = false - - // Uncomment the following line to display an Edit button in the navigation bar for this view controller. - // self.navigationItem.rightBarButtonItem = self.editButtonItem - } - - // MARK: - Table view data source - - override func numberOfSections(in tableView: UITableView) -> Int { - // #warning Incomplete implementation, return the number of sections - return 1 - } - - override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - // #warning Incomplete implementation, return the number of rows - return contents.count - } - - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { -// let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) - -// Configure the cell... - let cell = UITableViewCell() - cell.textLabel?.text = String(contents[indexPath.row]) - - - return cell - } - - /* - // Override to support conditional editing of the table view. - override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { - // Return false if you do not want the specified item to be editable. - return true - } - */ - - /* - // Override to support editing the table view. - override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { - if editingStyle == .delete { - // Delete the row from the data source - tableView.deleteRows(at: [indexPath], with: .fade) - } else if editingStyle == .insert { - // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view - } - } - */ - - /* - // Override to support rearranging the table view. - override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { - - } - */ - - /* - // Override to support conditional rearranging of the table view. - override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { - // Return false if you do not want the item to be re-orderable. - return true - } - */ - - /* - // MARK: - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. - } - */ - -} diff --git a/Alibili/UploaderCollectionViewController copy.swift b/Alibili/UploaderCollectionViewController copy.swift new file mode 100644 index 0000000..2f323ff --- /dev/null +++ b/Alibili/UploaderCollectionViewController copy.swift @@ -0,0 +1,112 @@ +// +// HistoryCollectionViewController.swift +// Alibili +// +// Created by xnzhang on 2020/09/10. +// Copyright © 2020 Xiaonan Zhang. All rights reserved. +// + +import Foundation +import UIKit +import Alamofire +import SwiftyJSON +import AVKit + +private let reuseIdentifier = CollectionViewCell.reuseIdentifier + +class RankingCollectionViewController: UICollectionViewController { + + private let cookieManager:CookieManager = CookieManager() + + private let cellComposer = CellDataComposer() + + private var targetSize = CGSize.zero + + var dataItemGourp:[JSON] = [] + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + + let kColumnCnt: Int = 3 + let kCellSpacing: CGFloat = 40 + + let imgWidth = (collectionView.frame.width - (kCellSpacing * (CGFloat(kColumnCnt) - 1))) / CGFloat(kColumnCnt) + targetSize = CGSize(width: imgWidth, height: imgWidth * 9 / 16) + + let layout = UICollectionViewFlowLayout() + layout.itemSize = targetSize + layout.minimumInteritemSpacing = kCellSpacing + layout.minimumLineSpacing = kCellSpacing + collectionView.collectionViewLayout = layout + + if(cookieManager.isUserCookieSet(forKey: "User-Cookie")){ + loadRankingData() + } + } + + func loadRankingData() -> Void { + let headers: HTTPHeaders = [ + "Set-Cookie":cookieManager.getUserCookie(forKey: "User-Cookie")!, + "Accept": "application/json" + ] + AF.request(Urls.getRanking(day: "3"), headers: headers).responseJSON { response in + switch(response.result) { + case .success(let data): + let json = JSON(data) + self.dataItemGourp.append(contentsOf: json["data"]["list"].array ?? []) + DispatchQueue.main.async{ + self.collectionView.reloadData() + } + case .failure(let error): + print(error) + break + } + } + } + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. + } + */ + + // MARK: UICollectionViewDataSource + + override func numberOfSections(in collectionView: UICollectionView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + + override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of items + return self.dataItemGourp.count + } + + override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CollectionViewCell.reuseIdentifier, for: indexPath) + return cell + } + + override func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { + guard let cell = cell as? CollectionViewCell else { fatalError("Expected to display a `CollectionViewCell`.") } +// cell.backgroundColor = randomColor() + let item = dataItemGourp[indexPath.item] + // Configure the cell. + cellComposer.compose(cell, cellStyle: targetSize ,withDataItem: CellDataItem(jsonData: item)) + } + + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + if let destination = segue.destination as? + VideoDetailViewController, let index = + collectionView.indexPathsForSelectedItems?.first { + let item = dataItemGourp[index.item] + destination.videoJson = CellDataItem(jsonData: item) + } + } +} diff --git a/Alibili/VideoDetailViewController.swift b/Alibili/VideoDetailViewController.swift index fdbc1bf..2e4aa8a 100644 --- a/Alibili/VideoDetailViewController.swift +++ b/Alibili/VideoDetailViewController.swift @@ -17,6 +17,7 @@ class VideoDetailViewController: UIViewController, UITableViewDelegate, UITableV var videoInfo:JSON = JSON({}) var parts:[Int] = [] + @IBOutlet weak var Owner: UIButton! @IBOutlet weak var VideoTitle: UITextView! @IBOutlet weak var VideoDescription: UITextView! @IBOutlet weak var PartTableView: UITableView! @@ -35,6 +36,7 @@ class VideoDetailViewController: UIViewController, UITableViewDelegate, UITableV } else { parts = Array(1...videoJson.videoDetail.videos) VideoDescription.text = videoJson.videoDetail.desc + Owner.setTitle(videoJson.videoDetail.owner.name, for: .normal) } guard let image = self.processImage(named: videoJson.pic) else { return } @@ -121,6 +123,7 @@ class VideoDetailViewController: UIViewController, UITableViewDelegate, UITableV self.videoJson.videoDetail = VideoDetail(jsonData: self.videoInfo) self.parts = Array(1...self.videoJson.videoDetail.videos) self.VideoDescription.text = self.videoJson.videoDetail.desc + self.Owner.setTitle(self.videoJson.videoDetail.owner.name, for: .normal) self.PartTableView.reloadData() case .failure(let error): print(error) From ebebb39128a93535259ff787c57e269396a4e3df Mon Sep 17 00:00:00 2001 From: sauvignon1989 Date: Sat, 12 Sep 2020 11:27:10 +0900 Subject: [PATCH 07/18] fix bug --- Alibili.xcodeproj/project.pbxproj | 6 +- Alibili/Base.lproj/Main.storyboard | 24 +-- Alibili/CellDateComposer.swift | 7 +- Alibili/HistoryCollectionViewController.swift | 2 +- Alibili/OwnerCollectionViewController.swift | 162 ++++++++++++++++++ Alibili/Utilities.swift | 6 +- Alibili/VideoDetailViewController.swift | 7 +- 7 files changed, 198 insertions(+), 16 deletions(-) create mode 100644 Alibili/OwnerCollectionViewController.swift diff --git a/Alibili.xcodeproj/project.pbxproj b/Alibili.xcodeproj/project.pbxproj index 058a1c4..891799b 100644 --- a/Alibili.xcodeproj/project.pbxproj +++ b/Alibili.xcodeproj/project.pbxproj @@ -19,6 +19,7 @@ CA05132422D933BA008B4B48 /* CellDateComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA05132222D933BA008B4B48 /* CellDateComposer.swift */; }; CA05132622D933E8008B4B48 /* CellDataItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA05132522D933E8008B4B48 /* CellDataItem.swift */; }; CA46D4DD250ADF6300DD38CA /* RankingCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA46D4C7250ADF6300DD38CA /* RankingCollectionViewController.swift */; }; + CA46D57F250C5B4E00DD38CA /* OwnerCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA46D57E250C5B4E00DD38CA /* OwnerCollectionViewController.swift */; }; CA4C66E02507A62C0049B522 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA4C66CA2507A62C0049B522 /* Metal.framework */; }; CA4C66E22507A64D0049B522 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA4C66E12507A64D0049B522 /* CoreServices.framework */; }; CA4C66EC250859290049B522 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA4C66EB250859290049B522 /* Utilities.swift */; }; @@ -263,6 +264,7 @@ CA05132222D933BA008B4B48 /* CellDateComposer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CellDateComposer.swift; sourceTree = ""; }; CA05132522D933E8008B4B48 /* CellDataItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CellDataItem.swift; sourceTree = ""; }; CA46D4C7250ADF6300DD38CA /* RankingCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RankingCollectionViewController.swift; sourceTree = ""; }; + CA46D57E250C5B4E00DD38CA /* OwnerCollectionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OwnerCollectionViewController.swift; sourceTree = ""; }; CA4C66CA2507A62C0049B522 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; }; CA4C66E12507A64D0049B522 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; }; CA4C66EB250859290049B522 /* Utilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utilities.swift; sourceTree = ""; }; @@ -371,6 +373,7 @@ CA00ACD222D2F0B7005ECFFE /* RootViewNavigator.swift */, CA73155C22D33E100046A75B /* CollectionViewCell.swift */, CA73156022D3420D0046A75B /* SubscriptionsCollectionViewController.swift */, + CA46D57E250C5B4E00DD38CA /* OwnerCollectionViewController.swift */, CA46D4C7250ADF6300DD38CA /* RankingCollectionViewController.swift */, CA4C67022509ADCC0049B522 /* HistoryCollectionViewController.swift */, CA4C670C250A4E550049B522 /* VideoRelationCollectionViewController.swift */, @@ -380,8 +383,8 @@ CA8A12A622DB89AB00D344C9 /* Alibili-Bridging-Header.h */, CA8A12B122DC00FF00D344C9 /* MenuTableViewController.swift */, CAF4F2ED22E349D000CCE549 /* DanmuData.swift */, - CA4C66EB250859290049B522 /* Utilities.swift */, CABF08D9250A7BBF00F6F153 /* TabBarViewController.swift */, + CA4C66EB250859290049B522 /* Utilities.swift */, ); path = Alibili; sourceTree = ""; @@ -735,6 +738,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + CA46D57F250C5B4E00DD38CA /* OwnerCollectionViewController.swift in Sources */, CA05132622D933E8008B4B48 /* CellDataItem.swift in Sources */, CA00ACC622D25D0B005ECFFE /* CookieManager.swift in Sources */, CA00AC6B22D1DEAF005ECFFE /* LoginViewController.swift in Sources */, diff --git a/Alibili/Base.lproj/Main.storyboard b/Alibili/Base.lproj/Main.storyboard index 28be8c8..266e64c 100644 --- a/Alibili/Base.lproj/Main.storyboard +++ b/Alibili/Base.lproj/Main.storyboard @@ -110,19 +110,19 @@ - + - + - + @@ -448,7 +451,7 @@ - + @@ -506,10 +509,10 @@ - + - + @@ -543,6 +546,7 @@ + @@ -551,7 +555,7 @@ - + @@ -559,10 +563,10 @@ - + - + diff --git a/Alibili/CellDateComposer.swift b/Alibili/CellDateComposer.swift index fcbe66c..2c1af38 100644 --- a/Alibili/CellDateComposer.swift +++ b/Alibili/CellDateComposer.swift @@ -24,10 +24,13 @@ class CellDataComposer { // MARK: Implementation func compose(_ cell: CollectionViewCell, cellStyle:CGSize ,withDataItem dataItem: CellDataItem) { + var pic = dataItem.pic // Cancel any queued operations to process images for the cell. let queue = operationQueue(forCell: cell) queue.cancelAllOperations() - + if !pic.contains("http:") { + pic = "http:" + dataItem.pic + } // Set the cell's properties. cell.representedDataItem = dataItem @@ -64,7 +67,7 @@ class CellDataComposer { guard !processImageOperation.isCancelled else { return } // Load and process the image. - guard let image = self.processImage(named: dataItem.pic) else { return } + guard let image = self.processImage(named: pic) else { return } // Store the processed image in the cache. CellDataComposer.processedImageCache.setObject(image, forKey: dataItem.aid as NSString) diff --git a/Alibili/HistoryCollectionViewController.swift b/Alibili/HistoryCollectionViewController.swift index 822258c..d66bf1e 100644 --- a/Alibili/HistoryCollectionViewController.swift +++ b/Alibili/HistoryCollectionViewController.swift @@ -22,7 +22,7 @@ class HistoryCollectionViewController: UICollectionViewController { private var targetSize = CGSize.zero - private let recentTotal = 100 + private let recentTotal = 150 private let recentPerPage = 10 var recentCurrentPage = 1 var dataItemGourp:[JSON] = [] diff --git a/Alibili/OwnerCollectionViewController.swift b/Alibili/OwnerCollectionViewController.swift new file mode 100644 index 0000000..a9fb1b7 --- /dev/null +++ b/Alibili/OwnerCollectionViewController.swift @@ -0,0 +1,162 @@ +// +// OwnerCollectionViewController.swift +// Alibili +// +// Created by xnzhang on 2020/09/12. +// Copyright © 2020 Xiaonan Zhang. All rights reserved. +// + +import Foundation +import UIKit +import Alamofire +import SwiftyJSON +import AVKit + +private let reuseIdentifier = CollectionViewCell.reuseIdentifier + +class OwnerCollectionViewController: UICollectionViewController { + + private let cookieManager:CookieManager = CookieManager() + private let cellComposer = CellDataComposer() + private var targetSize = CGSize.zero + + + private let recentPerPage = 10 + private var recentCurrentPage = 1 + private var recentTotal = 10 + var dataItemGourp:[JSON] = [] + var owner:Owner! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + + let kColumnCnt: Int = 3 + let kCellSpacing: CGFloat = 40 + + let imgWidth = (collectionView.frame.width - (kCellSpacing * (CGFloat(kColumnCnt) - 1))) / CGFloat(kColumnCnt) + targetSize = CGSize(width: imgWidth, height: imgWidth * 9 / 16) + + let layout = UICollectionViewFlowLayout() + layout.itemSize = targetSize + layout.minimumInteritemSpacing = kCellSpacing + layout.minimumLineSpacing = kCellSpacing + collectionView.collectionViewLayout = layout + + if(cookieManager.isUserCookieSet(forKey: "User-Cookie")){ + loadMoreOwnerData(currentPage:1) + } + } + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. + } + */ + + func loadMoreOwnerData(currentPage:Int) -> Void { + if (currentPage < recentCurrentPage || recentCurrentPage * recentPerPage > recentTotal) {return} + let headers: HTTPHeaders = [ + "Set-Cookie":cookieManager.getUserCookie(forKey: "User-Cookie")!, + "Accept": "application/json" + ] + AF.request(Urls.getOwnerVideos(mid: owner.mid, recentPerPage: recentPerPage, currentPage: currentPage), headers: headers).responseJSON { response in + switch(response.result) { + case .success(let data): + let json = JSON(data)["data"] +// print(json) + let count = json["page"]["count"].intValue + if (self.recentTotal != count) { + self.recentTotal = count + } + self.dataItemGourp.append(contentsOf: json["list"]["vlist"].array ?? []) + self.recentCurrentPage+=1 + DispatchQueue.main.async{ + self.collectionView.reloadData() + } + case .failure(let error): + print(error) + break + } + } + } + + // MARK: UICollectionViewDataSource + + override func numberOfSections(in collectionView: UICollectionView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + + override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of items + return self.dataItemGourp.count + } + + override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CollectionViewCell.reuseIdentifier, for: indexPath) + + // Configure the cell + + return cell + } + + override func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { + guard let cell = cell as? CollectionViewCell else { fatalError("Expected to display a `CollectionViewCell`.") } + // cell.backgroundColor = randomColor() + let item = dataItemGourp[indexPath.item] + // Configure the cell. + cellComposer.compose(cell, cellStyle: targetSize ,withDataItem: CellDataItem(jsonData: item)) + + if dataItemGourp.count - 1 == indexPath.item { + loadMoreOwnerData(currentPage: recentCurrentPage) + } + } + + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + if let destination = segue.destination as? + VideoDetailViewController, let index = + collectionView.indexPathsForSelectedItems?.first { + let item = dataItemGourp[index.item] + destination.videoJson = CellDataItem(jsonData: item) + } + } + + // MARK: UICollectionViewDelegate + + /* + // Uncomment this method to specify if the specified item should be highlighted during tracking + override func collectionView(_ collectionView: UICollectionView, shouldHighlightItemAt indexPath: IndexPath) -> Bool { + return true + } + */ + + /* + // Uncomment this method to specify if the specified item should be selected + override func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool { + return true + } + */ + + /* + // Uncomment these methods to specify if an action menu should be displayed for the specified item, and react to actions performed on the item + override func collectionView(_ collectionView: UICollectionView, shouldShowMenuForItemAt indexPath: IndexPath) -> Bool { + return false + } + + override func collectionView(_ collectionView: UICollectionView, canPerformAction action: Selector, forItemAt indexPath: IndexPath, withSender sender: Any?) -> Bool { + return false + } + + override func collectionView(_ collectionView: UICollectionView, performAction action: Selector, forItemAt indexPath: IndexPath, withSender sender: Any?) { + + } + */ + +} diff --git a/Alibili/Utilities.swift b/Alibili/Utilities.swift index 431d3e1..2b482fa 100644 --- a/Alibili/Utilities.swift +++ b/Alibili/Utilities.swift @@ -18,7 +18,7 @@ struct Urls { return "https://api.bilibili.com/x/web-feed/feed?ps=\(recentPerPage)&pn=\(currentPage)" } static func getHistory(recentPerPage: Int, currentPage: Int) -> String{ - return "https://api.bilibili.com/x/v2/history?pn=\(currentPage)&\(recentPerPage)&jsonp=jsonp" + return "https://api.bilibili.com/x/v2/history?pn=\(currentPage)&ps=\(recentPerPage)&jsonp=jsonp" } static func getVideo(avId: String, pageNum: String) -> String{ return "https://www.bilibili.com/video/av\(avId)/?p=\(pageNum)" @@ -51,4 +51,8 @@ struct Urls { static func postClickH5() -> String{ return "https://api.bilibili.com/x/click-interface/click/web/h5" } + + static func getOwnerVideos(mid: String, recentPerPage: Int, currentPage: Int) -> String{ + return "https://api.bilibili.com/x/space/arc/search?mid=\(mid)&ps=\(recentPerPage)&tid=0&pn=\(currentPage)&keyword=&order=pubdate&jsonp=jsonp" + } } diff --git a/Alibili/VideoDetailViewController.swift b/Alibili/VideoDetailViewController.swift index 2e4aa8a..2fa19fd 100644 --- a/Alibili/VideoDetailViewController.swift +++ b/Alibili/VideoDetailViewController.swift @@ -106,7 +106,12 @@ class VideoDetailViewController: UIViewController, UITableViewDelegate, UITableV if let destination = segue.destination as? VideoRelationCollectionViewController { - destination.aid = videoJson.aid + destination.aid = self.videoJson.aid + } + + if let destination = segue.destination as? + OwnerCollectionViewController { + destination.owner = self.videoJson.videoDetail.owner } } From 6e7f2fd5b3b0f8e81e9fed4d789476f7902c8f18 Mon Sep 17 00:00:00 2001 From: sauvignon1989 Date: Sat, 12 Sep 2020 12:43:53 +0900 Subject: [PATCH 08/18] change logo --- .../Content.imageset/Contents.json | 4 ++-- .../Content.imageset/Icon.png | Bin 34660 -> 0 bytes .../Content.imageset/icon2.png | Bin 59156 -> 0 bytes .../Content.imageset/logo1.jpg | Bin 0 -> 9078 bytes .../Content.imageset/logo2.jpg | Bin 0 -> 20803 bytes .../Content.imageset/Contents.json | 10 +++++----- .../Content.imageset/Icon.png | Bin 34660 -> 0 bytes .../Content.imageset/icon2.png | Bin 59156 -> 0 bytes .../Content.imageset/logo1.jpg | Bin 0 -> 9078 bytes .../Content.imageset/logo2.jpg | Bin 0 -> 20803 bytes .../Middle.imagestacklayer/Contents.json | 6 +++--- Alibili/Base.lproj/Main.storyboard | 2 +- 12 files changed, 11 insertions(+), 11 deletions(-) delete mode 100644 Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Icon.png delete mode 100644 Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/icon2.png create mode 100644 Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/logo1.jpg create mode 100644 Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/logo2.jpg delete mode 100644 Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Icon.png delete mode 100644 Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/icon2.png create mode 100644 Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/logo1.jpg create mode 100644 Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/logo2.jpg diff --git a/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json index f98e90f..a01ccc4 100644 --- a/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +++ b/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json @@ -1,12 +1,12 @@ { "images" : [ { - "filename" : "Icon.png", + "filename" : "logo1.jpg", "idiom" : "tv", "scale" : "1x" }, { - "filename" : "icon2.png", + "filename" : "logo2.jpg", "idiom" : "tv", "scale" : "2x" } diff --git a/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Icon.png b/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Icon.png deleted file mode 100644 index 8d50591f1d781774eb8f2f80199de4c4df092860..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34660 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 diff --git a/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/icon2.png b/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/icon2.png deleted file mode 100644 index 1007362f8db487675a6e0e352d8c15e22dd041a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59156 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≦Iz`bje*o9XvJ3^o^R2PQI9I$E>O6_pLHjteW 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 literal 0 HcmV?d00001 diff --git a/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json index 0043404..a01ccc4 100644 --- a/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +++ b/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json @@ -1,18 +1,18 @@ { "images" : [ { + "filename" : "logo1.jpg", "idiom" : "tv", - "filename" : "Icon.png", "scale" : "1x" }, { + "filename" : "logo2.jpg", "idiom" : "tv", - "filename" : "icon2.png", "scale" : "2x" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Icon.png b/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Icon.png deleted file mode 100644 index 8d50591f1d781774eb8f2f80199de4c4df092860..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34660 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 diff --git a/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/icon2.png b/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/icon2.png deleted file mode 100644 index 1007362f8db487675a6e0e352d8c15e22dd041a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59156 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≦Iz`bje*o9XvJ3^o^R2PQI9I$E>O6_pLHjteW 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 literal 0 HcmV?d00001 diff --git a/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Contents.json b/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Contents.json index da4a164..73c0059 100644 --- a/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Contents.json +++ b/Alibili/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Contents.json @@ -1,6 +1,6 @@ { "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/Alibili/Base.lproj/Main.storyboard b/Alibili/Base.lproj/Main.storyboard index 266e64c..c33f550 100644 --- a/Alibili/Base.lproj/Main.storyboard +++ b/Alibili/Base.lproj/Main.storyboard @@ -332,7 +332,7 @@ - + From 02934a171200e899bdf83626c9b1832bf108537e Mon Sep 17 00:00:00 2001 From: sauvignon1989 Date: Sat, 12 Sep 2020 23:55:00 +0900 Subject: [PATCH 09/18] Create LICENSE --- LICENSE | 674 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 674 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. From 10a558bd4f248e08f4f73ad3720fe77d45a0d428 Mon Sep 17 00:00:00 2001 From: sauvignon1989 Date: Sat, 12 Sep 2020 23:58:31 +0900 Subject: [PATCH 10/18] change license --- LICENSE.md | 21 --------------------- README.md | 2 +- 2 files changed, 1 insertion(+), 22 deletions(-) delete mode 100644 LICENSE.md diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index d95309b..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019 xnzhang - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index ceaf2bb..ccaadc2 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ TBD ## License -This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details ## Acknowledgments From 6b668526dd367827f698b84aeca57d4d85a50f93 Mon Sep 17 00:00:00 2001 From: sauvignon1989 Date: Sun, 13 Sep 2020 00:27:53 +0900 Subject: [PATCH 11/18] fix bug --- Alibili/TabBarViewController.swift | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Alibili/TabBarViewController.swift b/Alibili/TabBarViewController.swift index e50ffc5..f76a3a2 100644 --- a/Alibili/TabBarViewController.swift +++ b/Alibili/TabBarViewController.swift @@ -34,16 +34,20 @@ class TabBarViewController: UITabBarController, UITabBarControllerDelegate { func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { if let destination = viewController as? SubscriptionsCollectionViewController { - destination.dataItemGourp=[] - destination.recentCurrentPage = 1 - destination.loadMoreData(currentPage: 1) + if destination.recentCurrentPage != 1{ + destination.dataItemGourp=[] + destination.recentCurrentPage = 1 + destination.loadMoreData(currentPage: 1) + } } if let destination = viewController as? HistoryCollectionViewController { - destination.dataItemGourp=[] - destination.recentCurrentPage = 1 - destination.loadMoreData(currentPage: 1) + if destination.recentCurrentPage != 1{ + destination.dataItemGourp=[] + destination.recentCurrentPage = 1 + destination.loadMoreData(currentPage: 1) + } } } From 9a4b29d734e62c1f47c910b1cf02353bed329ae4 Mon Sep 17 00:00:00 2001 From: sauvignon1989 Date: Sun, 13 Sep 2020 00:50:57 +0900 Subject: [PATCH 12/18] fix bug --- Alibili/TabBarViewController.swift | 38 +++++++++++++------------ Alibili/VideoDetailViewController.swift | 6 +++- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/Alibili/TabBarViewController.swift b/Alibili/TabBarViewController.swift index f76a3a2..c1ec5a3 100644 --- a/Alibili/TabBarViewController.swift +++ b/Alibili/TabBarViewController.swift @@ -10,6 +10,8 @@ import UIKit class TabBarViewController: UITabBarController, UITabBarControllerDelegate { + var oldselectedIndex: Int = -1 + override func viewDidLoad() { super.viewDidLoad() self.delegate = self @@ -32,27 +34,27 @@ class TabBarViewController: UITabBarController, UITabBarControllerDelegate { } func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { - if let destination = viewController as? - SubscriptionsCollectionViewController { - if destination.recentCurrentPage != 1{ - destination.dataItemGourp=[] - destination.recentCurrentPage = 1 - destination.loadMoreData(currentPage: 1) + + if(oldselectedIndex != tabBarController.selectedIndex) { + if let destination = viewController as? + SubscriptionsCollectionViewController { + if destination.recentCurrentPage != 1{ + destination.dataItemGourp=[] + destination.recentCurrentPage = 1 + destination.loadMoreData(currentPage: 1) + } } - } - - if let destination = viewController as? - HistoryCollectionViewController { - if destination.recentCurrentPage != 1{ - destination.dataItemGourp=[] - destination.recentCurrentPage = 1 - destination.loadMoreData(currentPage: 1) + + if let destination = viewController as? + HistoryCollectionViewController { + if destination.recentCurrentPage != 1 { + destination.dataItemGourp=[] + destination.recentCurrentPage = 1 + destination.loadMoreData(currentPage: 1) + } } + oldselectedIndex = tabBarController.selectedIndex } } - - - - } diff --git a/Alibili/VideoDetailViewController.swift b/Alibili/VideoDetailViewController.swift index 2fa19fd..2b34f4b 100644 --- a/Alibili/VideoDetailViewController.swift +++ b/Alibili/VideoDetailViewController.swift @@ -38,8 +38,12 @@ class VideoDetailViewController: UIViewController, UITableViewDelegate, UITableV VideoDescription.text = videoJson.videoDetail.desc Owner.setTitle(videoJson.videoDetail.owner.name, for: .normal) } + var pic = videoJson.pic + if !pic.contains("http:") { + pic = "http:" + pic + } - guard let image = self.processImage(named: videoJson.pic) else { return } + guard let image = self.processImage(named: pic) else { return } let backgroundImage = UIImageView(frame: UIScreen.main.bounds) backgroundImage.image = image backgroundImage.alpha = 0.5 From b2473e387ff78ef67c4c66d3e2a633cb06343087 Mon Sep 17 00:00:00 2001 From: sauvignon1989 Date: Mon, 14 Sep 2020 04:33:02 +0900 Subject: [PATCH 13/18] fix bug for bangumi --- Alibili/CellDataItem.swift | 43 ++++++ Alibili/Utilities.swift | 4 + Alibili/VideoDetailViewController.swift | 6 +- Alibili/VideoPlayViewController.swift | 174 +++++++++++++++--------- 4 files changed, 162 insertions(+), 65 deletions(-) diff --git a/Alibili/CellDataItem.swift b/Alibili/CellDataItem.swift index 2a72069..f618666 100644 --- a/Alibili/CellDataItem.swift +++ b/Alibili/CellDataItem.swift @@ -16,6 +16,7 @@ struct CellDataItem: Codable, Equatable { var title :String var aid :String var videoDetail: VideoDetail + var bangumi: Bangumi init(jsonData:JSON) { self.cid = jsonData["cid"].stringValue @@ -24,6 +25,7 @@ struct CellDataItem: Codable, Equatable { self.aid = jsonData["aid"].stringValue self.title = jsonData["title"].stringValue self.videoDetail = VideoDetail(jsonData: jsonData) + self.bangumi = Bangumi(jsonData: jsonData["bangumi"]) } } @@ -80,6 +82,47 @@ struct Owner : Codable{ self.face = jsonData["face"].stringValue } } +struct Season : Codable{ + var season_id:Int + var title:String + var season_status:String + var is_finish:String + var total_count:String + var newest_ep_id:String + var newest_ep_index:String + var season_type:String + + init(jsonData:JSON) { + self.season_id = jsonData["season_id"].int ?? -1 + self.title = jsonData["title"].stringValue + self.season_status = jsonData["season_status"].stringValue + self.is_finish = jsonData["is_finish"].stringValue + self.total_count = jsonData["total_count"].stringValue + self.newest_ep_id = jsonData["newest_ep_id"].stringValue + self.newest_ep_index = jsonData["newest_ep_index"].stringValue + self.season_type = jsonData["season_type"].stringValue + } +} + +struct Bangumi: Codable{ + var ep_id:Int + var title:String + var long_title:String + var episode_status:String + var season:Season + var cover:String + + init(jsonData:JSON) { + self.ep_id = jsonData["ep_id"].int ?? -1 + self.title = jsonData["title"].stringValue + self.long_title = jsonData["long_title"].stringValue + self.episode_status = jsonData["episode_status"].stringValue + self.season = Season(jsonData: jsonData["season"]) + self.cover = jsonData["cover"].stringValue + } +} + + // MARK: Equatable diff --git a/Alibili/Utilities.swift b/Alibili/Utilities.swift index 2b482fa..7b4e278 100644 --- a/Alibili/Utilities.swift +++ b/Alibili/Utilities.swift @@ -55,4 +55,8 @@ struct Urls { static func getOwnerVideos(mid: String, recentPerPage: Int, currentPage: Int) -> String{ return "https://api.bilibili.com/x/space/arc/search?mid=\(mid)&ps=\(recentPerPage)&tid=0&pn=\(currentPage)&keyword=&order=pubdate&jsonp=jsonp" } + + static func getBangumiInfo(seasonId: String) -> String{ + return "https://api.bilibili.com/pgc/web/season/section?season_id=\(seasonId)" + } } diff --git a/Alibili/VideoDetailViewController.swift b/Alibili/VideoDetailViewController.swift index 2b34f4b..4555316 100644 --- a/Alibili/VideoDetailViewController.swift +++ b/Alibili/VideoDetailViewController.swift @@ -30,7 +30,7 @@ class VideoDetailViewController: UIViewController, UITableViewDelegate, UITableV // Do any additional setup after loading the view. VideoTitle.text = videoJson.title - + if videoJson.videoDetail.videos == -1 { loadData(aid: videoJson.aid) } else { @@ -108,12 +108,12 @@ class VideoDetailViewController: UIViewController, UITableViewDelegate, UITableV destination.videoJson = self.videoJson } - if let destination = segue.destination as? + else if let destination = segue.destination as? VideoRelationCollectionViewController { destination.aid = self.videoJson.aid } - if let destination = segue.destination as? + else if let destination = segue.destination as? OwnerCollectionViewController { destination.owner = self.videoJson.videoDetail.owner } diff --git a/Alibili/VideoPlayViewController.swift b/Alibili/VideoPlayViewController.swift index f1bd432..3c6d7b6 100644 --- a/Alibili/VideoPlayViewController.swift +++ b/Alibili/VideoPlayViewController.swift @@ -45,7 +45,12 @@ class VideoPlayerViewController: UIViewController, BarrageRendererDelegate, VLCM playerView.addSubview(activityIndicatiorView) activityIndicatiorView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true activityIndicatiorView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true - loadData(avId: videoJson.aid, pageNum: pageNum) + if videoJson.bangumi.ep_id != -1 && videoJson.videoDetail.videos != 1{ + loadData(avId: videoJson.aid, seasonId: String(videoJson.bangumi.season.season_id), pageNum: pageNum) + } else { + loadData(avId: videoJson.aid, pageNum: pageNum) + } + } func walkTextSpriteDescriptorWithDirection(direction:UInt, text:String) -> BarrageDescriptor{ @@ -89,7 +94,9 @@ class VideoPlayerViewController: UIViewController, BarrageRendererDelegate, VLCM } override func viewWillDisappear(_ animated: Bool) { - barrageRenderer.stop() + if barrageRenderer != nil { + barrageRenderer.stop() + } } func loadDanmuData(cid:String) -> Void { @@ -101,32 +108,32 @@ class VideoPlayerViewController: UIViewController, BarrageRendererDelegate, VLCM AF.request(Urls.getDanmu(cid: cid), headers: headers).responseString(encoding: String.Encoding.utf8) { response in var statusCode = response.response?.statusCode switch response.result { - case .success: - print("status code is: \(String(describing: statusCode))") - if let string = response.value { - let xml = SWXMLHash.parse(string) - for elem in xml["i"]["d"].all { - let danmu = DanmuData(elem: elem) - if var dictValue = self.danmuList[danmu.timing] { - dictValue.append(danmu) - self.danmuList[danmu.timing] = dictValue - } else { - self.danmuList[danmu.timing] = [danmu] - } - + case .success: + print("status code is: \(String(describing: statusCode))") + if let string = response.value { + let xml = SWXMLHash.parse(string) + for elem in xml["i"]["d"].all { + let danmu = DanmuData(elem: elem) + if var dictValue = self.danmuList[danmu.timing] { + dictValue.append(danmu) + self.danmuList[danmu.timing] = dictValue + } else { + self.danmuList[danmu.timing] = [danmu] } - self.configDanMu() + } - case .failure(let error): - statusCode = error._code // statusCode private - print("status code is: \(String(describing: statusCode))") - print(error) + self.configDanMu() + } + case .failure(let error): + statusCode = error._code // statusCode private + print("status code is: \(String(describing: statusCode))") + print(error) } } } } - func loadMediaData(avId:String,cid:String) -> Void { + func loadMediaData(avId:String,cid:String) throws -> Void { if(cookieManager.isUserCookieSet(forKey: "User-Cookie")){ let headers: HTTPHeaders = [ "Set-Cookie":cookieManager.getUserCookie(forKey: "User-Cookie")!, @@ -136,45 +143,60 @@ class VideoPlayerViewController: UIViewController, BarrageRendererDelegate, VLCM .responseJSON { response in switch(response.result) { case .success(let data): - let json = JSON(data) - var max = 0 - for data in json["data"]["dash"]["video"].arrayValue { - if data["id"].intValue > max && data["id"].intValue <= 80 { - max = data["id"].intValue + do { + try self.playmedia(json: JSON(data), avId: avId, cid: cid) + } catch let error { + print("Can not play. Error: \(error)") + if let nav = self.navigationController { + nav.popViewController(animated: true) + } else { + self.dismiss(animated: true, completion: nil) } } - let videoArray = json["data"]["dash"]["video"].arrayValue.filter {$0["id"].intValue == max } - let video = videoArray[0]["base_url"].stringValue - let audio = json["data"]["dash"]["audio"][0]["baseUrl"].stringValue - self.videoLength = CUnsignedLongLong(json["data"]["timelength"].rawString()!)!/1000 - let videoMedia = VLCMedia(url: URL(string: video)!) - videoMedia.addOptions([ - "http-user-agent": "Bilibili Freedoooooom/MarkII", - "http-referrer": Urls.getHttpReferrer(avId: avId) - ]) - self.player.media = videoMedia - self.player.delegate = self - self.player.addPlaybackSlave(URL(string: audio)!, type: VLCMediaPlaybackSlaveType.audio, enforce: true) - self.player.drawable = self.mediaView - - self.loadDanmuData(cid:cid) - // self.observation = self.player.observe(\.self.isPlaying, options: [.old, .new]){ object, change in - // print("myDate changed from: \(change.oldValue!), updated to: \(change.newValue!)") - // } - self.player.play() return case .failure(let error): print(error) break } - } + } } } + + func playmedia(json: JSON, avId:String, cid:String) throws -> Void { + var max = 0 + for data in json["data"]["dash"]["video"].arrayValue { + if data["id"].intValue > max && data["id"].intValue <= 80 { + max = data["id"].intValue + } + } + let videoArray = json["data"]["dash"]["video"].arrayValue.filter {$0["id"].intValue == max } + if videoArray.isEmpty { + throw NSError(domain: "no data", code: -1, userInfo: nil) + } + let video = videoArray[0]["base_url"].stringValue + let audio = json["data"]["dash"]["audio"][0]["baseUrl"].stringValue + self.videoLength = CUnsignedLongLong(json["data"]["timelength"].rawString()!)!/1000 + let videoMedia = VLCMedia(url: URL(string: video)!) + videoMedia.addOptions([ + "http-user-agent": "Bilibili Freedoooooom/MarkII", + "http-referrer": Urls.getHttpReferrer(avId: avId) + ]) + self.player.media = videoMedia + self.player.delegate = self + self.player.addPlaybackSlave(URL(string: audio)!, type: VLCMediaPlaybackSlaveType.audio, enforce: true) + self.player.drawable = self.mediaView + self.loadDanmuData(cid:cid) + // self.observation = self.player.observe(\.self.isPlaying, options: [.old, .new]){ object, change in + // print("myDate changed from: \(change.oldValue!), updated to: \(change.newValue!)") + // } + self.player.play() + } + func mediaPlayerStateChanged(_ aNotification: Notification) { let state : VLCMediaPlayerState = player.state -// print("mediaPlayerStateChanged \(aNotification) \(state.rawValue)") + // print("mediaPlayerStateChanged \(aNotification) \(state.rawValue)") switch state { case VLCMediaPlayerState.stopped: print("Player has stopped") @@ -204,28 +226,56 @@ class VideoPlayerViewController: UIViewController, BarrageRendererDelegate, VLCM } } + func prepareVideoInfo (avId: String, cid: String) -> Void { + do { + try self.loadMediaData(avId: avId, cid: cid) + } catch let error { + print("Can not play. Error: \(error)") + if let nav = self.navigationController { + nav.popViewController(animated: true) + } else { + self.dismiss(animated: true, completion: nil) + } + } + } + + func loadData(avId: String, seasonId:String, pageNum:Int) -> Void { + AF.request(Urls.getBangumiInfo(seasonId: seasonId)).responseJSON { response in + switch(response.result) { + case .success(let data): + self.videoInfo = JSON(data)["result"]["main_section"] + let cid = self.videoInfo["episodes"][pageNum]["cid"].stringValue + self.prepareVideoInfo(avId: avId, cid: cid) + case .failure(let error): + print(error) + break + } + } + } + func loadData(avId:String, pageNum:Int) -> Void { if self.videoInfo.isEmpty { - AF.request(Urls.getVideoInfo(avId: avId)).responseJSON { response in - switch(response.result) { - case .success(let data): - self.videoInfo = JSON(data)["data"] - var cid = self.videoInfo["cid"].stringValue - if pageNum != 0 { - cid = self.videoInfo["pages"][pageNum]["cid"].stringValue - } - self.loadMediaData(avId: avId, cid: cid) - case .failure(let error): - print(error) - break - } - } + AF.request(Urls.getVideoInfo(avId: avId)).responseJSON { response in + switch(response.result) { + case .success(let data): + self.videoInfo = JSON(data)["data"] + var cid = self.videoInfo["cid"].stringValue + if pageNum != 0 { + cid = self.videoInfo["pages"][pageNum]["cid"].stringValue + } + self.prepareVideoInfo(avId: avId, cid: cid) + + case .failure(let error): + print(error) + break + } + } } else { var cid = self.videoInfo["cid"].stringValue if pageNum != 0 { cid = self.videoInfo["pages"][pageNum]["cid"].stringValue } - self.loadMediaData(avId: avId, cid: cid) + self.prepareVideoInfo(avId: avId, cid: cid) } } From f9a68c7e41a0d7dde20037b8c5dea603d9cb2832 Mon Sep 17 00:00:00 2001 From: Xiaonan Zhang Date: Fri, 18 Sep 2020 18:27:52 +0900 Subject: [PATCH 14/18] remove auto stop --- Alibili/VideoPlayViewController.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Alibili/VideoPlayViewController.swift b/Alibili/VideoPlayViewController.swift index 3c6d7b6..ea3f742 100644 --- a/Alibili/VideoPlayViewController.swift +++ b/Alibili/VideoPlayViewController.swift @@ -200,11 +200,11 @@ class VideoPlayerViewController: UIViewController, BarrageRendererDelegate, VLCM switch state { case VLCMediaPlayerState.stopped: print("Player has stopped") - if let nav = self.navigationController { - nav.popViewController(animated: true) - } else { - self.dismiss(animated: true, completion: nil) - } +// if let nav = self.navigationController { +// nav.popViewController(animated: true) +// } else { +// self.dismiss(animated: true, completion: nil) +// } case VLCMediaPlayerState.opening: print("Stream is opening") case VLCMediaPlayerState.buffering: From b0dec4f1d0e9448a23a6c169a65df35335a8c896 Mon Sep 17 00:00:00 2001 From: Xiaonan Zhang Date: Fri, 18 Sep 2020 18:30:44 +0900 Subject: [PATCH 15/18] tvos14 autofix --- Alibili.xcodeproj/project.pbxproj | 8 ++-- .../xcshareddata/xcschemes/Alibili.xcscheme | 2 +- Alibili/Base.lproj/Main.storyboard | 38 ++++++++++--------- .../BarrageRenderer.xcodeproj/project.pbxproj | 4 +- 4 files changed, 29 insertions(+), 23 deletions(-) diff --git a/Alibili.xcodeproj/project.pbxproj b/Alibili.xcodeproj/project.pbxproj index 891799b..87c9035 100644 --- a/Alibili.xcodeproj/project.pbxproj +++ b/Alibili.xcodeproj/project.pbxproj @@ -491,7 +491,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 1020; - LastUpgradeCheck = 1020; + LastUpgradeCheck = 1200; ORGANIZATIONNAME = "Xiaonan Zhang"; TargetAttributes = { CA00AC5422D1DE82005ECFFE = { @@ -822,6 +822,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -884,6 +885,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -921,7 +923,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = W3WZAUQ74J; + DEVELOPMENT_TEAM = T9T7CJ8JXU; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)", @@ -950,7 +952,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = W3WZAUQ74J; + DEVELOPMENT_TEAM = T9T7CJ8JXU; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)", diff --git a/Alibili.xcodeproj/xcshareddata/xcschemes/Alibili.xcscheme b/Alibili.xcodeproj/xcshareddata/xcschemes/Alibili.xcscheme index b4dfcbb..d0e49d6 100644 --- a/Alibili.xcodeproj/xcshareddata/xcschemes/Alibili.xcscheme +++ b/Alibili.xcodeproj/xcshareddata/xcschemes/Alibili.xcscheme @@ -1,6 +1,6 @@ - + - + + @@ -22,7 +23,7 @@ - + @@ -76,8 +77,8 @@ - + @@ -112,7 +113,7 @@ - + @@ -122,7 +123,7 @@ - + @@ -208,21 +209,21 @@ - + - + - + - + - + - + - + @@ -567,6 +568,7 @@ + diff --git a/BarrageRenderer/BarrageRenderer.xcodeproj/project.pbxproj b/BarrageRenderer/BarrageRenderer.xcodeproj/project.pbxproj index 1f2a0b0..2c8b2bb 100644 --- a/BarrageRenderer/BarrageRenderer.xcodeproj/project.pbxproj +++ b/BarrageRenderer/BarrageRenderer.xcodeproj/project.pbxproj @@ -241,7 +241,7 @@ CAF4F26022E32DB000CCE549 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1020; + LastUpgradeCheck = 1200; ORGANIZATIONNAME = "Xiaonan Zhang"; TargetAttributes = { CAF4F26822E32DB000CCE549 = { @@ -335,6 +335,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -396,6 +397,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; From 19b49a862e7aa1edaf45f109122355dd989daeeb Mon Sep 17 00:00:00 2001 From: Xiaonan Zhang Date: Fri, 18 Sep 2020 18:35:33 +0900 Subject: [PATCH 16/18] Subproject auto fix warning --- Alamofire | 2 +- SWXMLHash | 2 +- SwiftyJSON | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Alamofire b/Alamofire index 312a24a..9a7d3e7 160000 --- a/Alamofire +++ b/Alamofire @@ -1 +1 @@ -Subproject commit 312a24afd5e6a154dd6726a9537eb0c755ba89a7 +Subproject commit 9a7d3e71a3427b08e1dcb5bd15531c7e516f5c7f diff --git a/SWXMLHash b/SWXMLHash index 8886e21..f01242d 160000 --- a/SWXMLHash +++ b/SWXMLHash @@ -1 +1 @@ -Subproject commit 8886e21588040b71db0b58f6d4b0dd680165e38f +Subproject commit f01242da1006598e4381725db554256d8a0bd63f diff --git a/SwiftyJSON b/SwiftyJSON index cbf2d49..39e039e 160000 --- a/SwiftyJSON +++ b/SwiftyJSON @@ -1 +1 @@ -Subproject commit cbf2d4955557abc1ed5debab21d20763e7ebc540 +Subproject commit 39e039ec4d1e5c81c6877e089a5473ac4da18ea4 From 46dd739ee1ca5b7051b4a6bfa2b66b5cf0eed2d7 Mon Sep 17 00:00:00 2001 From: xnzhang_nttpc Date: Tue, 22 Sep 2020 06:23:08 +0900 Subject: [PATCH 17/18] update --- Alamofire | 2 +- SWXMLHash | 2 +- SwiftyJSON | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Alamofire b/Alamofire index 9a7d3e7..312a24a 160000 --- a/Alamofire +++ b/Alamofire @@ -1 +1 @@ -Subproject commit 9a7d3e71a3427b08e1dcb5bd15531c7e516f5c7f +Subproject commit 312a24afd5e6a154dd6726a9537eb0c755ba89a7 diff --git a/SWXMLHash b/SWXMLHash index f01242d..8886e21 160000 --- a/SWXMLHash +++ b/SWXMLHash @@ -1 +1 @@ -Subproject commit f01242da1006598e4381725db554256d8a0bd63f +Subproject commit 8886e21588040b71db0b58f6d4b0dd680165e38f diff --git a/SwiftyJSON b/SwiftyJSON index 39e039e..cbf2d49 160000 --- a/SwiftyJSON +++ b/SwiftyJSON @@ -1 +1 @@ -Subproject commit 39e039ec4d1e5c81c6877e089a5473ac4da18ea4 +Subproject commit cbf2d4955557abc1ed5debab21d20763e7ebc540 From c1defd81ffb8ed2eb6c89639f9aaa8f37a71d9a8 Mon Sep 17 00:00:00 2001 From: sauvignon1989 Date: Wed, 30 Sep 2020 10:31:11 +0900 Subject: [PATCH 18/18] test for AVAudioSession not work! --- Alibili.xcodeproj/project.pbxproj | 8 ++++---- Alibili/AppDelegate.swift | 32 +++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/Alibili.xcodeproj/project.pbxproj b/Alibili.xcodeproj/project.pbxproj index 87c9035..cb0eb48 100644 --- a/Alibili.xcodeproj/project.pbxproj +++ b/Alibili.xcodeproj/project.pbxproj @@ -923,7 +923,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = T9T7CJ8JXU; + DEVELOPMENT_TEAM = W3WZAUQ74J; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)", @@ -934,7 +934,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.zephyr1989.Alibili; + PRODUCT_BUNDLE_IDENTIFIER = com.zephyr.Alibili; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Alibili/Alibili-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -952,7 +952,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = T9T7CJ8JXU; + DEVELOPMENT_TEAM = W3WZAUQ74J; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)", @@ -963,7 +963,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.zephyr1989.Alibili; + PRODUCT_BUNDLE_IDENTIFIER = com.zephyr.Alibili; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Alibili/Alibili-Bridging-Header.h"; SWIFT_VERSION = 5.0; diff --git a/Alibili/AppDelegate.swift b/Alibili/AppDelegate.swift index 29d6d02..1ba0d5b 100644 --- a/Alibili/AppDelegate.swift +++ b/Alibili/AppDelegate.swift @@ -7,6 +7,7 @@ // import UIKit +import AVFoundation @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { @@ -16,6 +17,26 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. RootViewNavigator().updateRootViewController() + +// let audioSession = AVAudioSession.sharedInstance() +// +// do { +// try audioSession.setCategory(.playback, mode: .default, policy: .default) +//// try audioSession.overrideOutputAudioPort(AVAudioSession.Port.airPlay) +// try audioSession.setActive(true, options: .notifyOthersOnDeactivation) +// +// for outputPort in audioSession.currentRoute.outputs { +//// if outputPort.portType == AVAudioSession.Port.airPlay { +//// return true +//// } +// print(outputPort.portName) +// print(outputPort.portType) +// } +// +// } catch { +// print("fail to set audio session route sharing policy: \(error)") +// } + return true } @@ -35,6 +56,17 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func applicationDidBecomeActive(_ application: UIApplication) { // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + +// let session = AVAudioSession.sharedInstance() +// do { +// try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormAudio) +// try session.overrideOutputAudioPort(.none) +// try session.setActive(true) +// print("outputs: \(session.currentRoute.outputs)") +//// session.setOutputDataSource(AVAudioSessionDataSourceDescription?) +// } catch { +// print("error: \(error)") +// } } func applicationWillTerminate(_ application: UIApplication) {