aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HoloBar/CharacterFetcher.swift38
1 files changed, 37 insertions, 1 deletions
diff --git a/HoloBar/CharacterFetcher.swift b/HoloBar/CharacterFetcher.swift
index 56c4a2f..f2de7fc 100644
--- a/HoloBar/CharacterFetcher.swift
+++ b/HoloBar/CharacterFetcher.swift
@@ -21,7 +21,7 @@ class CharacterFetcher: ObservableObject {
let html = String(data: data, encoding: .utf8) else { return }
DispatchQueue.main.async {
- self.characters = self.parseHTML(html: html)
+ self.fetchAffiliations(for: self.parseHTML(html: html))
}
}
@@ -52,4 +52,40 @@ class CharacterFetcher: ObservableObject {
return fetchedCharacters
}
+
+ private func fetchAffiliations(for characters: [Character]) {
+ let group = DispatchGroup()
+ var updatedCharacters: [Character] = []
+
+ for character in characters {
+ group.enter()
+
+ let task = URLSession.shared.dataTask(with: character.profileURL) { data, _, error in
+ defer { group.leave() }
+
+ guard let data = data, error == nil,
+ let html = String(data: data, encoding: .utf8) else { return }
+
+ do {
+ let document = try SwiftSoup.parse(html)
+
+ if let affiliationElement = try? document.select("#affiliation a").first(),
+ let affiliation = try? affiliationElement.text()
+ {
+ updatedCharacters.append(Character(name: "\(character.name) (\(affiliation))", profileURL: character.profileURL))
+ } else {
+ updatedCharacters.append(character)
+ }
+ } catch {
+ updatedCharacters.append(character)
+ }
+ }
+
+ task.resume()
+ }
+
+ group.notify(queue: .main) {
+ self.characters = updatedCharacters
+ }
+ }
}