Initial PeerTube Support

This commit is contained in:
Arkadiusz Fal
2022-12-09 01:15:19 +01:00
parent 72ea17b257
commit faf2469e04
39 changed files with 816 additions and 92 deletions

View File

@@ -9,9 +9,12 @@ final class InvidiousAPI: Service, ObservableObject, VideosAPI {
static let basePath = "/api/v1"
@Published var account: Account!
@Published var validInstance = true
static func withAnonymousAccountForInstanceURL(_ url: URL) -> InvidiousAPI {
.init(account: Instance(app: .invidious, apiURLString: url.absoluteString).anonymousAccount)
}
var signedIn: Bool {
guard let account else { return false }
@@ -452,7 +455,7 @@ final class InvidiousAPI: Service, ObservableObject, VideosAPI {
}
static func proxiedAsset(instance: Instance, asset: AVURLAsset) -> AVURLAsset? {
guard let instanceURLComponents = URLComponents(string: instance.apiURL),
guard let instanceURLComponents = URLComponents(url: instance.apiURL, resolvingAgainstBaseURL: false),
var urlComponents = URLComponents(url: asset.url, resolvingAgainstBaseURL: false) else { return nil }
urlComponents.scheme = instanceURLComponents.scheme
@@ -487,7 +490,9 @@ final class InvidiousAPI: Service, ObservableObject, VideosAPI {
let description = json["description"].stringValue
return Video(
id: id,
instanceID: account.instanceID,
app: .invidious,
instanceURL: account.instance.apiURL,
videoID: videoID,
title: json["title"].stringValue,
author: json["author"].stringValue,
@@ -518,7 +523,7 @@ final class InvidiousAPI: Service, ObservableObject, VideosAPI {
// append protocol to unproxied thumbnail URL if it's missing
if thumbnailURL.count > 2,
String(thumbnailURL[..<thumbnailURL.index(thumbnailURL.startIndex, offsetBy: 2)]) == "//",
let accountUrlComponents = URLComponents(string: account.url)
let accountUrlComponents = URLComponents(string: account.urlString)
{
thumbnailURL = "\(accountUrlComponents.scheme ?? "https"):\(thumbnailURL)"
}
@@ -553,7 +558,7 @@ final class InvidiousAPI: Service, ObservableObject, VideosAPI {
guard let url = json["url"].url,
var components = URLComponents(url: url, resolvingAgainstBaseURL: false),
let quality = json["quality"].string,
let accountUrlComponents = URLComponents(string: account.url)
let accountUrlComponents = URLComponents(string: account.urlString)
else {
return nil
}
@@ -677,8 +682,7 @@ final class InvidiousAPI: Service, ObservableObject, VideosAPI {
private func extractCaptions(from content: JSON) -> [Captions] {
content["captions"].arrayValue.compactMap { details in
let baseURL = account.url
guard let url = URL(string: baseURL + details["url"].stringValue) else { return nil }
guard let url = URL(string: details["url"].stringValue, relativeTo: account.url) else { return nil }
return Captions(
label: details["label"].stringValue,