mirror of
https://github.com/yattee/yattee.git
synced 2024-12-22 13:33:42 +00:00
Merge pull request #680 from stonerl/add-user-agent-to-header
Add User-Agent to request
This commit is contained in:
commit
335e99cb7b
@ -232,7 +232,10 @@ final class AVPlayerBackend: PlayerBackend {
|
|||||||
upgrading: Bool = false
|
upgrading: Bool = false
|
||||||
) {
|
) {
|
||||||
asset?.cancelLoading()
|
asset?.cancelLoading()
|
||||||
asset = AVURLAsset(url: url)
|
asset = AVURLAsset(
|
||||||
|
url: url,
|
||||||
|
options: ["AVURLAssetHTTPHeaderFieldsKey": ["User-Agent": "\(UserAgentManager.shared.userAgent)"]]
|
||||||
|
)
|
||||||
asset?.loadValuesAsynchronously(forKeys: Self.assetKeysToLoad) { [weak self] in
|
asset?.loadValuesAsynchronously(forKeys: Self.assetKeysToLoad) { [weak self] in
|
||||||
var error: NSError?
|
var error: NSError?
|
||||||
switch self?.asset?.statusOfValue(forKey: "duration", error: &error) {
|
switch self?.asset?.statusOfValue(forKey: "duration", error: &error) {
|
||||||
|
@ -70,6 +70,7 @@ final class MPVClient: ObservableObject {
|
|||||||
checkError(mpv_set_option_string(mpv, "deinterlace", Defaults[.mpvDeinterlace] ? "yes" : "no"))
|
checkError(mpv_set_option_string(mpv, "deinterlace", Defaults[.mpvDeinterlace] ? "yes" : "no"))
|
||||||
checkError(mpv_set_option_string(mpv, "sub-scale", Defaults[.captionsFontScaleSize]))
|
checkError(mpv_set_option_string(mpv, "sub-scale", Defaults[.captionsFontScaleSize]))
|
||||||
checkError(mpv_set_option_string(mpv, "sub-color", Defaults[.captionsFontColor]))
|
checkError(mpv_set_option_string(mpv, "sub-color", Defaults[.captionsFontColor]))
|
||||||
|
checkError(mpv_set_option_string(mpv, "user-agent", UserAgentManager.shared.userAgent))
|
||||||
|
|
||||||
checkError(mpv_initialize(mpv))
|
checkError(mpv_initialize(mpv))
|
||||||
|
|
||||||
|
@ -103,9 +103,8 @@ enum Constants {
|
|||||||
#elseif os(iOS)
|
#elseif os(iOS)
|
||||||
if isIPad {
|
if isIPad {
|
||||||
return .sidebar
|
return .sidebar
|
||||||
} else {
|
|
||||||
return .tab
|
|
||||||
}
|
}
|
||||||
|
return .tab
|
||||||
#else
|
#else
|
||||||
return .tab
|
return .tab
|
||||||
#endif
|
#endif
|
||||||
|
@ -20,6 +20,7 @@ enum URLTester {
|
|||||||
var request = URLRequest(url: url)
|
var request = URLRequest(url: url)
|
||||||
request.httpMethod = "HEAD"
|
request.httpMethod = "HEAD"
|
||||||
request.setValue("bytes=\(range)", forHTTPHeaderField: "Range")
|
request.setValue("bytes=\(range)", forHTTPHeaderField: "Range")
|
||||||
|
request.setValue(UserAgentManager.shared.userAgent, forHTTPHeaderField: "User-Agent")
|
||||||
|
|
||||||
var dataTask: URLSessionDataTask?
|
var dataTask: URLSessionDataTask?
|
||||||
dataTask = URLSession.shared.dataTask(with: request) { _, response, _ in
|
dataTask = URLSession.shared.dataTask(with: request) { _, response, _ in
|
||||||
|
37
Shared/UserAgentManager.swift
Normal file
37
Shared/UserAgentManager.swift
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import Logging
|
||||||
|
#if !os(tvOS)
|
||||||
|
import WebKit
|
||||||
|
#endif
|
||||||
|
|
||||||
|
final class UserAgentManager {
|
||||||
|
static let shared = UserAgentManager()
|
||||||
|
|
||||||
|
private(set) var userAgent: String
|
||||||
|
#if !os(tvOS)
|
||||||
|
private var webView: WKWebView?
|
||||||
|
#endif
|
||||||
|
|
||||||
|
private init() {
|
||||||
|
/*
|
||||||
|
In case an error occurs while retrieving the actual User-Agent, and on tvOS,
|
||||||
|
we set a default User-Agent value that represents a commonly used User-Agent.
|
||||||
|
*/
|
||||||
|
|
||||||
|
userAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
|
||||||
|
#if !os(tvOS)
|
||||||
|
webView = WKWebView()
|
||||||
|
webView?.evaluateJavaScript("navigator.userAgent") { [weak self] result, _ in
|
||||||
|
if let userAgent = result as? String {
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
self?.userAgent = userAgent
|
||||||
|
Logger(label: "stream.yattee.userAgentManager").info("User-Agent: \(userAgent)")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Logger(label: "stream.yattee.userAgentManager").warning("Failed to update User-Agent.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
Logger(label: "stream.yattee.userAgentManager.tvOS").info("User-Agent: \(userAgent)")
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
@ -211,6 +211,9 @@ struct YatteeApp: App {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Initialize UserAgentManager
|
||||||
|
_ = UserAgentManager.shared
|
||||||
|
|
||||||
DispatchQueue.global(qos: .userInitiated).async {
|
DispatchQueue.global(qos: .userInitiated).async {
|
||||||
URLBookmarkModel.shared.refreshAll()
|
URLBookmarkModel.shared.refreshAll()
|
||||||
}
|
}
|
||||||
|
@ -1070,6 +1070,9 @@
|
|||||||
37FFC440272734C3009FFD26 /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37FFC43F272734C3009FFD26 /* Throttle.swift */; };
|
37FFC440272734C3009FFD26 /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37FFC43F272734C3009FFD26 /* Throttle.swift */; };
|
||||||
37FFC441272734C3009FFD26 /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37FFC43F272734C3009FFD26 /* Throttle.swift */; };
|
37FFC441272734C3009FFD26 /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37FFC43F272734C3009FFD26 /* Throttle.swift */; };
|
||||||
37FFC442272734C3009FFD26 /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37FFC43F272734C3009FFD26 /* Throttle.swift */; };
|
37FFC442272734C3009FFD26 /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37FFC43F272734C3009FFD26 /* Throttle.swift */; };
|
||||||
|
E24DC6582BFA124100BF6187 /* UserAgentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E24DC6572BFA124100BF6187 /* UserAgentManager.swift */; };
|
||||||
|
E24DC6592BFA124100BF6187 /* UserAgentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E24DC6572BFA124100BF6187 /* UserAgentManager.swift */; };
|
||||||
|
E24DC65A2BFA124100BF6187 /* UserAgentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E24DC6572BFA124100BF6187 /* UserAgentManager.swift */; };
|
||||||
E25028B02BF790F5002CB9FC /* HTTPStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = E25028AF2BF790F5002CB9FC /* HTTPStatus.swift */; };
|
E25028B02BF790F5002CB9FC /* HTTPStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = E25028AF2BF790F5002CB9FC /* HTTPStatus.swift */; };
|
||||||
E25028B12BF790F5002CB9FC /* HTTPStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = E25028AF2BF790F5002CB9FC /* HTTPStatus.swift */; };
|
E25028B12BF790F5002CB9FC /* HTTPStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = E25028AF2BF790F5002CB9FC /* HTTPStatus.swift */; };
|
||||||
E25028B22BF790F5002CB9FC /* HTTPStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = E25028AF2BF790F5002CB9FC /* HTTPStatus.swift */; };
|
E25028B22BF790F5002CB9FC /* HTTPStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = E25028AF2BF790F5002CB9FC /* HTTPStatus.swift */; };
|
||||||
@ -1548,6 +1551,7 @@
|
|||||||
3DA101AD287C30F50027D920 /* DEVELOPMENT_TEAM.template.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = DEVELOPMENT_TEAM.template.xcconfig; sourceTree = "<group>"; };
|
3DA101AD287C30F50027D920 /* DEVELOPMENT_TEAM.template.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = DEVELOPMENT_TEAM.template.xcconfig; sourceTree = "<group>"; };
|
||||||
3DA101AE287C30F50027D920 /* DEVELOPMENT_TEAM.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = DEVELOPMENT_TEAM.xcconfig; sourceTree = "<group>"; };
|
3DA101AE287C30F50027D920 /* DEVELOPMENT_TEAM.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = DEVELOPMENT_TEAM.xcconfig; sourceTree = "<group>"; };
|
||||||
3DA101AF287C30F50027D920 /* Shared.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
3DA101AF287C30F50027D920 /* Shared.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
|
E24DC6572BFA124100BF6187 /* UserAgentManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAgentManager.swift; sourceTree = "<group>"; };
|
||||||
E25028AF2BF790F5002CB9FC /* HTTPStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPStatus.swift; sourceTree = "<group>"; };
|
E25028AF2BF790F5002CB9FC /* HTTPStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPStatus.swift; sourceTree = "<group>"; };
|
||||||
E258F3892BF61BD2005B8C28 /* URLTester.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLTester.swift; sourceTree = "<group>"; };
|
E258F3892BF61BD2005B8C28 /* URLTester.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLTester.swift; sourceTree = "<group>"; };
|
||||||
E27568B82BFAAC2000BDF0AF /* LanguageCodes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageCodes.swift; sourceTree = "<group>"; };
|
E27568B82BFAAC2000BDF0AF /* LanguageCodes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageCodes.swift; sourceTree = "<group>"; };
|
||||||
@ -2308,6 +2312,7 @@
|
|||||||
37FFC43F272734C3009FFD26 /* Throttle.swift */,
|
37FFC43F272734C3009FFD26 /* Throttle.swift */,
|
||||||
378FFBC328660172009E3FBE /* URLParser.swift */,
|
378FFBC328660172009E3FBE /* URLParser.swift */,
|
||||||
E258F3892BF61BD2005B8C28 /* URLTester.swift */,
|
E258F3892BF61BD2005B8C28 /* URLTester.swift */,
|
||||||
|
E24DC6572BFA124100BF6187 /* UserAgentManager.swift */,
|
||||||
37D4B0C22671614700C925CA /* YatteeApp.swift */,
|
37D4B0C22671614700C925CA /* YatteeApp.swift */,
|
||||||
37D4B0C42671614800C925CA /* Assets.xcassets */,
|
37D4B0C42671614800C925CA /* Assets.xcassets */,
|
||||||
37BD07C42698ADEE003EBB87 /* Yattee.entitlements */,
|
37BD07C42698ADEE003EBB87 /* Yattee.entitlements */,
|
||||||
@ -3154,6 +3159,7 @@
|
|||||||
377FC7DC267A081800A6BBAF /* PopularView.swift in Sources */,
|
377FC7DC267A081800A6BBAF /* PopularView.swift in Sources */,
|
||||||
3752069D285E910600CA655F /* ChapterView.swift in Sources */,
|
3752069D285E910600CA655F /* ChapterView.swift in Sources */,
|
||||||
375EC96A289F232600751258 /* QualityProfilesModel.swift in Sources */,
|
375EC96A289F232600751258 /* QualityProfilesModel.swift in Sources */,
|
||||||
|
E24DC6582BFA124100BF6187 /* UserAgentManager.swift in Sources */,
|
||||||
E258F38A2BF61BD2005B8C28 /* URLTester.swift in Sources */,
|
E258F38A2BF61BD2005B8C28 /* URLTester.swift in Sources */,
|
||||||
3751B4B227836902000B7DF4 /* SearchPage.swift in Sources */,
|
3751B4B227836902000B7DF4 /* SearchPage.swift in Sources */,
|
||||||
37CC3F4C270CFE1700608308 /* PlayerQueueView.swift in Sources */,
|
37CC3F4C270CFE1700608308 /* PlayerQueueView.swift in Sources */,
|
||||||
@ -3420,6 +3426,7 @@
|
|||||||
3743CA4F270EFE3400E4D32B /* PlayerQueueRow.swift in Sources */,
|
3743CA4F270EFE3400E4D32B /* PlayerQueueRow.swift in Sources */,
|
||||||
374C053C2724614F009BDDBE /* PlayerTVMenu.swift in Sources */,
|
374C053C2724614F009BDDBE /* PlayerTVMenu.swift in Sources */,
|
||||||
377FC7DD267A081A00A6BBAF /* PopularView.swift in Sources */,
|
377FC7DD267A081A00A6BBAF /* PopularView.swift in Sources */,
|
||||||
|
E24DC6592BFA124100BF6187 /* UserAgentManager.swift in Sources */,
|
||||||
374924DB2921050B0017D862 /* LocationsSettings.swift in Sources */,
|
374924DB2921050B0017D862 /* LocationsSettings.swift in Sources */,
|
||||||
371AC0A0294D13AA0085989E /* UnwatchedFeedCountModel.swift in Sources */,
|
371AC0A0294D13AA0085989E /* UnwatchedFeedCountModel.swift in Sources */,
|
||||||
379E7C342A20FE3900AF8118 /* FocusableSearchTextField.swift in Sources */,
|
379E7C342A20FE3900AF8118 /* FocusableSearchTextField.swift in Sources */,
|
||||||
@ -3885,6 +3892,7 @@
|
|||||||
37BA221329526A19000DAD1F /* ControlsGradientView.swift in Sources */,
|
37BA221329526A19000DAD1F /* ControlsGradientView.swift in Sources */,
|
||||||
374C0541272472C0009BDDBE /* PlayerSponsorBlock.swift in Sources */,
|
374C0541272472C0009BDDBE /* PlayerSponsorBlock.swift in Sources */,
|
||||||
37130A61277657300033018A /* PersistenceController.swift in Sources */,
|
37130A61277657300033018A /* PersistenceController.swift in Sources */,
|
||||||
|
E24DC65A2BFA124100BF6187 /* UserAgentManager.swift in Sources */,
|
||||||
37E70929271CDDAE00D34DDE /* OpenSettingsButton.swift in Sources */,
|
37E70929271CDDAE00D34DDE /* OpenSettingsButton.swift in Sources */,
|
||||||
3717407F2949D40800FDDBC7 /* ChannelLinkView.swift in Sources */,
|
3717407F2949D40800FDDBC7 /* ChannelLinkView.swift in Sources */,
|
||||||
E25028B22BF790F5002CB9FC /* HTTPStatus.swift in Sources */,
|
E25028B22BF790F5002CB9FC /* HTTPStatus.swift in Sources */,
|
||||||
|
Loading…
Reference in New Issue
Block a user