mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-09 06:43:25 +01:00
[Auth-Screen]: Fix: Anisette servers list wasn't ready before signin attempt causing "No valid Servers Found"
This commit is contained in:
@@ -31,6 +31,15 @@ final class AuthenticationViewController: UIViewController
|
|||||||
{
|
{
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
// fetch anisette servers asap when loading Auth Screen (if list is empty
|
||||||
|
if(UserDefaults.standard.menuAnisetteServersList.isEmpty){
|
||||||
|
Task{
|
||||||
|
await AnisetteViewModel.getListOfServers(
|
||||||
|
serverSource: UserDefaults.standard.menuAnisetteList
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.signInButton.activityIndicatorView.style = .medium
|
self.signInButton.activityIndicatorView.style = .medium
|
||||||
self.signInButton.activityIndicatorView.color = .white
|
self.signInButton.activityIndicatorView.color = .white
|
||||||
|
|
||||||
|
|||||||
@@ -36,32 +36,46 @@ class AnisetteViewModel: ObservableObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func getListOfServers() {
|
func getDefaultListOfServers() {
|
||||||
guard let url = URL(string: source) else { return }
|
// initiate fetch but do not wait in blocking manner
|
||||||
|
Task{
|
||||||
|
self.servers = await AnisetteViewModel.getListOfServers(serverSource: self.source)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static func getListOfServers(serverSource: String) async -> [Server] {
|
||||||
|
var aniServers: [Server] = []
|
||||||
|
|
||||||
|
guard let url = URL(string: serverSource) else {
|
||||||
|
return aniServers
|
||||||
|
}
|
||||||
|
|
||||||
// DO NOT use local cache when fetching anisette servers
|
// DO NOT use local cache when fetching anisette servers
|
||||||
var request = URLRequest(url: url)
|
var request = URLRequest(url: url)
|
||||||
request.cachePolicy = .reloadIgnoringLocalCacheData
|
request.cachePolicy = .reloadIgnoringLocalCacheData
|
||||||
|
|
||||||
URLSession.shared.dataTask(with: request) { data, response, error in
|
return await withCheckedContinuation{(continuation: CheckedContinuation<[Server], Never>) in
|
||||||
if let error = error {
|
// perform async operation with callback
|
||||||
return
|
URLSession.shared.dataTask(with: request) { data, response, error in
|
||||||
}
|
if error == nil, let data = data {
|
||||||
if let data = data {
|
do {
|
||||||
do {
|
let decoder = Foundation.JSONDecoder()
|
||||||
let decoder = Foundation.JSONDecoder()
|
let servers = try decoder.decode(AnisetteServerData.self, from: data)
|
||||||
let servers = try decoder.decode(AnisetteServerData.self, from: data)
|
DispatchQueue.main.async {
|
||||||
DispatchQueue.main.async {
|
aniServers.append(contentsOf: servers.servers)
|
||||||
self.servers = servers.servers
|
// store server addresses as list
|
||||||
// store server addresses as list
|
UserDefaults.standard.menuAnisetteServersList = aniServers.map(\.self.address)
|
||||||
UserDefaults.standard.menuAnisetteServersList = servers.servers.map(\.self.address)
|
}
|
||||||
|
} catch {
|
||||||
|
// Handle decoding error
|
||||||
|
print("Failed to decode JSON: \(error)")
|
||||||
}
|
}
|
||||||
} catch {
|
|
||||||
// Handle decoding error
|
|
||||||
print("Failed to decode JSON: \(error)")
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}.resume()
|
//unblock the continuation
|
||||||
|
continuation.resume(returning: aniServers)
|
||||||
|
}.resume()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,7 +91,7 @@ struct AnisetteServers: View {
|
|||||||
Color(UIColor.systemBackground)
|
Color(UIColor.systemBackground)
|
||||||
.ignoresSafeArea()
|
.ignoresSafeArea()
|
||||||
.onAppear {
|
.onAppear {
|
||||||
viewModel.getListOfServers()
|
viewModel.getDefaultListOfServers()
|
||||||
}
|
}
|
||||||
VStack {
|
VStack {
|
||||||
if #available(iOS 16.0, *) {
|
if #available(iOS 16.0, *) {
|
||||||
@@ -144,7 +158,7 @@ struct AnisetteServers: View {
|
|||||||
.shadow(color: Color.black.opacity(0.2), radius: 5, x: 0, y: 5)
|
.shadow(color: Color.black.opacity(0.2), radius: 5, x: 0, y: 5)
|
||||||
.onChange(of: viewModel.source) { newValue in
|
.onChange(of: viewModel.source) { newValue in
|
||||||
UserDefaults.standard.menuAnisetteList = newValue
|
UserDefaults.standard.menuAnisetteList = newValue
|
||||||
viewModel.getListOfServers()
|
viewModel.getDefaultListOfServers()
|
||||||
}
|
}
|
||||||
|
|
||||||
HStack(spacing: 16) {
|
HStack(spacing: 16) {
|
||||||
@@ -166,7 +180,7 @@ struct AnisetteServers: View {
|
|||||||
.shadow(color: Color.accentColor.opacity(0.4), radius: 10, x: 0, y: 5)
|
.shadow(color: Color.accentColor.opacity(0.4), radius: 10, x: 0, y: 5)
|
||||||
|
|
||||||
SUIButton(action: {
|
SUIButton(action: {
|
||||||
viewModel.getListOfServers()
|
viewModel.getDefaultListOfServers()
|
||||||
}) {
|
}) {
|
||||||
HStack{
|
HStack{
|
||||||
Spacer()
|
Spacer()
|
||||||
|
|||||||
Reference in New Issue
Block a user