mirror of
https://github.com/cranci1/Sora.git
synced 2026-04-09 11:01:14 +00:00
idk maybe i've added DNS services?
Yeah it should
This commit is contained in:
parent
0b9dae6b98
commit
37425a2e55
4 changed files with 77 additions and 15 deletions
|
|
@ -5,10 +5,55 @@
|
|||
// Created by Francesco on 05/01/25.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import Network
|
||||
import Foundation
|
||||
|
||||
enum DNSProvider: String, CaseIterable, Hashable {
|
||||
case cloudflare = "Cloudflare"
|
||||
case google = "Google"
|
||||
case openDNS = "OpenDNS"
|
||||
case quad9 = "Quad9"
|
||||
case adGuard = "AdGuard"
|
||||
case cleanbrowsing = "CleanBrowsing"
|
||||
case controld = "ControlD"
|
||||
|
||||
var servers: [String] {
|
||||
switch self {
|
||||
case .cloudflare:
|
||||
return ["1.1.1.1", "1.0.0.1"]
|
||||
case .google:
|
||||
return ["8.8.8.8", "8.8.4.4"]
|
||||
case .openDNS:
|
||||
return ["208.67.222.222", "208.67.220.220"]
|
||||
case .quad9:
|
||||
return ["9.9.9.9", "149.112.112.112"]
|
||||
case .adGuard:
|
||||
return ["94.140.14.14", "94.140.15.15"]
|
||||
case .cleanbrowsing:
|
||||
return ["185.228.168.168", "185.228.169.168"]
|
||||
case .controld:
|
||||
return ["76.76.2.0", "76.76.10.0"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension URLSession {
|
||||
private static let dnsSelectorKey = "CustomDNSProvider"
|
||||
|
||||
static var currentDNSProvider: DNSProvider {
|
||||
get {
|
||||
guard let savedProviderRawValue = UserDefaults.standard.string(forKey: dnsSelectorKey) else {
|
||||
UserDefaults.standard.set(DNSProvider.cloudflare.rawValue, forKey: dnsSelectorKey)
|
||||
return .cloudflare
|
||||
}
|
||||
|
||||
return DNSProvider(rawValue: savedProviderRawValue) ?? .cloudflare
|
||||
}
|
||||
set {
|
||||
UserDefaults.standard.set(newValue.rawValue, forKey: dnsSelectorKey)
|
||||
}
|
||||
}
|
||||
|
||||
static let userAgents = [
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
|
||||
|
|
@ -35,31 +80,33 @@ extension URLSession {
|
|||
"Mozilla/5.0 (Android 13; Mobile; rv:122.0) Gecko/122.0 Firefox/122.0"
|
||||
]
|
||||
|
||||
static let randomUserAgent: String = {
|
||||
static var randomUserAgent: String {
|
||||
userAgents.randomElement() ?? userAgents[0]
|
||||
}()
|
||||
}
|
||||
|
||||
static let custom: URLSession = {
|
||||
static var custom: URLSession {
|
||||
let configuration = URLSessionConfiguration.default
|
||||
configuration.httpAdditionalHeaders = [
|
||||
"User-Agent": randomUserAgent
|
||||
]
|
||||
return URLSession(configuration: configuration)
|
||||
}()
|
||||
}
|
||||
|
||||
static let cloudflareCustom: URLSession = {
|
||||
static var cloudflareCustom: URLSession {
|
||||
let configuration = URLSessionConfiguration.default
|
||||
configuration.httpAdditionalHeaders = [
|
||||
"User-Agent": randomUserAgent
|
||||
]
|
||||
|
||||
let dnsServers = currentDNSProvider.servers
|
||||
|
||||
let dnsSettings: [AnyHashable: Any] = [
|
||||
"DNSSettings": [
|
||||
"ServerAddresses": ["1.1.1.1", "1.0.0.1"]
|
||||
"ServerAddresses": dnsServers
|
||||
]
|
||||
]
|
||||
|
||||
configuration.connectionProxyDictionary = dnsSettings
|
||||
return URLSession(configuration: configuration)
|
||||
}()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ struct ModuleAdditionSettingsView: View {
|
|||
return
|
||||
}
|
||||
do {
|
||||
let (data, _) = try await URLSession.custom.data(from: url)
|
||||
let (data, _) = try await URLSession.cloudflareCustom.data(from: url)
|
||||
let metadata = try JSONDecoder().decode(ModuleMetadata.self, from: data)
|
||||
await MainActor.run {
|
||||
self.moduleMetadata = metadata
|
||||
|
|
|
|||
|
|
@ -46,14 +46,14 @@ class ModuleManager: ObservableObject {
|
|||
throw NSError(domain: "Module already exists", code: -1)
|
||||
}
|
||||
|
||||
let (metadataData, _) = try await URLSession.custom.data(from: url)
|
||||
let (metadataData, _) = try await URLSession.cloudflareCustom.data(from: url)
|
||||
let metadata = try JSONDecoder().decode(ModuleMetadata.self, from: metadataData)
|
||||
|
||||
guard let scriptUrl = URL(string: metadata.scriptUrl) else {
|
||||
throw NSError(domain: "Invalid script URL", code: -1)
|
||||
}
|
||||
|
||||
let (scriptData, _) = try await URLSession.custom.data(from: scriptUrl)
|
||||
let (scriptData, _) = try await URLSession.cloudflareCustom.data(from: scriptUrl)
|
||||
guard let jsContent = String(data: scriptData, encoding: .utf8) else {
|
||||
throw NSError(domain: "Invalid script encoding", code: -1)
|
||||
}
|
||||
|
|
@ -94,7 +94,7 @@ class ModuleManager: ObservableObject {
|
|||
func refreshModules() async {
|
||||
for (index, module) in modules.enumerated() {
|
||||
do {
|
||||
let (metadataData, _) = try await URLSession.custom.data(from: URL(string: module.metadataUrl)!)
|
||||
let (metadataData, _) = try await URLSession.cloudflareCustom.data(from: URL(string: module.metadataUrl)!)
|
||||
let newMetadata = try JSONDecoder().decode(ModuleMetadata.self, from: metadataData)
|
||||
|
||||
if newMetadata.version != module.metadata.version {
|
||||
|
|
@ -102,7 +102,7 @@ class ModuleManager: ObservableObject {
|
|||
throw NSError(domain: "Invalid script URL", code: -1)
|
||||
}
|
||||
|
||||
let (scriptData, _) = try await URLSession.custom.data(from: scriptUrl)
|
||||
let (scriptData, _) = try await URLSession.cloudflareCustom.data(from: scriptUrl)
|
||||
guard let jsContent = String(data: scriptData, encoding: .utf8) else {
|
||||
throw NSError(domain: "Invalid script encoding", code: -1)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,9 +14,11 @@ struct SettingsViewGeneral: View {
|
|||
@AppStorage("analyticsEnabled") private var analyticsEnabled: Bool = false
|
||||
@AppStorage("multiThreads") private var multiThreadsEnabled: Bool = false
|
||||
@AppStorage("metadataProviders") private var metadataProviders: String = "AniList"
|
||||
@AppStorage("CustomDNSProvider") private var customDNSProvider: String = "Cloudflare"
|
||||
@AppStorage("mediaColumnsPortrait") private var mediaColumnsPortrait: Int = 2
|
||||
@AppStorage("mediaColumnsLandscape") private var mediaColumnsLandscape: Int = 4
|
||||
|
||||
private let customDNSProviderList = ["Cloudflare", "Google", "OpenDNS", "Quad9", "AdGuard", "CleanBrowsing", "ControlD"]
|
||||
private let metadataProvidersList = ["AniList"]
|
||||
@EnvironmentObject var settings: Settings
|
||||
|
||||
|
|
@ -70,7 +72,6 @@ struct SettingsViewGeneral: View {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -121,9 +122,23 @@ struct SettingsViewGeneral: View {
|
|||
.tint(.accentColor)
|
||||
}
|
||||
|
||||
Section(header: Text("Analytics"), footer: Text("Allow Sora to collect anonymous data to improve the app. No personal information is collected. This can be disabled at any time.\n\n Information collected: \n- App version\n- Device model\n- Module Name/Version\n- Error Messages\n- Title of Watched Content")) {
|
||||
Section(header: Text("Advanced"), footer: Text("Thanks to this Sora to collect anonymous data to improve the app. No personal information is collected. This can be disabled at any time.\n\n Information collected: \n- App version\n- Device model\n- Module Name/Version\n- Error Messages\n- Title of Watched Content")) {
|
||||
Toggle("Enable Analytics", isOn: $analyticsEnabled)
|
||||
.tint(.accentColor)
|
||||
|
||||
HStack {
|
||||
Text("DNS service")
|
||||
Spacer()
|
||||
Menu(customDNSProvider) {
|
||||
ForEach(customDNSProviderList, id: \.self) { provider in
|
||||
Button(action: {
|
||||
customDNSProvider = provider
|
||||
}) {
|
||||
Text(provider)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle("General")
|
||||
|
|
|
|||
Loading…
Reference in a new issue